Deduptio

Why form submissions create duplicates in Attio, and how to stop them

The short answer

A form is the one write path where a stranger chooses the identifier. Make every form update on email instead of creating, build companies from the email's domain rather than a typed name, and do not let a form create deals directly. Then clean up the pairs already there on name plus a second signal, and make sure each survivor keeps every address so the next submission lands on it.

Three routes from a form into Attio

“The form” is rarely one thing. A demo request on the website, a newsletter sign-up, an event registration and a partner application usually reach Attio by different routes, and each route has its own answer to the question that matters: what happens when the person already exists?

RouteDefault when the person existsWhat to set
Fillout's Attio integrationCreates a new recordTurn on Update if record already exists? under Mappings and pick email addresses as the matching attribute
The Forms app for AttioUpdates, matching on email or domain — if the form has one of those fieldsAlways include an email (or domain) field; without one, every submission creates
Zapier, Make, Relay or n8n from Webflow, Typeform, Tally, Google FormsWhatever the step does — a create step creates, every time it runsUse the create-or-update action, keyed on email
Your own webhook or backendWhatever you call — create is createAssert the person on email_addresses; assert the company on domain

One detail changes how to read the table. Email addresses are unique in Attio, so a plain create with an address that already exists does not make a duplicate — it is rejected. In an automation that usually means a failed run and a lead that never arrived, which is arguably worse. Either way the fix is the same: update on match, create only on no match. The API side of that is in duplicate detection with the API, and where Zapier and Make dedupe stops is in Deduptio vs Zapier or Make.

Why email matching still lets duplicates through

Once every form updates on email, the exact-duplicate case is closed. What is left is the case exact matching cannot see: the same human submitting under an address the workspace does not hold.

PatternExample
Personal instead of workSales has rachel@acme.com; Rachel downloads the ebook as rachel.k@gmail.com
Typosrachel@acme.co, rachel@gmial.com — forms are where typed addresses enter a CRM
Plus-addressingrachel+webinar@acme.com, used deliberately by people who filter their mail by sender
A second form months laterThe newsletter sign-up from 2024 and the demo request from a new job in 2026

None of these can be fixed by the form tool's matching setting, because the email is genuinely different. Two design choices reduce them: ask for a work email on high-intent forms such as demo requests, where the question costs little, and validate the domain on the form itself so gmial.com never reaches Attio. The rest is cleanup.

What forms do to companies

The quieter damage is on the Companies object. A form with a “Company” text box and an integration that links the person to a company will, on each submission, either find a company or create one — and the only thing it can find one by is the domain. A company created from a typed name has no domain, so the next person from the same company who types “ACME Inc” instead of “Acme” creates another.

The companies these forms have already created — domainless, named three ways — are the case fuzzy matching company names exists for.

Deals and custom objects from forms

A demo-request form that creates a deal on every submission produces a duplicate deal every time a prospect submits twice — and prospects do, because nobody answered the first one fast enough. Deals have no email or domain to match on, so no form tool can update one instead of creating it, and Attio cannot merge deals at all.

Let the form create or update the person, and create the deal as a separate step that first checks whether the company already has an open deal. If you want every submission recorded, add the person to a list of inbound requests instead; a list entry is cheap to triage and does not put a phantom opportunity into the forecast. What to do with the duplicate deals already in the pipeline is in duplicate deals in Attio.

Cleaning up what forms have already created

The pairs forms leave behind differ on email by definition, so exact email matching will not find them. Match on name plus a second signal:

  1. Name plus company. Rachel Kim at Acme twice, one record from sales and one from the form. The highest-yield rule for form duplicates, provided the company link is right — which is why the company cleanup comes first.
  2. Name plus phone number. If the form asked for a phone, it is often the one identifier the person typed the same way twice.
  3. Name plus LinkedIn URL, once enrichment has filled it in on both records. Effectively an exact match that survives any change of address.
  4. Name alone, with one record from a form and nearly empty. A candidate, not a verdict. Review these; never merge them automatically.

When you merge, keep the record sales has worked — owner, deals, lists, notes — and check that the form's address ended up on the survivor. A form matching on email will then find the survivor the next time Rachel submits from Gmail, instead of creating her a third time. The signals and the false positives to avoid are covered in finding duplicate people in Attio.

A routine that keeps forms clean

  1. List every form that writes into Attio and the route it takes. Most workspaces find one they had forgotten.
  2. Switch each one to update on email; include an email field on every form.
  3. Build companies from the email domain, and never from a free-mail submission.
  4. Route deal creation through a check for an existing open deal.
  5. Scan weekly on name plus company, so a duplicate surfaces while the rep still remembers which Rachel they spoke to.

Where Deduptio fits

Deduptio does not sit in front of your forms and cannot stop a submission creating a record; that is the form tool's setting. What it does is find what got through. A people rule keyed on name with company, phone or LinkedIn alongside it — using ANY or ALL — finds the pairs described above, and because every value of a multi-value attribute is keyed, a person's second address is matched rather than ignored. Fuzzy name matching, on paid plans, catches “Acme” and “ACME Inc” on the company side.

Scheduled scans, a Pro feature, run daily or weekly and email only when they find new groups. Rule design is in rules and scanning.

Find the people your forms created twice

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 scan

Related