Matching rules

Decide what counts as a duplicate and what happens to it — built-in rules, your own rules, actions, and field clean-up.


Matching rules decide what counts as a duplicate. Find them at Settings → Matching rules, with separate rules for Companies and People. Everyone can see them; only workspace admins can change them.

A rule fires when all of its conditions hold. A pair of records is flagged as a duplicate when any enabled rule fires, and each rule decides what happens next: send the pair to review, auto-merge it, or rule it out. Every scan — and live monitoring — uses these rules.

Built-in rules

DeDupe ships with rules that work well for most workspaces:

CompaniesPeople
Similar domain (acme.com vs acme.co)Similar email
Similar company name ("Acme Inc" vs "Acme, Inc.")Same phone number
Same LinkedIn profile
Same Twitter handle
Similar name
Same name + company
Same name + work email domain

For each built-in rule you can:

  • Switch it on or off.
  • Set how strict it is. Similarity conditions have an at least N% similar slider; exact ones (phone, LinkedIn) must be identical.
  • Weight its conditions, for rules with more than one — how much each counts toward the rule's score.
  • Choose its action — see Rule actions.
  • Reset it to the default.

Same name + work email domain ignores free email providers (Gmail, Outlook, Yahoo and so on): two different John Smiths who both use Gmail share nothing meaningful.

You can't change which fields a built-in rule compares, and new built-in rules reach your workspace automatically.

Custom rules

Add your own rules on the Custom rules tab. A custom rule is one or more conditions that must all hold, for example:

  • Same LinkedIn profile and same phone number
  • Similar name and same job title
  • Similar company name and same location

For each condition, pick a field and an operator:

OperatorHolds whenExample
matchesthe two records' values match, by the comparison you picksame LinkedIn profile
is differentboth records have a value and they don't matcha different company
matches patterna value matches a pattern, on both / either / neither recorddomain matches \.acme-group\.com$ on both
is emptythe field is empty on both / either / neither recordlocation is empty on either

Comparisons only offer what can actually find duplicates (emails and domains are always compared by similarity, because Attio never lets two records share the exact same one). Patterns test the values as stored in Attio, before field clean-up, and ignore upper/lower case. Start from a blank rule or one of the suggested templates.

Your own Attio fields

Besides the built-in fields, conditions (and field clean-up and guardrails) can use your workspace's own Attio attributes, listed under Your Attio fields: a HubSpot or Salesforce ID, an account number, a region code. They compare as exactly the same or similar text. No re-sync is needed; DeDupe reads them from the records it already has.

Combining rules and conditions

  • And — conditions inside one rule must all hold.
  • Or — separate rules: a pair is flagged when any rule fires. To flag "same LinkedIn or same phone", make two rules.
  • Not — set a condition to is different to require the two values to differ: similar name and a different job title. An "is different" condition only holds when both records have a value for that field, so a missing value never counts as different. Every rule needs at least one condition that matches — "is different", "matches pattern" and "is empty" narrow a rule down; they can't find duplicates on their own.

Rule actions

Every rule, built-in or custom, has an action:

  • Send to review (the default).
  • Auto-merge, at any confidence or only above a minimum — subscription only.
  • Never flag it — pairs the rule matches are marked not a duplicate, even when other rules match them. For example, similar name and a different company → never flag it.

Preview on pending pairs shows what a rule would do to your queue before you save. Guardrails, limits and close calls live on the Automation tab. See Automate merges.

Field clean-up

Clean-up runs before any rule compares values, so it improves every rule at once. It changes only what's compared — the values in Attio, and what gets merged, stay exactly as they are.

Clean-upExample
Ignore part of a fieldMiddle names ("Jane Marie Doe" = "Jane Doe"), titles and suffixes ("Dr", "Jr"), company suffixes ("Inc", "LLC"), text in parentheses, or a phrase you type
Treat as the sameOne group per line: Robert, Bob, Rob makes "Bob Smith" and "Robert Smith" compare as the same name
NormaliseIgnore upper/lower case, punctuation, extra spaces, or numbers
Find & replace (pattern)A regular expression and what to replace it with — see below

Clean-up applies to names, job titles, company locations, and your own Attio fields. Domains and emails take find & replace and normalise, for example turning acme-uk.com into acme.com before domains are compared. Entries run in order, so you can chain them: expand abbreviations first, then normalise.

Find & replace with a pattern

For anything the other options don't cover, write a regular expression. Matching ignores upper/lower case and replaces every match. Leave the replacement empty to remove what matched, or use $1, $2 to keep the parts in brackets. Use the Try it box to check a pattern against a sample value before saving.

PatternReplace withEffect
\s*-\s*(contractor|temp)$(empty)"Jane Doe - Contractor" → "Jane Doe"
\bsr\.?(\s|$)Senior$1"Sr. Engineer" → "Senior Engineer"
^(\w+), (\w+)$$2 $1"Doe, Jane" → "Jane Doe"
-(uk|us|eu)\. (on domains)."acme-uk.com" → "acme.com"

A pattern runs against every record in every scan, so DeDupe only accepts patterns that can't slow a scan to a crawl: no repeating a group that itself repeats or has alternatives (like (a+)+ or (a|b)*), no back-references (\1) and no look-aheads or look-behinds. Patterns can be up to 200 characters, and values longer than 256 characters are left as they are. The same limits apply to pattern rules in false positives.

Scoring

Every matched pair gets a confidence score. The Scoring tab sets how much each signal counts toward it:

  • Match score — how strongly the matching rule scored the pair.
  • Rule reliability — how trustworthy that kind of match is (same phone beats similar name).
  • Other fields agree — how many other fields the two records share.
  • Data completeness — how complete and clean the records are.

The four weights must total 100% — the total turns green when they balance, and you can't save until it does. Rule actions ("auto-merge when confidence is at least N%"), the auto-merge catch-all and reviewer notifications all compare against this score. The same weights apply to companies and people. New weights apply to pairs found from then on; pairs already in the review queue keep their score. Only admins can change them.

When changes take effect

Saved rules apply to the next scan and to live monitoring straight away. Duplicates already in your review queue aren't re-checked automatically. To run your rules over them, use Automation → Apply to existing pairs.

Related

  • To stop a specific pair from being flagged again, mark it Not a duplicate; you can review those in false positives.
  • To see why a pair matched, open it in the review queue: the Why this matched panel lists every rule that fired and the values it compared.
  • For how the confidence score is built, see confidence scores.