Sanctions List Screening API: EU, UN, OFAC SDN, UK
Pricing
from $2.55 / 1,000 name screeneds
Sanctions List Screening API: EU, UN, OFAC SDN, UK
Bulk-screen people and companies against official EU, UN, OFAC SDN and UK sanctions lists: fuzzy match score, matched alias, programs, birth dates, source link, new-listing alerts. No API key, no login. MCP-ready for AI agents. Pay per result, no monthly rental. $3 per 1,000 names screened.
Pricing
from $2.55 / 1,000 name screeneds
Rating
0.0
(0)
Developer
ABM
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Sanctions List Screening API: EU, UN, OFAC SDN & UK name check
$3 per 1,000 names screened ($0.003 per name). No subscription, no API key, no login. Blank, duplicate and invalid inputs are free, and so is any run where an official list could not be downloaded.
This Actor screens people and companies in bulk against the official consolidated sanctions lists:
| Key | List | Publisher |
|---|---|---|
eu | EU consolidated list of persons, groups and entities subject to financial sanctions (FSF) | European Commission |
un | UN Security Council Consolidated List | United Nations |
ofac | Specially Designated Nationals and Blocked Persons (SDN) | US Treasury, OFAC |
ofac-nonsdn | OFAC consolidated non-SDN lists (SSI, NS-MBS, CAPTA…) | US Treasury, OFAC |
uk | UK Sanctions List (the only official UK list since 28 January 2026) | UK FCDO |
For each name it uses fuzzy matching (transliteration, word order, legal suffixes such as LLC / OOO / GmbH, typos) and returns a 0–1 score, the alias that matched, the sanctions programmes, dates of birth, nationalities, listing date and a link to the official record. A new listings mode reports people and entities added to the lists, for daily schedules.
What you get
- One dataset row per screened name:
status(match/possibleMatch/noMatch),topScore,matchCount, best match, and the list ofmatches. - Each match carries
list,listId,referenceNumber,name,matchedAlias,score,matchType,entityType,programs,listedOn,birthDates,nationalities,countries,remarksandsourceUrl. listVersions: the publication date of each list you were checked against, which you can keep as audit evidence.summary: a one-sentence plain-text verdict, ready to pass to an LLM or paste into a case note.- A CSV report (
screening-report.csv, one row per match) in the run's key-value store. - Names in any script work: Latin, Cyrillic (
Евгений Пригожин), Arabic, Chinese… The input and every list alias are compared both in their original script and transliterated to Latin.
How much does it cost?
Pay per event: screening-checked = $0.003 for each unique name screened against the lists, whether it is
clear or a hit, because a "no match" is the compliance evidence you need. new-listing-found = $0.003 for each new
listing reported in monitoring mode.
| Volume | Price |
|---|---|
| 100 names (one supplier onboarding batch) | $0.30 |
| 1,000 names | $3.00 |
| 10,000 customers, rescreened monthly | $30.00 per month |
| Daily new-listings alert, ~20 new listings per week | about $0.25 per month |
There is no monthly rental. Blank lines, duplicates (wagner group = Wagner Group) and inputs with no letters or
digits are skipped for free. If a selected list cannot be downloaded, the run stops and nothing is charged (see
failOnListError). The Actor respects your maximum charge per run: it stops cleanly when the budget is used up and
never returns unpaid results.
Input
{"mode": "screen","names": ["Wagner Group", "Acme Trading LLC", "Евгений Пригожин"],"lists": ["eu", "un", "ofac"],"threshold": 0.85,"entityType": "any","maxMatchesPerName": 5}
| Field | Default | Meaning |
|---|---|---|
mode | screen | screen = check names; newListings = report recent additions to the lists |
names / namesText | – | names to screen (array, or one per line pasted from a spreadsheet) |
lists | eu, un, ofac | any of eu, un, ofac, ofac-nonsdn, uk |
threshold | 0.85 | minimum score (1.0 = exact name only, 0.75 = broad) |
entityType | any | person, entity (organisations, vessels, aircraft) or any |
maxMatchesPerName | 5 | best records returned per name |
onlyNew | false | scheduled runs: only names with a match not seen before, or only listings added since the last run |
newListingsDays | 7 | new listings mode: EU / UN / UK records listed in the last N days |
stateKey | default | separate memory for each schedule or portfolio |
cacheHours | 6 | reuse lists already downloaded in your account for this many hours (0 = always download) |
failOnListError | true | stop at no charge if a list is unavailable, instead of screening against the other lists |
Output (one screened name)
{"recordType": "screening","inputName": "Wagner Group","normalizedName": "wagner group","status": "match","topScore": 1.0,"matchCount": 2,"bestMatchName": "Wagner Group","bestMatchList": "eu","bestMatchPrograms": ["RUS", "LBY"],"matches": [{"list": "eu","listId": "7383","referenceNumber": "EU.7383.42","name": "Wagner Group","matchedAlias": "Wagner Group","score": 1.0,"matchType": "exact","entityType": "entity","programs": ["RUS", "LBY"],"listedOn": "2021-12-13","birthDates": [],"nationalities": [],"countries": ["RUSSIAN FEDERATION"],"remarks": "Unincorporated Russia-based private military entity…","sourceUrl": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=…","isNew": null},{"list": "ofac","listId": "25393","name": "PMC WAGNER","matchedAlias": "WAGNER GROUP","score": 1.0,"matchType": "exact","entityType": "entity","programs": ["UKRAINE-EO13660", "RUSSIA-EO14024"],"sourceUrl": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=25393"}],"listsChecked": ["eu", "un", "ofac"],"listsFailed": [],"incomplete": false,"listVersions": {"eu": "2026-10-23", "un": "2026-10-22", "ofac": "2026-10-20"},"threshold": 0.85,"checkedAt": "2026-10-24T08:00:00Z","summary": "Wagner Group: match - 2 record(s) scored >= 0.85. Best: \"Wagner Group\" on EU (RUS, LBY), score 1.0, via alias \"Wagner Group\"."}
(Values shown are illustrative; IDs and dates come from the live lists.)
A clear name looks like this: {"inputName": "Acme Trading LLC", "status": "noMatch", "topScore": 0.0, "matchCount": 0, "matches": [], "summary": "Acme Trading LLC: no match >= 0.85 in EU, UN, OFAC (versions: eu=2026-10-23, un=2026-10-22, ofac=2026-10-20)."}
A new listing (mode newListings):
{"recordType": "newListing","list": "eu","listId": "171234","name": "Example Shipping Ltd","aliases": ["Example Shipping Ltd", "ООО Пример Шиппинг"],"entityType": "entity","programs": ["RUS"],"listedOn": "2026-10-21","reason": "listedWithinDays","sourceUrl": "https://eur-lex.europa.eu/…","summary": "New on EU (listedWithinDays): Example Shipping Ltd [entity], programs RUS, listed 2026-10-21."}
Use cases
1. KYC onboarding at a payment company: screen every new merchant
A compliance analyst at a fintech or payment institution screens the 50 to 300 merchants and beneficial owners signed up each day before they are activated.
Input:
{"names": ["Sovcomflot", "Ivan Petrov", "Brightline Logistics FZE", "Alisher Usmanov"], "lists": ["eu", "un", "ofac", "uk"], "threshold": 0.85, "maxMatchesPerName": 3}
Result extract:
[{"inputName": "Alisher Usmanov", "status": "match", "topScore": 1.0, "bestMatchList": "eu", "bestMatchPrograms": ["UKR"]},{"inputName": "Brightline Logistics FZE", "status": "noMatch", "matchCount": 0}]
Next step: noMatch merchants are activated automatically. match and possibleMatch rows go to a manual review queue
together with birthDates and nationalities so the analyst can rule out a namesake. The listVersions field is
stored in the customer file as evidence. 300 merchants a day ≈ $0.90 a day.
2. Export control: check freight buyers and consignees before shipping
A trade compliance officer at an industrial exporter checks the 1,200 buyers, consignees and freight forwarders in the ERP every month, including vessels.
Input:
{"namesText": "Rosoboronexport\nIran Shipping Lines\nMahan Air\nGlobal Parts Trading GmbH", "lists": ["eu", "un", "ofac", "ofac-nonsdn"], "entityType": "entity", "threshold": 0.88}
Result extract:
[{"inputName": "Mahan Air", "status": "match", "bestMatchList": "ofac", "bestMatchPrograms": ["SDGT", "IFSR"]},{"inputName": "Global Parts Trading GmbH", "status": "noMatch"}]
Next step: the CSV report (screening-report.csv) is attached to the monthly export-control audit file, and any order
for a matched party is blocked in the ERP. 1,200 parties a month = $3.60.
3. Daily watch: alert the team when the EU or OFAC adds new names
The head of AML at a bank or crypto exchange wants a Slack message every morning listing the people and entities sanctioned the day before, plus re-screening of the 20,000-customer base each night where only new hits are reported.
Input of the morning alert (scheduled daily):
{"mode": "newListings", "lists": ["eu", "un", "ofac", "uk"], "onlyNew": true, "stateKey": "daily-alert"}
Input of the nightly re-screening (only new hits are delivered and paid for):
{"names": ["…20,000 customer names…"], "lists": ["eu", "un", "ofac", "uk"], "onlyNew": true, "stateKey": "customer-base", "threshold": 0.9}
Result extract:
[{"recordType": "newListing", "list": "ofac", "name": "EXAMPLE TRADING CO LTD", "programs": ["RUSSIA-EO14024"], "reason": "notInPreviousSnapshot"}]
Next step: n8n sends each row's summary to Slack, and a match against the customer base opens a ticket in the case
management tool. With about 30 new listings a week, the alert costs about $0.40 a month. The first run of each stateKey
only saves a baseline and is free.
4. Due diligence by an AI agent
A lawyer or M&A analyst asks Claude: "Are the shareholders of this target company sanctioned anywhere?" The agent
calls the Actor through MCP with the five shareholder names and gets back the summary field of each name, with the
official links to cite.
Use with AI agents (MCP)
The Actor is MCP-ready for Claude, Cursor, ChatGPT and any agent that can call an MCP server:
https://mcp.apify.com/?actors=<username>/ecb-style-eu-sanctions-list
Each result has a plain-text summary, and every match carries a sourceUrl, so agents can explain and cite their
answer. A clear name has status: "noMatch" and a summary stating which list versions were checked.
API examples
Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("<username>/ecb-style-eu-sanctions-list").call(run_input={"names": ["Wagner Group", "Acme Trading LLC"],"lists": ["eu", "un", "ofac"],"threshold": 0.85,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["inputName"], item["status"], item["topScore"], item["bestMatchName"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('<username>/ecb-style-eu-sanctions-list').call({names: ['Wagner Group', 'Acme Trading LLC'],lists: ['eu', 'un', 'ofac'],threshold: 0.85,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((i) => console.log(i.inputName, i.status, i.topScore));
HTTP (synchronous, returns the results directly)
POST https://api.apify.com/v2/acts/<username>~ecb-style-eu-sanctions-list/run-sync-get-dataset-items?token=<APIFY_TOKEN>{"names": ["Wagner Group"], "lists": ["eu", "un", "ofac"]}
Integrations (Make, Zapier, n8n, Google Sheets)
- n8n: Schedule Trigger (daily 07:00) → Apify: Run Actor with
{"mode": "newListings", "onlyNew": true, "stateKey": "daily-alert"}→ Apify: Get dataset items → Slack: Send message with{{$json.summary}}. - Make: Google Sheets: Watch rows (new customer) → Apify: Run an Actor (synchronous) with
{"names": ["{{name}}"]}→ Router:status = noMatch→ mark the customer approved; otherwise → email the compliance team. - Zapier: New row in Google Sheets → Apify: Run Actor → Filter
statusis notnoMatch→ Gmail / Teams. - Google Sheets: export the dataset as CSV or use the Apify Google Sheets integration to append the results to a sheet.
How matching works
- Names are normalised: case, accents, punctuation, word order, and legal forms (LLC, Ltd, GmbH, OOO, JSC, FZE…) are ignored.
- Each name is compared in its original script and transliterated to Latin (Cyrillic, Greek, Arabic, Chinese…).
- Score = best of: exact match (1.0), character similarity of the sorted words (catches typos and transliteration variants), and "all words found in a longer alias" (0.85–0.95, e.g.
Prigozhin→Yevgeniy Viktorovich PRIGOZHIN). status:matchif the top score is ≥ 0.97,possibleMatchif it is between your threshold and 0.97,noMatchotherwise.
FAQ
Where does the data come from? Directly from the official files published by the European Commission (FSF), the UN Security Council, the US Treasury (OFAC Sanctions List Service) and the UK FCDO. No third-party aggregator is used.
How fresh is it? The lists are downloaded at run time. With the default cacheHours: 6, runs in your account within
6 hours reuse the copy already downloaded and parsed. Every result states the version (listVersions) it was checked against.
Do I pay for names that are clear? Yes: each unique name screened costs $0.003 whatever the outcome, because "not on any list as of version X" is the result you file. Duplicates, blank lines and failed runs are free.
Can I reduce false positives? Raise threshold to 0.9–0.95, set entityType, and compare birthDates /
nationalities before escalating.
Does it replace a compliance officer? No. It finds candidate matches; a person must confirm them. A fuzzy match is not a legal determination.
Is UK OFSI supported? The OFSI Consolidated List closed on 28 January 2026. Use uk, the FCDO UK Sanctions List
that replaced it.
Limitations
- OFAC files do not publish a listing date: in
newListingsmode, OFAC additions are found by comparing with the previous run's snapshot (the first run sets the baseline). - The checks cover sanctions lists only. PEP lists, adverse media and ownership rules (such as OFAC's 50% rule) are not included.
- Matching is name-based. Dates of birth and nationalities are returned for your review but are not used in the score.
- Very short or very common single words (e.g.
Bank) can return many possible matches. - If an official site is down, the run fails at no charge. With
failOnListError: false, the run continues on the lists that loaded and every result is flaggedincomplete: true. - The actor runs in 512 MB by default. If you select all five lists (including
ukandofac-nonsdn) and the run runs out of memory, raise the run memory to 1024 MB.
En français : filtrage des listes de sanctions UE, ONU, OFAC
Cet Actor vérifie en masse des noms de personnes ou de sociétés contre la liste consolidée des sanctions financières de l'UE, la liste du Conseil de sécurité de l'ONU, la liste OFAC SDN et la liste britannique. Il sert au contrôle de gel des avoirs (LCB-FT, KYC, criblage de tiers, conformité export). La correspondance est approximative (translittération, ordre des mots, formes juridiques) et chaque nom reçoit un score de 0 à 1. Prix : 0,003 $ par nom criblé.
Entrée : {"names": ["Groupe Wagner", "Société Exemple SARL"], "lists": ["eu", "un", "ofac"], "threshold": 0.85}
Résultat : {"inputName": "Groupe Wagner", "status": "possibleMatch", "topScore": 0.96, "bestMatchName": "Wagner Group", "bestMatchList": "eu", "listVersions": {"eu": "2026-10-23"}}
Le mode newListings programmé chaque jour signale les nouvelles inscriptions sur les listes (mesures restrictives UE, ONU, OFAC). Le registre national des gels
de la DG Trésor n'est pas couvert, mais il reprend en grande partie les mesures UE et ONU.