# Sanctions Screening: EU, UK & US OFAC Lists (Official) (`frenchdatalab/sanctions-screening-eu-uk-ofac`) Actor

Screen names of people and companies against the official EU, UK (FCDO) and US OFAC sanctions lists in one run: fuzzy, any-script matching with birth year and country checks, or export and monitor new designations. Lists downloaded fresh at every run.

- **URL**: https://apify.com/frenchdatalab/sanctions-screening-eu-uk-ofac.md
- **Developed by:** [French Data lab](https://apify.com/frenchdatalab) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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

## Sanctions Screening: EU, UK & US OFAC Lists (Official)

Screen the names of **people, companies, vessels and aircraft** against the **official sanctions lists of the European Union, the United Kingdom and the United States (OFAC SDN + Consolidated)** in one run, and get for each name a clear **POTENTIAL_MATCH / NO_MATCH** result with the matching list entries, a score and the reasons.

The lists are **downloaded fresh from the authorities at every run**: 32,000+ entries and 95,000+ names and aliases. No third-party database, no stale copy.

### What can you do with it?

- ✅ **KYC / AML onboarding**: screen new customers, suppliers or partners before doing business.
- 🔁 **Periodic re-screening** of your whole customer base (thousands of names per run).
- 🚢 **Trade & shipping compliance**: screen counterparties, vessels (IMO numbers) and aircraft.
- 📡 **Monitoring**: schedule the Actor to get only the **new designations and delistings** since the previous run.
- 📥 **Export**: the full lists in one clean, documented schema for your own systems.

### Why this Actor?

| | This Actor | Typical sanctions checkers |
|---|---|---|
| EU + UK + US OFAC (SDN and non-SDN) in one run | ✅ | ⚠️ often OFAC only |
| Official files downloaded at every run | ✅ publication date of each list in every result | ❌ old copies |
| Spelling variants, transliterations, typos | ✅ "Vladimir Putn", "Al Qaida" = "AL QA'IDA" | ⚠️ exact or naive fuzzy |
| Any script | ✅ Cyrillic, Arabic… ("Владимир Путин" finds PUTIN) | ❌ |
| Name order and middle names | ✅ "Kim Jong Un" = "Jong Un KIM", "Vladimir Putin" = "Vladimir Vladimirovich PUTIN" | ⚠️ |
| Fewer false positives | ✅ birth year and country checks, weak aliases flagged, legal forms ignored | ❌ every "Ali" is a hit |
| Explainable results | ✅ score + reasons ("name 100%", "birth year matches") | ❌ |
| Audit trail | ✅ one row per name, including NO_MATCH, with lists and dates checked | ⚠️ |
| Monitoring of new designations & delistings | ✅ | ❌ |

**Measured quality** (on the real lists): 300 listed names picked at random and altered (typo, reversed order, missing middle name, lower case) → **99.7% found**. About 14 ms per name: thousands of names per run.

### Input

**Screen names** (one result per name, in order):

```json
{ "names": ["Vladimir Putin", "Rosneft", "John Smith"] }
```

Add details when you have them, they remove most false positives:

```json
{
    "records": [
        { "name": "Vladimir Putin", "type": "person", "birthDate": "1952-10-07", "country": "RU" },
        { "name": "Banco Nacional de Cuba", "type": "organization" },
        { "name": "Kim Jong Un", "type": "person", "birthYear": 1984 }
    ]
}
```

| Field | Description |
|---|---|
| `names` | Names to screen, any script |
| `records` | Names with `type` (person, organization, vessel, aircraft), `birthDate` or `birthYear`, `country` (ISO code or name) |
| `entityType` | Type of the plain names (default: any) |
| `minScore` | Minimum score, 60–100 (default 85; raise to 90–95 for fewer, stronger matches) |
| `maxMatchesPerName` | Matches returned per name (default 10) |
| `includeWeakAliases` | Keep the aliases flagged "low quality" by the authorities, with a 10-point penalty (default true) |
| `lists` | `EU`, `UK`, `OFAC-SDN`, `OFAC-CONS` (default: all) |

**Export & monitoring**: `exportEntries: true`, then optionally `exportTypes`, `listedSince` (EU and UK publish listing dates), `onlyNewSinceLastRun` (first run saves a baseline, then each run returns `added` and `removed` entries) and `maxResults`.

### Output

Real example (`names: ["Vladimir Putin"]`, shortened):

```json
{
    "query": "Vladimir Putin",
    "status": "POTENTIAL_MATCH",
    "matchCount": 3,
    "bestScore": 100,
    "bestConfidence": "high",
    "bestMatchName": "Vladimir Vladimirovich PUTIN",
    "bestMatchType": "person",
    "bestMatchList": "OFAC-SDN",
    "listsWithMatches": ["EU", "OFAC-SDN", "UK"],
    "matches": [
        {
            "score": 100,
            "confidence": "high",
            "matchedName": "Vladimir PUTIN",
            "reasons": ["name 100%"],
            "list": "OFAC-SDN",
            "entryId": "35096",
            "type": "person",
            "name": "Vladimir Vladimirovich PUTIN",
            "birthDates": ["1952-10-07"],
            "birthPlaces": ["Leningrad, Russia"],
            "nationalities": ["Russia"],
            "programs": ["RUSSIA-EO14024"],
            "sourceUrl": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=35096"
        }
    ],
    "listsChecked": { "EU": "2026-09-22", "UK": "2026-10-02", "OFAC-SDN": "2026-10-01", "OFAC-CONS": "2026-09-14" },
    "listsUnavailable": [],
    "minScore": 85
}
```

Each match also has `aliases`, `gender`, `countryCodes`, `addresses`, `identifiers` (passports, national IDs, registration numbers, IMO…), `positions`, `sanctions` (asset freeze, travel ban… for the UK), `listedOn`, `unReference` and `remarks`.

**Score and confidence**: 97–100 = `high` (same name, any order, any spelling of the legal form); 90–97 = `medium` (spelling variant, typo, missing middle name or patronymic); 85–90 = `low` (partial name, e.g. another first name in front). A matching birth year adds 5 points, a different one removes 25; a matching country adds 3, a different one removes 5; a weak alias removes 10.

**Common names**: about 5% of random common names ("Sergei Ivanov", "Wei Zhang", "Mohammed Khan") are flagged, because people with exactly these names are on the lists. Give a birth year and a country in `records`: a different birth year clears the match.

### Important

- This is a **screening aid**: a POTENTIAL_MATCH must be reviewed by a person (same name ≠ same person). It is not legal advice.
- `listsChecked` gives the publication date of each list used. If an authority's server is unavailable, the Actor says so in `listsUnavailable` and in the run status: a name is never reported as checked against a list that was not loaded.
- UN Security Council designations are included through their implementation in the EU and UK lists (`unReference`).

### Pricing

Pay per name screened (NO_MATCH included: the check is the service) or per list entry exported. Empty or invalid inputs are free. Set a maximum cost per run and the Actor stops exactly there.

### Sources & licences

- **EU** Consolidated Financial Sanctions List — © European Union, reuse authorised (Commission Decision 2011/833/EU).
- **UK** Sanctions List (Foreign, Commonwealth & Development Office) — contains public sector information licensed under the Open Government Licence v3.0.
- **US** OFAC SDN and Consolidated (non-SDN) lists — U.S. Department of the Treasury, public domain.

This Actor is independent and not affiliated with or endorsed by the European Commission, the UK Government or the U.S. Department of the Treasury.

# Actor input Schema

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

People, companies, vessels… One per line, in any script (Владимир Путин works). One result per name: POTENTIAL_MATCH with the matching list entries, or NO_MATCH.

## `records` (type: `array`):

Same as above with a type, birth date or year and country per name, which removes most false positives: \[{"name": "Vladimir Putin", "type": "person", "birthDate": "1952-10-07", "country": "RU"}]. type: person, organization, vessel or aircraft. country: ISO code or name.

## `entityType` (type: `string`):

Only compare with list entries of this type (applies to the plain names).

## `minScore` (type: `integer`):

0–100. 85 (default) catches spelling variants, transliterations and missing middle names; raise to 90–95 for fewer, stronger matches.

## `maxMatchesPerName` (type: `integer`):

Best-scoring list entries returned for each name.

## `includeWeakAliases` (type: `boolean`):

Aliases the authorities flag as weak (short or generic). Kept by default with a 10-point penalty; untick to ignore them.

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

Official lists, downloaded fresh at every run.

## `exportEntries` (type: `boolean`):

Download the entries of the selected lists in one clean schema (names, aliases, birth dates, nationalities, identifiers, programmes…).

## `exportTypes` (type: `array`):

Leave empty for all.

## `listedSince` (type: `string`):

Only entries designated on or after this date (EU and UK publish listing dates; OFAC does not: use the option below).

## `onlyNewSinceLastRun` (type: `boolean`):

Monitoring: schedule the Actor and get only new designations (change = added) and delistings (change = removed). The first run saves the baseline and returns nothing.

## `maxResults` (type: `integer`):

Export mode only.

## Actor input object example

```json
{
  "names": [
    "Vladimir Putin",
    "Rosneft",
    "John Smith"
  ],
  "entityType": "any",
  "minScore": 85,
  "maxMatchesPerName": 10,
  "includeWeakAliases": true,
  "lists": [
    "EU",
    "UK",
    "OFAC-SDN",
    "OFAC-CONS"
  ],
  "exportEntries": false,
  "onlyNewSinceLastRun": false,
  "maxResults": 1000
}
```

# Actor output Schema

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

No description

## `entries` (type: `string`):

No description

## `summary` (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": [
        "Vladimir Putin",
        "Rosneft",
        "John Smith"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("frenchdatalab/sanctions-screening-eu-uk-ofac").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": [
        "Vladimir Putin",
        "Rosneft",
        "John Smith",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("frenchdatalab/sanctions-screening-eu-uk-ofac").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": [
    "Vladimir Putin",
    "Rosneft",
    "John Smith"
  ]
}' |
apify call frenchdatalab/sanctions-screening-eu-uk-ofac --silent --output-dataset

```

## MCP server setup

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

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/rliiS7KH81KhOdcwn/builds/Xnb5yn33Xn8fQlr0y/openapi.json
