Duplicates after a HubSpot to Attio migration
Last checked September 1, 2026 · Deduptio is our product. Every claim about another tool comes from its public site or documentation and is linked in place — tell us if something is out of date.
Turn off mailbox auto-creation before you import, load companies before contacts before deals, and map domain and email as the matching attributes. If the import has already run, do not re-import — clean the live records with an exact-match pass, then a reviewed fuzzy pass.
The four sources of duplicates in this migration
| Source | What it looks like afterwards | Prevented by |
|---|---|---|
| Email sync creating records mid-import | A person record created from an inbound email at 10:04 and the imported one at 10:06, differing only in which fields are filled | Disabling mailbox auto-creation until the migration is finished |
| No unique attribute mapped | Every row created; the object roughly doubles on a re-run | Mapping domain and email in the import — see CSV import duplicates |
| HubSpot's own duplicates | Two contacts for one person, faithfully reproduced in Attio | Cleaning in HubSpot first, or accepting one cleanup pass in Attio afterwards |
| Wrong load order | Company records auto-created from contact associations, sitting next to the ones the company import created | Companies, then contacts, then deals |
How the objects map
HubSpot Contacts become Attio People, HubSpot Companies become Attio Companies, and associations carry across so people link to their companies. Deals map to Attio's Deals object. The important asymmetry is that CSV imports do not carry notes and tasks — those need a migration tool or the API — so immediately after the import your records have fields but not much history.
That changes how you pick a survivor. "Keep the record with the most activity" is the right rule in a mature workspace and the wrong one on migration day, when the record with activity is the one email sync created by accident and the record with the data is the one you imported. Prefer the imported record and let the activity move onto it.
If you have not imported yet
- Turn off mailbox auto-creation. This is the single highest-value step, and it is the one most people find out about afterwards.
- Dedupe in HubSpot first, or at least know what its duplicate count is. Whatever you leave behind arrives with you.
- Normalize the export. Lowercase and trim emails; strip protocol,
www.and trailing slashes from domains. - Load companies, then contacts, then deals, mapping domain and email as the unique attributes at each step.
- Import twenty rows first and look at the result before running the full file.
- Turn mailbox sync back on last, once the workspace already contains the people it is about to see in your inbox.
If the import has already happened
Re-importing will not help — Attio's importer creates and updates but never deletes. Clean the live records, in two passes:
- Exact pass. Same email for people, same domain for companies. This catches the email-sync collisions and the double-run rows, and it is safe to merge in bulk after a sample check.
- Reviewed pass.Fuzzy company name plus one exact signal; person name plus company or phone. These are HubSpot's inherited duplicates and the records that arrived without an identifier, and they need eyes on each group.
Do companies before people. Person matching gets better once the company records are unique, because "same name at the same company" only means something when the company is one record — the mechanics are in cross-object matching. Then do deals last, since they reference both.
Finish with the lists: merging records that shared a list leaves the survivor in it twice.
What to check when it is done
- Object counts against your HubSpot export counts, allowing for the duplicates you removed.
- A sample of merged people: is the current email the one they use now?
- Company associations: every person attached to one company record, not two.
- List counts, which are the fastest way to spot leftover duplicate entries.
- A scheduled weekly scan, so the first month of a new workspace does not quietly rebuild the backlog.
Scan the new workspace before anyone starts selling in it
Connect your Attio workspace, write one match rule, and run a scan. Scans are read-only — you see every group and the reason it matched before anything is merged.
Start a free Attio duplicate scanRelated
- Duplicates after a Pipedrive to Attio migration · …after a Salesforce migration
- Insycle alternative for Attio — if HubSpot dedupe tooling was part of your stack, this is what replaces it.
- CSV import duplicates · The full guide