What is entity resolution?
For the team that owns a company master and has to defend it.
A stewardship queue, a CRM after a migration or a merger, a supplier file before a payment run, counterparty onboarding that has to survive an audit. Read the argument here, take the takeaways at the foot into your next vendor conversation, and send us a file when you want the same measurement on your own rows.
Foundations · 2,647 words · every figure carries the population it was measured over
9 min read, last revised . 5 questions answered at the foot.
all 19guides →how every figure here was measured →On this page
Work through four fictional company records
This educational example uses invented names and supplied identifiers. It describes the decisions to examine, not a measured product run or a registry-verified company.
Keep the original row ID, compare the issuing register with the number, and inspect contradictions before joining rows. A shared website can belong to a whole group. An unresolved pair stays available for a steward to investigate.
| Source rows | Evidence supplied | Decision to investigate |
|---|---|---|
| A: Tutorial Willow Ltd; B: TUTORIAL WILLOW LIMITED | Both quote number 01234567 issued by UK Companies House. | Treat the supplied register-qualified identity as agreement. Verify the number before applying a merge. |
| B: Tutorial Willow Limited; C: Tutorial Willow Holdings Ltd | The name stem and group domain agree. Their supplied UK company numbers differ. | Keep the legal companies separate. A parent relationship is not a duplicate. |
| D: Tutorial Willow Trading | Name and country only; more than one company could fit. | Hold for review. Ask for its company number or a distinguishing address; a high string score cannot supply that evidence. |
A similarity of 0.92, if your matcher returns one, describes its string comparison. It does not establish 92% match precision. This illustration assigns no confidence score or product accuracy rate.
The definition, and the two words that carry it
Hand a resolver a file and what comes back is a decision for every row: which real-world entity this record describes. That output is a partition — a set of clusters with a stable identifier on each, rather than a table of similarity scores — so that everything downstream, from a spend total to a credit exposure to a duplicate-supplier count, is computed over the company rather than over the rows.
Two words in that definition do the work. "Real-world" means the target of the decision is a company that exists outside your database, so correctness is checkable against something other than your own data; a resolver that only makes rows agree with each other is a deduplicator, and it can be perfectly self-consistent and completely wrong. "Partition" means the decisions must be mutually consistent: if A is B and B is C, then A is C, whether or not the system ever compared A with C directly. That transitivity is where most of the danger lives, and we come back to it below.
The unit that matters commercially is the entity, not the pair. A system that gets 99 pairwise decisions right out of 100 can still weld two large companies into one record, because a single wrong edge propagates through the transitive closure and takes every record on both sides with it. That is why this site publishes cluster metrics beside every pairwise number and why a vendor who will only show you pairwise precision is showing you the flattering half.
Why it is hard: a name is not an identifier
Company records arrive without the thing that would make the problem trivial. Almost nobody's CRM carries a company registration number, most files carry a name and possibly a country, and the name is a string a human typed. It has been abbreviated, truncated at a field-length limit, given the trading name instead of the legal name, given the legal name in a jurisdiction that does not use it, transliterated, or given the group's name when the counterparty is a subsidiary.
Names are also not unique, and how badly they are not unique varies enormously by register. In the Companies House snapshot behind our own fixtures, 99.53% of 5,464,811 live companies carry a name no other live company shares — high enough that a name and a country is often decisive. In SIRENE, the figure is 67.96% of 5,841,117 legal persons. A third of French companies share their exact name — 1,003 live companies sit on one name. A French file needs a town or postcode column, and with one it measured 2,998 of 3,000 on the postcode tier. The same algorithm, the same code path, and a completely different problem.
Then there is the structural ambiguity that no amount of data cleaning removes. A holding company and its operating company share a name stem, a registered address and often a website. A group runs one domain across forty legal entities. A dormant name-protection company sits at the address of the charity that actually trades. Numbered successor vehicles — the same name with a II, III or IV — exist precisely because the earlier ones are different legal persons. These are not dirty data. They are the register being correct about a world in which two different companies genuinely are that similar.
| Register | Population counted | Share with a unique name |
|---|---|---|
| United Kingdom — Companies House | 5,464,811 live companies | 99.53% |
| United States — Colorado Secretary of State | 2,191,009 extant legal persons | 97.76% |
| United States (filers) — SEC EDGAR | 6,471 tickered filers with complete rows | 99.91% |
| France — SIRENE | 5,841,117 legal persons | 67.96% |
| Norway — Brønnøysund | 450,754 corporate forms | 97.78% |
Measured with no model spend, on identifier and digital tiers, using the same seeded, sibling-complete builder in every register. A file from a low-uniqueness register needs a town or postcode column before a name tier means anything.
Deterministic matching: rules that are allowed to be certain
Some of your rows carry a field that settles the question outright, and matching on exact agreement of those fields is deterministic matching. Two records carrying the same company registration number scoped to the same register are the same company; two records carrying the same LEI are the same legal entity. There is no score involved and no threshold to tune, because the register has already done the resolution and the record is quoting its answer.
The value of a deterministic rule is that it is decisive in both directions. Conflicting strong identifiers are as informative as agreeing ones: two records with different, well-formed LEIs are not the same legal entity, and a probabilistic scorer that lets a strong name and address similarity outvote that conflict has a bug rather than an opinion. In our own resolver, conflicting registration numbers, LEIs and DUNS numbers are held at magnitudes large enough that no combination of positive evidence the model can see is able to overcome them, and the magnitude is re-derived and re-checked every time the weights are refitted rather than hand-set once and trusted.
The failure mode of deterministic matching is subtle and it is about scope, not about strings. A registration number is only an identifier when you know which authority issued it. A six-digit number with no register attached will happily collide with a charity reference, a VAT fragment or another country's company number. Getting this wrong produces high-confidence wrong merges, which is the most expensive kind, and it is the commonest defect we see in hand-built matchers.
Probabilistic matching: weighing evidence that is not decisive
Most records do not carry an identifier, so most decisions come down to weighing partial evidence. Give each comparable field a weight built from how often it agrees between true matches, set against how often it agrees between random pairs; add the weights up; and compare the total against two thresholds rather than one. That rule is the Fellegi-Sunter model, and almost every probabilistic matcher in use is a variation on it.
The rarity term is the part people underestimate. Two companies agreeing on the legal form "Limited" tells you almost nothing, because most of the register is Limited. Two companies agreeing on a rare name token tells you a great deal. This is the same intuition as inverse document frequency, and it is why a naive similarity score — which treats all agreement as equally informative — systematically overrates common names and underrates unusual ones.
The modern implementation is usually a fitted model rather than hand-set weights, but the shape is unchanged: features in, log-odds out, probability out of that. What matters is not which estimator you use but whether the weights were fitted on data you also report accuracy over, whether the signs are constrained to their causal direction, and whether the fitted intercept reflects the base rate of the population you are actually deploying against. A scorer calibrated on a balanced labelled sample will be overconfident on a recall-oriented candidate generator, and the correction is arithmetic rather than optional.
Why fuzzy matching is not entity resolution
Fuzzy matching computes a string distance and applies a cut-off. It is a useful component, and it is not a resolver. Four things separate the two, and each of them is a place a fuzzy-match project stalls.
The first is that a similarity score is not a probability. A Jaro-Winkler of 0.92 is not a 92% chance of being the same company; it is a statement about characters. Nothing about it tells you what fraction of pairs scoring 0.92 are true matches, so a threshold on it is a guess dressed as a parameter. Calibration is what turns a score into something you can act on, and fuzzy matchers do not have it.
The second is that fuzzy matching produces pairs, not clusters. Whatever your threshold, you still have to decide what to do when A matches B, B matches C, and A does not match C. Take the transitive closure and you merge companies that never scored against each other. Do not take it, and you have an incoherent partition where the same record belongs to two entities.
The third is that a string comparison has no way to be decisive about a conflict. It cannot say that two records carrying different LEIs are definitely different companies, because it never looked at the LEI as an identifier. So its errors are unbounded in the worst direction: the most similar strings in a company register are precisely the sibling entities you must not merge.
The fourth is that fuzzy matching has no way to abstain. It returns a number for every pair, so the answer to "we cannot tell" is a mid-range score that some downstream consumer will threshold into a decision anyway. A resolver treats "unresolved" as a first-class outcome with its own contract, which is a decision somebody made on purpose rather than a feature nobody built.
What a resolver actually does, stage by stage
A production resolver is a cascade, and it is a cascade for a cost reason as much as an accuracy one: each stage is cheaper than the next is expensive, and each stage only sees what the one before it could not decide.
The stages, in the order the record meets them:
- Normalise. Legal forms, punctuation, transliteration, domains, phone shapes and register-specific identifier formats. This is unglamorous and it sets the ceiling for everything after it.
- Generate candidates (blocking). Retrieve the small set of stored entities worth comparing against, because comparing against all of them is not affordable. A pair not retrieved here can never be matched, whatever the scorer does.
- Score. Deterministic identifier rules short-circuit where they apply; everything else gets a weighted feature score turned into a probability.
- Decide, in three regions. Above the upper threshold, merge; below the lower, reject; in between, escalate rather than guess.
- Adjudicate. A structured second opinion on the borderline band, with a versioned prompt and model, cached so the decision replays deterministically.
- Research. For the residual tail, go and find evidence that does not exist in either record yet, and re-enter scoring with it. This attacks evidence availability rather than model quality, which is what the residual error class usually is.
- Abstain. Still ambiguous, so return unresolved with a ranked shortlist and a review identifier. Reviewer decisions become labelled data.
- Cluster and assemble. Join the decided edges into a partition with a contradiction guard, then build a golden record from the surviving facts with per-field provenance.
Abstention belongs in the definition
A resolver that always answers is not more useful than one that sometimes declines; it is the same resolver with the declines relabelled as guesses. So the design question is what happens to the records whose evidence genuinely will not carry a decision. On our own 317-company fixture the name-plus-country-and-town-prose tier historically resolved 99.37% (315/317, 95% CI [97.7, 99.8]); the two that did not are same-stem company groups, and they came back as a five-candidate shortlist rather than as a guess with a plausible score attached. Historical 2026-08-29 recording with earlier identifier arrivals seeding the catalogue. This does not measure a business description, email footer or generic verification purpose alone. Two same-stem groups remained unresolved.
The truncated name is where this gets concrete. A name cut off by a field-length limit has often lost the tokens that would have discriminated it, and no model recovers information that is not there. That tier resolves 58.10% (61/105) on the same fixture, and the balance abstains with a shortlist. Read that figure next to the 100% (317/317) identifier tier before you read any average: a blend across input shapes tells you nothing about the shape your own file is in.
The corollary is that a match rate quoted without an abstention rate is unreadable. So is the reverse — perfect precision at zero automation is trivially achievable by never deciding anything. Our continuous-integration gate reports 1.0000 precision on 357/357 automated merges and an automation rate of 63.10% in the same table, because either figure alone is a different and much weaker claim.
How to tell a resolver from a demo
Every entity resolution demo works. The dataset is curated, the identifiers are present, and the hard cases are the ones nobody put in the file. Four questions separate a system from a demonstration of one, and all four are answerable in a conversation.
- What is the abstention rate, and on which input shapes? A single blended accuracy number is a claim about the fixture's mix, not about the engine.
- What are the cluster metrics? Pairwise precision is strictly the more flattering measurement, and a system with good pairwise numbers and poor scores once each error is charged to every record in the cluster it landed in — the B-cubed convention — is producing bad entities.
- Is the confidence calibrated, and against what population? If the answer is a similarity score, the threshold you write against it is arbitrary.
- Can a decision be replayed? A resolver that cannot reproduce why it merged two records six months ago has no audit trail, and in a regulated context that is the whole product.
What to take away
- Entity resolution produces a partition of records over real-world entities, not a table of similarity scores. The unit of correctness is the entity.
- The difficulty is evidence, not string distance. Sibling companies, holding structures and shared group domains are the register being correct about a genuinely ambiguous world.
- Deterministic rules are decisive in both directions and only work when identifier scope is respected; probabilistic scoring handles everything else and needs rarity weighting to be worth anything.
- Fuzzy matching produces uncalibrated pairs with no way to abstain and no way to be decisive about a conflict, which is why it is a component rather than a solution.
- Abstention is part of the specification. A rate published without its abstention rate is not readable, which is why ours are published per input shape, from 100% (317/317) down to 58.10% (61/105).
Those takeaways hold for anybody's data. The number for yours comes out of your own rows — a few hundred of them, with the matches you already have beside them.
Start freePrefer to put it to a person? Talk to us instead →
Where this article is applied
7 pages name this method as the working behind what they claim.
Is this your file?
The article is for anyone. The measurement behind it is worth commissioning for one kind of team.
Teams with a company master they have to defend — an MDM or stewardship queue, a CRM after a migration or a merger, a supplier file before a payment run, or counterparty onboarding that has to survive an audit.
Buying breadth as the product: we hold a fraction of an incumbent’s records and are not building a global company graph. Entity Bind resolves companies and organisations only. It does not resolve people, vessels, bank-account ownership, sanctions exposure, emissions or geolocation, and its results may not be used for eligibility decisions about individuals, including employment, credit and tenancy.
Sources
The papers, regulators and registers this article quotes, each with the caveat that travels with it.
- Fellegi and Sunter (1969), “A Theory for Record Linkage”, Journal of the American Statistical Association 64(328), 1183–1210
The paper behind the three-region rule and the m and u probabilities. Its optimality result holds under the model's assumptions, conditional independence between fields among them, which real company data usually breaks.
- Companies House register search
The register the United Kingdom figures were measured on. A name-uniqueness share is a property of the register, not of any resolver.
- Open Government Licence v3.0
The instrument Companies House publishes under. It is what makes those facts storable and resellable rather than return-only.
- Colorado Secretary of State
Chosen because it publishes the whole register as public-domain bulk data, not for the size of its economy. One state register of fifty; Delaware publishes nothing at any price.
- SEC EDGAR company search
A register of filers rather than of incorporation, so a company absent from it is not a company that does not exist. United States federal works are public domain.
- Annuaire des Entreprises
The keyless government search route to the SIRENE universe. What it cannot fix is that a third of French companies share their exact name.
- Licence Ouverte 2.0 (Etalab)
The licence SIRENE data is reused under. It permits free reuse, including commercial reuse, with attribution.
- Enhetsregisteret, Brønnøysund Register Centre
The open data service the Norwegian fixture was built from. Sole traders register there too and are excluded from every fixture.
- Norwegian Licence for Open Government Data (NLOD) 2.0
One of the two instruments Brønnøysund's data is published under; CC BY 4.0 is the other. Both require attribution and neither restricts resale.
Internal fixtures only. The historical 2026-08-29 per-tier recording covers 317 GB companies with identifier-rich arrivals seeding the catalogue first; the context tier includes country and registered-town prose. Its legacy replay has no full-prompt-verified calls and cannot certify current calibration. The September 5 CI reports cover 1,176 labelled pairs and 705 records over 250 companies using offline stubs. These are not independent customer holdouts or live production validation; the 99% minimum-input product target remains unmet. Scope is company and organisation identity only — not people, vessels, bank-account ownership, sanctions or emissions. Results may not be used for eligibility decisions about individuals, including employment, credit and tenancy.
Figures read off the product repository on 2026-09-05. The per-tier rates come from the live-adjudicated 317-company recording of 2026-08-29; the gate figures come from the stub-adjudicated continuous-integration run and are a floor rather than a ceiling. The two are never averaged. Entity Bind holds no SOC 2, no ISO 27001 and no other certification, and claims none. Every figure, with the population it was measured over and the method behind both recordings, is set out on the accuracy page. The retention, erasure, tenancy and sub-processor detail a security review asks for is under Trust and security, with where assurance stands: no external validation of the accuracy figures and no customer holdout.
The same measurement, on your own rows.
Create your workspace, verify your email and run your first company file. The Free plan needs no card. Create API keys in your workspace when you need an integration.
300 credits. No card.
For a guided review of your file, explore the Merge Safety Sprint →
The questions this article answers
What is entity resolution in simple terms?
It is working out which records refer to the same real-world thing, and joining them under one identifier. If your CRM has "Acme Ltd", "ACME Limited" and "Acme Holdings Ltd", entity resolution decides which of those are the same company and which is a different legal entity that happens to share a name stem. The output is a set of clusters with stable identifiers, not a list of similarity scores.
Is entity resolution the same as fuzzy matching?
No. Fuzzy matching computes a string distance and applies a cut-off, which gives you uncalibrated pairs. Entity resolution has to produce a consistent partition (if A is B and B is C, then A is C), has to treat conflicting identifiers as decisive evidence against a match, and has to have a defined behaviour when the evidence will not support a decision. Fuzzy matching is a useful feature inside a resolver and is not one by itself.
Why can't I just match on company name?
Because name uniqueness is a property of the register, not of the problem. In the Companies House snapshot we measure against, 99.53% of 5,464,811 live companies have a name no other live company shares, so a name plus a country is often decisive. In SIRENE the same figure is 67.96% of 5,841,117 legal persons. A matching strategy that works on a UK file silently produces wrong merges on a French one, and nothing in the code tells you it has happened.
What is the difference between deterministic and probabilistic matching?
Deterministic matching decides on exact agreement of identifying fields — the same registration number in the same register, or the same LEI — and is decisive in both directions, so a conflict is as informative as an agreement. Probabilistic matching weighs partial evidence from names, addresses, domains and phones into a score, which is what you need when no identifier is present. Real systems use both: deterministic rules short-circuit where they apply, and the probabilistic stage handles what is left.
What should an entity resolution system do when it cannot decide?
It should abstain, and the abstention should carry something usable: the ranked candidates it considered, an identifier that redeems the full evidence trail, and a route into human review. A match below 0.90 confidence is unrepresentable. The record comes back as an abstention with a ranked shortlist instead. That is an acceptance contract rather than an accuracy claim — it says what will not be returned, not how often what is returned is right.