Into Attio
What Shuttio writes into Attio, where each object lands, the scopes it needs and why, and what a rollback leaves.
Last updated: 28 October 2026
No Attio account yet? Sign up with our partner link and get 10% off any plan.
Sources that can move into Attio: Spreadsheet / CSV, HubSpot, Pipedrive, Affinity, Twenty, Attio. A migration into Attio is free at any record count.
Object by object: What objects are supported for Attio migrations.
What Shuttio writes
- Companies, people and deals into Attio's standard objects. Every other object is recreated with its attributes, select options, statuses and links.
- Relationships, resolved in a second pass: Records are created first and linked second, so a deal finds its company no matter which order they arrived in. A link whose other end never made it is reported as a skipped row naming what it was waiting for.
- Dedup against what is already in Attio: People match on email, companies on domain, custom objects on the unique key you designate. A matched record is updated in place, so running the same migration twice never leaves you two of anything.
- Cancel removes what Shuttio created: Every record, note, task, meeting, file, list entry, attribute and select option this migration created is deleted or archived, in reverse order. A record it matched and updated in place stays, and the values it overwrote are not restored. Anything else in your workspace is never touched.
- Notes, tasks, meetings and files on the records they belong to, and lists with their members. Meeting participants are carried by name only.
- Pipelines and stages, as a list per pipeline or as a stage field per pipeline, whichever you pick in the Pipelines block on the Fields step.
Where each thing lands
| From | Object | Lands in Attio as |
|---|---|---|
| HubSpot | Contacts | People |
| HubSpot | Companies | Companies |
| HubSpot | Deals | Deals |
| HubSpot | Products | Its own object, or the one you already have with that name |
| HubSpot | Line items | Its own object, or the one you already have with that name |
| HubSpot | Tickets | Its own object, or the one you already have with that name |
| HubSpot | Quotes | Its own object, or the one you already have with that name |
| HubSpot | Leads | People, deals at the stage Lead, or their own object (you choose) |
| Pipedrive | Persons | People |
| Pipedrive | Organizations | Companies |
| Pipedrive | Deals | Deals |
| Pipedrive | Products | Its own object, or the one you already have with that name |
| Pipedrive | Deal products | Its own object, or the one you already have with that name |
| Pipedrive | Projects | Its own object, or the one you already have with that name |
| Pipedrive | Leads | People, deals at the stage Lead, or their own object (you choose) |
| Affinity | Persons | People |
| Affinity | Organizations | Companies |
| Affinity | Opportunities | Deals |
| Twenty | Companies | Companies |
| Twenty | People | People |
| Twenty | Opportunities | Deals |
| Attio | Companies | Companies |
| Attio | People | People |
| Attio | Deals | Deals |
Scopes and why
Attio scopes are fixed on the Shuttio app, not requested per call. Shuttio signs in with OAuth. The full guide is Using Shuttio with Attio.
| Scope | Why Shuttio needs it |
|---|---|
| record_permission:read-write | Creates, updates and matches records (so a re-run updates instead of duplicating), writes field history when you opt in, and deletes the records a migration created when you roll it back. |
| object_configuration:read-write | Reads your objects and attributes so nothing is created twice, creates the custom objects, attributes, options and statuses you reviewed, and on rollback archives the fields and deletes the custom objects it created. |
| list_configuration:read-write | Shows your lists in the setup form, creates a list you name, and adds or archives list attributes and options. |
| list_entry:read-write | Adds imported records to a list, updates entry values on a re-run, and removes the entries it added on rollback. |
| note:read-write | Imports notes onto their records, updates a note whose source was edited, and deletes imported notes on rollback. |
| task:read-write | Imports tasks linked to their records, and deletes them on rollback. |
| meeting:read-write | Imports meetings with their linked records, and deletes them on rollback. Participants are carried by name only, so no new people are created. |
| activity_configuration:read-write | Reads your activities and their attributes, creates the activities a migration needs (Logged emails, SMS, WhatsApp, LinkedIn, and one per source activity type), adds a text field for the body, and on rollback archives those fields and deletes an activity it created once it is empty. |
| activity_record:read-write | Imports calls into Phone calls and messages, logged emails and other activities into their activities, linked to the migrated records, and deletes them on rollback. Participants are matched by email; no people are created. |
| user_management:read | Lists your workspace members, so owners and assignees are matched by email. Without it the migration still runs and shows one note that owners were not set. |
| file:read-write | Uploads a record's attachments (files up to 50 MB). Without it, a migration with attachments on asks you to reconnect. |
Known limits
- Emails: logged emails from HubSpot and Pipedrive land as a Logged emails activity. They start unticked, because Attio's mailbox sync may already show the same mail.
- Files over 50 MB and entries that are only a link are listed as failed rows and not copied.
- Calls land in Attio's Phone calls; SMS, WhatsApp, LinkedIn messages and other source activity types in an Attio activity each. Activities are a beta Attio API: a workspace that has not allowed them, or whose plan has no custom activities, gets notes and tasks instead, and the run summary says how many.
- A dynamic list's filter: Attio has no filtered-membership API, so a HubSpot dynamic list or a Pipedrive filter arrives as a snapshot of its members, with its conditions written out as text.
- Goals, invoices, payments, carts and other commerce or admin records have no Attio object to land in.
- Rollback deletes what Shuttio created. A record it matched and updated stays, and the values it overwrote are not restored.
- Attio has no delete-list call. A rollback renames each list it created to "<name> (rolled back, safe to delete)".
Not answered here? Email help@shuttio.com.