One counterparty, nine records, and never the whole relationship
In short
A contract repository fragments one relationship across many records because party names are typed as free text, trading names differ from registered names, and group companies are separate legal persons. The fix is entity resolution plus a dated group hierarchy — not a merge, because merging entities that carry different liability destroys the record.
Key takeaways
- Count distinct name strings and distinct legal persons separately — the gap tells you which problem you have.
- Most near-duplicates are aliases of 1 entity; some are separate entities that must never be merged.
- Liability, caps and governing law attach to a specific legal person, so a wrong merge is a real loss.
- Key entities on a registered identifier where one exists, and record where it does not.
- Fix the capture path too, or the resolved backlog refills at the rate contracts are filed.
Someone asks what the business has with a supplier group and the repository returns 6 agreements out of 14. The other 8 are filed under a trading name, an abbreviation, a subsidiary and a spelling with the legal suffix left off. The instinct is to deduplicate. That instinct is half right and, applied wholesale, does damage that is expensive to reverse.
Some of those records are one legal person typed several ways. Others are different legal persons that happen to share a brand, and the difference matters because obligations, liability caps and governing law attach to the entity that signed, not to the group it belongs to.
Count the records, then count the legal persons
The confirming check produces two numbers whose ratio tells you what you are dealing with.
- Export every distinct counterparty string in the repository with its contract count and, where you hold it, contract value.
- Normalise hard for clustering only: fold case, strip punctuation and legal suffixes, collapse whitespace, and transliterate. Cluster on the normalised form. Never write the normalised string back to the record.
- Take the 20 largest clusters by contract count. For each, establish the actual group structure from the counterparty, from a national company register, or from the signature blocks on the executed agreements themselves.
- Record 2 counts per cluster: distinct strings, and distinct legal persons. Then classify each string against a person.
- Read the ratio. Many strings resolving to 1 person is a data hygiene problem with a mechanical fix. Many strings resolving to many persons is a modelling problem, and no cleanup will solve it.
Most repositories show both at once, in different proportions per counterparty. Doing this on 20 clusters takes a day and prevents a merge programme that would otherwise run for a month in the wrong direction.
Five reasons one relationship becomes nine records
- The party name is free text at the point of filing. No picker, no register, no validation — so every filer types what is in front of them, and 9 filers produce 9 strings.
- Trading names sit beside registered names. A company registered as one thing trades as another, and the contract may name either or both. Neither string is wrong; they are just not the same string.
- Group companies are separate legal persons. The supplier's UK entity, its German entity and its holding company are 3 parties, not 3 spellings, and each has signed different things.
- Entities are renamed or reorganised mid-term. The party that signed 4 years ago may not exist under that name today, and nothing in the repository connects the old name to the new one.
- Assignment or novation moved the contract. The counterparty legitimately changed part-way through the term, so the same agreement correctly names 2 different parties at 2 different dates.
The last two are why a counterparty record needs dates. A name is true for a period, not forever, and a contract's party is true as at a date. Anything that flattens both into one current value will misreport history.
The merge that destroys the thing you needed the record for
Merging is not a tidying operation. Collapse a subsidiary into its parent and the indemnity, the liability cap and the jurisdiction clause of an agreement now appear to belong to a party that never agreed them — and a parent company guarantee becomes meaningless, because the guarantor and the obligor have become one record. Establishing who owes what to whom is already the hardest part of clause extraction, as the indemnity extraction that returns only half the obligation sets out; a wrong merge removes the answer entirely.
| The pair | What it usually is | Action |
|---|---|---|
| Acme Ltd and ACME LIMITED | 1 legal person, typed 2 ways | Resolve to 1 entity, keep both strings as aliases |
| Acme Ltd and Acme Digital | 1 legal person and its trading style | Alias with a note, never a second entity |
| Acme Ltd and Acme GmbH | 2 legal persons in the same group | Separate entities joined by a group edge |
| Acme Ltd and Acme Holdings Ltd | Subsidiary and parent | Separate entities — a guarantee depends on the distinction |
| Acme Ltd, later Beta Ltd | 1 legal person renamed | 1 entity with a dated former name |
| Acme Ltd and Beta Ltd after novation | The contract moved to a different party | 2 entities; the agreement's party changes as at the novation date |
Registered identifiers do most of the work, and then they stop
Name matching should be the fallback, not the method. Where a counterparty is a registered company, key the entity on its registration in a national register — Companies House in the UK, the relevant state registry in the United States, the corporate registry in India — and store the jurisdiction alongside, because numbers are only unique within their register.
For counterparties active in financial markets there is also the Legal Entity Identifier, a 20-character alphanumeric code issued under the ISO 17442 standard and published free by GLEIF. Where an LEI exists it is the cleanest key available, and the reference data behind it includes group relationships you would otherwise assemble by hand.
- Where identifiers stop. Sole traders, partnerships, unincorporated bodies, foreign branches and individuals frequently have nothing to key on, and a large share of small counterparties will never carry an LEI.
- Where identifiers move. Re-registrations, cross-border migrations and statutory mergers can change or retire an identifier, so store it with a validity period rather than as a permanent truth.
- Where the document is the source. The signature block and the parties clause on the executed copy state the entity precisely, which is another reason a filing gap is expensive — if the executed version never arrives, you are naming the party from a draft, the failure in the signed envelope that never lands back in the file.
Group hierarchy, not deduplication
The shape that survives has 3 tables rather than 1. An entity table holds one row per legal person with its identifier, jurisdiction, status and dated former names. An alias table maps every observed string to an entity, with provenance and a confirmation state. A group table holds dated edges between entities — parent of, subsidiary of, controlled by — so a question about the group is answered by walking edges rather than by pretending the group is a company.
Contracts then reference entity identifiers, never strings, which is the same discipline the document relationships need in contract families and the amendment on both. Roll-up reporting becomes a traversal, and a user can ask for one entity or for everything beneath a group node without anything being merged.
Deduplication asks which of these records is wrong. Entity resolution asks which legal person each record is talking about — and accepts that the honest answer is often several different ones.
Fix the capture path, or the backlog refills behind you
A resolution exercise that does not change how records are created buys you a clean repository for about a quarter. The point of capture is the contract request, where the counterparty should be selected from the entity register rather than typed, with an explicit add a new entity path that captures the identifier and jurisdiction and routes to review — a question the form has to earn its place with, as in designing the contract request form people will fill in.
- Block the free-text fallback. If a filer can type a name, they will, and the register stops being authoritative within weeks.
- Reconcile against the executed document. Where the party named in the signature block differs from the entity selected at request, raise it as an exception rather than trusting either one silently.
- Queue unresolved aliases by exposure. Resolve the counterparties carrying the most contract value first; the long tail can wait without costing anything.
- Measure it. Track the share of contracts pointing at a confirmed entity, and watch the trend rather than the absolute number.
One boundary is worth naming: fragmented party data also degrades retrieval, but that has its own distinct causes and its own repairs, set out in search that cannot find a contract everyone knows exists. Fixing entities improves one facet of search; it does not fix search. Building the entity register, the alias store and the review queue around them is internal tools and ops work. This page sits in the contract lifecycle: request to renewal, part of our legal technology practice.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
How do you deduplicate counterparties in a contract repository?
Mostly you do not. You resolve names to legal persons and link those persons into a group, merging only the records that genuinely describe the same entity. Cluster the name strings to find candidates, then classify each candidate against the entity that actually signed, using registration numbers and the signature blocks on the executed documents rather than string similarity alone.
When should two counterparty records be merged?
Only when both records identify the same legal person — the same registered entity in the same jurisdiction, allowing for renames and typing variations. A subsidiary and its parent, two group companies in different countries, and an entity before and after a novation are all separate legal persons, and merging any of them misattributes the obligations and liability caps that each one actually signed up to.
What should a counterparty record be keyed on?
A registered identifier where one exists — a company registration number with its jurisdiction, or a Legal Entity Identifier — with the name treated as an attribute rather than as the key. Names change, are abbreviated, and are shared across a group. Keep every observed name as a dated alias pointing at the entity, so old contracts stay findable under the name they were filed with.
Why does a subsidiary need its own counterparty record?
Because it is a different legal person, and every commitment in an agreement attaches to the person that signed it. Liability caps, indemnities, governing law and termination rights all belong to that entity. If a parent company guarantee exists, it only means something while the guarantor and the obligor are separate records — merge them and the guarantee documents an entity guaranteeing itself.
- counterparty data
- entity resolution
- contract repository
- master data
The work behind this page
Builds from our portfolio that this page draws on.
AskVault
An AI internal knowledge-search platform that answers employee questions from your own docs — grounded in citations, with knowledge gaps surfaced and deflection tracked.
Productivity AIAP Copilot
An AI accounts-payable copilot that reads invoices, matches them to POs, and routes clean approvals
FintechPipelineIQ
An AI SDR platform that scores every lead for fit, runs multichannel sequences across email, LinkedIn and call, drafts the replies, and books the meeting.
Sales AIRead next
- Contract families: the parent, the child, and the amendment on bothA parent field expresses one relationship of one kind at one moment. Real contract families need directed edges carrying a type, a date and a scope.definition
- The renewal alert fired on time and the notice window had already closedThe alert was accurate, timely and useless. It counted back from the wrong date, and it treated a decision that takes six weeks as something a person does on the morning they are told.diagnostic
- Everyone knows the agreement exists and search will not return itA known agreement that will not surface has one of four causes, and re-indexing the estate fixes exactly one of them. Four probes, in order, tell you which.diagnostic
- The obligation register: 5 attributes an entry cannot work withoutMost registers are lists of clause summaries. A summary tells you what the contract says, not what to do, by when, or how you would prove it was done.definition
- Auto-renewal: alert on the notice deadline, not the renewal dateThe date printed in the contract is the last date anything can be done about it. The date worth diarising sits 3 subtractions earlier.definition
- The signature completes and the executed copy never reaches the fileThe deal team says it is signed; the repository shows the last draft. Five causes produce that gap, and one reconciliation over a closed month tells you which.diagnostic
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation