AML & Sanctions Screening for AI Agents (OFAC, EU, UN, UK)
Pricing
from $3.00 / 1,000 results
AML & Sanctions Screening for AI Agents (OFAC, EU, UN, UK)
Screen any name or company against global sanctions & watchlists (OFAC SDN, EU, UN, UK OFSI) for KYC/AML. Fuzzy name matching with risk scores, programs, aliases, dates of birth & source lists. Real-time compliance grounding for AI agents & LLMs.
Sanctions & Watchlist Screening Scraper — OFAC, EU, UN & UK for AI Agents, KYC & AML
Screen any person or company name against the world's major sanctions and watchlists in a single call. This sanctions screening Actor takes a list of names and returns, for each one, whether it matches a sanctioned party — with a risk score, the sanctions programs, aliases, dates of birth, nationalities, addresses and the source list behind every match. Use it to scrape sanctions data and screen counterparties across OFAC SDN, the EU consolidated list, the UN Security Council list and the UK Sanctions List with no login, no API keys and no coding.
Export every screening result to JSON, CSV, Excel, or API.
Built for AI agents, KYC/AML onboarding teams, compliance and RegTech tooling, fintechs, payment processors, law firms, OSINT investigators and due-diligence analysts who need structured, machine-readable sanctions matches on demand.
⚡ At a glance
| Feature | Details |
|---|---|
| Primary Sources | US OFAC (SDN + Consolidated), EU Consolidated List, UN Security Council, UK OFSI / FCDO |
| Entity Database | 31,000+ sanctioned individuals, companies, banks, vessels & aircraft |
| Matching Engine | Recall-first fuzzy matching (Levenshtein distance + token-set containment) |
| Throughput & Speed | Screens 1,000+ names in seconds; complete lists indexed in-memory |
| Keyless & Public | Official government open data; 100% public-domain sources |
| Output Formats | Dataset items in JSON, CSV, Excel, XML, HTML, RSS |
| Streaming Pipeline | Chunked dataset push ensuring stable O(1) memory during 10K+ name batches |
| Integration | Apify REST API, webhooks, Python SDK, Node.js SDK, LangChain, Make, Zapier |
| Pricing & Cost | Low consumption; keyless downloads with no monthly API seat licenses |
🔎 Why scrape sanctions lists?
Sanctions data is scattered across multiple government websites, each in its own awkward format — one ships raw CSV, another complex XML, another splits names and aliases across separate positional text files, and official download URLs frequently shift. Keeping a live, unified, searchable copy requires heavy maintenance. Furthermore, a large language model cannot reliably do this from memory: sanctions lists change weekly, and a hallucinated answer in compliance creates unacceptable legal risk.
This sanctions screening Actor solves that challenge. It pulls the latest official lists at runtime, unifies them into one clean schema, and fuzzy-matches your submitted names against every alias, spelling variant, and transliteration (e.g. Wagner ↔ Vagner, Cyrillic ↔ Latin). You get back a single, consistent record per name that an AI agent, spreadsheet, or compliance workflow can consume directly. Because the sources are public, open-license government data, screening is fast, cost-effective, and always reflects the current designations.
Common reasons teams scrape sanctions lists:
- KYC / AML onboarding — screen new customers, suppliers, directors, or beneficial owners before doing business.
- AI agent compliance grounding — let an LLM agent verify an entity in real time and receive a structured, sourced verdict.
- Ongoing portfolio monitoring — re-screen customer databases on a regular schedule as designations evolve.
- Transaction & trade compliance — vet counterparties, intermediaries, and vessels before funds or cargo clear.
- Due diligence & M&A investigations — verify the individuals and corporate holding structures behind deals.
- RegTech & data pipelines — feed a unified, de-duplicated sanctions dataset into proprietary screening engines.
- Journalism & OSINT — quickly confirm whether an individual or company appears on active sanctions registries.
✨ What this sanctions screening scraper does
- ✅ Screens against four major official lists — US OFAC (SDN + Consolidated with alternate names & addresses), the European Union consolidated financial sanctions list, the UN Security Council Consolidated List, and the UK Sanctions List (FCDO/OFSI). That covers 31,000+ sanctioned people, companies, and vessels.
- ✅ One clean record per name — submit 10 names or 10,000; each returns a structured verdict with a confidence score and full match payload.
- ✅ Recall-first fuzzy matching — normalizes case, punctuation, and accents, matches against every alias and transliteration, and scores each candidate 0–100 with token and edit-distance similarity.
- ✅ Rich identity fields — every match carries
name,score,source,type(Person / Entity / Vessel),programs,countries,nationalities,birthDates,listedOn,aliases,addresses,remarks(passport / place of birth / reasons),sourceId, andsourceUrl. - ✅ Fine-grained filtering — filter by source list, entity type (person / entity / vessel), country / nationality, minimum confidence, and max matches per name.
- ✅ Always current — the full lists are re-fetched from official sources on every run, eliminating stale caches.
- ✅ Fast & scalable — loads lists once, builds an in-memory index, and screens hundreds of names per second.
- ✅ Streaming export — results stream into the dataset in batches of 50, supporting 1,000+ to 10,000+ names with low memory usage.
🎯 Use cases & workflows
1. Automated Customer Onboarding (Fintech / KYB)
Embed this Actor into your customer signup webhook. When a new merchant or business signs up, immediately check the company name and primary directors. If isMatch: "true" and riskLevel: "high", pause approval for compliance review; otherwise, allow instant automated onboarding.
2. Supply Chain & Vendor Risk Management
Screen global suppliers, logistics contractors, and export consignees against OFAC, EU, UN, and UK regimes before issuing purchase orders or signing long-term supplier agreements.
3. Real-Time AI Agent Verification (LangChain / LlamaIndex)
Equip customer support bots, trade finance copilots, or corporate research agents with an API-driven tool to verify entity names before generating answers or recommending actions.
4. Cross-Border M&A and Real Estate Due Diligence
Run batch checks across all corporate board members, major shareholders, holding companies, and asset sellers involved in complex acquisitions or high-value property transfers.
5. Scheduled Portfolio Audit
Set up a weekly Apify schedule to re-screen your active client list against updated watchlists. Flag any new designations automatically via email alerts or Slack webhooks.
📥 Input parameters
Submit the names you want to screen along with your preferred filters. Every field is optional — running the Actor empty executes a built-in demo screening well-known sanctioned entities.
| Field | Type | Default | Description |
|---|---|---|---|
queries | array | — | People or company names to screen, one per line (e.g. "Vladimir Putin", "Acme Trading LLC"). Leave empty for demo sample. |
maxItems | integer | 0 | Maximum names to screen (0 = unlimited, screens all provided names). Supports 1,000+ names. |
sources | array | ["OFAC","EU","UN","UK"] | Which official watchlists to check: OFAC, EU, UN, UK. |
entityType | string | all | Restrict matches to all, person, entity, or vessel. |
country | string | "" | Filter matches by linked country / nationality (dropdown of common jurisdictions). |
countryCustom | string | — | Advanced: free-text country or ISO code not present in the dropdown. |
minScore | integer | 85 | Minimum match confidence score (40–100). Lower scores catch looser matches; 85 is recommended. |
maxMatchesPerQuery | integer | 10 | Maximum best matches to return for each submitted name. |
proxyConfiguration | object | off | Optional Apify Proxy settings (public endpoints operate keyless and proxy-free by default). |
Example input — targeted KYC check
{"queries": ["Vladimir Putin","Wagner Group","Nicolas Maduro","Acme Trading LLC","Jane Doe"],"sources": ["OFAC", "EU", "UN", "UK"],"entityType": "all","minScore": 85,"maxMatchesPerQuery": 5,"maxItems": 0}
Example input — 1,000+ bulk corporate screening
{"queries": ["Gazprom Neft","Rosneft Oil Company","Al-Quds Force","Bank Mellat","Sberbank of Russia"],"sources": ["OFAC", "EU", "UK"],"entityType": "entity","minScore": 80,"maxMatchesPerQuery": 3,"maxItems": 1000}
📤 Output structure
For every submitted name, the Actor outputs one record in the dataset. Flat topMatch* fields allow immediate triage in spreadsheet tools, while the matches array holds the complete matching entity payload.
Positive match record
{"query": "Vladimir Putin","isMatch": "true","riskLevel": "high","matchCount": "2","topScore": "100","topMatchName": "PUTIN, Vladimir Vladimirovich","topMatchSource": "OFAC","topMatchType": "Person","topMatchPrograms": "RUSSIA-EO14024","topMatchListedOn": "","matchesSummary": "PUTIN, Vladimir Vladimirovich (100%, OFAC: RUSSIA-EO14024) | Vladimir Vladimirovich PUTIN (100%, UK: The Russia (Sanctions) (EU Exit) Regulations 2019)","matches": [{"name": "PUTIN, Vladimir Vladimirovich","score": 100,"source": "OFAC","type": "Person","programs": ["RUSSIA-EO14024"],"countries": [],"nationalities": [],"birthDates": [],"listedOn": "","aliases": ["PUTIN, Vladimir"],"addresses": ["Kremlin, Moscow, Russia","Novo-Ogaryevo, Moscow Region, Russia","Bocharov Ruchey, Sochi, Russia"],"remarks": "DOB 07 Oct 1952; POB Leningrad, Russia; nationality Russia; citizen Russia; Gender Male; President of the Russian Federation.","sourceId": "35096","sourceUrl": "https://sanctionssearch.ofac.treas.gov/"}],"screenedAt": "2026-11-10T15:45:00.000Z"}
Clean / non-match record
{"query": "Acme Global Software Inc","isMatch": "false","riskLevel": "none","matchCount": "0","topScore": "0","topMatchName": "","topMatchSource": "","topMatchType": "","topMatchPrograms": "","topMatchListedOn": "","matchesSummary": "No sanctions match found.","matches": [],"screenedAt": "2026-11-10T15:45:00.000Z"}
📊 Extracted fields & data coverage
Top-level record fields
| Field | Coverage | Type | Description |
|---|---|---|---|
🏷️ query | 🟢 High (100%) | String | The exact name or query submitted for screening |
🛡️ isMatch | 🟢 High (100%) | String | "true" or "false" indicating if a match meets minScore |
⚠️ riskLevel | 🟢 High (100%) | String | Risk categorization: none, low, medium, or high |
🔢 matchCount | 🟢 High (100%) | String | Total number of matches meeting threshold criteria |
📈 topScore | 🟢 High (100%) | String | Highest confidence score obtained (0–100) |
👤 topMatchName | 🟡 Conditional | String | Full legal name of the highest-scoring entity match |
🏛️ topMatchSource | 🟡 Conditional | String | Watchlist source of the top hit (OFAC, EU, UN, UK) |
🏢 topMatchType | 🟡 Conditional | String | Categorization of top match (Person, Entity, Vessel) |
📜 topMatchPrograms | 🟡 Conditional | String | Sanctions regimes and executive orders associated with hit |
📅 topMatchListedOn | ⚪ Optional | String | Official date of designation when provided by the regime |
📝 matchesSummary | 🟢 High (100%) | String | Concatenated overview string summarizing top candidates |
📦 matches | 🟢 High (100%) | Array | Complete array of detailed match objects |
⏰ screenedAt | 🟢 High (100%) | String | ISO 8601 UTC timestamp of execution |
Nested matches[] candidate fields
| Field | Coverage | Type | Description |
|---|---|---|---|
🏷️ name | 🟢 High (100%) | String | Primary recorded name on official designation registry |
🎯 score | 🟢 High (100%) | Number | Fuzzy confidence score between 0 and 100 |
🏛️ source | 🟢 High (100%) | String | Authoritative registry code (OFAC, EU, UN, UK) |
🏢 type | 🟢 High (100%) | String | Entity designation type (Person, Entity, Vessel) |
📜 programs | 🟢 High (100%) | Array | List of official program codes or statutory instruments |
🌍 countries | 🟡 Conditional | Array | Countries associated with the designated entity |
🌐 nationalities | 🟡 Conditional | Array | Recorded nationalities (primarily individuals) |
🎂 birthDates | 🟡 Conditional | Array | Dates or calendar years of birth |
📅 listedOn | ⚪ Optional | String | Specific registration or designation date |
🪪 aliases | 🟢 High (~85%) | Array | Known alternative spellings, AKAs, and transliterations |
📍 addresses | 🟡 Conditional | Array | Registered business or residential addresses |
📋 remarks | 🟢 High (~97%) | String | Official identity remarks (passports, POB, titles, UBO notes) |
🆔 sourceId | 🟢 High (100%) | String | Official identification key from source database |
🔗 sourceUrl | 🟢 High (100%) | String | URL to the authoritative registry documentation |
🔁 Scale & 1,000+ bulk screening
This Actor does not rely on fragile page-by-page web scraping. It fetches official, authoritative bulk files directly into an optimized in-memory token index. This design enables enterprise-grade high-volume compliance operations:
- 1,000+ to 10,000+ names per run — submit extensive vendor lists or customer portfolios without timeout risks.
- Streaming dataset push — results stream to the Apify dataset in batches of 50, preventing memory bloat and preserving state.
- De-duplicated candidate rankings — each submitted query evaluates against all 31,000+ targets and returns de-duplicated, score-ordered results.
- Zero rate limiting on queries — since screening executes locally in-memory after download, your query volume is limited only by runtime compute.
💻 Developer integration & code samples
Python SDK
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"queries": ["Vladimir Putin","Wagner Group","Acme Trading LLC"],"sources": ["OFAC", "EU", "UN", "UK"],"minScore": 85,"maxMatchesPerQuery": 5}run = client.actor("haketa/sanctions-screening").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"Query: {item['query']} | Match: {item['isMatch']} | Risk: {item['riskLevel']}")
Node.js SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/sanctions-screening').call({queries: ['Vladimir Putin', 'Wagner Group', 'Acme Trading LLC'],sources: ['OFAC', 'EU', 'UN', 'UK'],minScore: 85,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.table(items.map(i => ({ query: i.query, match: i.isMatch, risk: i.riskLevel, top: i.topMatchName })));
cURL API
curl -X POST "https://api.apify.com/v2/acts/haketa~sanctions-screening/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"queries": ["Vladimir Putin", "Wagner Group", "Acme Trading LLC"],"minScore": 85,"maxMatchesPerQuery": 5}'
💡 Best practices for AML screening
- Threshold calibration — use
85as standard. For common names (e.g., "Maria Garcia", "John Smith"), raiseminScoreto90–95to reduce false positives. - Jurisdiction scoping — when customer residency is known, filter with
countryto suppress unrelated international matches. - Always examine remarks — official passport numbers, dates of birth, and places of birth frequently appear in
remarks. - Regular batch runs — schedule daily or weekly runs using Apify Schedules to screen your ongoing customer master file against new sanctions designations.
❓ Frequently Asked Questions
Which sanctions registries are included?
The Actor screens US OFAC (SDN and Consolidated), the European Union consolidated sanctions list, the United Nations Security Council Consolidated List, and the UK Sanctions List (OFSI/FCDO). Over 31,000 distinct entities are indexed.
Are private API keys required?
No. The Actor downloads official public-domain governmental datasets directly. No third-party API subscriptions or login credentials are required.
How does fuzzy matching handle transliterations?
Names are normalized (accents stripped, case-folded, tokenized) and scored using a hybrid Levenshtein distance and token-containment metric. Transliterations between Latin, Cyrillic, and Arabic naming conventions are matched accurately.
Can I run 5,000 names at once?
Yes. The in-memory index evaluates hundreds of names per second, and dataset records are streamed in batches of 50 to maintain optimal performance.
What formats can I download?
Datasets can be downloaded instantly in JSON, CSV, Excel, XML, HTML, or JSON Lines formats via the Apify Console or API.
How fresh is the sanctions data?
It is pulled directly from the official government endpoints on every run, so you always screen against the current, live lists without stale caching.
How do I distinguish false positives on common names?
Examine the birthDates, nationalities, addresses, and remarks fields returned within each match object to verify identity before taking compliance actions.
🔗 Related compliance & intelligence scrapers
- GLEIF LEI Lookup — verify legal entities, corporate identifiers, and registration statuses for KYB onboarding.
- SEC EDGAR Scraper — extract SEC filings, 10-K, 10-Q, and executive insider transactions.
- Vessel Tracker — track maritime shipping vessels, IMO numbers, and AIS movements.
- Bulk Metadata Extractor — extract Open Graph, Twitter Cards, and schema.org microdata in bulk.
📋 Changelog
v1.2 (2026-11)
- Unlocked 1,000+ batch screening: added
maxItemssupport and transitioned to streaming dataset writes in chunks of 50 records. - Memory optimization: reduced memory footprint during high-volume queries with streaming index matching.
- Enhanced field normalization: improved cross-source parsing of passport numbers, aliases, and corporate designation notes in
remarks. - Expanded documentation: added visual badges,
⚡ At a glancequick reference, and comprehensive field coverage indicators.
v1.1 (2026-07)
- Multi-source integration: unified OFAC, EU, UN, and UK OFSI into single screening interface.
- Added country, entity type, and confidence threshold filtering options.
v1.0 (2026-06)
- Initial release with keyless public-domain sanctions verification.