# Global Sanctions Screening API - OFAC, EU, UK & UN Watchlists (`webdata_labs/sanctions-screening-api`) Actor

\[💵 $2.00 / 1K] Screen any person or company against the consolidated OFAC, EU, UK OFSI and UN sanctions lists in one call. Fuzzy name matching with scored, explained hits - or export the full normalized watchlist. Built from primary government sources, not a re-publisher.

- **URL**: https://apify.com/webdata\_labs/sanctions-screening-api.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** Developer tools, Automation, Integrations
- **Stats:** 1 total users, 1 monthly users, 96.7% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 screening results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Global Sanctions Screening API - OFAC, EU, UK & UN Watchlists

**Screen any person or company against the world's main sanctions lists in one call.** Paste a list of names and get a scored, explained match against the consolidated **US OFAC (SDN + non-SDN), EU, UK OFSI, and UN Security Council** lists - or switch to list mode and export the full normalized watchlist as one clean schema.

Every sanctions authority publishes its list in a **different format** with a **different alias model**: OFAC ships flat CSV with names and aliases in separate files and the date of birth buried in free text; the EU and UN ship deeply nested XML; the UK ships a wide CSV where one entity is spread across many rows joined by a group ID. Most "OFAC scrapers" hand you one raw list. This Actor does the hard part: it pulls the **primary government sources**, normalizes all five into **one canonical entity** (primary name, every alias, type, programs, countries, dates of birth, IDs, listing date), and runs a **fuzzy matching engine** so reordered names (`Putin Vladimir`), transliterations, and subsidiaries (`Gazprombank JSC`) still surface - each with a similarity score, a match type, and the exact name it hit.

### ✅ What you get / ❌ what this isn't

| This Actor gives you | This Actor is not |
|---|---|
| One call screens a name across five lists at once | Not a certified or complete compliance/KYC solution - it is a screening data tool |
| Fuzzy matching with a score, match type, and the matched alias | Not legal advice or a regulatory sign-off |
| Consolidated, normalized schema across OFAC, EU, UK, UN | Not affiliated with or endorsed by any government or authority |
| Built from **primary** official sources, not a re-publisher | Not a guarantee of completeness - always confirm a hit against the official source |
| `riskLevel` buckets (EXACT / HIGH / MEDIUM / CLEAR) for triage | Not a PEP, adverse-media, or credit/background service (sanctions lists only) |
| Full-watchlist export mode for your own systems | Not real-time intraday - reflects each authority's published refresh |

### 🔎 Why use this Actor

- Screen customers, vendors, counterparties, or payees against sanctions lists before onboarding or payment.
- Batch-check an existing CRM, KYC queue, or supplier list in one run.
- Get one **consolidated** answer instead of querying five government sites with five different formats.
- Catch near-misses: reordered names, aliases, transliterations, and sanctioned subsidiaries.
- Export the full normalized watchlist to power your own matching engine, dashboard, or model.
- Skip the plumbing - downloading, parsing, alias-joining, and de-duplicating five sources is done.

### 👥 Who it's for

- Fintech, payments, crypto, and lending teams running sanctions checks at onboarding.
- Compliance, AML, and KYC analysts triaging names against OFAC/EU/UK/UN.
- Procurement and vendor-onboarding teams screening suppliers and counterparties.
- Marketplaces and platforms vetting sellers, partners, or high-value buyers.
- Data teams that want one clean watchlist schema instead of five parsing projects.

### 🗂️ What data you get

**Screen mode** - one row per name you submit:

| Field | Type | Description |
|---|---|---|
| `query` | string | The name you screened |
| `isMatch` | boolean | Whether any match cleared the threshold |
| `riskLevel` | string | `EXACT` / `HIGH` / `MEDIUM` / `CLEAR` |
| `bestScore` | number | Top similarity score (0-1) |
| `matchCount` | number | How many list entities matched |
| `matches[]` | array | Each match: `matchedName`, `score`, `matchType`, `sourceList`, `entityName`, `entityType`, `programs`, `countries`, `nationalities`, `datesOfBirth`, `sourceId`, `sourceUrl` |

**List mode** - one row per consolidated watchlist entity:

| Field | Type | Description |
|---|---|---|
| `sourceList` | string | `OFAC_SDN` / `OFAC_CONS` / `EU` / `UK_OFSI` / `UN` |
| `entityType` | string | `PERSON` / `ORGANIZATION` / `VESSEL` / `AIRCRAFT` |
| `primaryName`, `aliases[]` | string / array | Primary name plus every alias |
| `programs[]` | array | Sanctions programs / regimes / reference numbers |
| `countries[]`, `nationalities[]` | array | Associated countries and nationalities |
| `datesOfBirth[]` | array | Dates or years of birth |
| `ids[]` | array | Passport / national-ID numbers where published |
| `addresses[]` | array | Addresses where published |
| `listedOn` | string | Date listed |
| `sourceId`, `sourceUrl` | string | Native source ID and the official list URL |

### Example tasks

- [Screen a list of names against all sanctions lists](https://apify.com/webdata_labs/sanctions-screening-api/examples/screen-names)
- [Screen suppliers and counterparties before onboarding](https://apify.com/webdata_labs/sanctions-screening-api/examples/screen-suppliers)
- [Export the full consolidated sanctions watchlist](https://apify.com/webdata_labs/sanctions-screening-api/examples/export-watchlist)

### ⚙️ How to screen names

1. Open the Actor on Apify.
2. Keep `mode` on `screen` and paste names into `names` (one per line).
3. Optionally pick which lists to load in `sources`, and tune `threshold` (85 is balanced).
4. Run the Actor and open the `Screening results` dataset view.
5. Export JSON, CSV, Excel, HTML, or XML, or call the Actor through the Apify API.

To pull the full watchlist instead, set `mode` to `list` and choose your `sources`.

### 📥 Input

```json
{
  "mode": "screen",
  "names": "Vladimir Putin\nGazprombank\nAcme Coffee Roasters LLC",
  "sources": ["OFAC_SDN", "OFAC_CONS", "EU", "UK_OFSI", "UN"],
  "threshold": 85,
  "maxMatchesPerName": 10
}
```

### 📤 Output

```json
{
  "recordType": "screening_result",
  "query": "Vladimir Putin",
  "isMatch": true,
  "riskLevel": "EXACT",
  "bestScore": 1.0,
  "matchCount": 4,
  "matches": [
    {
      "matchedName": "PUTIN, Vladimir",
      "score": 1.0,
      "matchType": "exact",
      "sourceList": "OFAC_SDN",
      "entityName": "PUTIN, Vladimir Vladimirovich",
      "entityType": "PERSON",
      "programs": ["RUSSIA-EO14024"],
      "sourceId": "39463",
      "sourceUrl": "https://sanctionssearch.ofac.treas.gov/"
    }
  ]
}
```

### 💵 How much does it cost?

The launch price is about `$2.00 / 1,000 results`, tier-discounted for higher Apify plans. In screen mode, one screened name is one charged result; in list mode, one exported watchlist entity is one charged result. A run screening 200 names is 200 results.

### 🔁 Run it on the Apify platform

Schedule a recurring run to re-screen a customer or supplier list as the lists change, call it from the Apify API, export to CSV/JSON/Excel, or connect the dataset to Make, Zapier, webhooks, a warehouse, a case-management tool, or an LLM workflow. Each run loads the **current** published lists, so results stay fresh.

### ⚠️ Limits and caveats

- **This is a screening data tool, not a certified compliance solution.** It does not replace a regulated KYC/AML program, legal review, or human adjudication. Always confirm any hit against the official source before acting.
- **Sanctions lists only.** It does not cover PEP, adverse media, law-enforcement, or credit/background data.
- **A match is a lead, not a verdict.** Fuzzy matching surfaces possible hits by name; common names will produce false positives that a human must clear, and the `threshold` controls that trade-off.
- **Completeness is best-effort.** The Actor reads the published consolidated files; if an authority's endpoint is temporarily down, that source is skipped and noted in the run summary rather than failing the run.
- Data reflects each authority's **published refresh cadence**, not intraday real time.
- Non-Latin (e.g. Cyrillic, Arabic) primary names are preserved; matching works best on the Latin-script names and aliases each list provides.

### 🧩 Related Actors

- EU Tenders API - normalized TED public procurement in one English schema.
- Brazil CNPJ Company API - clean English firmographics for any Brazil CNPJ.
- SEC Financials API - normalized income, balance sheet, and cash flow from EDGAR.
- Lead List Deduplicator - CRM-ready dedup and normalization for lead lists.

### ❓ FAQ

#### Which lists are covered?

US OFAC Specially Designated Nationals (SDN), the OFAC Consolidated (non-SDN) list, the EU Consolidated Financial Sanctions List, the UK OFSI Consolidated List, and the UN Security Council Consolidated List. You choose any subset with `sources`.

#### Where does the data come from?

Directly from each authority's **primary published file** (US Treasury, the EU, UK OFSI, and the UN), not from a third-party re-publisher. Each run downloads the current lists.

#### How does the matching work?

Names are normalized (de-accented, de-punctuated) and compared with a combination of exact, token-set, token-sort, and character-sequence similarity, so reordered names, aliases, and contained company names score high. Each match returns a score and a match type so you can triage.

#### Will it produce false positives?

Yes, by design - screening favors recall. Common names can match multiple list entries. Raise `threshold` for fewer, stronger matches; lower it for wider recall. A human should always review flagged names.

#### Is this enough to meet my compliance obligations?

No. This Actor is a data and screening tool. It is not a certified compliance product, not legal advice, and not a substitute for a regulated KYC/AML process. Use it as one input and confirm hits against the official source.

#### Does it need a proxy?

No. All sources are public official government files served reliably to datacenter IPs. Enable Apify Proxy only if you hit a network issue.

### 🛠️ Support

For bugs, missing fields, or a feature request, open an Actor issue with the run URL, the names or sources used, and the field or behavior you expected.

### ⭐ Rate this Actor

If this Actor saved you time, please take 30 seconds to leave a review on the **Reviews** tab of [Global Sanctions Screening API - OFAC, EU, UK & UN Watchlists](https://apify.com/webdata_labs/sanctions-screening-api) - reviews are the main trust signal other users see, and they directly decide which features get built next. If something is broken or a field is missing, please [open an issue](https://apify.com/webdata_labs/sanctions-screening-api/issues) first - we typically respond within a day and would love the chance to fix it before you rate.

# Actor input Schema

## `mode` (type: `string`):

screen = check your names against the lists and return scored matches (the default). list = export the full normalized consolidated watchlist.

## `names` (type: `string`):

Person or company names to check, one per line (or a JSON array). Used in screen mode. Each name returns one result row with its scored matches across all selected lists.

## `sources` (type: `array`):

Which sanctions lists to consolidate. Defaults to all five (OFAC SDN, OFAC consolidated, EU, UK OFSI, UN).

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

Minimum similarity (0.5-1.0) for a name to be reported as a match in screen mode. 0.85 is a balanced default; raise toward 1.0 for fewer false positives, lower for wider recall.

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

How many top scored matches to return for each screened name (screen mode).

## `maxItems` (type: `integer`):

Safety cap on how many entities to export in list mode.

## `proxyConfiguration` (type: `object`):

Optional. All sources are official public government files that work without a proxy; enable Apify Proxy only if you hit a network issue.

## Actor input object example

```json
{
  "mode": "screen",
  "names": "Vladimir Putin\nGazprombank\nIslamic Revolutionary Guard Corps\nAcme Coffee Roasters LLC",
  "sources": [
    "OFAC_SDN",
    "OFAC_CONS",
    "EU",
    "UK_OFSI",
    "UN"
  ],
  "threshold": 85,
  "maxMatchesPerName": 10,
  "maxItems": 5000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `OUTPUT` (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
Gazprombank
Islamic Revolutionary Guard Corps
Acme Coffee Roasters LLC`
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/sanctions-screening-api").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
Gazprombank
Islamic Revolutionary Guard Corps
Acme Coffee Roasters LLC""" }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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\\nGazprombank\\nIslamic Revolutionary Guard Corps\\nAcme Coffee Roasters LLC"
}' |
apify call webdata_labs/sanctions-screening-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=webdata_labs/sanctions-screening-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/JjRVbFCvD40ljr6Pn/builds/cu4YZ45k5hMyhXVyM/openapi.json
