We've built a Google Apps Script to make it easy to export your Attio data directly into Google Sheets on a recurring basis (no paid tools, connectors, or middleware required.) Whether you want to build internal dashboards, share clean reports with non-Attio users, or just automate a regular export of lists and objects, this script gives you full control.
You configure what gets exported (objects, lists, or workspace members) and where it gets written (which sheet tab), all within the script itself. It intelligently flattens and formats complex Attio records into structured, readable spreadsheets - complete with field mapping, timestamp formatting, and batching.
This Google Apps Script lets you sync data from Attio directly into Google Sheets - without needing paid tools, connectors, or middleware.
It’s fast, flexible, and designed to be configured entirely in the script. Great for internal dashboards, backups, reporting, or sharing with non-Attio users.
To get access to the script, please reach out via the Contact Us form. We will respond via email with access instructions. From there, please follow these setup instructions:
Project Settings → Script Properties
and set the API key as an environment variable named ATTIO_API_KEY
const SHEET_ID = "your_sheet_id_here";
In the script, define what Attio data to write into which tab:
const WRITER_OBJECT = [
{
target: "objects",
object_name: "companies",
sheet_name: "Companies"
},
{
target: "lists",
object_name: "abc123-list-id",
sheet_name: "Qualified Leads"
},
{
target: "workspace_members",
sheet_name: "Team Members"
}
];
Target | Description |
---|---|
objects |
Export standard objects (e.g., companies , people ) |
lists |
Export custom lists via their ID |
workspace_members |
Export users on the workspace (no object_name needed) |
object_name
Rulesobjects
, use the object slug from the URL (e.g., companies
, people
)lists
, use the full UUID list ID from the URLworkspace_members
, omit object_name
All timestamps are standardized using the DATE_FORMAT
constant in the script:
const DATE_FORMAT = "yyyy-MM-dd";
You can change this to:
yyyy-MM-dd HH:mm:ss
MM/dd/yyyy
EEE, MMM d, yyyy
yyyyMMdd_HHmmss
Sheet tabs are named as defined in WRITER_OBJECT
, and each row corresponds to one record. Field names are automatically expanded, e.g.:
id | name | created_at | status__title | email__email_address |
---|---|---|---|---|
rec_123 | Acme Inc. | 2025-01-01 | Active | hello@acme.com |
From the Apps Script UI:
writeRecordsToSheet
Function | Purpose |
---|---|
writeRecordsToSheet() |
Main runner. Iterates through your WRITER_OBJECT array |
fetchAndTransformAttioRecords() |
Gets and flattens Attio records |
writeListsAndObjectToSheet() |
Writes records from objects or lists |
writeWorkspaceUserDataToSheet() |
Writes users from your Attio workspace |
formatTimestamp() |
Formats UNIX timestamps using DATE_FORMAT |
Your API token is stored securely using ScriptProperties
. Never hardcode secrets.
This script is provided as-is for free use. For help with customization or professional support, reach out via the Contact Us form.
Published: July 21, 2025