Duplicate Detection for Attio
Duplicate Detection watches your Attio workspace for new and updated People and Companies and logs any matches it finds to dedicated review lists. Matching covers email canonicalization (Gmail dots, plus addressing), domain redirects (example.io vs example.com), and social media profiles (LinkedIn, Twitter, Facebook). Every entry comes with an audit trail of why the match was flagged.
Need help with the backlog of duplicates that are already in your workspace? Our deduplication and bulk merging service handles that as a paid engagement, usually within a few hours.
How does Duplicate Detection work?
On install, the app creates two lists, "Duplicate Companies" and "Duplicate People", and subscribes to Attio webhooks on the social media, email, and domain attributes. Every time one of those attributes changes (or a new record is created), the app checks for matches across the rest of your workspace and writes any matches it finds to the appropriate review list.
Always-on checks: email, domain, social
- Email. When an email address is added or edited, the app normalizes it (stripping Gmail dots and + addressing) and looks for existing records with the same normalized email. If checkredirects.io is configured, it also matches across domain redirects (so jon@example.io matches an existing jon@example.com when example.io redirects to example.com).
- Domain. When a Company domain is added or edited, the app checks whether the new domain redirects to any domain on an existing Company. Domain-redirect matching needs the checkredirects.io API key; without it, only exact-match domain checks run.
- Social media. When a LinkedIn, Twitter, or Facebook URL changes on a Person or Company, the app looks for other records with the same handle and logs any matches it finds.
Optional checks: phone, name + company, email domain + name
The next set of checks is opt-in and configurable per workspace. Each one is a separate toggle in Workspace Settings. Flip the ones that match how your team actually finds duplicates today.
- Phone numbers on People. Numbers are normalized (non-digits stripped except
+) and US country-code variations are handled. - Full Name + Company on People. Triggers only when the person record has a company attached; matches first name + last name + company ID exactly.
- Email Domain + Full Name on People. Catches the case where someone changes their personal email but stays at the same company. Matches the domain portion of an email plus the person's full name. Needs both attributes populated on the record.
- Company Name. Exact-match on the Company record's name.
Where do duplicates show up?
Inside Attio, in the two lists the app creates: "Duplicate People" and "Duplicate Companies". Each list entry links to the existing record via the Duplicate Of attribute and includes the audit fields described in the next section.
For one-off audits, for example when you first install the app and want to see what's already in your workspace before relying on the live webhook flow, the Workspace Settings page has Find Duplicate People and Find Duplicate Companies buttons. Each kicks off a bulk scan against your existing records and populates the same review lists. The buttons sit alongside a sync-status indicator (in sync, out of sync, not synced yet) so you always know whether your enabled checks match what's deployed.
How do I set up Duplicate Detection in Attio?
Setup is six steps, finishes in a few minutes from a clean workspace, and requires a checkredirects.io API key only if you want domain-redirect matching.
- Sign up for a checkredirects.io API key. Domain duplicate detection needs to follow HTTP redirects so the app catches example.io vs example.com pairs. Sign up at checkredirects.io. The free tier gives 250 requests, $10 buys 10,000 records. If you skip this, email + social media duplicate detection still works; only domain-redirect matching is disabled.
- Install Duplicate Detection from the Attio App Store. Find Duplicate Detection in the Attio app marketplace and install it into your workspace. The app drops you into its settings page after install.
- Add a connection with your checkredirects.io API key. In the app's Settings, add a connection and paste your checkredirects.io API key directly into the connection field as plain text (not JSON). Leaving the field empty turns off domain-redirect matching but keeps every other check running.
- Let the app provision your duplicate lists. On first connection the app creates two lists, "Duplicate Companies" and "Duplicate People", and subscribes to webhooks on the social media, email, and domain attributes. Provisioning finishes in a few seconds.
- (Optional) Enable extra duplicate checks. In Workspace Settings, toggle on any of the four optional checks under "Optional Duplicate Checks": Phone Numbers, Full Name + Company, Email Domain + Full Name (catches people who change personal email but stay at the same company), and Company Name (exact match).
- Click Save & Sync after any setting change. Save & Sync is what updates Attio webhook subscriptions to match the optional checks you turned on. If you skip it, your optional checks will not run. The settings page shows a sync status indicator so you know whether the deployed webhooks match your settings.
What is written to each duplicate list entry?
Each entry on the "Duplicate People" or "Duplicate Companies" list carries the following audit fields so reviewers can see at a glance why the match was flagged.
| Attribute | Description |
|---|---|
| Duplicate Reason | Why the match was flagged: "same linkedin", "same email", "domain redirect", etc. |
| Duplicate Of | Reference to the existing Attio record that the new record matches. |
| Input Value | The incoming value the app tried to match against existing data. |
| Matched Value | The value already in Attio that the input matched. |
| Details | Free-text notes with extra context about the match. |
| Merged | Checkbox that flips to true automatically when you merge the underlying records. |
What happens when I merge a duplicate?
When you merge two records in Attio, Attio fires the record.merged webhook. The app picks it up, finds the matching list entry (where the surviving record is the parent and the merged record sits in duplicate_of), and flips Merged to true on that entry.
Net effect: when you do the merge in Attio, the duplicate entries in the review list mark themselves as resolved automatically. We recommend filtering Merged = true out of your default list view so the review queue stays focused.
What are the known limitations?
- Auto-merging is not available. Attio does not currently expose a programmatic merge API, so the app cannot merge duplicates for you. You have to do the merge yourself in the UI (or contract our team for bulk-merging).
- Domain-redirect detection requires the checkredirects.io key. Without it, domain matching falls back to exact match only. Email and social media checks continue unaffected.
- Name + company matching requires a company attached. People records without a company are skipped for that check.
- Phone matching handles most US formats. International numbers may miss when their format does not normalize cleanly.
- Attio webhooks can occasionally lag. Most duplicates land within 10 to 20 seconds, but spikes in traffic can extend that.
- If lists or attributes were not fully provisioned (network blip on first connection), list entries can fail to write. Re-adding the connection forces re-provisioning.
Frequently asked questions
What does Duplicate Detection for Attio do?
It watches your Attio workspace in real time for new and updated People and Company records, and logs any matches it finds to dedicated "Duplicate People" and "Duplicate Companies" lists. Each entry includes the reason for the match plus a link to the existing record, so you can review and merge from the list view. You can also click "Find Duplicate Companies" or "Find Duplicate People" to run a one-off scan of your whole Attio instance.
Where do duplicate entries show up in Attio?
In two special lists the app creates for you on first connection: "Duplicate Companies" and "Duplicate People". Every entry links to the duplicate record via duplicate_of and includes the audit fields explaining why the match was flagged.
Why don't my webhook handlers show up in Attio's UI?
Webhook handlers created via the Attio SDK are hidden by design. They still run behind the scenes and are removed automatically when you disconnect the integration.
Does the integration automatically merge duplicates?
No. The app only detects and reports duplicates. You merge records yourself in Attio. When you do, the app picks up the record.merged webhook and marks the corresponding list entry as merged. If you need help bulk-merging duplicates that have already piled up, our deduplication and bulk merging service handles that as a paid engagement with a few-hour turnaround.
How fast do duplicates appear after a record is created or updated?
In real time via Attio webhooks. Duplicate entries typically land in the deduplication lists within 10 to 20 seconds of the trigger.
What happens when I merge two duplicate records?
Attio fires the record.merged webhook. The app finds list entries where the surviving record is the parent and the merged record is in duplicate_of, and sets merged = true on each. We recommend filtering merged = true out of your default list view so you can focus on what still needs review.
Can I filter which attributes are checked for duplicates?
Email, domain, and social media (LinkedIn, Twitter, Facebook) are always checked and cannot be disabled. Four optional checks can be toggled per workspace in Settings: Phone Numbers, Full Name + Company, Email Domain + Full Name, and Company Name.
Why are some duplicates not being detected?
For name + company matching, the person record needs a company attached. For phone numbers, the format needs to be recognizable: non-digits are stripped except + and US country-code variations are handled, but international format quirks can miss. For email, canonicalization handles Gmail dots and plus addressing; if matches still slip through, double-check that the email field on the record actually holds the value you expect.
What if I don't have a checkredirects.io API key?
Domain-redirect detection is disabled. Exact-match domain detection, email, and social media duplicate detection still work. The app logs a warning but the rest of setup completes normally. If you add a key later, the Workspace Settings page tracks your remaining checkredirects.io credits and lets you refresh the quota inline.
Can I trigger workflows from duplicate detection?
Yes. Use "List entry added" on either deduplication list as your trigger, then branch on duplicate_reason or any other attribute on the list entry. Common patterns: route Sales-team duplicates to a Slack channel, or queue them for a weekly merge sprint.
How do I enable optional duplicate checks?
Open Workspace Settings → Duplicate Detection Settings, toggle the optional check on, then click Save & Sync. The Save & Sync step is required because it pushes webhook-subscription changes to Attio. Without it, the toggle changes locally but no new duplicates get flagged for that check type.
What happens when I disable an optional check?
When you toggle a check off and click Save & Sync, the corresponding webhook handler and subscription are removed. No new duplicate entries get logged for that check type going forward. Existing entries already in the deduplication lists stay where they are.
Why do I need to click "Save & Sync"?
Because optional checks are wired up via Attio webhook subscriptions, and only Save & Sync pushes subscription changes to Attio. Without it, your toggles in the UI and your live webhook subscriptions can drift out of sync. The settings page shows a sync status indicator so it is easy to tell when they are aligned.
Is Duplicate Detection for Attio paid?
No. The app itself is free to install and use. We built it to keep Attio workspaces clean. If you need help bulk-merging the duplicates the app surfaces, that is a paid service we offer separately.