Help center
How a migration runs, what moves between each pair of CRMs, what each CRM needs, what it costs, and what to do when something fails.
Getting started
A migration step by step: pick the apps, connect them, run the free sample, then the rest.
- Source and ConnectSteps 1 and 2: pick where the data comes from and where it goes, then connect both ends.
- OptionsStep 3: five switches decide which kinds of data the migration offers on the next steps.
- ObjectsStep 4: tick the objects to move and see where each one lands.
- FieldsStep 5: review every field, rename it, change where it goes, and see what will be overwritten.
- FiltersStep 6: limit which records move, per object. Filters do not change the price.
- The free sampleA connected CRM first imports a sample: 5% of your companies, contacts or deals, 10 to 1,000 records, picked at random, with their linked records. You read the result in your destination, then decide.
- The full runAfter the sample, "Run full migration" brings the rest. Attio and CSV imports are free; a CRM migration into Clarify, Odoo, HubSpot, Pipedrive, Breakcold or Twenty is priced by record count.
- Roll backRoll back deletes what the migration created, from its ledger. It never touches records that already existed, and it does not restore values it overwrote.
Sources
What Shuttio reads from each CRM, the permissions it asks for, and what stays behind.
- A CSV fileWhat a CSV import reads, where it lands in Attio, Clarify, Odoo, HubSpot, Pipedrive, Breakcold, Twenty, and what it does not carry.
- HubSpotWhat Shuttio reads from HubSpot, where it lands in Attio, Clarify, Odoo, Pipedrive, Breakcold, Twenty, which permissions it needs and why, and what does not move.
- PipedriveWhat Shuttio reads from Pipedrive, where it lands in Attio, Clarify, Odoo, HubSpot, Breakcold, Twenty, which permissions it needs and why, and what does not move.
- AffinityWhat Shuttio reads from Affinity, where it lands in Attio, Clarify, HubSpot, Pipedrive, Breakcold, Twenty, which permissions it needs and why, and what does not move.
- TwentyWhat Shuttio reads from Twenty, where it lands in Attio, Clarify, Odoo, HubSpot, Pipedrive, Breakcold, Twenty, which permissions it needs and why, and what does not move.
- AttioWhat Shuttio reads from Attio, where it lands in Attio, Clarify, Odoo, HubSpot, Pipedrive, Breakcold, Twenty, which permissions it needs and why, and what does not move.
Destinations
Where each kind of data lands in each CRM, and what a rollback removes.
- Into AttioWhat Shuttio writes into Attio, where each object lands, the scopes it needs and why, and what a rollback leaves.
- Into ClarifyWhat Shuttio writes into Clarify, where each object lands, what the connection needs and what a rollback cannot remove.
- Into OdooThe three ways to write into Odoo, where each object lands, what each way needs and which of them can roll back.
- Into HubSpotWhat Shuttio writes into HubSpot, where each object lands, the permissions it asks for and why, and what a rollback leaves.
- Into PipedriveWhat Shuttio writes into Pipedrive, where each object lands, the permissions it needs, how Pipedrive's API limits shape a big run, and what a rollback leaves.
- Into BreakcoldWhat Shuttio writes into Breakcold, where each object lands, the API key it needs, how slow Breakcold's API makes a big run, and what a rollback leaves.
- Into TwentyWhat Shuttio writes into Twenty, where each object lands, how to connect Twenty Cloud or a self-hosted server, how Twenty's request limit shapes a big run, and what a rollback leaves.
What moves where
Pair by pair and object by object: what crosses, and how it lands.
- Support matrixFor every source and destination pair: which objects, notes, tasks, meetings, calls, files, owners and lists move.
- What objects are supported for HubSpot migrationsWhich objects Shuttio reads from and writes into HubSpot, and how each one lands.
- What objects are supported for Pipedrive migrationsWhich objects Shuttio reads from and writes into Pipedrive, and how each one lands.
- What objects are supported for Affinity migrationsWhich objects Shuttio reads from Affinity, and how each one lands.
- What objects are supported for Twenty migrationsWhich objects Shuttio reads from and writes into Twenty, and how each one lands.
- What objects are supported for Attio migrationsWhich objects Shuttio reads from and writes into Attio, and how each one lands.
- What objects are supported for Clarify migrationsWhich objects Shuttio writes into Clarify, and how each one lands.
- What objects are supported for Odoo migrationsWhich objects Shuttio writes into Odoo, and how each one lands.
- What objects are supported for Breakcold migrationsWhich objects Shuttio writes into Breakcold, and how each one lands.
Pricing and billing
Into Attio is free. Into any other CRM, a CRM migration is priced once by record count.
- What a migration costsFree into Attio; priced by record count into the others; a CSV import and the sample are free.
- RefundsA paid migration is refunded only after you roll it back.
- Prices by record countThe price table for every destination.
Security
What Shuttio stores, for how long, and what reaches an AI model.
- Security and data retentionWhen tokens, CSV files and cached values are deleted, and what is kept after a run.
- Security overviewEncryption, access, subprocessors and deletion, for a security review.
- Privacy policy
- Subprocessors
Troubleshooting
What an error means, how to retry it, and when to roll back.
- Errors and Retry all errorsThe Errors tab groups everything that did not transfer, with the reason. "Retry all errors" runs only the failures again, for free.
- Email address rejectedA record failed because one email value is not a valid address; correct it in your source, then press "Retry all errors".
- Phone number rejected: missing country codeAttio refused a phone number because it has no country code or is not a valid number; add the code in your source and press "Retry all errors".
- A value was left empty, the record importedOne value did not fit its field and was left empty while the record imported; add it in the destination by hand, or change the field's target on the Fields step before a re-run.
- A required value is missingA record failed because the destination marks a field as required and the source row has no value for it; fill it in at the source or make it optional in the destination, then press "Retry all errors".
- Duplicate unique valueA record failed because another record in Attio already holds the same value in a unique attribute; remove the duplicate in your source or in Attio, then press "Retry all errors".
- Domain rejected: the domain is not a bare hostnameAttio refused a company domain that carries a protocol, a path or spaces; reduce it to a bare hostname such as acme.com in your source, then press "Retry all errors".
- When something failsSix steps, from the Errors tab to emailing support.
- QuestionsPrice, refunds, security and data retention, and what to do when something fails.