fairquery-sanctions-screener
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fairquery-sanctions-screenerscreen Jane Example Smith against OFAC, EU, UK and UN sanctions lists"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Sanctions & Watchlist Screener (OFAC, EU, UK, UN)
Fairquery Apify Actor that screens people and company names against the main public sanctions lists, downloaded fresh from the official sources on every run: OFAC SDN and Consolidated (US), EU Consolidated Financial Sanctions, the UK Sanctions List (FCDO / OFSI), and the UN Security Council Consolidated List. Each name gets a potential_match / no_match status, a 0–100 fuzzy score, and the matching entries with aliases, programs, countries and dates of birth.
Not a certified screening service. This is automated fuzzy matching against public lists. It can return false positives and can miss true matches (transliterations, very short names, lists that fail to download). Review every potential match manually against the official source, and get legal advice before acting on results. It does not replace a regulated KYC/AML provider.
When to use this Actor (LLM / tool selection)
Use it when an agent or workflow needs to:
Pre-screen a new customer, supplier, vendor or marketplace seller against sanctions lists (KYB / onboarding)
Re-screen a counterparty list in bulk (thousands of names per run)
Check whether a company or person is on OFAC, EU, UK or UN lists and see the program and listing details
Add a sanctions check step to an export, payments or procurement workflow
Related MCP server: Sanctions Screening MCP Server
Lists and sources
| List | Source (downloaded each run) |
| OFAC Specially Designated Nationals |
|
| OFAC Consolidated (non-SDN: SSI, NS-MBS, FSE, …) | CONS_PRIM / CONS_ALT / CONS_ADD.CSV |
| EU Consolidated Financial Sanctions List |
|
| UK Sanctions List (incl. OFSI asset-freeze targets) |
|
| UN Security Council Consolidated List |
|
Lists are cached in memory for the run only and never stored. If a source is down, the run continues with the other lists and every row reports it in lists_unavailable; per-list entry counts, download times and errors are in RUN_SUMMARY.
Matching
Names are normalised (diacritics, case, punctuation,
&, legal suffixes such as LLC/GmbH/JSC, honorifics) and compared token by token with Jaro-Winkler, so word order (PUTIN, Vladimir), extra middle names, and spelling variants (Poutine,Usama/Osama,Gaddafi/Qadhafi) still match.Every alias (a.k.a., f.k.a., non-Latin script names) is screened;
matched_ontells you whether the hit was the primary name or an alias.Optional country (ISO-2 or name) adds
country_match;excludeNonMatchingCountrydrops mismatches.Optional dateOfBirth drops individuals whose listed birth years differ by more than
dobYearTolerance; entries without a DOB are kept.
Input
Field | Type | Default | Description |
|
| example | One name per line |
| object[] |
|
|
|
| all five |
|
| int |
| 60–100 |
| int |
| Top matches per name |
|
|
| |
| string | – | Default country for all names |
| bool |
| |
| int |
| |
| int |
| Per list file |
| int |
| Safety cap |
{
"names": ["Banco Nacional de Cuba", "Jane Example Smith"],
"queries": [{ "name": "Ali Khamenei", "id": "cust-42", "country": "IR", "dateOfBirth": "1939" }]
}Output
{
"schema_version": "1.0.0", "type": "screening",
"query": { "name": "Ali Khamenei", "id": "cust-42", "country": "IR", "date_of_birth": "1939", "entity_type": "any" },
"status": "potential_match", "best_score": 92.5, "match_count": 1,
"matches": [{
"score": 92.5, "matched_name": "KHAMENEI, Ali Husseini", "matched_on": "primary",
"list": "OFAC_SDN", "list_name": "OFAC Specially Designated Nationals (SDN) List", "entry_id": "…",
"entity_type": "individual", "primary_name": "KHAMENEI, Ali Husseini", "aliases": ["…"], "programs": ["IRAN-EO13876"],
"countries": ["Iran"], "dates_of_birth": ["19 Apr 1939"], "listed_on": null,
"country_match": true, "dob_match": true, "source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=…"
}],
"lists_screened": ["OFAC_SDN", "OFAC_CONS", "EU", "UK", "UN"], "lists_unavailable": [],
"min_score": 85, "disclaimer": "Not a certified screening service. …"
}Error rows (type: "error", never charged): INPUT_EMPTY, MAX_NAMES_EXCEEDED, LISTS_UNAVAILABLE (no list could be downloaded).
Pricing
Pay per event: name-screened, once per name that gets a screening row (match or no match). If no list can be downloaded, nothing is charged. See the pricing tab.
Memory / runtime
Default 512 MB. Downloading and indexing all five lists (about 30k entries, 100k+ names) takes roughly 10–40 s, depending on the government servers; after that screening runs at hundreds of names per second. Put all names into one run rather than one run per name.
MCP / Apify tools
Call from agents via Apify MCP with Actor fairquery/sanctions-watchlist-screener:
{ "actor": "fairquery/sanctions-watchlist-screener", "input": { "names": ["Acme Trading LLC"] } }Local stdio MCP server
The mcp/ folder is a stdio MCP server (TypeScript, @modelcontextprotocol/sdk) with two tools, both with annotations and output schemas:
Tool | What it does | Cost |
| Runs this Actor and returns the rows | Needs |
| Lists covered lists, source URLs, score scale, disclaimer | Free, local, no token |
cd mcp && npm install && npm run build
node scripts/smoke-test.mjs # initialize + tools/list + free tool, no token
APIFY_TOKEN=... node scripts/smoke-test.mjs --call # real call{ "mcpServers": { "fairquery-sanctions-screener": { "command": "node", "args": ["/path/to/sanctions-watchlist-screener/mcp/dist/index.js"], "env": { "APIFY_TOKEN": "<your Apify token>" } } } }Docker: the root Dockerfile builds the MCP server image (docker build -t fairquery-sanctions-screener-mcp .); it is also the Dockerfile for Glama. The Actor image is .actor/Dockerfile. glama.json lists fairquery as maintainer.
Local development
npm install
npx apify run # input from storage/key_value_stores/default/INPUT.json
npm testKits & templates
Optional guides from Fairquery for wiring this Actor into agents and automations (the Actor works fine without them):
AI Agent Data Toolkit Quick-Start (PDF): MCP setup for Claude Desktop and Cursor, API calls, recipes, cost estimates.
n8n + Zapier Workflow Template Pack: 10 importable n8n workflows for the four original Fairquery Actors (SEC EDGAR, website/tech, email, OSV); it does not include workflows for this Actor yet, but the patterns adapt easily.
Agent Prompt Pack for Research & Lead Ops: 69 prompts for company research, lead cleaning, SEO and security reviews.
Agent Starter Kit: 10 copy-paste MCP + n8n recipes ($5): 10 copy-paste MCP + n8n recipes, with ready-made Claude/Cursor configs and 3 starter workflows.
Disclaimer
Not a certified screening service. Results come from automated fuzzy matching against public lists downloaded at run time and are provided as is, without warranty. They may be incomplete, out of date or wrong. Always confirm potential matches with the official publication of the relevant authority (OFAC, European Commission, UK FCDO/OFSI, UN Security Council) and take legal advice before making compliance decisions. Data comes from public government sources; Fairquery is not affiliated with any of them.
Links
License: MIT
Available Tools
2 toolslist_sourcesList covered sanctions sources (free)ARead-onlyIdempotent
Free, local, no token: the official lists screen_names checks (id, name, authority, download URL), the score scale and the disclaimer. Use it to pick the lists parameter or to cite sources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | Yes | |
| disclaimer | Yes | |
| score_scale | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful context beyond annotations: it is free, local, requires no token, and describes what data is returned (id, name, authority, download URL, score scale, disclaimer). Annotations already cover readOnly/idempotent safety, so this fills in the auth/cost/return-content gaps well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the key traits (free, local, no token) and then the return contents and the use case. No padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a zero-param, read-only discovery tool with an output schema. It covers cost, auth, return fields, and the downstream action, leaving nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description consistently reflects that no input is needed, reinforcing the zero-param nature without wasted explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (sanctions sources), and clarifies it returns metadata about the lists that screen_names checks. It is distinguishable from its sibling screen_names by being the discovery/metadata tool, though the phrasing is somewhat compressed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: to pick the lists parameter for screen_names, or to cite sources. It also names the sibling screen_names and frames this tool as the prerequisite for using it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_namesScreen names against sanctions listsARead-onlyIdempotent
Fuzzy-match people or company names against OFAC SDN + Consolidated, EU, UK and UN sanctions lists downloaded fresh from the official sources. One row per name: status potential_match/no_match, best_score (0-100), matches with list, entry id, primary name, aliases, programs, countries, DOB, country_match/dob_match. Optional per-name country and dateOfBirth filters. Runs Apify Actor fairquery/sanctions-watchlist-screener; requires APIFY_TOKEN, billed per name. Not a certified screening service. Automated fuzzy matching against public lists downloaded at run time; results can contain false positives and miss matches. Review every potential match manually and consult official sources and legal counsel before acting.
| Name | Required | Description | Default |
|---|---|---|---|
| lists | No | Default: all five | |
| names | No | Names to screen | |
| queries | No | Names with optional country (ISO-2 or name), dateOfBirth (YYYY or YYYY-MM-DD), entityType | |
| minScore | No | Default 85 | |
| entityType | No | ||
| maxMatchesPerName | No | ||
| excludeNonMatchingCountry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| items | Yes | Dataset rows: type=screening or type=error |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world safety, and the description goes well beyond them: it discloses the APIFY_TOKEN requirement, per-name billing, that lists are downloaded fresh at run time, that the underlying Actor is fairquery/sanctions-watchlist-screener, and that results can contain false positives and miss matches. This is exactly the extra operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and dense throughout, but the sentence enumerating output fields (status, best_score, matches, aliases, programs, countries, DOB) is largely redundant since an output schema exists. Otherwise every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter screening tool with an output schema, it covers the essentials an agent needs — auth, cost model, data freshness, accuracy limits, and the matching semantics. The remaining gap is that undocumented parameters (minScore, maxMatchesPerName, excludeNonMatchingCountry) are left to the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, so the schema documents part of the surface (lists, names, queries, minScore default). The description adds the per-name country/DOB filter concept and notes entity type usage, but says nothing about minScore, maxMatchesPerName, or excludeNonMatchingCountry. Baseline 3 fits given partial coverage and partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Fuzzy-match people or company names against OFAC SDN + Consolidated, EU, UK and UN sanctions lists' — with named data sources and scoring semantics. An agent can separate this from the sibling list_sources (which merely enumerates sources) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it names the inputs (names, optional per-name country and dateOfBirth filters) but never says when to choose this tool over list_sources or when screening is inappropriate. The warning to 'Review every potential match manually and consult official sources and legal counsel' is a caveat, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
list_sources - First observed
screen_names
TDQS
Scored across 2 tools
The two tools serve clearly different purposes: list_sources is a metadata/discovery call (available lists, scoring scale, disclaimer), while screen_names performs the actual fuzzy-match screening. There is no overlap or risk of misselection.
Both names follow a consistent verb_noun snake_case pattern (list_sources, screen_names). The convention is predictable and readable.
Two tools is minimal for the stated purpose; it covers discovery plus screening but leaves no room for per-entry detail or batch/export operations. It is borderline thin rather than clearly right-sized.
Core workflow is covered: discover authoritative sources and screen names with detailed per-match output (scores, programs, countries, DOB). Minor gaps exist, such as retrieving a single list entry or exporting/batch-result retrieval, but agents can work around them.
Maintenance
Related MCP Connectors
Screen names against US, UN, EU, UK, Canadian and Swiss sanctions and export-control lists. Free.
Screen names against OFAC, EU, UK, UN sanctions lists; resolve entities via GLEIF. Screening aid.
Screen a name or entity against OFAC SDN, the EU Consolidated list and the UK list.
Screen people & companies against 12 US sanctions & exclusion lists (OFAC, LEIE, SAM, Medicaid).
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceScreens names against the US Consolidated Screening List including OFAC SDN and BIS Entity List, keyless.26 npmMIT
- FlicenseNot gradedqualityCmaintenanceScreens names and companies against OFAC, EU, UK, and UN sanctions lists with fuzzy-match scores, supporting bulk lookups for AML/KYC checks. Data is sourced directly from official government lists and cached for fast repeat checks.-
- AlicenseNot gradedqualityAmaintenanceScreen names against consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities via GLEIF, with offline fuzzy matching.131 npm1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceChecks names against US FinCEN financial crime lists for compliance and AML due diligence, with a single read-only tool.MIT