Screen names against sanctions lists

A sanctions screen is easy to call and hard to use well. The work is in what you do with a 0.96 match on a common name, and in being able to prove later that you checked.

Sanctions screening is the one check in this certification where the main risk is not fraud. A disposable email costs you a trial account. A stolen card costs you a chargeback. Paying a sanctioned person or company can be a violation of law for your business, regardless of whether anyone intended harm, and regulators tend to ask a simple question afterwards: did you check, and can you show it?

That makes this lesson different in tone. The API call is the easy part. Most of the work is deciding what a fuzzy match means, who looks at it, what you record, and what you are actually obliged to do. Those obligations depend on where you operate, what you sell and who you pay, and this lesson cannot tell you what yours are. It can show you how to build screening that a compliance person would recognise as reasonable, and how to avoid the engineering mistakes that make it worthless.

What a sanctions list is

Governments publish lists of people, companies, vessels and organisations that residents and businesses under their jurisdiction are restricted from dealing with. The best known is the US Treasury's OFAC Specially Designated Nationals (SDN) list. The UN Security Council, the EU and the UK each publish their own. They overlap but are not identical, and they change often, sometimes daily.

Each entry has a primary name, usually a set of aliases ("also known as"), and whatever identifying details the authority has: dates and places of birth, nationalities, addresses, passport numbers, and the sanctions programs it falls under. Those details matter, because the name alone is often not enough to tell two people apart.

The call

Sanctions Screening (sanctionscreening) takes a name (at least three characters) and returns scored matches. It costs 20 credits per call, which is the most expensive check in this course, so you will want to be deliberate about when you run it.

Try it liveSanctions Screening20 credits
GEThttps://api.apiverve.com/v1/sanctionscreening
curl "https://api.apiverve.com/v1/sanctionscreening?name=Banco+Nacional+de+Cuba" \
  -H "x-api-key: YOUR_API_KEY"
Sign in or create a free account to run this with your own key.

An exact hit on the primary name. verdict summarises the best match; results holds every candidate.

The top-level fields are the ones your code branches on:

FieldMeaning
matchedAt least one candidate scored at or above the threshold
matchCountHow many candidates came back
verdictSummary of the best match: exact, high, possible or none
topScoreThe best candidate's score, 0 to 1
matchedListsWhich lists produced the matches
listsWhich lists were screened, with each list's publishDate, recordCount and lastUpdated

Each item in results has name, type (individual, entity and so on), score, confidence, programs, source (the list code) and sourceId. Paid plans add the detail you need to resolve a match: matchedOn (the exact name or alias that matched), matchedVia (primary or aka), isWeakAlias, aka, dateOfBirth, nationalities, addresses and ids. The threshold, limit and type parameters are also paid-plan options. lists is available on every plan and takes a comma-separated set of codes: ofac_sdn, ofac_cons, un, eu, uk.

Fuzzy matching is the point, and the problem

Exact matching would be useless. Names are transliterated from other alphabets in several ways, people drop or reorder parts of their names, and anyone trying to evade a screen will misspell on purpose. So screening is fuzzy by design. Try a misspelling:

Try it liveSanctions Screening20 credits
GEThttps://api.apiverve.com/v1/sanctionscreening
curl "https://api.apiverve.com/v1/sanctionscreening?name=Banko+Nacional+de+Kuba" \
  -H "x-api-key: YOUR_API_KEY"
Sign in or create a free account to run this with your own key.

Two letters wrong, and the bank still matches with verdict high and a score around 0.93.

That is what you want. Now the cost of it. Screen a common name:

Try it liveSanctions Screening20 credits
GEThttps://api.apiverve.com/v1/sanctionscreening
curl "https://api.apiverve.com/v1/sanctionscreening?name=Mohammed+Ali" \
  -H "x-api-key: YOUR_API_KEY"
Sign in or create a free account to run this with your own key.

Several different listed individuals match through their aliases, each with a high score.

At the default threshold of 0.85, Mohammed Ali returns several unrelated listed individuals, each scoring 0.96, each matched through an alias that contains both names. Millions of people share that name. Almost every one of them is not on any list. If your system blocks every customer who produces a high verdict, it will discriminate against people with common names from particular regions, and it will do it confidently.

This is the false positive problem, and it is the central fact of sanctions screening. The screen is a filter that hands candidates to a human. It does not make the decision.

Reading a match

When a screen returns a candidate, a reviewer asks whether the person in front of them is the person on the list. The useful evidence is everything other than the name:

  • Type. An entity match against an individual customer, or the reverse, is usually a false positive.
  • Date of birth. A listed person born in 1965 is not your 24-year-old customer.
  • Nationality and addresses. Weak on their own, strong together.
  • Which name matched. A hit via a weak alias (isWeakAlias: true), such as a nickname or a single common word, is much less meaningful than a hit on the primary name.

This is why you collect date of birth and country at onboarding if you are going to screen individuals. Without them, a reviewer has nothing to resolve a match with, and every common name becomes a stuck case.

Check yourself

Screening a new individual customer returns verdict: high, topScore 0.96, matched through an alias of a listed individual whose recorded year of birth is 1965. Your customer's verified date of birth is 1999. What is the right handling?

Answer the check above to continue.

Run every example on your own key. Free plan, no card.

Scaling up?

Volume pricing, custom SLAs, and dedicated support for high-traffic teams.

Contact sales