Skip to main content
Compliance

Sanctions screening beyond name matching

String similarity produces a hit rate. Whether those hits are the right ones depends on everything the string does not contain.

Practitioner Note Drawn from open engineering practice and published literature. No client data, proposal content, or program-office discussion appears here.

Screening a counterparty against a restricted list is one of the oldest automated compliance tasks and one of the least satisfying. Tighten the matching and real hits are missed. Loosen it and the queue fills with unrelated people who share a common surname. Neither dial position is correct, because the dial is not the problem.

Why string similarity is the wrong primitive

Names arrive transliterated from scripts with no single romanization, ordered differently across cultures, abbreviated inconsistently, and entered by people under time pressure. Edit distance treats all of these as the same kind of variation, which they are not.

Meanwhile the strongest disambiguating signals — date of birth, jurisdiction of registration, address, identifier numbers, known associates — are either not used or used as a post-filter after the damage to the queue is already done.

The queue is not full because the threshold is wrong. It is full because the match ignored everything except the name.

The exposure that name matching cannot see

Restrictions commonly extend through ownership and control, not just to named parties. A counterparty that appears nowhere on any list may be majority-owned by an entity that does. No amount of name matching on the counterparty finds this.

Catching it requires a resolved supplier ownership graph — resolved entities, evidence-bearing links, versioned so a determination made last quarter can be reproduced. Screening and ownership resolution are usually run as separate programs by separate teams, and the gap between them is where the real exposure sits.

What a better screening decision looks like

  • Multi-signal scoring where name is one input among identifiers, dates, and geography
  • Explicit handling of transliteration families rather than character-level distance
  • Ownership and control traversal to a defined depth, with the path shown
  • Every disposition recorded with the signals that produced it, not just the outcome
  • A measured false-negative estimate from seeded testing, not only a false-positive rate

The seeded test is the part most programs skip. Inserting known-positive synthetic counterparties into the live flow, at low volume, is the only practical way to measure what the system misses rather than what it flags.

Discriminating power of each screening signal

Government identifier
95%
Date of birth or incorporation
80%
Ownership and control traversal
76%
Jurisdiction
60%
Address
45%
Name string on its own
22%

Relative weighting from delivery practice, not a measured statistic — shown to rank where attention belongs.

Where language models fit, and where they do not

They are useful for reading unstructured counterparty documentation and extracting the identifiers and relationships that the matching layer needs — turning a messy onboarding packet into structured, span-linked facts.

They are not the right tool for the match decision itself, which needs to be deterministic, reproducible, and explainable to an examiner years later. A determination that cannot be re-run identically is not a determination, and generative components make re-running identically difficult by construction.

The narrative layer, again

As with AML alert triage, the drafting of the disposition rationale is where fabrication enters. The same rule applies without modification: the drafting model receives the structured determination object, and any assertion it produces that does not resolve to a field in that object is removed before the record is written.

The signals, and what each one is good for

Moving beyond name similarity means being explicit about what other evidence exists and how much weight it can bear.

SignalStrengthCaveat
Government identifierVery high when present and well-formedFrequently absent; formats vary; transcription errors common
Date of birth or incorporationHigh as a discriminatorPartial dates are common on lists; year-only is weak
JurisdictionGood for exclusionRegistration jurisdiction may differ from operating location
AddressModerateShared service addresses produce spurious agreement at scale
Known associatesHigh where the graph existsRequires relationship data most programs do not maintain
Name stringLow aloneThe only signal always present, which is why it dominates by default

Reading that table top to bottom explains the queue. The signal that is always available is the weakest one, so systems built on availability rather than strength generate volume proportional to how common the name is.

Transliteration deserves better than edit distance

A large share of list entries originate in scripts with no single romanization convention. The same name arrives through different conventions, through different intermediary languages, and through inconsistent handling of prefixes and particles.

Edit distance treats a two-character difference produced by a legitimate romanization variant identically to a two-character difference between unrelated names. That is wrong in both directions: it under-matches genuine variants that differ by more characters, and over-matches unrelated names that happen to be close.

The better approach maps names to a phonetic or script-aware representation that reflects how the variants arose, handles particles and honorifics explicitly, and treats name-order variation as a structural rather than a character-level phenomenon. This is well-trodden ground with mature open approaches, and programs still commonly run generic fuzzy matching because it was what the platform shipped with.

Seeded testing: measuring what you miss

Every program measures false positives because they arrive in the queue and demand attention. Almost none measure false negatives, because a missed match generates no artifact.

Seeded testing is the practical remedy. Synthetic counterparties, constructed to match list entries in specific ways, are injected into the live screening flow at low volume and tracked.

  • Exact-name seeds confirm the basic path works end to end
  • Transliteration-variant seeds test the matching layer where it actually operates
  • Name-order and particle seeds test structural handling
  • Ownership seeds — a clean counterparty majority-owned by a listed entity — test whether the traversal runs at all
  • Partial-identifier seeds test whether weak-but-real signals are used or discarded

The results are frequently uncomfortable and always actionable. The ownership category in particular tends to reveal that the traversal exists in the design document and not in the running system.

Documenting the tuning

Thresholds get adjusted in every program. The adjustment is defensible when the record shows a risk analysis and indefensible when it shows a volume motivation, and the two look identical in the configuration.

What the record needs: what was changed, the analysis of what falls newly outside the threshold, an estimate of the risk accepted, the approver, and the date. Where a model confidence cutoff replaces a rule threshold, the same standard applies without modification — a model boundary is a threshold with extra steps.

A useful discipline is to require that any threshold change be accompanied by a re-run of the seeded test set. If the change causes seeds to be missed that were previously caught, that is the risk analysis, produced automatically, in a form nobody can argue with.

Connecting screening to the ownership graph

Screening and ownership resolution are typically owned by different teams with different systems, and the exposure lives in the seam. A counterparty that clears name screening while being controlled by a listed entity is the exact case the rules contemplate, and it requires both capabilities operating together.

Practically this means the screening decision consumes the resolved ownership graph rather than the raw counterparty name, traverses it to a defined depth, and records the depth and the graph version with the determination. When the graph updates and a new controlling relationship appears, previously cleared counterparties are re-evaluated automatically rather than at the next scheduled review.

That re-evaluation loop is what turns two static processes into a control that actually responds to change, and it is usually a modest engineering effort relative to the exposure it closes.

Onboarding and payment screening are different problems

They are usually run on the same engine with the same lists and treated as one capability. The constraints are not comparable and the shared configuration is where trouble starts.

OnboardingPayment
Time availableHours to daysMilliseconds to seconds
Data availableFull application, identifiers, documentsWhatever the message carries, often a name and a country
Cost of a false positiveA delayed applicationA blocked payment and a customer call
Ownership traversalPractical and expectedOnly against a pre-resolved cache

The bottom row is the operational key. Ownership traversal cannot happen inside a payment window, which means the graph has to be resolved in advance and cached, with the payment path doing a lookup rather than a computation. Programs that discover this late end up either skipping the traversal on payments or accepting latency nobody agreed to.

List management is its own discipline

Screening quality depends on list currency, and list ingestion is more failure-prone than it appears. Lists change format, add fields, publish corrections, and occasionally issue entries with malformed or partial identifiers.

A program that ingests without validating will silently degrade — a parsing change that drops a field reduces match quality with no error anywhere. The controls are unglamorous: record counts compared against the publisher's stated totals, schema validation on ingest, alerting when an expected update does not arrive, and retention of every list version so a historical determination can be reproduced against the list as it stood.

Governance the examination will ask about

Beyond the tuning record described above, three artifacts are consistently requested and inconsistently maintained.

A written scope statement — which lists, which populations, which transaction types, and what is deliberately out of scope. A documented escalation and override procedure, with evidence that overrides are reviewed rather than merely recorded. And periodic independent testing of the screening itself, distinct from the institution's own tuning analysis.

None of this improves detection. All of it determines whether the detection you have is credited, which is the practical difference between a program that works and a program that can be shown to work.

Frequently asked questions

Is a lower threshold safer?

Only if the added volume is genuinely reviewed. A queue too large to review carefully converts a false-positive problem into a false-negative one, which is the worse of the two.

How deep should ownership traversal go?

Deep enough to satisfy the applicable rule, and the depth used must be recorded with the determination so a later reviewer knows what was and was not examined.

1 business day response

Working on something like this?

We build systems where every figure is executed against the real record, every sentence carries the source it came from, and the system says so when the data does not support an answer.

Start a conversationCapabilitiesRead more insights →
UEI Y2JVCZXT9HP5CAGE 1AYQ0NAICS 541512SAM.GOV ACTIVE