# Sanctions Screening: OFAC, EU, UN & UK Lists (`offerastudio/sanctions-screening`) Actor

Screen up to 10,000 names against the official OFAC (SDN + Consolidated), EU, UN Security Council and UK sanctions lists. Fuzzy matching with aliases, transliteration, country and date-of-birth checks. A screening aid, not a compliance decision.

- **URL**: https://apify.com/offerastudio/sanctions-screening.md
- **Developed by:** [Offera Studio](https://apify.com/offerastudio) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 1 total users, 1 monthly users, 86.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 name screeneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Sanctions Screening do?

**Sanctions Screening** checks up to **10,000 names per run** against the **official sanctions lists**, downloaded from the publishers themselves (the EU list from the European Commission's own EU Sanctions Map), not from a third-party aggregator:

| List | Publisher |
| --- | --- |
| **OFAC SDN list** (Specially Designated Nationals) | U.S. Treasury, Office of Foreign Assets Control |
| **OFAC Consolidated (non-SDN) list** | U.S. Treasury, Office of Foreign Assets Control |
| **EU consolidated list**, read from the **EU Sanctions Map** (sanctionsmap.eu) | European Commission |
| **UN Security Council consolidated list** | United Nations Security Council |
| **UK sanctions list** | UK Foreign, Commonwealth & Development Office |

For every name you get:

- ✅ **`hit`**: `true` when at least one list entry scores at or above your **threshold** (default 85 out of 100), and the **best score** even when there is no hit
- 📋 **up to 5 candidates**, best first: list, **list entry ID**, primary name, **the alias that matched**, type (person / entity / vessel / aircraft), **programmes or regimes**, nationalities and countries, **dates of birth**, **listing date**, a **link to the official entry** where the list has one, and a plain-language **score breakdown**
- 🕒 **`listsVersion`**: for every list, the **publication date the publisher gives**, when this copy was downloaded, how many entries it has, where the entries were read from, and whether it was downloaded, unchanged, kept (EU list), or an older copy used after an error
- ⚠️ **`listsUnavailable`**: a list that could not be downloaded is **never silently skipped**; every row names it, and the run's status message repeats it

Matching copes with **upper and lower case, accents, punctuation, word order** ("PUTIN, Vladimir" = "Vladimir Putin"), **legal forms** ("LLC", "PJSC", "GmbH", "OOO" …), **Cyrillic and Greek script** (transliterated), **common spelling variants** (Mohammed / Muhammad, Alexei / Aleksey, Usama / Osama), **typos** and **aliases** (a.k.a. / f.k.a.). Optional **country**, **date of birth** and **type** raise or lower the score.

> **This Actor is a screening aid. It is not a compliance decision and not legal advice.** A hit is a *possible* match that a person must review; a name with no hit can still be listed (false negatives are possible, see [Limitations](#limitations)). Not affiliated with or endorsed by OFAC, the EU, the UN or the UK government.

### Who is it for?

- **Compliance, KYC and onboarding teams** that need a first pass over customer, supplier or counterparty lists and a record of which list versions were used.
- **Fintechs, marketplaces, payment and crypto businesses** that screen in bulk before a payout or contract.
- **Procurement, HR and trade teams** that check distributors, vendors or agents.
- **Developers** who want one API for the four official lists (OFAC, EU, UN, UK) without building the download, parsing and matching themselves.

### How it works

1. **Download once per run.** The Actor asks each publisher whether its file changed (HTTP `ETag` / `Last-Modified`). If not, it uses the copy it parsed earlier and kept in a named key-value store (`sanctions-lists-cache`, public list data only). If the file changed, it downloads and parses it. If a publisher cannot be reached, the older copy is used and the row says so (`cached-after-error`); with no copy at all, the list is marked `unavailable`. The EU list works differently, see [The EU list](#the-eu-list-eu-sanctions-map).
2. **Normalise** every name: lower case, accents removed, `ß ø æ ł` folded, Cyrillic and Greek transliterated, punctuation removed, legal forms at the start or end dropped, common spelling variants unified.
3. **Compare** with every name and alias on the lists. The score (0–100) is a **token-set similarity**: the best one-to-one pairing of words, where a word counts as the same when it differs by at most a quarter of its letters (with a [Jaro-Winkler](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance) similarity of 0.85 or more), weighted by word length. Words of your name that are missing on the list cost more than extra words on the list (a patronymic, a second given name). A name written as one word and as two ("Sberbank" / "Sber bank") is compared in glued form.
4. **Adjust** the score with what you gave: **country** matches +5, conflicts −10; **date of birth** exact +10, year +5, month or day differs −5, year off by one −8, different −15; **type** (person / entity) that does not fit the entry −20; a match on a low-quality alias −5. Every adjustment is listed in `scoreNotes`.
5. **Return** one row per name: `hit`, `bestScore`, up to 5 candidates at or above the threshold, the lists used and their versions.

**Choosing a threshold.** 85 is a common starting point. Lower it (70–80) to catch more spelling variants at the price of more false alarms; raise it (90+) for fewer alarms and more risk of missing a variant. Common names ("Mohammed Ali") will always produce candidates that a person has to separate using date of birth and country.

**Your names are not kept.** The Actor writes your names only to the run's own dataset. The named store holds the sanctions lists, nothing from your input. A run that is restarted by the platform keeps only a counter of how many names it already did.

### How to use it

1. Click **Start** with the default input: five well-known listed entities and people, one with country and date of birth, and one ordinary company name that should produce no hit.
2. Replace **Names to screen** with your own list. Each entry is a plain name or an object with `name` and optional `type`, `country`, `dateOfBirth` and `reference` (your own ID, returned unchanged).
3. Choose the **lists** and the **threshold**.

The **Screening results** tab has one row per name, **Candidates** shows what matched, **Lists used** shows the list versions.

### Input example

```json
{
    "names": [
        "Rosneft Oil Company",
        { "name": "Vladimir Putin", "type": "person", "country": "RU", "dateOfBirth": "1952-10-07", "reference": "case-1042" },
        { "name": "Acme Garden Furniture Ltd", "type": "entity", "country": "GB" }
    ],
    "lists": ["ofac-sdn", "ofac-consolidated", "eu-sanctions-map", "un-consolidated", "uk-sanctions"],
    "threshold": 85,
    "includeAliases": true
}
```

| Field | Meaning |
| --- | --- |
| `names` | Up to 10,000 entries. Plain text or `{ name, type?, country?, dateOfBirth?, reference? }`. `type` is `person` or `entity`. `country` is a name or an ISO code. `dateOfBirth` is `YYYY-MM-DD`, `YYYY-MM` or `YYYY` (a numeric `DD/MM/YYYY` is also read). Optional fields that cannot be read are ignored and listed in `warnings`. |
| `lists` | Any of `ofac-sdn`, `ofac-consolidated`, `eu-sanctions-map`, `eu-fsf`, `un-consolidated`, `uk-sanctions`. Default: OFAC SDN, OFAC Consolidated, EU (`eu-sanctions-map`), UN and UK. `eu-fsf` is the Commission's file download alone, which now needs an EU Login session; choose it only if you want exactly that file (it is reported as `unavailable` when the download fails). Do not select both EU entries: if you do, only `eu-sanctions-map` is used. |
| `threshold` | 0–100, default 85. |
| `includeAliases` | Compare with aliases too (default `true`; strongly recommended). |

### Output example

Real output of a local run on 2 October 2026, with the default input plus two EU-listed names. The lists were downloaded from the publishers that morning. The EU list came from the EU Sanctions Map (the Commission's FSF file download answered HTTP 401):

| # | Name | Hit | Best score | Best candidates |
| --- | --- | --- | --- | --- |
| 1 | Sberbank of Russia | true | 100 | OFAC SDN 17018 *PUBLIC JOINT STOCK COMPANY SBERBANK OF RUSSIA*, OFAC Consolidated 17018 and 18715, OFAC SDN 18715 |
| 2 | Rosneft Oil Company | true | 100 | OFAC SDN 17022, OFAC Consolidated 17022, UK RUS3064 *PJSC Rosneft Oil Company* |
| 3 | Hizballah | true | 100 | OFAC SDN 4697 *HIZBALLAH*, UK CTI0032 *Hizballah* |
| 4 | Vladimir Putin | true | 100 | OFAC SDN 35096, UK RUS0251 (country +5, date of birth +10) |
| 5 | Kim Jong Un | true | 100 | OFAC SDN 20157 *Jong Un KIM* |
| 6 | Acme Garden Furniture Ltd | false | 0 | – |
| 7 | Agha, Abdul Rahman *(added)* | true | 100 | EU 513 *Abdul Rahman Agha*, UK, UN |
| 8 | Wilma II *(added, a vessel)* | true | 100 | EU `r26-wilma-ii`, UK |

The five default hits are on the OFAC and UK lists. Names that are on the EU list too may not reach 85 there: the EU Sanctions Map often has no date of birth or nationality, so nothing raises the score (for "Vladimir Putin" the EU entry, which also has a patronymic, scores 83 and appears when you lower the threshold to 80).

One row (shortened to two candidates, and with the unchanged list copies it was screened against):

```json
{
    "input": "{\"name\":\"Rosneft Oil Company\",\"type\":\"entity\"}",
    "position": 2,
    "reference": null,
    "name": "Rosneft Oil Company",
    "type": "entity",
    "country": null,
    "dateOfBirth": null,
    "hit": true,
    "bestScore": 100,
    "threshold": 85,
    "candidateCount": 3,
    "candidates": [
        {
            "list": "ofac-sdn",
            "listEntryId": "17022",
            "primaryName": "OPEN JOINT-STOCK COMPANY ROSNEFT OIL COMPANY",
            "matchedName": "OPEN JOINT-STOCK COMPANY ROSNEFT OIL COMPANY",
            "matchedIsAlias": false,
            "score": 100,
            "entityType": "entity",
            "programmes": ["UKRAINE-EO13662", "RUSSIA-EO14024"],
            "countries": ["Russia"],
            "datesOfBirth": [],
            "listingDate": null,
            "entryUrl": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=17022",
            "source": "U.S. Department of the Treasury, Office of Foreign Assets Control",
            "scoreNotes": ["name similarity 100 (exact)"]
        },
        {
            "list": "uk-sanctions",
            "listEntryId": "RUS3064",
            "primaryName": "PJSC Rosneft Oil Company",
            "matchedName": "PJSC Rosneft Oil Company",
            "matchedIsAlias": false,
            "score": 100,
            "entityType": "entity",
            "programmes": ["The Russia (Sanctions) (EU Exit) Regulations 2019"],
            "countries": ["Russia"],
            "datesOfBirth": [],
            "listingDate": "2025-10-15",
            "entryUrl": "https://www.gov.uk/government/publications/the-uk-sanctions-list",
            "source": "UK Foreign, Commonwealth & Development Office",
            "scoreNotes": ["name similarity 100 (exact)"]
        }
    ],
    "listsChecked": ["ofac-sdn", "ofac-consolidated", "eu-sanctions-map", "un-consolidated", "uk-sanctions"],
    "listsUnavailable": [],
    "listsVersion": {
        "ofac-sdn": { "publishedOn": "2026-10-01", "downloadedAt": "2026-10-02T05:34:11.000Z", "entries": 19483, "status": "downloaded", "source": "U.S. Department of the Treasury, Office of Foreign Assets Control", "note": null },
        "ofac-consolidated": { "publishedOn": "2026-09-14", "downloadedAt": "2026-10-02T05:34:12.000Z", "entries": 481, "status": "downloaded", "source": "U.S. Department of the Treasury, Office of Foreign Assets Control", "note": null },
        "eu-sanctions-map": { "publishedOn": "2026-07-03", "downloadedAt": "2026-10-02T05:34:40.472Z", "entries": 7135, "status": "downloaded", "source": "sanctionsmap.eu (European Commission)", "note": "The FSF file download is not available to automated clients (HTTP 401 from webgate.ec.europa.eu); the list was read from the EU Sanctions Map (55 regimes)." },
        "un-consolidated": { "publishedOn": "2026-10-01T23:00:06.597Z", "downloadedAt": "2026-10-02T05:34:42.000Z", "entries": 1011, "status": "downloaded", "source": "United Nations Security Council", "note": null },
        "uk-sanctions": { "publishedOn": "2026-10-01", "downloadedAt": "2026-10-02T05:34:44.000Z", "entries": 6370, "status": "downloaded", "source": "UK Foreign, Commonwealth & Development Office", "note": null }
    },
    "screenedAt": "2026-10-02T00:29:28.082Z",
    "warnings": [],
    "error": null,
    "errorMessage": null
}
```

**Fields worth knowing:**

- `hit`: `true` = at least one entry reached the threshold (needs human review); `false` = none did; `null` = a free info row.
- `bestScore`: the highest score among everything compared, also when it is below the threshold (so you can see near misses). `0` means nothing similar was found.
- `candidates[].listEntryId`: OFAC `uid`, UK unique ID (for example `RUS0251`), UN reference number (for example `CDi.001`), EU `FSD_ID` (the EU reference number of the Financial Sanctions Files; entries of sectoral lists that have none get an id like `r26-wilma-ii`, regime 26 plus the normalised name). `listingDate` is `null` for OFAC: its XML file does not contain it.
- `candidates[].source`: where the entry was read from, for example `sanctionsmap.eu (European Commission)` for the EU list.
- `candidates[].entryUrl`: OFAC's search page for the entry, the EU Sanctions Map for EU entries (a search for the name within the regime), or the regulation in the Official Journal for entries read from the FSF file. The UN and UK files have no page per entry, so the link is the list's own page; use `listEntryId` to find the entry there.
- `listsVersion[list].status`: `downloaded`, `not-modified` (the publisher's file had not changed since the copy kept from an earlier run), `cached` (EU list: a copy younger than 12 hours was used without asking the publisher), `cached-after-error` (the publisher could not be reached; the older copy was used, `note` says why) or `unavailable` (not used at all).
- `error` / `errorMessage` are set on free rows only: `invalid-input`, `lists-unavailable`, `limit-reached`.

### The EU list (EU Sanctions Map)

The European Commission's download of its *Financial Sanctions Files* (FSF) now sends automated clients to EU Login, so the EU list is read from the Commission's **EU Sanctions Map** (https://www.sanctionsmap.eu), which has a public JSON API without login or key:

- The Actor first tries the FSF file (one attempt). If that answers with a redirect or a login page, it falls back to the Sanctions Map automatically. `listsVersion["eu-sanctions-map"].note` says which one was used.
- The map is read **politely**: the list of regimes (55 on 2 October 2026), then each regime **one at a time, about 300 ms apart**, with a retry on HTTP 429 and 5xx. That is about 55 requests and takes a minute.
- The merged list is **kept for 12 hours** in the named store `sanctions-lists-cache`, so most runs do not touch the map at all (`status: "cached"`). If a refresh fails, the older copy is used and the row says so; a refresh that misses some regimes is flagged as incomplete in the row and is never kept as the new copy.
- On 2 October 2026 this gave **6,224 unique EU FSF ids (4,454 persons, 1,770 entities)**, plus **911 members of sectoral lists** that have no FSF id (vessels and entities named in the annexes of sectoral measures, mostly the Russia and North Korea regimes), which are keyed by name and regime. Each entry carries the **regime title** in `programmes`, the listing date (from the reason text, else the record's creation date), a link to the map and `source: "sanctionsmap.eu (European Commission)"`.
- **Fewer fields than the FSF XML.** The map often has **no date of birth and no nationality**, so the country and date-of-birth adjustments only apply to the few entries that give them. A name with a patronymic or a second given name may therefore score a little lower on the EU list than on the OFAC or UK lists.
- Aliases come as one comma-separated string. The Actor splits them (`Agha, Abdul Rahman` is read as the one name "Abdul Rahman Agha"); a rare name that is split wrongly can be missed. Check the entry on the map.
- **Reuse.** The Commission's reuse policy is Commission Decision 2011/833/EU; content owned by the EU is licensed CC BY 4.0, which asks for credit and for changes to be indicated. Credit: *European Commission, EU Sanctions Map (sanctionsmap.eu)*. The names are split and merged by this Actor, which is a change. The map is an information service: the legal acts in the Official Journal of the EU are the binding texts.

### How much does it cost?

This Actor uses **pay per event**:

| Event | Price |
| --- | --- |
| Name screened (one row per valid name, hit or no hit) | **$0.003** |
| Invalid entries (no name, too long) and run notes | **free** |

- 1,000 names cost **$3.00**; the default run costs **$0.018**.
- Duplicate names in your list are screened and charged each time (each row is one answer).
- The lists are public and free; there are no other costs. Apify also charges a small standard start fee per run and the compute for the run (a full run with all lists takes about 10 seconds for the downloads and parsing, then about 0.6 ms per name; use at least 1 GB of memory).
- Set **Maximum cost per run** in the run options and the Actor stops when it is reached.

### Limitations

- **Not a compliance decision.** A hit needs review by a person who can look at the official entry. No hit does not prove that a person or company is not sanctioned. The Actor does not know about other lists (for example national lists of other countries, or the OFAC 50 % ownership rule), about vessels or assets by identifier (it matches names only), or about people connected to a listed party.
- **False negatives are possible.** Names in Arabic, Chinese or other non-Latin scripts only match the same script (the UK list includes original-script names); there is no transliteration from those scripts. Cyrillic and Greek are transliterated with simple rules, and transliteration systems differ (a name in Cyrillic may not match the way a list spells it). A name that is not on the list in any spelling close to yours, a name with a lot of missing parts, or a heavily changed alias will be missed. Lower the threshold when the cost of a miss is high.
- **False positives are normal**, above all for common names and short names. Give `country` and `dateOfBirth` where you have them, and check the official entry.
- **Only what the lists say.** OFAC's XML has no listing date. Dates of birth, countries and aliases are as complete as the publisher's file. The Actor does not enrich or verify them.
- **Lists change during the day and the Actor only sees the file as it was when it was downloaded.** `listsVersion` tells you which version was used. For regulated use, screen close to the time of the transaction and keep the dataset as your record.
- **The EU list** comes from the EU Sanctions Map (see above) and can be up to 12 hours old; the map can lag behind the Official Journal. If it cannot be loaded, rows say so (`listsUnavailable: ["eu-sanctions-map"]`) and the other lists are still used; if you need a guarantee that the EU list was part of the screening, check that `listsUnavailable` is empty in every row (the run status message also lists what was missing).
- **10,000 names per run.** Longer lists need several runs.
- Names are compared as text. The Actor does not look at addresses, ID numbers or other fields.

### Data and licences

| List | Source file | Terms |
| --- | --- | --- |
| OFAC SDN and Consolidated | `sanctionslistservice.ofac.treas.gov` (`SDN.XML`, `CONSOLIDATED.XML`) | Publication of a U.S. federal agency; works of the U.S. Government are not subject to copyright (17 U.S.C. § 105). OFAC states no further terms on the download page. |
| UK sanctions list | `sanctionslist.fcdo.gov.uk` (`UK-Sanctions-List.xml`) | Published by the UK government on GOV.UK, where all content is available under the **Open Government Licence v3.0** unless stated otherwise. Contains public sector information licensed under the Open Government Licence v3.0. |
| UN Security Council consolidated list | `scsanctions.un.org` (`consolidated.xml`) | Published by the UN Security Council Committees for the purpose of implementing the sanctions. The UN website's general copyright notice reserves all rights except as provided in its terms of use; no separate open licence for the list was found. |
| EU consolidated list | `www.sanctionsmap.eu/api/v1/regime` (EU Sanctions Map, European Commission); the FSF file (`webgate.ec.europa.eu/fsd/fsf`) is tried first | Reuse under the Commission's reuse policy (Commission Decision 2011/833/EU; EU-owned content is licensed CC BY 4.0: credit the source and indicate changes). The Commission accepts no liability for omissions or mistakes. Source: European Commission, EU Sanctions Map. |

Always check the **official entry** before acting on a hit. No personal data beyond the names you enter and the public list entries is processed. The Actor stores nothing from your input between runs.

### FAQ

#### Is this a replacement for my compliance process?

No. It is a fast first screen with a clear record of which list versions were used. Decisions about hits, escalation, reporting and record keeping stay with your compliance team.

#### Why use this and not a commercial screening service or an aggregated dataset?

Because it reads the four official lists directly and tells you exactly which version of each list it used; you pay per name with no subscription. It does not include politically exposed persons, adverse media or other lists that commercial services add.

#### Why does a name I know is listed have no hit?

Check the spelling the list uses (search the entry on the official site), whether the list is in `listsChecked`, and the `bestScore` (a score just under your threshold means a spelling variant: lower the threshold). Non-Latin scripts other than Cyrillic and Greek are only matched in the same script.

#### Why are there so many candidates for a common name?

Because the lists contain many people with the same or similar names. Add `country` and `dateOfBirth`; a conflicting date of birth lowers the score by 15 points.

#### Why does the same entry show up under OFAC SDN and OFAC Consolidated?

Some entities are on both OFAC files. Both are returned, with the same `listEntryId`.

#### Do you keep the names I screen?

No. The Actor writes them only to your run's dataset. See "How it works".

### More tools from the same developer

All pay-per-result, no proxy or login needed, built and maintained by the same developer:

**Website audits**

- [Website Accessibility Checker: WCAG 2.2 & EAA](https://apify.com/offerastudio/website-accessibility-audit): accessibility issues with fixes, SEO basics and security headers.
- [Cookie & Tracker Audit: GDPR Consent Checker](https://apify.com/offerastudio/cookie-tracker-audit): cookies and tracking tags that load before consent.
- [AI Crawler Access Checker: robots.txt & llms.txt](https://apify.com/offerastudio/ai-crawler-access-audit): which AI crawlers a site allows, plus llms.txt.
- [Structured Data Validator: Schema & Rich Results](https://apify.com/offerastudio/structured-data-validator): JSON-LD and Microdata checked against Google's rich result rules.
- [Website Change Monitor: Diffs, Prices & Alerts](https://apify.com/offerastudio/website-change-monitor): get a row only when a page changes, with a clean diff.
- [Policy Change Monitor: Privacy & Terms Tracker](https://apify.com/offerastudio/policy-change-monitor): privacy policy and terms changes, classified clause by clause.
- [SaaS Pricing Monitor: Track Competitor Plans](https://apify.com/offerastudio/saas-pricing-monitor): competitor pricing plans as structured data, with price-change diffs.
- [Sitemap Change Monitor: New & Removed URLs](https://apify.com/offerastudio/sitemap-change-monitor): new, removed and changed URLs from a site's sitemaps.
- [Site SEO Crawler: Broken Links & On-Page Audit](https://apify.com/offerastudio/site-seo-crawler-audit): site-wide crawl for broken links, redirects and on-page SEO issues.
- [Website Tech Stack Detector: Bulk Lead Filters](https://apify.com/offerastudio/website-tech-stack-detector): technologies used by websites, with filters for lead lists.
- [Domain Availability & Expiry Checker (RDAP)](https://apify.com/offerastudio/domain-whois-availability): domain availability, registrar and expiry dates from RDAP.
- [Status Page SLA Monitor: Uptime & Incidents](https://apify.com/offerastudio/status-page-sla-monitor): SaaS vendor uptime, incidents and a monthly SLA table from public status pages.

**Company data and compliance**

- [Company Contact Finder: Emails, Phones & Socials](https://apify.com/offerastudio/company-contact-finder): contact details published on company websites.
- [UK New Companies Feed: Companies House Daily](https://apify.com/offerastudio/uk-new-companies-feed): newly incorporated UK companies with sector filters.
- [EU VAT Number Validator: Bulk VIES Checker](https://apify.com/offerastudio/eu-vat-number-validator): bulk VAT checks with name, address and consultation number.
- [LEI Corporate Tree: GLEIF Parents & Subsidiaries](https://apify.com/offerastudio/gleif-lei-corporate-tree): LEI lookup with parents, subsidiaries and a KYC summary.
- [UK Company Distress Watch: Insolvency Alerts](https://apify.com/offerastudio/uk-company-distress-watch): administrations, liquidations and winding-up petitions from The Gazette.
- [IBAN Validator: Bulk Check & Bank Lookup](https://apify.com/offerastudio/iban-bank-validator): IBAN format and checksum, plus bank name and BIC where open data exists.
- [OSHA & EPA Violation Monitor: Fines by Company](https://apify.com/offerastudio/osha-epa-violation-monitor): US OSHA and EPA enforcement cases and penalties by company.
- [Email List Precheck: Syntax, MX & Disposable Check](https://apify.com/offerastudio/email-list-precheck): cheap email list hygiene before a real verification.
- [UK Company Officer Changes: Director & PSC Alerts](https://apify.com/offerastudio/uk-company-officer-changes): director, owner, address and status changes for a watchlist of UK companies.
- [FDA Warning Letters Monitor: By Company & Subject](https://apify.com/offerastudio/fda-warning-letters-monitor): FDA warning letters by company and subject, with cited regulations.
- [Supplier Risk Report: Sanctions, VAT & Insolvency](https://apify.com/offerastudio/supplier-risk-report): one risk row per supplier from eight official registers, with changes since last run.
- [Brand Impersonation Domain Monitor: Look-alikes](https://apify.com/offerastudio/brand-impersonation-domain-monitor): look-alike domains and certificates that imitate your brand, with a risk score.

**Media and AI**

- [Audio & Video Transcriber: Podcasts, SRT, Speakers](https://apify.com/offerastudio/audio-video-transcriber): audio, video, podcasts and social links to text, SRT and VTT.
- [Podcast Mention Alerts: Brand Mentions by Second](https://apify.com/offerastudio/podcast-mention-alerts): where your brand is said in new podcast episodes, with the exact second.
- [News Brand Mentions Monitor: New Articles Only](https://apify.com/offerastudio/news-brand-mentions-monitor): new news articles about your brand, people or topics.
- [YouTube Channel Monitor: New Videos & Growth](https://apify.com/offerastudio/youtube-channel-monitor): new videos and view growth of the channels you watch.

**Market signals**

- [US WARN Layoff Notices: 12 States Daily Feed](https://apify.com/offerastudio/us-warn-layoff-notices): layoff and plant closure notices from official state sources.
- [US Product Recalls Monitor: FDA & CPSC Feed](https://apify.com/offerastudio/us-product-recalls-monitor): FDA and CPSC recalls in one feed, with severity.
- [EU Tenders Feed: TED Public Procurement Alerts](https://apify.com/offerastudio/eu-tender-feed): EU public tenders from TED with CPV, country and value filters.
- [Liquor License Openings: New Bars & Stores (US)](https://apify.com/offerastudio/liquor-license-openings): new US liquor licences from official state open data.
- [Clinical Trials Change Monitor: Status & Updates](https://apify.com/offerastudio/clinicaltrials-change-monitor): status, enrollment and results changes on ClinicalTrials.gov studies.
- [Career Site Jobs Monitor: ATS Jobs & New Roles](https://apify.com/offerastudio/career-site-jobs-monitor): open roles from company career sites, with new and closed roles since the last run.
- [App Reviews Monitor: App Store & Google Play](https://apify.com/offerastudio/app-store-reviews-monitor): app reviews from both stores, only new ones in monitor mode.
- [US Federal Contracts Feed: SAM.gov & USAspending](https://apify.com/offerastudio/us-federal-contracts-feed): SAM.gov contract opportunities with the buyer's award history.
- [Grants.gov Opportunities: US Federal Grants Feed](https://apify.com/offerastudio/grants-gov-opportunities): US federal grant opportunities by keyword, eligibility and agency.
- [Federal Register Monitor: US Rules & Notices Feed](https://apify.com/offerastudio/federal-register-monitor): new US rules, proposed rules and notices by agency or topic.
- [B2B Sales Trigger Feed: Hiring + Tech Leads](https://apify.com/offerastudio/b2b-sales-trigger-feed): companies hiring for a role and using (or not using) a technology, with contacts.
- [Local Business Leads: OpenStreetMap, No Website](https://apify.com/offerastudio/local-business-leads-osm): local businesses by city and category, including those with no website.
- [Solana Token Pair Monitor: New & Trending Pairs](https://apify.com/offerastudio/solana-token-pair-monitor): new and trending Solana pairs with liquidity, volume and safety flags.

### Feedback

Missing a list, a date format or a matching rule? Open an issue on the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/offerastudio/sanctions-screening/changelog.md

# Actor input Schema

## `names` (type: `array`):

Up to 10,000 names. Each entry is either a plain text name or an object: {"name": "...", "type": "person" | "entity", "country": "RU" or "Russia", "dateOfBirth": "1952-10-07", "reference": "your own ID"}. Only name is required. Type, country and date of birth are optional and only adjust the score (a matching country or date of birth raises it, a conflicting one lowers it). Dates are YYYY-MM-DD, YYYY-MM or YYYY. The Actor does not keep your names after the run.

## `lists` (type: `array`):

Which lists to screen against. The EU list is back in the defaults: its official file download needs an EU Login session, so "EU consolidated list" is read from the European Commission's EU Sanctions Map (sanctionsmap.eu), and the file is tried first. "EU FSF file only" is the file download alone and is usually unavailable; do not select both.

## `threshold` (type: `integer`):

A name is a possible match when an entry scores at least this much. Lower finds more (and more false alarms), higher finds fewer (and risks missing spelling variants). 85 is a common starting point.

## `includeAliases` (type: `boolean`):

Also compare with the aliases (a.k.a., f.k.a.) of each entry, not only the main name. Strongly recommended.

## Actor input object example

```json
{
  "names": [
    {
      "name": "Sberbank of Russia",
      "type": "entity"
    },
    {
      "name": "Rosneft Oil Company",
      "type": "entity"
    },
    {
      "name": "Hizballah",
      "type": "entity"
    },
    {
      "name": "Vladimir Putin",
      "type": "person",
      "country": "RU",
      "dateOfBirth": "1952-10-07"
    },
    {
      "name": "Kim Jong Un",
      "type": "person"
    },
    {
      "name": "Acme Garden Furniture Ltd",
      "type": "entity",
      "country": "GB"
    }
  ],
  "lists": [
    "ofac-sdn",
    "ofac-consolidated",
    "eu-sanctions-map",
    "un-consolidated",
    "uk-sanctions"
  ],
  "threshold": 85,
  "includeAliases": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `matches` (type: `string`):

No description

## `lists` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "names": [
        {
            "name": "Sberbank of Russia",
            "type": "entity"
        },
        {
            "name": "Rosneft Oil Company",
            "type": "entity"
        },
        {
            "name": "Hizballah",
            "type": "entity"
        },
        {
            "name": "Vladimir Putin",
            "type": "person",
            "country": "RU",
            "dateOfBirth": "1952-10-07"
        },
        {
            "name": "Kim Jong Un",
            "type": "person"
        },
        {
            "name": "Acme Garden Furniture Ltd",
            "type": "entity",
            "country": "GB"
        }
    ],
    "lists": [
        "ofac-sdn",
        "ofac-consolidated",
        "eu-sanctions-map",
        "un-consolidated",
        "uk-sanctions"
    ],
    "threshold": 85
};

// Run the Actor and wait for it to finish
const run = await client.actor("offerastudio/sanctions-screening").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "names": [
        {
            "name": "Sberbank of Russia",
            "type": "entity",
        },
        {
            "name": "Rosneft Oil Company",
            "type": "entity",
        },
        {
            "name": "Hizballah",
            "type": "entity",
        },
        {
            "name": "Vladimir Putin",
            "type": "person",
            "country": "RU",
            "dateOfBirth": "1952-10-07",
        },
        {
            "name": "Kim Jong Un",
            "type": "person",
        },
        {
            "name": "Acme Garden Furniture Ltd",
            "type": "entity",
            "country": "GB",
        },
    ],
    "lists": [
        "ofac-sdn",
        "ofac-consolidated",
        "eu-sanctions-map",
        "un-consolidated",
        "uk-sanctions",
    ],
    "threshold": 85,
}

# Run the Actor and wait for it to finish
run = client.actor("offerastudio/sanctions-screening").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "names": [
    {
      "name": "Sberbank of Russia",
      "type": "entity"
    },
    {
      "name": "Rosneft Oil Company",
      "type": "entity"
    },
    {
      "name": "Hizballah",
      "type": "entity"
    },
    {
      "name": "Vladimir Putin",
      "type": "person",
      "country": "RU",
      "dateOfBirth": "1952-10-07"
    },
    {
      "name": "Kim Jong Un",
      "type": "person"
    },
    {
      "name": "Acme Garden Furniture Ltd",
      "type": "entity",
      "country": "GB"
    }
  ],
  "lists": [
    "ofac-sdn",
    "ofac-consolidated",
    "eu-sanctions-map",
    "un-consolidated",
    "uk-sanctions"
  ],
  "threshold": 85
}' |
apify call offerastudio/sanctions-screening --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,offerastudio/sanctions-screening"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2jcSYc8tYWTLBTBwL/builds/lS5HfT8KzxfTecApG/openapi.json
