Sanctions Screening API - OFAC, EU, UK & UN Sanctions Lists avatar

Sanctions Screening API - OFAC, EU, UK & UN Sanctions Lists

Pricing

$25.00 / 1,000 name screeneds

Go to Apify Store
Sanctions Screening API - OFAC, EU, UK & UN Sanctions Lists

Sanctions Screening API - OFAC, EU, UK & UN Sanctions Lists

Screen people and companies against the OFAC SDN, EU, UK OFSI and UN sanctions lists. Get a hit, possible_hit or no_hit verdict per name, with list, programme, reference ID, birth date, country and aliases for every match. For KYC, AML and supplier checks.

Pricing

$25.00 / 1,000 name screeneds

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Share

Sanctions Screening API - OFAC, EU, UK and UN Sanctions Lists

Sanctions screening for KYC, AML and supplier checks: this actor checks a person or company name against OFAC SDN, the EU consolidated financial sanctions list, the legacy UK OFSI list and the UN Security Council consolidated list. Results preserve each source's reference identifier and match details. A name can produce several rows because different lists and different aliases can match the same query. Each screened name also has one combined verdict, repeated on its match rows and recorded in the run summary.

UK coverage limitation: the legacy OFSI consolidated list is closed and no longer updated. This actor retains that source and its existing uk_ofsi identifiers for compatibility. It does not claim current coverage of new UK designations. See the official transition guidance. Every response includes a warning about this limitation.

You can run it from the Apify Console for a handful of names, or call this sanctions screening tool as an API from your own onboarding, payments or procurement workflow. One run accepts a single name or a batch of thousands, and every screened name costs the same flat price.

Use cases for sanctions screening

  • Customer onboarding (KYC). Screen new customers before an account is opened and store the verdict, list and reference ID with the customer record.
  • AML screening of existing customers. Re-run your customer base when lists change, and compare the new verdicts with the previous run.
  • Supplier and partner due diligence. Check vendors, distributors and their directors before signing a contract or paying an invoice.
  • Payment and transfer checks. Screen beneficiary names before releasing a transfer, with an optional country or birth date to reduce false positives.
  • Marketplaces and platforms. Check sellers or hosts at sign-up without sending each name to a separate screening vendor.
  • Research and journalism. Find which lists and programmes cover a known person or company and look up the source reference ID.

How to screen names

  1. Enter one name in name, or paste a list into names (one per line or comma separated).
  2. Optionally add country, dob or lei to narrow down matches for that batch.
  3. Choose the lists to search in lists, or keep all.
  4. Start the run. Match rows appear in the dataset, and the per-name verdicts appear in the summary record.
  5. Review every hit and possible_hit row before you take a decision. A match is a lead for review, not a legal determination.

Sanctions screening input

Supply name, names, or both. name is a single name: a comma inside it remains part of the name. Text in names is split on both commas and line breaks. An array of strings is also accepted by the API. Values are trimmed, empty entries removed and exact duplicates discarded, preserving the first occurrence. Deduplication is case sensitive. This matters for both the summary and the number of charged screening events.

The following input was used for a successful recorded run:

{
"name": "Deripaska",
"names": "Deripaska\nAl-Tikriti",
"country": "RU",
"dob": "1968-01-02",
"lists": "all",
"match_threshold": 0.88,
"refresh_lists": false
}

country, dob and lei are optional and apply to every name in the batch. Country comparison preserves the existing text matching: country codes are not automatically translated into country names. A conflicting country drops a fuzzy match below 0.97, while stronger matches remain. Birth dates are compared using years beginning with 19 or 20; a contradictory year removes the candidate. Missing dates do not establish a conflict. The identifier supplied in lei is compared with the source's reference ID, which is not necessarily a legal entity identifier.

lists defaults to all. Accepted individual lists are ofac_sdn, eu_fsf, uk_ofsi and un_sc; comma or space separated combinations also work. The legacy order is preserved: select at most 25 matches across the lists, then apply the list filter. match_threshold defaults to 0.88 and accepts 0.7 through 1.0.

refresh_lists requests an asynchronous refresh of the bulk files. The current complete snapshot remains available while the refresh is running. Check list_fetched_at on a later run to see whether a new snapshot is available. Automatic refresh is attempted daily; failed refreshes are reported as warnings. A snapshot older than 48 hours is refused instead of producing a potentially misleading clean result.

Sanctions screening output and match interpretation

The recorded input above returned 32 rows for two screened names. Here is one actual result row from that run:

{
"query_name": "Deripaska",
"query_country": "RU",
"query_dob": "1968-01-02",
"query_lei": "",
"verdict": "possible_hit",
"lists_hit": [
"eu_fsf",
"ofac_sdn",
"uk_ofsi"
],
"source": "sanctions-screening",
"fetched_at": "2026-10-06T01:50:30.725845+00:00",
"list_fetched_at": "2026-10-06T01:50:28.904978+00:00",
"match_name": "DERIPASKA, Oleg Vladimirovich",
"match_type": "fuzzy",
"score": 0.95,
"list_source": "ofac_sdn",
"programme": "UKRAINE-EO13661; UKRAINE-EO13662",
"reference_id": "24283",
"entity_type": "individual",
"entity_name": "DERIPASKA, Oleg Vladimirovich",
"aliases": [],
"dob": "02 Jan 1968",
"country": [
"Russia",
"Russia",
"United Kingdom"
],
"addresses": [
"Moscow",
"64 Severnaya Street, Oktyabrsky, Khutor, Ust-Labinsky District, Krasnodar Territory, 352332",
"5, Belgrave Square, Belgravia, London SW1X 8PH"
],
"dob_conflict": false,
"country_match": true,
"lei_match": false
}

An exact or sufficiently strong normalised match gives hit; matches reaching the configured threshold give possible_hit. A single-word query such as Deripaska can remain possible_hit because its token containment score is 0.95. This behaviour preserves the existing matcher. Names are normalised by folding diacritics, removing punctuation, and stripping common legal suffixes and noise words. Matches are sorted by descending similarity, with a stable order for equal scores.

Every row retains query_name, query_country, query_dob, query_lei, verdict, lists_hit, match_name, match_type, score, list_source, programme, reference_id, entity_type, entity_name, aliases, dob, country, addresses, dob_conflict, country_match and lei_match. The additional source and fetched_at fields identify the product and screening timestamp; list_fetched_at identifies the downloaded snapshot.

A name without a match produces one no_hit row. Its match fields are null and its alias, country and address lists are empty. This is the actual row for the input {"name": "Zyxwvut Plorkington Bakeries"}:

{
"query_name": "Zyxwvut Plorkington Bakeries",
"query_country": "",
"query_dob": "",
"query_lei": "",
"verdict": "no_hit",
"lists_hit": [],
"source": "sanctions-screening",
"fetched_at": "2026-10-06T01:50:30.774876+00:00",
"list_fetched_at": "2026-10-06T01:50:28.904978+00:00",
"match_name": null,
"match_type": null,
"score": null,
"list_source": null,
"programme": null,
"reference_id": null,
"entity_type": null,
"entity_name": null,
"dob": null,
"dob_conflict": null,
"country_match": null,
"lei_match": null,
"aliases": [],
"country": [],
"addresses": []
}

In that run the snapshot held 19,363 OFAC SDN rows, 6,241 EU rows, 5,135 UK OFSI rows and 1,011 UN rows (list_counts in the summary). This is a completed screening result, with one screening event. A source failure or an unavailable index produces a successful empty Apify run without screening charges. It never becomes a paid no_hit result.

The summary and OUTPUT records preserve names_screened, hit_names, possible_hit_names, no_hit_names, rows_emitted, list_counts, list_fetched_at, lists_from_cache, match_threshold, verdicts and errorCount. Summary verdicts cover the whole completed batch, including cursor continuation. rows_emitted describes the results before the free-plan delivery cap.

Sanctions screening compared with other options

  • Government search pages (OFAC search, the EU and UN lookups). Free and authoritative, but one list and one name at a time, without a combined verdict and without a machine-readable result you can store. This actor searches the four lists in one call and returns structured rows.
  • Downloading the bulk lists yourself. Gives full control, but you must parse four different formats, keep them current and write your own name matching. This actor does that work and shows the snapshot time in list_fetched_at.
  • Commercial sanctions screening software. Adds PEP lists, adverse media, case management and audit trails, usually with a contract and a minimum fee. This actor covers only the four official sanctions lists, priced per screened name with no subscription.
  • Other actors in the Apify Store. Several cover OFAC only, or one list at a time. This one combines OFAC SDN, EU, UK OFSI and UN, keeps each source's reference ID, and charges per name rather than per matched row.

Pricing

The existing price is $0.025 per screened name, including a completed no_hit screening. There is no start event and no charge per matched row. Two deduplicated names give two screening events even when the dataset contains 32 rows. Empty runs caused by unavailable sources or invalid input have no screening events. Free-plan users receive at most ten dataset rows, and screening event charges are capped at ten per run. Paid users retain the full results and normal per-name charges.

Batch limits

Each request processes up to page_size names, default 100 and maximum 1000, within a bounded request budget. Large batches continue with next_cursor; Apify follows these pages automatically before delivering and charging once. Direct API clients must keep the original names and filters unchanged when following a cursor. The run summary exposes incomplete work through partial and warnings. A ready index usually makes a small batch much faster than downloading all bulk files for each run.

FAQ

What does sanctions screening cover?

Only the four named source lists — OFAC SDN, the EU consolidated list, the legacy UK OFSI list and the UN Security Council consolidated list — with the explicit legacy UK limitation above. Watchlist screening against those four is the whole scope. Politically exposed persons, adverse media and other national sanctions lists are outside this actor's coverage.

Why are there multiple rows for one person?

Each matching alias and source entry can produce a row. The same entity reference ID may therefore appear several times. The screening event is counted per query name, not per alias or row.

Is a no_hit result free?

No. It is a completed screening and costs one event. An empty result caused by a list-fetch problem or invalid input is free. This distinction preserves the original pricing model.

Can a country code exclude a correct match?

The existing country filter compares text, so an ISO code may differ from a full country name on a source. Use the source's country wording when applying that filter, and inspect returned diagnostics.

It uses the same OFAC SDN data as the official sanctions list search, together with the EU, UK OFSI and UN lists. The official page remains the authoritative reference: confirm any hit there or with the issuing authority before acting on it.

Can I call the sanctions screening API from my own code?

Yes. Start the actor through the Apify API or one of the Apify client libraries with the same input as in the Console, then read the dataset and the summary record. Batches continue automatically until all names are screened.

Does a hit mean the person is sanctioned?

No. A row means a list entry is similar enough to the query to need review. Use the reference ID, birth date, country and aliases to confirm or dismiss the match; common names often match several unrelated people.

How can I verify freshness?

Inspect list_fetched_at, lists_from_cache and the warnings. Download timestamps describe the snapshot retrieval, not the last designation added by a government. A new download cannot make the closed legacy UK source current.

Do you offer PEP screening or adverse media?

No. PEP screening for politically exposed persons, adverse media and case management are separate datasets with their own coverage and licensing, and this actor deliberately does not carry them. Use it for the four sanctions watchlists above, and keep a compliance package that bundles PEP data for the rest of your risk review.

What does one screened name cost?

$0.025 per screened name, with no start event, no per-row fee and no subscription. A completed no_hit screening is one event; an empty run caused by an unavailable list or invalid input is free. The free plan caps a run at ten delivered rows.