How matching works

Sanctions screening fails in two directions: missing a listed person (false negative) and flagging the wrong one (false positive). This page explains what we do about both, so you can set your threshold knowingly.

1. Normalisation

Every name in the lists and every query is transliterated to Latin script, lower-cased and stripped of diacritics. Legal forms (LLC, GmbH, OOO…) and stop-words are removed for candidate search but kept for scoring. Name parts are tagged with dictionary symbols — for example the Korean surname written «Ким» in Russian and «Kim» in English resolve to the same symbol — which is how «Ким Чен Ын» finds «Jong Un KIM».

2. Candidate search

Up to 50 candidates are pulled from ~100,000 indexed names by four channels, in priority order: exact identifier match (passport, national ID, IMO, registration number); shared name symbols; trigram similarity of the cleaned name; phonetic keys. This step is deliberately generous — its job is recall.

3. Scoring

Each candidate is scored with logic-v2, the open-source algorithm behind OpenSanctions (nomenklatura, MIT licence). It weighs name similarity across scripts, exact identifier matches (strong positive), and conflicting facts — a different year of birth, gender or country lowers the score. The features field in every match shows which signals fired.

4. Thresholds

Default threshold 0.70 returns possible matches; 0.85 and above is labelled likely. Lower thresholds increase recall at the cost of more review work. Supplying a date of birth or country is the single most effective way to cut false positives.

Measured performance

We keep a public test set of 400 cases generated from the lists themselves — exact names, publisher aliases, typos, word-order changes, cross-script queries — plus names that must not match. Current results: recall@5 0.99 across all categories, 0 false «likely» matches on the negative set, median latency 85 ms. Known weak spot: a typo inside a legal form («LIMITED LIABILTY COMPANY …») can prevent a match; spell the entity name, not its legal form.

What this means for you

  • Treat likely as «stop and review», not as a verdict.
  • Send identifiers when you have them — an exact document match outranks everything else.
  • Use monitoring: a name that is clear today can be listed tomorrow, and we re-screen watched entities on every list update.
  • Keep the audit trail: every check records the list versions it ran against.