OFAC SDN Sanctions List Scraper icon

Lead generation

OFAC SDN Sanctions List Scraper — Name Screening + Bulk Export

Screen names against the US Treasury OFAC Specially Designated Nationals (SDN) sanctions list with fuzzy alias matching, or bulk-export the full parsed list filtered by program and entity type. No CSV wrangling, no OFAC ingestion pipeline to build.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

This Actor fetches the US Treasury's public OFAC SDN export (SDN.CSV, plus its ALT.CSV alias and ADD.CSV address companion files) and turns Treasury's raw legacy CSV format into structured, typed records. It runs in two modes:

matched verdict per name: matched or not, which SDN entities it matched, the match type (primary name vs. alias), and a score. A name that clears with zero matches is a successful result, not an error — that's a clean screening outcome, exactly what a compliance workflow needs to log. program code (e.g. CUBA, SDGT) and entity type (individual vs. entity), with aliases and addresses joined in on request.

What we handle for you

  • 🧊 Correct CSV parsing — Treasury's SDN export has no header row and uses a literal -0- string as its null sentinel; we map columns by position and convert -0- to a real null so you never see it in your data.
  • 🔗 Alias + address cross-referencingALT.CSV and ADD.CSV rows are joined back to their parent SDN entity by ent_num, not left as three disconnected files you'd have to join yourself.
  • 🎯 Tunable fuzzy matching — names are normalized (case, punctuation, diacritics) and scored with a string-similarity ratio, not brittle exact/substring matching. matchThreshold is yours to tighten or loosen per screening run.
  • Zero matches is a success, not a failure — a screened name that clears the sanctions list finishes with a clean matched: false row and a SUCCEEDED run, so you can log every screening outcome without treating "no hit" as an error.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts, Retry-After honoured, before we fail loud.
  • 💰 Pay-Per-Event pricing — you pay per name screened or record exported, not per page fetched. No results, no charge beyond the small warm-up fee.

Use cases

  • KYC/AML onboarding checks — screen new customer or counterparty names before account opening.
  • Vendor and partner due diligence — batch-screen a supplier or partner list ahead of a contract.
  • Payroll and HR screening — check new-hire names against the SDN list as part of a compliance workflow.
  • Compliance data warehousing — bulk-export the current SDN list filtered by program to keep an internal sanctions table fresh.
  • Fintech transaction screening prototypes — a pay-per-use SDN check to validate a screening flow before committing to a monitored SaaS contract.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
mode string no "screen" fuzzy-matches your names against the SDN list; "bulk" exports parsed SDN records filtered by program/entity type.
namesToScreen array no Required (non-empty) when Mode is "screen". One entry per name to check against the SDN list and its aliases.
matchThreshold number no Minimum fuzzy-match ratio (0.5-1.0) for a candidate to count as a hit. Higher = stricter.
includeAliases boolean no Also match/attach OFAC's known-alias (AKA) names, not just each entity's primary name.
includeAddresses boolean no Bulk mode only — attach known addresses to each exported record.
maxMatchesPerName integer no Screen mode only — cap on how many matches to return per screened name.
programFilter array no Bulk mode only — restrict export to these OFAC program codes (e.g. CUBA, SDGT). Leave empty for all programs.
entityTypeFilter string no Bulk mode only — restrict export by SDN entity type.
limit integer no Bulk mode only — max rows to export.
{
  "mode": "screen",
  "namesToScreen": [
    "Ayman Al-Zawahiri",
    "Jane Smith"
  ],
  "matchThreshold": 0.82,
  "includeAliases": true,
  "maxMatchesPerName": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

modefetched_atqueried_namematchedmatch_countmatchesent_numsdn_namesdn_typeprogram

{
  "mode": "screen",
  "fetched_at": "2026-09-09T07:24:46Z",
  "queried_name": "Ayman Al-Zawahiri",
  "matched": true,
  "match_count": 1,
  "matches": [
    {
      "ent_num": 2676,
      "matched_name": "AL ZAWAHIRI, Dr. Ayman",
      "match_type": "primary_name",
      "sdn_type": "individual",
      "program": "SDGT",
      "score": 0.91
    }
  ]
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Bulk record exported$0.0040Per result written to the dataset.
Name screened$0.0100Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • SDN list only, v1. The Consolidated (Non-SDN) sanctions list isn't included — its export filename wasn't confirmed live at build time.
  • US OFAC only. No EU, UN, UK, or other national sanctions lists.
  • Screening aid, not a compliance guarantee. Fuzzy matching can produce false positives or false negatives on ambiguous names. matchThreshold and per-match score are yours to tune and audit — this Actor doesn't replace a licensed compliance program.
  • No historical snapshots. Every run screens against the SDN list as currently published by Treasury; there's no diffing between publication dates.
  • No recurring monitoring in-Actor. For scheduled re-screening, layer Apify's own Scheduler on top of this Actor.

FAQ

Is the OFAC SDN list free?
Yes — Treasury publishes it publicly. You're paying for the parsing, alias cross-referencing, and fuzzy-matching layer, not the underlying data.
What counts as a "match"?
Any SDN primary name (and alias, if includeAliases is on) whose fuzzy-match score against your queried name is at or above matchThreshold.
Does a "no match" result cost anything?
Yes, the same as a match — the deliverable is the verdict, not just a hit. A clean screening result is still a result you need to log.
Can I screen a large batch of names in one run?
Yes — add as many entries to namesToScreen as you need; each is billed and returned as its own row.
Does this cover the EU, UN, or UK sanctions lists?
Not in v1 — this Actor is US OFAC SDN only.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run