Sanctions List Screening – EU, UN & UK Lists avatar

Sanctions List Screening – EU, UN & UK Lists

Pricing

from $50.00 / 1,000 name screeneds

Go to Apify Store
Sanctions List Screening – EU, UN & UK Lists

Sanctions List Screening – EU, UN & UK Lists

Sanctions list screening against the EU consolidated list, the UN Security Council list and the UK Sanctions List: fuzzy name matching with transliteration of Cyrillic and Arabic, aliases, dates of birth and identifiers, and the full match evidence for your audit file.

Pricing

from $50.00 / 1,000 name screeneds

Rating

0.0

(0)

Developer

Leyten Data

Leyten Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

What does Sanctions List Screening do?

Sanctions list screening (sanctiescreening) for fintech onboarding, KYB, accountants and exporters: screen names of persons and companies against the EU consolidated sanctions list, the UN Security Council Consolidated List and the UK Sanctions List in one call, with the OFAC SDN and Consolidated lists available as a fourth source. Fuzzy name matching with transliteration of Cyrillic, Arabic, Greek and Hebrew script, alias handling, dates of birth and identifiers as evidence, and a match explanation you can put in an audit file.

The lists are free. The matching is the work.

Every sanctions list this Actor screens against is published for exactly this purpose and costs nothing to download. What costs time is everything around it:

  • Five files, four formats. EU FSF XML 1.1 (26 MB), the UN consolidated XML (2 MB), the UK FCDO Designations XML (22 MB) and OFAC's SDN and Consolidated XML (29 MB and 1 MB): 33,465 listed parties and 99,994 names in the files of 17 September 2026, each with its own way of expressing aliases, approximate dates and identifiers. The UK spreads one name over six parts, OFAC writes a date of birth as "10 Dec 1948", the EU repeats a name per regulation language.
  • Names that do not look alike. Влади́мир Влади́мирович ПУ́ТИН, Vladimir Putin and Wladimir Putin are one person. Mohammed, Muhammad, Mohamed and محمد are one name. Sberbank, Сбербанк and PUBLIC JOINT STOCK COMPANY SBERBANK OF RUSSIA are one bank. Exact matching misses them; naive fuzzy matching drowns you in false positives.
  • Aliases of different quality. Each list marks the names it considers too thin to identify someone on their own: OFAC calls them weak a.k.a.s, the UN low quality, the UK low strength, the EU sets strong="false". Next to those sit former names and spelling variants. A screening tool must weigh all of them and say which one it matched.
  • Keeping up. OFAC and the UK publish changes several times a week. Screening against last month's copy is not screening.

This Actor does that work on every run: it fetches each list from its publisher (conditionally, so unchanged lists are confirmed rather than re-downloaded), indexes every name in every script, and screens your names with an explanation per match.

How the matching works

  1. Normalise. Lower case, accents removed, punctuation dropped, honorifics (Sheikh, Dr., Haji) removed. Names in Cyrillic, Greek, Arabic and Hebrew script are transliterated to Latin, on both sides, so Сбербанк meets Sberbank and طارق عزيز meets Tariq Aziz. Names in scripts that cannot be transliterated (Chinese, Korean, Thai and others) are matched within their own script.
  2. Weigh. Particles (al-, bin, de, van), legal forms (LLC, OOO, PJSC, GmbH) and generic words (company, bank, trading) weigh less than distinctive words.
  3. Compare tokens. Each word of your name is compared with each word of the listed name using Jaro-Winkler similarity and a folded spelling key that collapses transliteration variants (mohammed, muhammad, mohamed share one key; yevgeny, evgeniy, evgueni share another). Word order does not matter.
  4. Score the name. How much of your name is explained, reduced by how much of the listed name is left unexplained. A patronymic costs a few points; three unknown words cost many. One word on its own is never a confident match: against a longer listed name a person stops at 70 and an organisation at 84 when the word is identical (69 when it is only similar), and one word against a one-word listed name stops at 84 unless the spellings nearly agree. So "Putin" alone lands in the review band and "Vladimir Putin" on match. Send the whole name.
  5. Score the party. Every name of the listed party is scored; the best one counts. Weak aliases lose 8 points. A matching identifier lifts the score to 100, and the other adjustments still apply on top: a date of birth that matches adds 8 (year only: 3) and one that contradicts every listed date subtracts 25, a country adds or subtracts 3. A party whose passport number you sent but whose date of birth differs ends at 75, not 100.
  6. Decide. Scores above your threshold are matches, scores in the band below are possible matches for review, and everything else is no match.

Thresholds are yours to set. Against the lists of 17 September 2026 the default 85 keeps ordinary names out of the match band ("Jan de Vries" reached 44, "Peter Müller" 45, "John Smith" 50, "Deutsche Bank AG" 68, "Coolblue B.V." 66) while transliteration variants and typos still match: "Wladimir Putin" 96, "Сбербанк" 100. Names that are common in a region the lists cover heavily can reach the band on their own ("Maria Garcia" reaches exactly 85 on the OFAC SDN list, against the primary name of a listed person that carries both words; 50 on the EU, UN and UK lists), which is why a date of birth or country is worth sending with them. At 75 you review more; at 95 only near-identical spellings match.

The lists and how they are kept current

KeyFiles screenedPublisherUpdatesTerms
euEU consolidated financial sanctions list (FSF)European Commission, DG FISMApublished once a day when there are changesCreative Commons Attribution 4.0 (Commission reuse policy)
unUN Security Council Consolidated ListUnited Nations Security Councilafter every committee decision, with a press releasePublished to facilitate implementation of Security Council measures; UN website terms apply
ukUK Sanctions List (FCDO)Foreign, Commonwealth & Development Officewhenever designations change, often several times a weekOpen Government Licence v3.0
ofacOFAC SDN List, OFAC Consolidated (non-SDN) ListUS Department of the Treasury, Office of Foreign Assets Controlon every sanctions action, usually several times a weekUS Government work, public domain (CC0 on data.gov)

Each list is downloaded from the publisher on every run with a conditional request (ETag or Last-Modified, or the file's own generation stamp for the EU, whose server ignores conditional requests). Unchanged lists are confirmed and reused from a cache in your own Apify account; changed lists are parsed again. If a publisher is unreachable, a copy fetched within the last 7 days is used and the record says so (confirmedCurrent: false); without such a copy the run stops before charging anything, because a screening against three of four lists must never look like a screening against four.

The Commission publishes a new EU file only when there is a change, so its generation date can be weeks old; listsScreened shows the publisher's date per file, and the run log warns when a file is older than three weeks.

Features

  • EU, UN and UK sanctions list screening in one run, with OFAC SDN and Consolidated as an optional fourth list
  • Fuzzy name matching with transliteration of Cyrillic, Arabic, Greek and Hebrew, on both sides
  • Alias-aware: primary names, aliases, weak aliases, former names and variants, each weighed and named in the evidence
  • Structured subjects: date of birth, country and identifier (passport, registration number, IMO number, crypto address) raise or lower the score
  • Match evidence per hit: token-by-token agreement, the transliteration used, every adjustment with its points, and every name of the listed party with the score it reached
  • Lists fetched live from the publishers on every run, confirmed conditionally, never silently stale
  • Audit trail in one record: which lists at which version, what matched, why, and what did not
  • Nothing kept: screened names stay in your run's input and dataset; nothing carries over to the next run
  • Runs through the Apify API, on a schedule, or from Make, Zapier and n8n

Use cases

Fintech and payment providers: screening at onboarding and before payouts

Screen new customers and beneficiaries in batches from your backend. Branch on decision; store the record as evidence.

// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// counterparties: [{ id: 'C-1001', name: 'Coolblue B.V.', type: 'organisation', country: 'NL' }, ...]
const run = await client.actor('lwsdjfls/eu-sanctions-screening').call({
subjects: counterparties.map((c) => ({ name: c.name, type: c.type, dateOfBirth: c.dateOfBirth, country: c.country, reference: c.id })),
minScore: 85,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems({ clean: true });
const alerts = items.filter(({ payload }) => payload.decision === 'match' || payload.decision === 'possible-match');
for (const { payload } of alerts) {
const best = payload.matches[0];
console.log(`${payload.reference}: ${payload.decision} ${payload.score}${best.listName} ${best.listReference} ${best.entityName} (via "${best.matchedName}")`);
await openReviewCase(payload.reference, payload); // the whole record is the audit trail
}
// A partial run leaves names unscreened. They have no matches and are not alerts, so handle them apart:
// screen them in another run before you treat this batch as checked.
const unscreened = items.filter(({ payload }) => payload.decision === 'skipped');
if (unscreened.length > 0) {
console.warn(`${unscreened.length} of ${items.length} names were not screened: ${unscreened[0].payload.statusReason}`);
}

500 counterparties cost $25.00 and are screened in seconds once the lists are loaded.

KYB platforms and compliance software

Call the Actor per batch or expose it behind your own endpoint. namesWeighed and evidence let your reviewers dismiss a hit with a reason ("matched a weak alias, date of birth contradicts") instead of a gut feeling.

Accountants and trust offices

Screen the client file periodically (Wwft, AMLD and similar obligations require it at onboarding and at review moments). Put the client file in subjects with your client IDs as reference, schedule the task monthly, and keep the dataset of each run. Under the Dutch Sanctiewet and Wwft you screen relations at the start and at changes; the Dutch national terrorism list is not included.

Exporters and freight forwarders

Screen buyers, consignees, banks and vessels before shipping. Vessels are listed by the UK (664) and OFAC (1,540) and aircraft by OFAC (342, in the files of 17 September 2026), typed as vessel and aircraft in the record; the EU and UN publish ships as organisations. Leave type empty for such subjects, because type accepts only person and organisation and a set type hides every other kind of party.

An identifier matches when the number agrees after case, spaces and punctuation are dropped, so a prefix is part of it: the EU publishes an IMO number as 9562233, OFAC as IMO 7406784, the UK does both. Send the spelling of the list you care about (or the same vessel twice, once with and once without the prefix), and send the ship's name as well, because a name match alone already finds it.

How to use it

  1. Put the names you want screened into Names to screen, one per line. That alone is enough for a first run, and it already handles Cyrillic and Arabic spellings, aliases and word order.
  2. Use Subjects with details instead when you know more than the name. Adding a date of birth, a country or an identifier raises the score of a genuine hit and pushes down a namesake, and the reference you pass comes back on the record so you can match the result to your own customer number without a lookup table.
  3. Choose which Lists apply to you, then save the run as a task and schedule it. Screening is not a one-off: lists change, and a counterparty that was clean at onboarding may not be next month. Point Webhook URL at your own endpoint to be told the moment a run produces a match.

The screening view is one row per name you submitted, including the ones that matched nothing, which is exactly what an audit file needs. The matches view opens up each hit: which list, which listed party, which alias matched, and the score with its breakdown in evidence.adjustments, so you can show why a name scored what it scored.

Understand what a match is. This tool reports similarity against published lists; it does not decide anything. A hit is a signal for a human to review, never a conclusion that a person or company is sanctioned, and a clean result is not legal advice that you may trade.

curl "https://api.apify.com/v2/acts/lwsdjfls~eu-sanctions-screening/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"names":["Vladimir Putin","Coolblue B.V."],"lists":["eu","un","uk"],"minScore":85}'

Input

FieldWhat it doesExample
namesOne name per line: persons or organisations, in any script. Up to 50,000 lines of 300 characters; blank lines are dropped and cost nothing.["Vladimir Putin", "Сбербанк", "Coolblue B.V."]
subjectsStructured subjects: name, optional type (person or organisation only; leave it out when a vessel or aircraft could be the hit), dateOfBirth (YYYY, YYYY-MM or YYYY-MM-DD), country, identifier and your own reference. Up to 50,000 subjects, next to the lines in names.[{ "name": "Alexander Lukashenko", "type": "person", "dateOfBirth": "1954-08-30", "country": "BY", "reference": "customer-1001" }]
listsWhich official lists to screen against, at least one. Default: all four.["eu", "un", "uk", "ofac"]
minScoreScores at or above this are reported as a match. 50–100, default 85.85
reportPossibleFromListed parties scoring between this value and the match threshold are reported as possible matches for review. 40–100, default 70; a value above the match threshold leaves no review band.70
includeWeakAliasesAlso match names the lists themselves call weak, low-quality, low-strength or non-strong aliases; such matches lose 8 points and are marked. Default on.true
maxMatchesPerNameThe best-scoring listed parties to include per screened name. 1–25, default 5.5
maxNamesPerRunCaps the charged screenings in one run, 1–100,000, default 10,000. Names above the cap are not screened or charged: each gets a free skipped record (within the bound under Output), the log says how many and the run is marked partial. A run also stops, the same way, when its results fill the memory set aside for them (see Output).10000
webhookUrlReceives one POST at the end of every run that wrote at least one record, with a dataset link and up to 50 one-line results (name, decision, score); a public http(s) URL, stored encrypted.https://hooks.example.com/screening
{
"names": ["Vladimir Putin", "Сбербанк", "Bank Melli Iran", "Coolblue B.V."],
"subjects": [
{ "name": "Alexander Lukashenko", "type": "person", "dateOfBirth": "1954-08-30", "country": "BY", "reference": "customer-1001" },
{ "name": "Petrel 8", "identifier": "IMO 9562233", "reference": "vessel-77" }
],
"lists": ["eu", "un", "uk", "ofac"],
"minScore": 85,
"reportPossibleFrom": 70
}

A type narrows the search to persons or to organisations and hides parties of every other kind, so ships and aircraft need the field left out. A dateOfBirth that differs from every listed date lowers the score. An identifier lifts a party to 100 when the number agrees after case, spaces and punctuation are dropped; the other adjustments still apply on top.

Output

One record per distinct name you send: repeated identical entries (the same name, ignoring case and surrounding spaces, with the same type, date of birth, country, identifier and reference) are screened and charged once.

Each record is an envelope around one screening: id and scope identify the name within the run (input:1, input:2, …), summary is the one-line result, hash fingerprints the payload, scrapedAt and firstSeenAt say when it was produced, and payload holds the screening itself. Because nothing is kept between runs, changeType is always added, previousHash is null, changes is empty and diffText is null: a record is a fresh screening, never a diff against an earlier one.

The payload holds:

  • decision: match (score at or above your threshold, default 85), possible-match (between 70 and the threshold), no-match, or skipped (no result and no charge: not screened, or its result failed validation; statusReason says why)
  • score: the best score over all lists, 0–100, or null when no listed party reached reportPossibleFrom and for a skipped name
  • matches: the best-scoring listed parties, each with:
    • matchDecision and matchScore: the decision and the score of this one match, named apart from the record's own decision and score so a flat table of matches (the Matches view, a CSV or an Excel export) has one column per field
    • list, listName, listReference (EU reference number, UN permanent reference, UK unique ID, OFAC number), unReference, listingUrl (the regulation, list page or detail page the listing is published on)
    • entityName, entityType (person, organisation, vessel, aircraft), matchedName and matchedNameKind (primary, alias, weak alias, former name, variant)
    • listedOn, updatedOn, programmes (sanctions regime), reasons (reason for listing or identifying information), legalBasis
    • birthDates, countries, identifiers (passports, national IDs, registration numbers, IMO numbers, crypto addresses) as the list publishes them
    • evidence: token-by-token agreement with the method (exact, fuzzy, phonetic, initial, or unmatched for a word nothing in the listed name explains), the transliteration used on either side, and every adjustment (date of birth, country, identifier, weak alias, single token, exact script) with its points
    • namesWeighed: every name of the listed party with the score it reached, so a reviewer sees what was considered, not only what won
  • listsScreened: for each list file, the publisher's generation date, when it was fetched and whether the publisher confirmed it as current on this run
  • screenedAt, your reference, and the dateOfBirth, country and identifier you supplied

Together, one dataset record is the audit trail for one screening: which lists at which version, what matched, why, and what did not.

The charge for each name is reserved before the name is screened and billed right after its record is written to the dataset, so a run never screens more names than it may charge and never charges a name without its record. Names above maxNamesPerRun, and the names left once your spending limit is reached, are not screened and cost nothing: each gets a free skipped record with your own fields, the reason in statusReason and no list data, so a consumer that reads only the dataset sees which names were not screened (within the bound below). Filter on decision to screen those names again in another run. The run log says how many, and the run summary marks the run as partial.

Results are held in memory until they are delivered, so a run also stops screening once its results fill a sixteenth of its JavaScript heap, which is at most half the run's memory: up to 32 MB of results at the default 1 GB, up to 128 MB at 4 GB, and the run log states the bound at the start of each run. A no-match record counts for about 2.2 KB against that bound, so the default 10,000 names fit at the default memory; runs that report up to 25 listed parties per name from a low reportPossibleFrom reach the bound after a few hundred names. The names left get a skipped record too, within the bound below: no charge, a partial run. Give such runs more memory, or split the input.

Skipped records cost you nothing, but each one is a dataset write and takes memory until delivery, so their number follows what the run charged: the dataset holds a skipped record for up to 1,000 names without a result, or for 10 per name screened and charged when that is more, never more than 50,000 (reached at 5,000 charged names), and fewer once the memory set aside for results is full. A run whose spending limit cannot pay for a single name loads no list and records at most 1,000 names. Names beyond the bound get no record; the run log says how many, and they are always the last names without a result in input order (names first, then subjects).

{
"envelopeVersion": 1,
"id": "input:1",
"scope": "input:1",
"changeType": "added",
"sourceUrl": "http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2003:169:0006:0023:EN:PDF",
"scrapedAt": "2026-09-16T10:00:00.000Z",
"firstSeenAt": "2026-09-16T10:00:00.000Z",
"hash": "c978e83aef79a45bd4f2a1baa6fcc222170faaaeef96d0e74b6a6f246b0fe5a3",
"previousHash": null,
"changes": [],
"summary": "Added: Tarek Aziz: match (100)",
"diffText": null,
"payload": {
"input": "Tarek Aziz",
"name": "Tarek Aziz",
"type": null,
"dateOfBirth": null,
"country": null,
"identifier": null,
"reference": null,
"decision": "match",
"score": 100,
"statusReason": "1 listed party scored 85 or higher; review the evidence before acting.",
"matchCount": 1,
"matches": [
{
"matchDecision": "match",
"matchScore": 100,
"list": "eu",
"listName": "EU consolidated financial sanctions list (FSF)",
"entityId": "83",
"listReference": "EU.77.33",
"unReference": null,
"entityName": "Tarek Mikhail Aziz",
"entityType": "person",
"matchedName": "Tarek Aziz",
"matchedNameKind": "alias",
"listedOn": "2003-07-08",
"updatedOn": "2003-07-08",
"programmes": [
"IRQ"
],
"reasons": "UNSC RESOLUTION 1483 BASIS",
"legalBasis": "regulation 1210/2003 (OJ L169)",
"listingUrl": "http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2003:169:0006:0023:EN:PDF",
"birthDates": [
"1936-07-01"
],
"countries": [
"IQ"
],
"identifiers": [
{
"type": "Other identification number",
"number": "34409/129",
"country": null
}
],
"evidence": {
"nameScore": 100,
"queryScript": "Latin",
"queryTransliterated": null,
"matchedNameScript": "Latin",
"matchedNameTransliterated": null,
"tokens": [
{
"query": "tarek",
"matched": "tarek",
"similarity": 100,
"method": "exact"
},
{
"query": "aziz",
"matched": "aziz",
"similarity": 100,
"method": "exact"
}
],
"adjustments": []
},
"namesWeighed": [
{
"name": "Tarek Aziz",
"kind": "alias",
"script": "Latin",
"transliterated": null,
"score": 100
},
{
"name": "Tariq Aziz",
"kind": "alias",
"script": "Latin",
"transliterated": null,
"score": 92.5
},
{
"name": "Tarek Mikhail Aziz",
"kind": "primary",
"script": "Latin",
"transliterated": null,
"score": 90
},
{
"name": "Tariq Mikhail Aziz",
"kind": "alias",
"script": "Latin",
"transliterated": null,
"score": 83.3
}
]
}
],
"thresholds": {
"match": 85,
"possible": 70
},
"listsScreened": [
{
"list": "eu",
"listName": "EU consolidated financial sanctions list (FSF)",
"generatedAt": "2026-08-05T16:47:04.449+02:00",
"fetchedAt": "2026-09-15T10:00:00.000Z",
"confirmedCurrent": true,
"entities": 6
},
{
"list": "un",
"listName": "UN Security Council Consolidated List",
"generatedAt": "2026-09-14T23:00:00.818Z",
"fetchedAt": "2026-09-15T10:00:00.000Z",
"confirmedCurrent": true,
"entities": 6
},
{
"list": "uk",
"listName": "UK Sanctions List (FCDO)",
"generatedAt": "2026-09-11",
"fetchedAt": "2026-09-15T10:00:00.000Z",
"confirmedCurrent": true,
"entities": 6
},
{
"list": "ofac",
"listName": "OFAC SDN List",
"generatedAt": "2026-09-14",
"fetchedAt": "2026-09-15T10:00:00.000Z",
"confirmedCurrent": true,
"entities": 6
},
{
"list": "ofac",
"listName": "OFAC Consolidated (non-SDN) List",
"generatedAt": "2026-09-14",
"fetchedAt": "2026-09-15T10:00:00.000Z",
"confirmedCurrent": true,
"entities": 2
}
],
"screenedAt": "2026-09-16T10:00:00.000Z"
}
}

The example above was produced against the small test copies of the lists, which is why its entities counts read 6. A run against the published files reports 6,234 listed parties for the EU file, 1,011 for the UN file, 6,340 for the UK file, 19,399 for OFAC's SDN file and 481 for OFAC's Consolidated file (the files of 17 September 2026).

Pricing

EventNameWhat it meansPrice
apify-actor-startActor startCharged by Apify when a run starts: once for a run of up to 1 GB of memory, and once more for every extra GB. It covers the first five seconds of compute.$0.00005 per run up to 1 GB of memory ($0.05 per 1,000)
name-screened (primary)Name screenedOne name or entity screened against every selected list, with the match decision, score and full evidence, whether or not it matched. Never charged when a selected list could not be loaded.$0.05 per name ($50.00 per 1,000)

You pay per name, not per minute: the platform compute, the list downloads and the cache are on the Actor, and there is no subscription. 100 names cost $5.00, 500 cost $25.00, 1,000 cost $50.00, and a run at the default cap of 10,000 names cannot cost more than $500.00 plus the start event Apify charges every run ($0.00005 for a run of up to 1 GB of memory, and $0.00005 more for every extra GB, so $0.00005 at the 1 GB this Actor needs).

Free, and no record of it on your bill:

  • blank lines, and every repeat of an identical entry in the same run (same name, type, date of birth, country, identifier and reference)
  • names above maxNamesPerRun, and the names left when the run reaches your spending limit or the memory set aside for results
  • every name in a run that could not load a selected list, because such a run stops before it screens anything
  • a name whose result failed validation: it is written as skipped and not charged

A run that crashes has charged for the records already in the dataset and nothing more. Resurrecting that same run screens its names again but charges only the ones it had not charged yet, so nothing is paid for twice. Starting a new run is a new screening: it charges every name in its input again, so put only the names you still need in it. A run that fails while downloading the lists costs the start event alone.

FAQ

Why does "Mohammed Ali" match a listed person?

Because several listed persons carry "Ali Mohammed" as an alias, and the two words match exactly, in any order. That is what the lists say, so the Actor reports it, marked as an alias match. Add a date of birth or country to such common names: a date of birth that contradicts every date the list gives that party takes 25 points off it, which drops it to review or out of the report. It does not silence the name, because another listed person whose dates do fit can still score a match. A common name simply needs a reviewer.

Does it cover PEPs, adverse media or national lists beyond these?

No. It screens the consolidated sanctions lists above (the OFAC entry covers both the SDN List and the Consolidated non-SDN List). PEP data and national lists such as the Dutch national sanctions list or the German BaFin list are not included.

How fast is it?

The run starts by getting the lists ready. Downloading them is the slow part (about 80 MB when all five files changed, two at a time), while a run whose cached copies are confirmed unchanged skips that entirely; parsing and indexing the five files takes a few seconds either way. Screening then runs at tens to a couple of hundred names per second, depending on how many listed parties come close to each name (a name with many near-spellings costs more than an ordinary one), so 10,000 names are minutes of work, not hours.

Is sanctions list screening with this Actor GDPR-compliant, and may the lists be used?

Use this Actor only for sanctions compliance screening: checking whether persons or organisations you deal with, or intend to deal with, appear on the sanctions lists it screens against. Do not use it to profile, locate or investigate people for other purposes, or to build or resell a sanctions database.

The names you screen are personal data. Governments publish sanctions lists precisely so that businesses can screen against them, and screening is generally justified as compliance with a legal obligation (GDPR Article 6(1)(c)) or a legitimate interest (Article 6(1)(f)); you are the controller and responsible for your own legal basis, retention and review process. This Actor is built so that it holds nothing of yours: screened names exist in the run's input and dataset, in your own Apify account under your retention settings. While the run delivers, its own key-value store holds the delivery plan with the results; the plan is deleted when the run ends. Only a run whose delivery failed keeps it in that run's store, so that resurrecting the run finishes delivery without charging twice. The Actor keeps no state between runs and writes no screened name anywhere else, including its logs and the list cache, except the one-line results (name, decision, score) it posts to a webhook you set; the list cache contains only the public lists; and from the lists only what identifies a listed party is read (names, dates and places of birth, nationalities, address countries, document and registration numbers, programmes and reasons), never phone numbers, e-mail addresses or websites.

The UK list is published under the Open Government Licence v3.0 and the EU list under the Commission's reuse policy (CC BY 4.0). The UN publishes its list "to facilitate the implementation of the measures" that member states are obliged to apply; the UN website's general terms restrict redistribution, which this Actor does not do. The OFAC lists are US Government works in the public domain; whether OFAC screening is appropriate for your organisation is your compliance team's call, and you can deselect ofac.

What are the limitations, and is a match a compliance decision?

A match is a signal that a listed party's name resembles the name you screened, with the evidence to judge it. Whether the person in front of you is that listed party, and what to do about it, remains your decision; this is not legal advice. Further limits:

  • Names in scripts other than Latin, Cyrillic, Greek, Arabic and Hebrew are matched only against listed names in the same script.
  • Dates of birth given by the lists as text ("30-35 years old") are shown but not compared.
  • OFAC's legacy XML carries no listing date; listedOn is null for OFAC entries.
  • Deselect un if your legal team prefers not to rely on the UN list's website terms.
  • One run holds its results in memory until delivery: a sixteenth of its JavaScript heap, about 32 MB at 1 GB of memory and 128 MB at 4 GB, with the bound in the run log. The remaining names are then left for another run, with a skipped record within the bound described under Output.
  • The five list files take about 280 MB of memory once loaded and indexed (33,465 listed parties with 99,994 names in the files of 17 September 2026), so a run needs at least 1 GB, which is the default; 4 GB is the maximum.
  • type narrows the search: a subject typed person or organisation can never match a listed vessel or aircraft, and those are the only two values the field takes.
  • A dateOfBirth is compared with a listed person's dates of birth only: against a listed organisation it is echoed in the record and leaves the score unchanged, so it neither helps nor hurts a subject typed organisation.
  • An identifier must agree with the listed number once case, spaces and punctuation are removed, so IMO 9562233 and 9562233 are different numbers to this Actor and the lists disagree on which form they publish.
  • Very common two-word names produce alias matches by design; use structured subjects with a date of birth to separate them.
  • Because nothing is kept between runs, there is no monitoring mode that re-screens a stored list of names: schedule a task with your current file instead.

Support

Missing a list your regulator requires? Open an issue on the Actor page.