How to Migrate to Attio Without Losing a Single Deal: Our 5-Step Data Migration Playbook
The exact 5-step process we use to move teams from HubSpot, Salesforce, and Pipedrive to Attio without data loss or downtime.
Nacho Lafuente
February 26, 2026
How to Migrate to Attio Without Losing a Single Deal: Our 5-Step Data Migration Playbook
Migrating CRMs is the single highest-risk operation in a revenue team's lifecycle. Get it right and your team never looks back. Get it wrong and you spend the next six months rebuilding trust in a system nobody asked for.
We have migrated teams from HubSpot, Salesforce, Pipedrive, Close, and Affinity into Attio. After doing this enough times, we have a process that works. Here is the exact playbook.
Why most CRM migrations fail
They fail because someone exports a CSV on Friday, imports it on Monday, and declares victory. Then on Tuesday, the sales team opens Attio and cannot find the deal they closed last week. The notes are gone. The activity history vanished. Half the contacts are duplicates.
Migration is not a data transfer. It is a system redesign with a data transfer attached to it.
Before you touch a single CSV
Before exporting anything, you need to answer three questions:
1. What data do we actually use? Not what exists in your CRM. What your team actually references, searches for, and filters by. In most HubSpot instances we audit, 40–60% of custom properties have not been touched in six months or more.
2. What is our target data model in Attio? Attio's data model is fundamentally different from HubSpot or Salesforce. There are no Leads. There are no Lifecycle Stages. There are Objects, Attributes, Lists, and Records. If you try to recreate your HubSpot structure in Attio, you will end up with a worse version of HubSpot.
3. What is the cutover plan? You need a date when the old CRM goes read-only and Attio becomes the system of record. Running two CRMs in parallel for longer than two weeks creates a data integrity nightmare.
Step 1: The data audit
Export everything from your current CRM. Every object, every custom field, every pipeline. Then build a migration map with three columns:
- Migrate as-is: Clean data, maps directly to an Attio attribute. Company domain, contact email, deal name, deal value.
- Migrate with transformation: Data that exists but needs reformatting. Phone numbers need the +[country code] format that Attio requires. Dates may need standardization. Multi-select fields might need restructuring.
- Do not migrate: Stale data, unused fields, marketing automation artifacts. Be aggressive here. If nobody has looked at a field in six months, it does not belong in your new CRM.
Pro-tip from 15+ migrations: Do not migrate data into Attio's enriched attributes. Attio auto-enriches company data (employee count, founding year, annual revenue, funding, tech stack, location) and people data (job title, seniority, department) from domain and email alone. If you import your old, stale LinkedIn URLs and employee counts, Attio will treat them as manually entered values and never overwrite them with fresh data. Let Attio's enrichment do its job.
Step 2: Build the target data model first
Before importing a single record, your Attio workspace needs to be fully configured:
- Standard objects: Enable Deals, Users, and Workspaces (they are off by default).
- Custom objects: Build these before migration. If your VC firm needs a Fund object or your logistics company needs a Lane object, create it now.
- Attributes: Create every custom attribute you identified in Step 1. Pay attention to types. Attio has 17 attribute types including Status (for pipelines), Record Reference (for cross-object links), and Currency (with proper formatting).
- Lists and views: Design your pipeline lists with the correct Status stages. Build your views and filters.
The single biggest mistake we see: teams import data first and design their workspace second. Then they realize the field they need does not exist, or the pipeline stages are wrong, and they have to re-import.
When we got it wrong: Early on, we migrated a Salesforce instance for a mid-market SaaS company and brought over their Lead object as a custom object in Attio. Terrible idea. Attio does not have a Lead concept because it does not need one. People are People. Their pipeline stage is tracked on a List, not on the record itself. We spent two weeks unwinding that decision.
Step 3: The migration sequence
Order matters. If you import People before Companies, Attio cannot auto-link them. If you import Deals before the Companies they reference, your deal–company associations break.
The correct order:
- Companies first. Import via CSV with domain as the unique identifier for deduplication. Attio will match on domain to prevent duplicates.
- People second. Import with email as the unique identifier. Include the company domain in your CSV so Attio auto-links each person to their company based on email domain matching.
- Deals third. Every deal must include deal name, deal owner, and deal stage. Attio requires all three. Missing any of them produces a "required value was not provided" error that blocks the entire row.
- Notes and tasks. These cannot be imported via CSV. Use Import2 (Attio's built-in CRM-to-CRM migration tool, available on any paid plan) or the API. Notes link to a single parent record, so if your old CRM had a note attached to both a contact and a deal, you will need to choose one parent or create two copies.
- List entries. Add records to your pipeline lists and workflow lists last, once all the underlying data is clean.
Critical: Disable email sync before starting the migration. If your team's Google or Microsoft accounts are connected while you are importing, Attio will auto-create People and Company records from incoming emails. You will end up with duplicates everywhere. Re-enable email sync only after the migration is validated.
Step 4: What does not migrate (and what to do about it)
Here is the part that surprises most teams:
Emails do not migrate. Not via Import2, not via CSV, not via the API. Your email history comes back when you connect Google or Microsoft after migration. Attio syncs your connected mailbox and backfills conversations onto the correct contact timelines. This is actually better than importing static email records because the data stays live.
Calendar events do not migrate. Same approach. Connect Google Calendar or Outlook and Attio backfills automatically.
Call recordings do not migrate. Period. If you need historical call data, keep read-only access to your old CRM or export to a separate archive.
File attachments do not migrate. Attio does not have a native file attachment field. The workaround: export files to Google Drive or Dropbox organized by company or contact, then link back via URL attributes or notes.
Relationship intelligence does not migrate. If you are coming from Affinity, their algorithmic relationship scoring is proprietary. Attio has its own Connection Strength attribute that builds over time based on your team's actual email and calendar activity. Give it 2–3 weeks of email sync and it catches up.
Step 5: Validation and go-live
Validation is where most teams cut corners and pay for it later.
Record count reconciliation. Compare the number of Companies, People, and Deals in your source CRM against Attio. They should match within 1–2% (some records may have been filtered out intentionally in Step 1).
Spot-check 20 records per object. Pick them randomly. Open them in both the old CRM and Attio side by side. Check every field. Check notes. Check associations. This takes an hour and has caught data mapping errors in almost every migration we have done.
Run a 2-week parallel period. The old CRM goes read-only. The team works in Attio. But if someone cannot find something, they can look it up in the old system. After two weeks with no escalations, decommission the old CRM.
Re-enable email sync carefully. When you connect Google or Microsoft after migration, Attio will auto-create records for everyone your team has ever emailed unless you configure the sync settings first. Decide in advance: should Attio create new People and Companies from email contacts, or only match against existing records?