# Global Sanctions & Watchlist Screen (US + UN + EU + UK) (`whetstonetools/ofac-sanctions-screen`) Actor

Screen a name across the big-four public sanctions sources in one call: US Consolidated Screening List (OFAC/BIS/State), UN Security Council, EU Consolidated, and UK Sanctions List. Fuzzy matching, each hit tagged by jurisdiction. No API keys.

- **URL**: https://apify.com/whetstonetools/ofac-sanctions-screen.md
- **Developed by:** [Griffin](https://apify.com/whetstonetools) (community)
- **Categories:** Lead generation, Business
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/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 & Watchlist Screen — US (OFAC/BIS/State) + UN + EU + UK

Screen a person or business name across the **big four** public sanctions and watchlist sources in a single call:

- **US** — the full **U.S. Government Consolidated Screening List (CSL)** (OFAC SDN + Treasury non-SDN lists, Commerce/BIS lists, and State Department lists)
- **UN** — the **UN Security Council Consolidated List** (all UNSC sanctions committees)
- **EU** — the **EU Consolidated Financial Sanctions List** (FSF / FISMA)
- **UK** — the **UK Sanctions List** (OFSI / FCDO)

Every match is tagged with the specific **source list** and its **jurisdiction** (`US` / `UN` / `EU` / `UK`), so you can see exactly which government list flagged the name. An optional `jurisdictions` filter lets you screen against any subset.

### Lists covered

#### US — Consolidated Screening List (12 lists in one bulk feed)

| Agency | List | Abbreviation |
|---|---|---|
| Treasury / OFAC | Specially Designated Nationals | SDN |
| Treasury / OFAC | Capta List | CAP |
| Treasury / OFAC | Sectoral Sanctions Identifications | SSI |
| Treasury / OFAC | Non-SDN Chinese Military-Industrial Complex Companies | CMIC |
| Treasury / OFAC | Non-SDN Menu-Based Sanctions | NS-MBS |
| Treasury / OFAC | Palestinian Legislative Council | PLC |
| Commerce / BIS | Entity List | EL |
| Commerce / BIS | Denied Persons List | DPL |
| Commerce / BIS | Unverified List | UVL |
| Commerce / BIS | Military End-User List | MEU |
| State Department | ITAR Debarred | DTC |
| State Department | Nonproliferation Sanctions | ISN |

#### International

| Jurisdiction | List | Maintained by |
|---|---|---|
| UN | UN Security Council Consolidated List | UN Security Council |
| EU | EU Consolidated Financial Sanctions List (FSF) | European Commission (FISMA) |
| UK | UK Sanctions List | OFSI / FCDO (HM Treasury) |

### What it does

1. Fetches each selected source fresh on every run — the US CSL bulk JSON from `data.trade.gov`, plus the UN, EU, and UK sanctions XML feeds — and normalizes all of them into one common record shape.
2. Matches your query against **primary names and AKA / alternate names** using Jaro-Winkler + Dice bigram similarity with token-overlap false-positive guards.
3. Returns only matches above your configured score threshold (default 85/100), each tagged with its **source list** and **jurisdiction**.
4. Resilient by design: if an international feed is temporarily unreachable, the run logs a warning and continues with the remaining lists — a single downed source never fails the whole run.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `name` | string | required | Person or business name to screen |
| `minScore` | integer | 85 | Match score threshold (0–100); 85 balances recall vs. false-positive rate |
| `includeAliases` | boolean | true | Also match against AKA / alternate names |
| `maxResults` | integer | 100 | Cap on returned matches |
| `jurisdictions` | string\[] | \[] (all) | Restrict to any of `US`, `UN`, `EU`, `UK` (case-insensitive). Empty = all four |
| `lists` | string\[] | \[] (all) | Optional finer filter: source-list name substrings (e.g. `["SDN", "Entity List", "UN Security Council"]`), matched case-insensitively against each hit's `source` |

#### Input example

```json
{
  "name": "Wagner Group",
  "minScore": 85,
  "includeAliases": true,
  "jurisdictions": ["US", "UN", "EU", "UK"]
}
```

### Output record shape

Each dataset item contains:

- `name` — Primary name on the list
- `matchedOn` — `"primary"` or `"aka"`
- `score` — 0–100 fuzzy-match score
- `jurisdiction` — `"US"` | `"UN"` | `"EU"` | `"UK"`
- `source` — The specific source list (e.g. `"Specially Designated Nationals (SDN) - Treasury Department"`, `"UN Security Council Consolidated List"`, `"EU Consolidated Financial Sanctions List"`, `"UK Sanctions List (OFSI/FCDO)"`)
- `type` — `Individual` | `Entity` | `Vessel` | `Aircraft` (where available)
- `programs` — Array of sanctions/control program codes or regime names
- `akaList` — Array of alternate/AKA name strings
- `addresses` — Array of address strings
- `ids` — Array of `{type, number, country?}` structured IDs (passport / national ID / document numbers, where available)
- `federalRegisterNotice` — Federal Register citation (US BIS lists; `null` for international sources)
- `uid` — Source-specific unique ID (US CSL id, or `UN-…` / `EU-…` / `UK-…`)
- `sourceListUrl` — URL to the official source list
- `remarks` — Free-text remarks from the source agency

### Billing

Pay-per-result (Apify PPE): each matched record in the dataset counts as one item. A query that returns zero matches costs only the base compute time — not per-result charges.

### Use cases

- **KYC / KYB pre-screening** — check counterparty names against US, UN, EU, and UK lists before onboarding
- **Global sanctions / AML compliance** — one call covers OFAC (US), UN, EU, and UK designations
- **Export control compliance** — screen suppliers and customers against BIS Entity List, DPL, UVL, MEU
- **State Dept ITAR** — check against ITAR Debarred and Nonproliferation Sanctions
- **Business entity verification** — cross-reference company names from business registration tools (see [Secretary of State Business Entity Search (KYB)](https://apify.com/whetstonetools/secretary-of-state-business-search))

### Cross-sell

Pair this actor with the [**Secretary of State Business Entity Search (KYB)**](https://apify.com/whetstonetools/secretary-of-state-business-search) to: (1) pull public registry data on a company across 28 states, (2) run the company name + all officers through this watchlist screen, (3) get a full KYB package in one workflow.

Automate compliance workflows with secretary-of-state filing data from [**FilingSheet**](https://filingsheet.com) — structured business entity data with officer names ready for screening.

### Data sources and scope

All sources are public / open government data, fetched fresh on each run. No API keys, no login, no paid feeds.

- **US** — U.S. International Trade Administration Consolidated Screening List (`data.trade.gov`). [U.S. Government Works (public domain)](https://www.usa.gov/government-copyright). Updated daily.
- **UN** — UN Security Council Consolidated List (`scsanctions.un.org`).
- **EU** — EU Consolidated Financial Sanctions List, published by the European Commission (FISMA) via the FSF export service.
- **UK** — UK Sanctions List, published by OFSI / FCDO (`sanctionslist.fcdo.gov.uk`).

### Caveats

- This tool is for research and informational purposes. It is **not a substitute for a certified AML / sanctions compliance program** or legal advice.
- Fuzzy matching may produce false positives at low thresholds. Tune `minScore` for your use case. The default 85 is conservative; 90+ gives higher precision with some recall loss.
- Coverage is the big-four public lists above; it does not include every national or regional list (e.g. OFAC does not equal every US list, and other countries maintain their own).
- Results reflect each source's snapshot published at the time of the run.
- **EU feed maintenance note:** the EU FSF export is served via a public (password-free) download link that carries a `token` query parameter. The token is long-lived but the EU can rotate it; if the EU feed ever stops returning data, the token in `src/sources.js` needs a one-line refresh. The other three feeds (US/UN/UK) use stable URLs. If the EU source is down, the run still returns US/UN/UK results.

### FAQ

**How do I check if a company or person is on a global sanctions or watchlist?**
Run this actor with the `name` you want to screen. It matches that name against the US Consolidated Screening List (OFAC SDN, BIS Entity List, State Dept, and more), the UN Security Council list, the EU consolidated financial sanctions list, and the UK Sanctions List — and returns any matches with the specific list and jurisdiction that flagged them.

**Which watchlists does it screen against?**
US (all 12 CSL sources: OFAC SDN, CAP, SSI, CMIC, NS-MBS, PLC; BIS Entity List, DPL, UVL, MEU; State Dept ITAR Debarred and Nonproliferation), plus the UN Security Council Consolidated List, the EU Consolidated Financial Sanctions List, and the UK Sanctions List. Use the `jurisdictions` input to screen any subset.

**Can I screen only one jurisdiction?**
Yes. Set `jurisdictions` to any subset, e.g. `["US"]` for US-only (the original behavior), or `["EU","UK"]` for Europe only.

**Is there a free global sanctions / OFAC screening API?**
This actor is pay-per-result — you only pay for matches returned, and a clean (zero-match) screen costs only base compute. All underlying data is public / open government data, sourced live from the official feeds.

**How does it avoid false positives?**
It scores each candidate with Jaro-Winkler + Dice bigram similarity plus token-overlap guards, and only returns matches above your `minScore` (default 85). Raise it to 90+ for higher precision.

**Is this a substitute for a compliance program?**
No. It's for research and pre-screening. It is not a certified AML / sanctions compliance program or legal advice; consult a compliance specialist for a full program.

# Actor input Schema

## `name` (type: `string`):

The person or business name to check across the big four public sanctions/watchlist sources: US Consolidated Screening List (OFAC SDN, BIS Entity List/DPL/UVL/MEU, State Dept ITAR/ISN), UN Security Council Consolidated List, EU Consolidated Financial Sanctions List, and the UK Sanctions List. Each hit is tagged with its source list and jurisdiction (US/UN/EU/UK).

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

Minimum fuzzy-match score threshold (0–100). Matches below this score are suppressed. Default 85 balances recall vs. false-positive rate.

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

When true, the query is also matched against alternate names (alt\_names) on the CSL in addition to primary names.

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

Cap on the number of matching records to return. Set lower to control per-run cost.

## `jurisdictions` (type: `array`):

Restrict screening to specific jurisdictions/sources. Any of US, UN, EU, UK (case-insensitive). US = full U.S. Consolidated Screening List; UN = UN Security Council; EU = EU Consolidated Financial Sanctions; UK = UK Sanctions List. Leave empty to screen ALL four.

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

Optional finer filter: source-list name substrings to restrict screening to (e.g. \["SDN", "Entity List", "UN Security Council"]). Leave empty to screen all lists in the selected jurisdictions. Case-insensitive substring match against each hit's source field.

## Actor input object example

```json
{
  "name": "Huawei Technologies",
  "minScore": 85,
  "includeAliases": true,
  "maxResults": 100,
  "jurisdictions": [
    "US",
    "UN",
    "EU",
    "UK"
  ],
  "lists": []
}
```

# 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 = {
    "name": "Huawei Technologies",
    "jurisdictions": [
        "US",
        "UN",
        "EU",
        "UK"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("whetstonetools/ofac-sanctions-screen").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 = {
    "name": "Huawei Technologies",
    "jurisdictions": [
        "US",
        "UN",
        "EU",
        "UK",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("whetstonetools/ofac-sanctions-screen").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 '{
  "name": "Huawei Technologies",
  "jurisdictions": [
    "US",
    "UN",
    "EU",
    "UK"
  ]
}' |
apify call whetstonetools/ofac-sanctions-screen --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/tK56xMxAgzUSlB2V8/builds/6sNgvvUj8vCu1VXIo/openapi.json
