Fuzzy matching company names
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.
Normalize first — case, punctuation, spacing — then score similarity and treat anything above the threshold as a candidate, not a duplicate. Fuzzy name matching earns its keep when it is paired with one exact signal. On its own it is a suggestion engine, and a good one, but not a merge instruction.
Normalization does more work than the algorithm
Most "fuzzy" matches are not fuzzy at all once the values are cleaned up. Before any similarity is computed, these differences should stop existing:
| Raw values | After normalization | What removed the difference |
|---|---|---|
ACME Ltd. / acme ltd | acme ltd | Lowercasing, punctuation to space, whitespace collapse |
Smith & Sons / Smith and Sons | smith sons / smith and sons | Symbols removed — still needs similarity to close the gap |
https://www.acme.com/ / acme.com | acme.com | Domain normalization: scheme, www., path and trailing dot stripped |
+1 (555) 010-9999 / 555-010-9999 | 5550109999 | Digits only, compared on the last ten |
Bob@Example.COM | bob@example.com | Trim and lowercase |
Only the residue needs a similarity score: real typos, word-order differences, abbreviations and legal-form variants such as ltd against limited.
How the similarity score works
Deduptio uses Jaro-Winkler similarity on normalized values, with a 0.85 threshold — at or above that, two values are treated as the same for matching purposes. Jaro-Winkler rewards a shared prefix, which is the correct bias for names: robert and robrt score highly, while two names that diverge at the start do not.
The other half of the problem is tractability. Comparing every record with every other is quadratic — ten billion comparisons on a 100,000-record object. So comparison is blocked: each value emits coarse block keys from its token prefixes (tokens of three characters or more block on their first three; shorter tokens such as initials or co block whole), and only values sharing a block are ever compared. Blocks stay small, and the pairs that could plausibly match still meet.
The practical consequence: fuzzy matching finds typos and variants within a shared prefix. Two names for the same company that share no token prefix — an acronym against a full name, say — will not be compared, which is a deliberate trade rather than a bug. Acronyms need an alias field or an exact key, not a similarity score.
The pairs no threshold gets right
Raise the threshold and you miss these:
acme ltdandacme limited— same company, different legal form written out;john's bakeryandjohns bakery— an apostrophe;data ladder incanddataladder— a space.
Lower it and you merge these:
apex digitalandapex dental— three characters apart, unrelated;north star capitalandnorthstar capital partners— possibly related, possibly competitors;acme ukandacme us— deliberately similar, deliberately separate.
There is no threshold that gets both lists right, because the information needed to separate them is not in the string. That is the entire argument for combining signals.
Combine, do not loosen
When a fuzzy name match is paired with one exact signal, precision improves sharply without losing the variants you were trying to catch:
- fuzzy company name AND exact country;
- fuzzy company name AND exact LinkedIn URL;
- fuzzy person name AND exact email domain;
- fuzzy person name AND exact company reference.
Deduptio enforces this shape: with ALL logic, only one key may be fuzzy and the rest must match exactly. With ANY, as many keys can be fuzzy as you like, because each one stands on its own. Two independent fuzzy keys combined is a guess made twice — the reasoning is in match rules and scanning.
Reviewing fuzzy groups
Fuzzy groups deserve human eyes, and the review goes faster if you know what you are looking for. Sort by what the pair shares beyond the name: two records with the same domain and a similar name are safe; two records with similar names and nothing else in common are the ones to reject. Watch for generic tokens — group, holdings, solutions, partners — which inflate similarity between unrelated businesses.
Skipped groups in Deduptio do not come back, so rejecting a false positive is permanent rather than something you re-decide on every scan.
Try a fuzzy rule on your own names
Fuzzy matching is on the paid plans; dry-run scans are free on every plan and write nothing to Attio, so you can see what a rule would group before deciding whether it is right.
Start a free Attio duplicate scanRelated
- Finding duplicate companies in Attio — where in a real cleanup a fuzzy pass belongs.
- Finding duplicate people in Attio · Match rules and scanning
- Designing reliable match rules