Global Sanctions & Watchlist Search
Pricing
from $3.00 / 1,000 entity fetcheds
Global Sanctions & Watchlist Search
Search OFAC, EU, UN, UK sanctions lists and PEP databases for AML/KYC compliance screening. Screen individuals, companies, vessels via OpenSanctions API with fuzzy name matching.
Pricing
from $3.00 / 1,000 entity fetcheds
Rating
0.0
(0)
Developer

ryan clinton
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 hours ago
Last modified
Categories
Share
OpenSanctions Search
Search global sanctions lists, PEP databases, and international watchlists powered by the OpenSanctions API. This Apify actor screens names against 100+ official regulatory sources -- including US OFAC SDN, EU Financial Sanctions, UN Security Council, UK HMT, Canadian DFATD, and Australian DFAT -- returning structured, machine-readable results for compliance automation.
OpenSanctions Search uses fuzzy name matching to catch transliterations, alternate spellings, and partial matches across individuals, organizations, companies, vessels, aircraft, and crypto wallets. Every result is enriched with aliases, nationalities, identification numbers, sanctions programs, listing dates, and direct links to the OpenSanctions entity profile.
Whether you are a compliance officer running KYC checks, a fintech company building automated AML screening pipelines, or a journalist investigating sanctioned entities, this actor delivers clean JSON output that plugs directly into your existing workflows through the Apify platform.
Why use OpenSanctions Search?
- 100+ sanctions sources in one query -- no need to build separate integrations for OFAC, EU, UN, UK, and dozens of other national watchlists.
- No infrastructure to maintain -- the actor runs in the Apify cloud with automatic pagination, rate limit handling, and retry logic built in.
- Scheduled screening -- use Apify Schedules to re-run sanctions checks daily or weekly, catching new listings as they appear.
- Pipeline-ready output -- connect results to webhooks, Google Sheets, Slack, Zapier, or downstream actors for automated alerting and reporting.
- Pay only for what you use -- Apify's usage-based pricing means ad-hoc checks and high-volume batch screening are both cost-effective.
- Dry-run mode -- runs without an API key to show setup instructions, so you can test the workflow before committing to an OpenSanctions account.
Key features
- Fuzzy name matching catches transliterations, alternate spellings, and partial name matches automatically
- Entity type filtering narrows results to individuals, organizations, companies, legal entities, vessels, aircraft, or crypto wallets
- 9 dataset scopes including all-inclusive default, sanctions-only, PEPs-only, and 6 specific national lists
- Topic filtering for sanctions, PEPs, criminal records, debarments, and relatives/close associates
- Country filtering using ISO two-letter country codes (e.g., RU, IR, KP, SY)
- Automatic pagination fetches up to 200 results across multiple API pages with 500ms delay between requests
- Rate limit handling with automatic 5-second retry on HTTP 429 responses
- Rich entity data including aliases, identifiers (passport, tax, registration numbers), positions, programs, and remarks
- Direct source links to the OpenSanctions entity profile for each result
- Dry-run mode returns detailed setup instructions when no API key is provided
How to use
Using the Apify Console
- Go to the OpenSanctions Search actor page on the Apify Store.
- Click Start to open the input configuration.
- Enter your OpenSanctions API key (get a free trial at opensanctions.org/account).
- Type a search query such as a person name, organization, or company.
- Optionally set entity type, country, dataset, or topic filters.
- Set the maximum number of results (1--200, default 50).
- Click Run and view results in the Dataset tab.
Using the Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("ryanclinton/opensanctions-search").call(run_input={"apiKey": "YOUR_OPENSANCTIONS_API_KEY","query": "Gazprombank","entityType": "Company","dataset": "sanctions","maxResults": 20,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsfor item in items:print(f"{item['name']} -- {item['entityType']} -- {item['listSources']}")
JavaScript:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });const run = await client.actor("ryanclinton/opensanctions-search").call({apiKey: "YOUR_OPENSANCTIONS_API_KEY",query: "Gazprombank",entityType: "Company",dataset: "sanctions",maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((item) => {console.log(`${item.name} -- ${item.entityType} -- ${item.listSources}`);});
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
apiKey | string | No | -- | OpenSanctions API key. Without it the actor runs in dry-run mode. Get a free trial at opensanctions.org/account. |
query | string | Yes | -- | Name or entity to search for (e.g., "Putin", "Bank of Syria", "Gazprombank"). |
entityType | string | No | Thing | Entity type filter: Thing (all), Person, Organization, Company, LegalEntity, Vessel, Airplane, Crypto. |
country | string | No | -- | Two-letter ISO country code (e.g., RU, IR, KP, SY). |
dataset | string | No | default | Dataset scope: default, sanctions, peps, us_ofac_sdn, eu_fsf, un_sc_sanctions, gb_hmt_sanctions, ca_dfatd_sema_sanctions, au_dfat_sanctions. |
topics | string | No | -- | Topic filter: sanction, role.pep, crime, debarment, role.rca. |
maxResults | integer | No | 50 | Maximum results to return (1--200). |
Example input (JSON):
{"apiKey": "YOUR_OPENSANCTIONS_API_KEY","query": "Rosneft","entityType": "Company","country": "RU","dataset": "sanctions","topics": "sanction","maxResults": 25}
Tips:
- Use full names for individuals -- "Vladimir Putin" returns more precise results than "Putin" alone.
- Leave
entityTypeasThingwhen unsure whether a target is a person or organization. - Combine
countryandtopicsfilters to reduce noise on common names. - The
defaultdataset includes everything; use specific datasets likeus_ofac_sdnto search only that program.
Output
Each item in the output dataset contains the following fields:
{"name": "Vladimir Vladimirovich PUTIN","entityType": "Individual","aliases": ["Vladimir Putin","Wladimir Wladimirowitsch Putin","Vladimiras Putinas"],"countries": ["RU"],"listSources": ["us_ofac_sdn","eu_fsf","gb_hmt_sanctions","un_sc_sanctions","au_dfat_sanctions","ca_dfatd_sema_sanctions"],"topics": ["sanction", "role.pep"],"addresses": [],"dateOfBirth": "1952-10-07","gender": "male","nationality": ["RU"],"identifiers": {"Tax Number": ["7708395444"]},"positions": ["President of Russia"],"programs": ["RUSSIA-EO14024","UKRAINE-EO13660","UKRAINE-EO13661"],"remarks": ["Listed for actions undermining the territorial integrity, sovereignty, or independence of Ukraine."],"listingDate": "2022-02-25","lastSeenDate": "2025-04-10T00:00:00","lastChangeDate": "2025-03-15T00:00:00","matchScore": null,"sourceUrl": "https://www.opensanctions.org/entities/Q7747/","openSanctionsId": "Q7747","extractedAt": "2025-04-15T12:30:00.000Z"}
| Field | Type | Description |
|---|---|---|
name | string | Primary name (caption) of the sanctioned entity |
entityType | string | Mapped type: Individual, Organization, Company, Legal Entity, Vessel, Aircraft, Crypto Wallet |
aliases | string[] | Known alternate names, transliterations, and spelling variants |
countries | string[] | ISO country codes associated with the entity |
listSources | string[] | OpenSanctions dataset identifiers where this entity appears |
topics | string[] | Classification topics (sanction, role.pep, crime, debarment) |
addresses | string[] | Known addresses on file |
dateOfBirth | string/null | Date of birth for individuals |
gender | string/null | Gender for individuals |
nationality | string[] | Nationality codes for individuals |
identifiers | object | ID numbers grouped by type (Passport, Tax Number, Registration Number, ID Number) |
positions | string[] | Political or organizational positions held |
programs | string[] | Specific sanctions programs under which the entity is listed |
remarks | string[] | Notes, descriptions, and reasons for listing |
listingDate | string/null | Date the entity first appeared in sanctions data |
lastSeenDate | string/null | Date the entity was last verified in source data |
lastChangeDate | string/null | Date the entity record was last modified |
matchScore | number/null | Relevance score from the search engine |
sourceUrl | string | Direct link to the entity profile on opensanctions.org |
openSanctionsId | string | Unique OpenSanctions entity identifier |
extractedAt | string | ISO timestamp of when this data was extracted |
Use cases
- KYC/AML compliance screening -- check customer and counterparty names against global sanctions lists before onboarding.
- Ongoing monitoring -- schedule daily or weekly runs to detect when existing clients appear on newly updated watchlists.
- PEP identification -- screen business contacts and beneficial owners against the politically exposed persons database.
- Corporate due diligence -- verify that companies, subsidiaries, and partners are not subject to international sanctions.
- Vessel and aircraft tracking -- identify sanctioned ships and aircraft by name for trade compliance in shipping and logistics.
- Crypto compliance -- screen crypto wallet identifiers against sanctions lists for blockchain compliance programs.
- Journalist investigations -- research sanctioned individuals and their network of associates, positions, and linked entities.
- Regulatory reporting -- generate structured evidence of sanctions screening for audit trails and compliance documentation.
- Risk scoring pipelines -- feed sanctions data into automated risk assessment systems via the Apify API.
- Multi-jurisdictional screening -- search across US, EU, UN, UK, Canadian, and Australian lists in a single query.
API & integration
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("6Zlkz0wjdXewfq3yK").call(run_input={"apiKey": "YOUR_OPENSANCTIONS_API_KEY","query": "Bank Melli Iran","entityType": "Organization","country": "IR","dataset": "sanctions","maxResults": 30,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['name']} | Sources: {', '.join(item['listSources'])}")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });const run = await client.actor("6Zlkz0wjdXewfq3yK").call({apiKey: "YOUR_OPENSANCTIONS_API_KEY",query: "Bank Melli Iran",entityType: "Organization",country: "IR",dataset: "sanctions",maxResults: 30,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(JSON.stringify(items, null, 2));
cURL
curl -X POST "https://api.apify.com/v2/acts/6Zlkz0wjdXewfq3yK/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"apiKey": "YOUR_OPENSANCTIONS_API_KEY","query": "Bank Melli Iran","entityType": "Organization","country": "IR","dataset": "sanctions","maxResults": 30}'
Integrations
Connect the output dataset to any of these platforms:
- Apify Webhooks -- trigger HTTP callbacks when a run completes for real-time alerting.
- Google Sheets -- export results to a shared compliance dashboard via the Apify integration.
- Slack / Microsoft Teams -- send notifications when sanctioned entities are found.
- Zapier / Make (Integromat) -- connect to 5,000+ apps for downstream automation.
- Amazon S3 / Google Cloud Storage -- archive screening results for audit trails.
- REST API -- retrieve results programmatically from any language or platform.
How it works
- Input validation -- the actor reads your search query and configuration, validates required fields, and applies defaults.
- API key check -- if no API key is provided, the actor outputs dry-run instructions and exits. Otherwise, it proceeds to query the OpenSanctions API.
- Paginated search -- the actor sends requests to
api.opensanctions.org/search/{dataset}with fuzzy matching enabled, fetching up to 50 results per page. - Rate limit handling -- if the API returns HTTP 429, the actor waits 5 seconds and retries the same request.
- Entity transformation -- each raw API response is mapped to a clean output format with human-readable entity types, grouped identifiers, and consolidated remarks.
- Result collection -- pages are fetched with 500ms delays until the maximum result count is reached or no more results are available.
- Dataset push -- all transformed results are pushed to the Apify dataset for export in JSON, CSV, XML, or Excel format.
OpenSanctions Search Pipeline[Input Query]|v[Validate Input & Check API Key]|+-- No key --> [Dry-Run: Output Setup Instructions] --> END|v[Build Search Request (fuzzy=true, simple=true)]|v[Send to api.opensanctions.org/search/{dataset}]|+-- HTTP 429 --> [Wait 5s] --> [Retry Same Page]|v[Transform Entities: Map Types, Extract Fields]|v[More pages needed?]|+-- Yes --> [Wait 500ms] --> [Fetch Next Page]|+-- Nov[Push Results to Apify Dataset]|vEND
Performance & cost
| Scenario | Results | Memory | Duration | Apify Cost (est.) |
|---|---|---|---|---|
| Single name check | 1--10 | 256 MB | 5--10s | ~$0.001 |
| Standard screening | 50 | 256 MB | 10--20s | ~$0.002 |
| Deep search (common name) | 200 | 256 MB | 20--30s | ~$0.004 |
| Daily scheduled screening | 50/run | 256 MB | 10--20s | ~$0.06/month |
Notes:
- Apify compute costs are based on 256 MB memory allocation. The actor does not require more memory.
- OpenSanctions API costs are separate. Free trial keys are available for business email signups. Check opensanctions.org for current pricing.
- The Apify free tier provides $5/month of compute, enough for hundreds of screening runs.
Limitations
- Single query per run -- the actor searches one name at a time. For batch screening, call the actor multiple times via the API or use Apify task queues.
- 200 result maximum -- each run returns at most 200 entities. Highly common names may have more matches available in the API.
- API key required for live data -- without an OpenSanctions API key, the actor only outputs setup instructions in dry-run mode.
- No match scoring from API -- the
matchScorefield is reserved but currently returnsnullas the OpenSanctions search endpoint does not expose relevance scores. - Data freshness depends on OpenSanctions -- the underlying database is updated daily by OpenSanctions, but there may be a delay between official list updates and API availability.
- Rate limits apply -- the OpenSanctions API enforces rate limits based on your subscription tier. The actor handles 429 responses with automatic retries, but sustained high-volume usage requires an appropriate plan.
- Country codes must be ISO 3166-1 alpha-2 -- full country names are not supported in the country filter field.
Responsible use
- Comply with OpenSanctions terms of service -- your use of this actor must adhere to the OpenSanctions licensing and usage terms. Non-commercial and journalistic use may have different terms than commercial use.
- Do not use as sole compliance evidence -- sanctions screening should be part of a broader compliance program. Always verify hits against official government sources before taking action.
- Protect API keys -- store your OpenSanctions API key securely. The actor input field is marked as a secret, but avoid sharing run logs that may contain key fragments.
- Respect data privacy regulations -- sanctions data may contain personal information. Ensure your processing of results complies with applicable data protection laws (GDPR, CCPA, etc.).
- Acknowledge data attribution -- OpenSanctions aggregates data from official government sources. When publishing or sharing results, attribute the data appropriately.
FAQ
Do I need an OpenSanctions API key? Yes. You need an API key from opensanctions.org/account to perform live searches. Without a key, the actor runs in dry-run mode and returns setup instructions. Free trial keys are available for business email addresses.
What sanctions lists are included? OpenSanctions aggregates over 100 sources including US OFAC SDN, EU Financial Sanctions, UN Security Council Sanctions, UK HMT Sanctions, Canadian DFATD, Australian DFAT, Interpol notices, and many national and international watchlists.
What is the difference between "default" and "sanctions" datasets?
The default dataset includes everything -- sanctions, PEPs, criminal records, and debarments. The sanctions dataset includes only sanctions list entries, excluding PEPs and other categories. Use specific national datasets like us_ofac_sdn to search only that program.
Can I search for companies and organizations?
Yes. Set entityType to Company or Organization. You can also search for vessels, aircraft, and crypto wallets using the appropriate entity type filter.
Does it support fuzzy matching?
Yes. Fuzzy matching is enabled by default (fuzzy=true, simple=true), so the actor finds results even when names are transliterated differently, contain diacritics, or have minor spelling variations.
How current is the data?
OpenSanctions updates their database daily. The lastSeenDate and lastChangeDate fields in each result indicate when the entry was last verified and last modified in the source data.
Can I screen multiple names in one run? No. Each run searches one query. For batch screening, call the actor programmatically via the Apify API in a loop, or use Apify task queues to process a list of names.
What does the "topics" filter do?
Topics categorize entities: sanction for sanctioned entities, role.pep for politically exposed persons, crime for criminal records, debarment for debarred entities, and role.rca for relatives and close associates of PEPs.
What happens if I exceed the OpenSanctions rate limit? The actor automatically detects HTTP 429 responses and waits 5 seconds before retrying. If rate limiting persists, consider upgrading your OpenSanctions plan or reducing request frequency.
Can I export results as CSV or Excel? Yes. The Apify platform lets you export any dataset as JSON, CSV, XML, RSS, or Excel directly from the Dataset tab or via the API.
How do I set up scheduled screening? In the Apify Console, go to your actor run configuration and click "Schedule." You can set daily, weekly, or custom cron schedules. Each scheduled run uses the same input parameters you configure.
Is this actor suitable for production compliance systems? Yes. The structured JSON output, automatic pagination, and rate limit handling make it suitable for integration into production AML/KYC pipelines. Pair it with Apify webhooks for real-time alerting.
Related actors
| Actor | Description |
|---|---|
| OFAC Sanctions Search | Search the US OFAC Specially Designated Nationals list directly. Use for US-specific sanctions screening without the broader OpenSanctions database. |
| Interpol Red Notice Search | Search Interpol's international wanted persons database. Complement sanctions screening with criminal watchlist checks. |
| UK Companies House | Look up UK company registration details for corporate due diligence alongside sanctions screening. |
| OpenCorporates Search | Search the world's largest open database of companies for corporate verification and beneficial ownership research. |
| GLEIF LEI Lookup | Look up Legal Entity Identifiers (LEI) for verified corporate identity data in financial compliance workflows. |
| SEC Insider Trading | Search SEC insider trading filings for financial compliance investigations and due diligence on US-listed companies. |