How to bulk merge duplicates in Attio
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.
Attio has no bulk merge. The UI merges two records at a time and the API's merge endpoint takes two records per call. Clearing a real backlog means either scripting the pairwise chain yourself or using a tool that does — and in both cases the hard part is producing groups you trust enough to merge without opening each one.
Why there is no bulk merge
A merge is a destructive, irreversible operation: one record survives, the other is deleted and cannot be recovered. A bulk version of that needs three things Attio deliberately does not ship — a way to define what counts as a duplicate, a review surface, and a way back. Without all three, a bulk merge button is a footgun with a progress bar.
So the interface offers the safe primitive: two records, chosen by a person, one merge. The API mirrors it.
The four ways people actually do this
| Approach | Realistic for | What it costs you |
|---|---|---|
| Merge by hand in Attio | Up to roughly 30 groups | A morning. Free, and nothing to set up |
| Export to CSV, find groups, merge by hand | Sizing the problem, not fixing it | You still merge every pair manually — see why the spreadsheet stops here |
| Script the merge endpoint | Engineering teams with a clear rule | Grouping, chain ordering, async handling, rate limits, and no undo if the rule was wrong |
| A dedupe tool | Hundreds or thousands of groups | A subscription, and rules you have to think about once |
If you script it: the parts that bite
Nothing here is exotic, but each one is a bug you only find in production:
- Grouping is not pairing. Three records sharing an email are one group, not three pairs. Merge them as a chain: A into B, then the result into C. Merging the three pairs independently means passing a deleted record to the second call.
- Each merge returns a new record. The id you got back is what the next hop must use. Persist it per hop, or an interrupted run resumes with a stale id.
- Some merges are asynchronous. A call can be accepted and finish later. Treat an accepted-but-unfinished merge as committed and poll — retrying it blindly is how you double-merge.
- Uniqueness constraints fight you.You cannot write a losing record's email onto the survivor while the loser still holds it. Field fixes belong after the merge, not before.
- Lists end up with two entries. If both records were in the same list, the survivor now sits in it twice. See duplicate list entries.
- There is no undo. If the rule was wrong, a thousand merges are a thousand deleted records. Snapshot both records before each merge, or accept that the run is final.
The order that makes bulk merging safe
- Split by confidence, not by volume. Run the exact-identifier rule first — same email, same domain, same external id. Those groups are safe to merge in bulk. Fuzzy and name-based matches are a second, separate pass with individual review.
- Dry-run the whole batch. A preview that writes nothing tells you which record would survive in each group and what would move. Read a sample of twenty.
- Merge a small batch first. Ten groups, then open them in Attio and check activity, references and list membership before running the rest.
- Then run the bulk pass, and keep the restore window in mind while you spot-check — an error caught the same day is recoverable, one caught next week is not.
- Schedule a scan so the backlog does not rebuild while you are not looking.
How Deduptio does it
A scan pages the object, applies your rule, and produces groups with the reason each one matched. In the review queue you can merge a single group, skip the ones that are not real duplicates — skipped groups do not come back — or filter and select the set you trust and merge it in one run. Each group is merged as a chain of Attio-native pairwise merges, with per-hop progress persisted so an interrupted run resumes rather than restarting. Every merge is snapshotted first and restorable for 24 hours.
- Match rules and scanning
- Review and merge duplicate groups
- What happens when a merge fails
- Rollback and its limits
See what is duplicated before changing anything
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
- How to merge records in Attio — the manual version, and why it is fine for small numbers.
- Attio duplicate detection with the API — the endpoints involved if you are building this yourself.
- The Attio deduplication guide · Compare tools