# OFAC SDN List Scraper (`crawlergang/ofac-sdn-scraper`) Actor

Scrape the US Treasury OFAC Specially Designated Nationals (SDN) list - the official US government sanctions database. Search or filter sanctioned individuals, entities, vessels, and aircraft by name, program, type, or country. Fully public XML source, no API key required.

- **URL**: https://apify.com/crawlergang/ofac-sdn-scraper.md
- **Developed by:** [Crawler Gang](https://apify.com/crawlergang) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## OFAC SDN List Scraper

Scrape the US Treasury OFAC (Office of Foreign Assets Control) Specially Designated Nationals (SDN) list — the official US government sanctions database. Search and filter sanctioned individuals, entities, vessels, and aircraft by name, program, type, or country. Fully public data, no API key or credentials required.

### What you can do

- **Search by name** — find any sanctioned person, organization, or vessel by name or alias
- **Filter by sanctions program** — get all entries under SDGT, IRAN, RUSSIA, CUBA, DPRK, UKRAINE, and 20+ other programs
- **Browse by type** — filter to only Individuals, Entities, Vessels, or Aircraft
- **Filter by country** — narrow results to entries associated with a specific country
- **Download the full list** — retrieve all 19,000+ SDN entries in one run

### Output fields

Each record includes the fields that are present in the source data. Fields are omitted if not applicable (e.g. vessel fields only appear for vessels, date of birth only appears for individuals).

| Field | Description |
|---|---|
| `uid` | OFAC unique identifier |
| `name` | Full concatenated name |
| `firstName` | First name (individuals only) |
| `lastName` | Last name or entity name |
| `title` | Title or role (if present) |
| `type` | `Individual`, `Entity`, `Vessel`, or `Aircraft` |
| `programs` | List of sanctions programs (e.g., `["SDGT", "IRAN"]`) |
| `aliases` | Known aliases and alternate names |
| `addresses` | Known addresses |
| `nationality` | Primary nationality (individuals) |
| `dateOfBirth` | Date of birth (individuals) |
| `placeOfBirth` | Place of birth (individuals) |
| `idNumbers` | Identity documents (passport, national ID, tax ID) — list of `{idType, idNumber, country}` |
| `vesselType` | Vessel type (vessels only, e.g., `Tug`, `Cargo`) |
| `vesselFlag` | Flag state (vessels only) |
| `vesselOwner` | Registered owner (vessels only) |
| `vesselTonnage` | Gross registered tonnage (vessels only) |
| `vesselCallSign` | Radio call sign (vessels only) |
| `sourceUrl` | OFAC SDN list source page |
| `scrapedAt` | ISO timestamp of when the record was collected |
| `recordType` | Always `"sdn_entry"` |

### Input parameters

| Parameter | Type | Description |
|---|---|---|
| `mode` | select | `search` (filter by name/type/country), `byProgram` (all entries for a program), `all` (entire list) |
| `searchQuery` | text | Name or alias substring to match (mode=search). Example: `Putin`, `Al-Qaeda`, `Sberbank` |
| `program` | select | Sanctions program code (mode=byProgram). Examples: `SDGT`, `IRAN`, `RUSSIA`, `CUBA`, `DPRK` |
| `filterType` | select | Restrict to `Individual`, `Entity`, `Vessel`, or `Aircraft` |
| `filterCountry` | text | Only entries associated with this country (partial, case-insensitive) |
| `maxItems` | integer | Maximum number of records to return (default: 100, max: 25,000) |

### Example use cases

**Find all Russian sanctions entries:**

- mode: `byProgram`, program: `RUSSIA`, maxItems: `5000`

**Search for a specific sanctioned person:**

- mode: `search`, searchQuery: `Al-Baghdadi`

**Get all sanctioned Iranian vessels:**

- mode: `byProgram`, program: `IRAN`, filterType: `Vessel`, maxItems: `1000`

**Download the full SDN list:**

- mode: `all`, maxItems: `25000`

**Find sanctioned Cuban entities:**

- mode: `byProgram`, program: `CUBA`, filterType: `Entity`, maxItems: `2000`

### Data source

US Treasury OFAC Specially Designated Nationals XML list — publicly available at <https://www.treasury.gov/ofac/downloads/sdn.xml>. Updated regularly by the US Treasury Department. The SDN list contains over 19,000 entries across dozens of sanctions programs.

The source URL for citations is: <https://ofac.treasury.gov/sdntxt.aspx>

### FAQs

**Does this require an API key or login?**
No. The OFAC SDN list is a fully public government document — no registration, no API key, no paid plan required.

**How many entries are in the SDN list?**
As of mid-2026, the list contains over 19,000 entries including individuals, entities, vessels, and aircraft.

**What is the OFAC SDN list?**
The Specially Designated Nationals (SDN) list is maintained by the US Treasury's Office of Foreign Assets Control. It identifies individuals and organizations subject to US economic and trade sanctions. US persons and companies are generally prohibited from dealing with SDN-listed parties.

**What sanctions programs are covered?**
The list includes dozens of programs including: SDGT (Global Terrorism), IRAN, RUSSIA, UKRAINE-EO13685, CUBA, DPRK (North Korea), SYRIA, VENEZUELA, GLOBAL-MAGNITSKY, BELARUS, MYANMAR, and many others.

**How often is the data updated?**
The actor downloads fresh data from the OFAC servers on every run. OFAC typically updates the SDN list multiple times per week.

**Can I search by passport number or national ID?**
Yes — use `mode=search` with `searchQuery` set to the document number. The search matches against all name fields and aliases. Note: identity document data is in the `idNumbers` output field.

**What are the vessel fields?**
Vessel entries include `vesselType`, `vesselFlag`, `vesselOwner`, `vesselTonnage`, and `vesselCallSign`. These fields are only present for `Vessel` type entries.

# Actor input Schema

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

What to fetch from the OFAC SDN list.

## `searchQuery` (type: `string`):

Case-insensitive substring match against full name and aliases (mode=search). Example: 'Putin', 'Al-Qaeda', 'Sberbank'.

## `program` (type: `string`):

Sanctions program code to filter by. Examples: SDGT, IRAN, UKRAINE-EO13685, CUBA, DPRK, SYRIA. Case-insensitive.

## `filterType` (type: `string`):

Only return entries of this type.

## `filterCountry` (type: `string`):

Only return entries with a nationality or address in this country (case-insensitive partial match). Example: 'Russia', 'Iran', 'Syria'.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "Al-Qaeda",
  "program": "",
  "filterType": "",
  "maxItems": 100
}
```

# Actor output Schema

## `sdnEntries` (type: `string`):

Dataset containing all scraped OFAC SDN entries.

# 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 = {
    "mode": "search",
    "searchQuery": "Al-Qaeda",
    "program": "",
    "filterType": "",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlergang/ofac-sdn-scraper").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 = {
    "mode": "search",
    "searchQuery": "Al-Qaeda",
    "program": "",
    "filterType": "",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlergang/ofac-sdn-scraper").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 '{
  "mode": "search",
  "searchQuery": "Al-Qaeda",
  "program": "",
  "filterType": "",
  "maxItems": 100
}' |
apify call crawlergang/ofac-sdn-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlergang/ofac-sdn-scraper"
        }
    }
}

```

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/JJv1q7tu2Td6eo22H/builds/pFiMYUo7D3trnmp7r/openapi.json
