Screen a name against eight sanctions lists in one request

36,303 designated parties from the US, EU, UK, UN, Swiss, Japanese, Australian and Canadian lists, merged so one party is one record however many authorities carry it. Rebuilt every night from the official sources. No key needed to start.

Get started freeSee monitoring

See it work

Paste this into a terminal. Nothing to install, no signup.

curl -X POST "https://sanctionscope.com/api/v1/screen" -H "content-type: application/json" \
  -d '{"names": ["Vladimir Putin"]}'

One request, and every authority that has designated the party comes back on one record:

{
  "screened": 1, "flagged": 1,
  "results": [{ "name": "Vladimir Putin", "matches": [{
      "name": "PUTIN, Vladimir Vladimirovich",
      "type": "Individual", "country": "RU",
      "authorities": ["US", "EU", "AU", "CA"],
      "programs": ["RUSSIA-EO14024", "EU:UKR", "AU:Autonomous (Russia)", "CA:Russia"],
      "score": 1,
      "url": "https://sanctionscope.com/api/v1/party/ofa%3A35096"
  }]}]
}

Hitting OFAC's own file would have told you about the United States. The authorities array is the part that takes work to build, and it is why 8,612 of these parties resolve to one record here rather than five.

What it is used for

Onboarding customers and releasing payments. Screen at signup, again before a payout clears. One call covers every authority, so there is no separate OFAC, EU and UK check to reconcile afterwards. POST screen

Shipping goods or technology abroad. US export-control lists sit alongside OFAC here: the BIS Entity List, Denied Persons, Unverified and Military End User lists, and State Department debarments. Screening that only covers OFAC misses every one of them, and most cheap screening only covers OFAC. POST screen

Operating under more than one regime. US, EU and UK designations have diverged since 2022. The authorities field answers, in one call, whether a party is a problem for your London entity, your New York entity, or both. GET search

Fixing a vessel or checking a trade counterparty. Ships are listed as parties with the IMO number in the record, so a vessel resolves the same way a company does. GET search

Onboarding investors and fund subscribers. A subscription list goes through in one batch, and the response lines up with your input so it can go on the file as evidence. POST screen

Watching a book you already have. The counterparty who cleared in January and is designated in March is the one that matters. Names left under watch are rechecked against every nightly build. POST watchlist

What is loaded right now

Every list is downloaded fresh from the publishing authority each night. If a download or parse fails, that authority is marked failed here rather than quietly serving yesterday's copy.

AuthorityListRecordsThis build
United StatesConsolidated Screening List (OFAC SDN and non-SDN, BIS Entity, Denied Persons, Unverified and MEU, State Department)26,186loaded
European UnionConsolidated Financial Sanctions List6,269loaded
United KingdomUK Sanctions List (FCDO)6,420loaded
United NationsSecurity Council Consolidated List1,007loaded
AustraliaDFAT Consolidated List4,010loaded
CanadaSEMA and autonomous sanctions5,708loaded
SwitzerlandSECO sanctions list7,100loaded
JapanMinistry of Finance asset-freeze list2,897loaded

All figures from the build of 2026-10-31. 36,303 merged parties in total, 8,612 carried by more than one authority, 9,188 relationships taken from the official records. meta.json carries the same figures for machines.

What it costs

Screening is free, unlimited, and needs no key. Unlimited requests, 50 names in each, every static file, and an in-browser screener with no limit at all. That is not a trial. If screening is what you need, you are done, and nothing below applies to you.

Pro is $19.99 a month and exists for one reason: it keeps watching after you stop asking.

Pro adds 
Monitoring
Leave names under watch. Every nightly build rechecks them against all eight lists and raises an alert by email or webhook when a watched name starts matching, when an existing match is amended, and when one is delisted. The counterparty who cleared in January and is designated in March is the case this exists for.
Included
Deeper candidate search
200 possible matches scored per name instead of 60, which surfaces more distant spelling variants.
200 per name
Bigger batches
For a client book or a subscription list going through in one pass.
200 names per request
100 search results
Commercial use and supportIncluded
Subscribe, $19.99 a monthManage subscription

Cancel any time; access runs to the end of the paid period. Keys are issued on the page you land on after checkout and can be re-shown by reopening that link. Send the key as an x-api-key header rather than ?key=, which leaks into logs and browser history. GET me confirms the tier. Keys deactivate automatically when a subscription ends. Tax is calculated at checkout.

Monitoring

Screening answers a question about today. Monitoring answers it every night without being asked. Post the names you want watched; every nightly build rechecks them against all eight lists and raises an alert when something changes.

# put a book of counterparties under watch
curl -X POST "https://sanctionscope.com/api/v1/watchlist" -H "content-type: application/json" \
  -H "x-api-key: YOUR_KEY" \
  -d '{"label": "Counterparties Q3",
       "names": ["Acme Trading LLC", "Ivan Petrov"],
       "threshold": 0.85,
       "email": "[email protected]"}'

# what changed since a date
curl "https://sanctionscope.com/api/v1/alerts?since=2026-09-01" -H "x-api-key: YOUR_KEY"

Matching runs inside the nightly build rather than at request time, so the response to a POST is a confirmation and the matches appear on the watchlist itself. Set near to true to also hear about matches below your threshold, which helps while you are calibrating. Deleting a watchlist deletes its names and its match history with it.

Quick start

# search across all eight lists
curl "https://sanctionscope.com/api/v1/search?q=sberbank"

# one record
curl "https://sanctionscope.com/api/v1/party/ofa:31695"

# screen a list of names (50 per request free, 200 with a Pro key)
curl -X POST "https://sanctionscope.com/api/v1/screen" -H "content-type: application/json" \
  -d '{"names":["Sberbank of Russia","John Smith"],"threshold":0.85}'

# rate limit: 120 requests a minute per IP, then 429 with a retry-after header
import requests
BASE = "https://sanctionscope.com/api/v1/"
hits = requests.get(BASE + "search", params={"q": "sberbank"}).json()["results"]
rec  = requests.get(BASE + "party/" + hits[0]["id"]).json()
scr  = requests.post(BASE + "screen", json={"names": ["Sberbank of Russia", "John Smith"]}).json()
for r in scr["results"]:
    print(r["name"], "->", [(m["name"], m["score"]) for m in r["matches"]])
const BASE = "https://sanctionscope.com/api/v1/";
const hits = (await (await fetch(BASE + "search?q=sberbank")).json()).results;
const rec  = await (await fetch(BASE + "party/" + encodeURIComponent(hits[0].id))).json();
const scr  = await (await fetch(BASE + "screen", {
  method: "POST", headers: {"content-type": "application/json"},
  body: JSON.stringify({names: ["Sberbank of Russia", "John Smith"]})
})).json();
Name matching is approximate by design. A match means "look closer", never "this is the same party", and an empty result is not a clearance. Ownership is not resolved: a company owned at or above 50 percent by designated parties is blocked under the OFAC 50 percent rule even though it appears on no list, and it will not be returned here. Confirm against the official record, linked from every result, before acting. Full terms on the terms page.

Reference

Endpoints

EndpointWhat it does
GET searchName and alias search across all lists, accent-insensitive, word order ignored, scored 0 to 1. ?q= and &limit=.
GET party/<id>One merged party. Ids look like ofa:12345, eu:EU-123, uk:UK-RUS0001.
POST screenBody {"names": [...], "threshold": 0.85}. Up to five scored matches per name, and an empty array for a name with none, so the response lines up with your input. Names are processed in memory and not stored. For large lists use the in-browser screener, which runs on your own machine and has no limit.
GET watchlist
POST watchlist
GET watchlist/<id>
DELETE watchlist/<id>
Names monitored against every nightly build. Pro.
GET alertsAdditions, amendments and delistings affecting watched names. ?since=, and filter by type or list_id. Pro.
GET meTier and limits for the supplied key.

Matching and thresholds

Names are compared after accents are stripped and punctuation flattened, with word order ignored, so Putin Vladimir and Vladimir Putin score alike and the French spelling Poutine still matches. Each word is then weighted by how rare it is across the corpus: a surname carried by hundreds of designated parties counts for little, a distinctive one counts for a lot. Words in the listed name that your query does not account for pull the score down, so matching two words of a four-word name is weak even when both are exact.

ThresholdWhat to expect
0.90 and upClose to exact. Few false positives, will miss transliteration variants.
0.85The default. Catches spelling and word-order variation without burying you.
0.75 to 0.80A wider net for a review queue. Expect more to clear.
Below 0.70Research only, not a screening posture.

Scores are comparable between requests but not across versions of the matcher; when the scoring changes it is noted here.

Limits and errors

StatusWhat it means
400The body was not JSON, or names was missing or empty.
401The key is unknown or no longer active.
403A Pro feature was requested without a Pro key.
405Wrong method. Screening is POST, the rest are GET.
413Too many names for your tier in one request; the cap is in the response.
429Over 120 requests a minute from one IP. A retry-after header says how long to wait.

Errors carry an error field in plain language and, where there is one, a hint saying what to do instead. A very large batch can return partial: true, meaning some names were matched against a reduced candidate set; split the batch and treat that result as incomplete.

Static files

Regenerated nightly. Cache them; they change once a day.

PathContents
meta.jsonBuild time, counts, per-authority status, program and country lists
parties.jsonManifest of parts (8,000 parties each) holding every merged party with addresses, aliases, programs, authorities, coordinates and links
index.jsonCompact index for client-side search: id, name, aliases, type, country, authorities, programs
changes.json
feed.xml
Additions and removals by date, as JSON and RSS
programs.jsonPrograms with counts; programs/<slug>.json for parties in one program
countries.jsonCountries with counts; countries/<iso2>.json for parties in one country
openapi.jsonMachine-readable description

Record shape

{
  "id": "ofa:31695", "n": "Central Bank of the Russian Federation", "t": "Entity",
  "au": ["US","EU","UK","AU","CA","CH","JP"],          authorities listing this party (merged by name)
  "p": ["RUSSIA-EO14024","EU:RUS", ...],     programs; non-US prefixed by authority
  "s": "OFAC other", "list": "Sectoral Sanctions Identifications List ...",
  "cc": "RU", "lat": 55.75, "lon": 37.61, "city": "Moscow",
  "inf": null,                                set when the location was inferred, not from an address
  "a": [...addresses], "alt": [...aliases], "nat": [...], "dob": "", "ids": "...", "rem": "...",
  "ly": 2022,                                 earliest published listing year across records
  "recs": [{"au":"EU","url":"...","p":[...],"listed":"2022-02-25"}, ...],   one per authority when merged
  "links": ["ofa:16681", ...],                "Linked To" relationships
  "page": "...", "map": "...#p=ofa:31695"
}

Terms

Source data are official government publications; the merged form is released CC0. No uptime guarantee on the free tier; please cache and keep request volume reasonable. Support for Pro subscribers at [email protected].