Screen names against sanctions lists
screen_namesFuzzy-match person and organisation names against OFAC, EU, UK and UN sanctions lists to screen for potential matches during KYC/KYB onboarding or bulk re-screening. Returns match status and scores.
Instructions
WHAT: Fuzzy-match people or organisation names against the OFAC SDN, OFAC Consolidated (non-SDN), EU, UK and UN sanctions lists, from the official sources (cached in your Apify account for at most 6 h, otherwise re-downloaded; each row reports list publication dates). Order-, case- and diacritics-insensitive; optional country and date-of-birth filters per name. WHEN TO USE: KYC/KYB onboarding, vendor or counterparty checks, bulk re-screening of customer lists. Put all names into one call (lists are downloaded once per run). WHEN NOT TO USE: to see which lists/authorities are covered or to cite sources, call list_sources (free). Not a PEP/adverse-media check, not a certified screening service. COST: paid. Runs Apify Actor fairquery/sanctions-watchlist-screener with your APIFY_TOKEN; pay-per-event "name-screened": $0.003 per name that gets a screening row, match or no match, plus a $0.007 start fee per call (one run); nothing is charged per name if no list could be loaded, and error rows are free. 200 names in one call ~ $0.61. Lists load in ~2-5 s from a cache in your Apify account (at most 6 h old) or ~10-40 s when re-downloaded, then hundreds of names/s. RETURNS: {count, items}. type="screening" row per name: query, status (potential_match | no_match), best_score 0-100, match_count, matches[] (list, entry id, primary name, aliases, programs, countries, DOB, score, country_match, dob_match), lists_screened, lists_unavailable, min_score, screened_at, disclaimer; or type="error" rows (code, message). EXAMPLE: {"queries":[{"name":"Banco Nacional de Cuba","entityType":"entity"}],"minScore":90} -> one screening row, status potential_match with OFAC_SDN matches. PARAMETERS: names and/or queries: at least one is required although the schema marks both optional (neither -> a free INPUT_EMPTY error row); both may be combined and every entry is billed once ($0.003), so send all names in ONE call (one $0.007 start fee and one list load per run). Use names for bare strings and queries when you have per-name country / dateOfBirth / entityType or want your own id echoed. Per query, dateOfBirth drops listed individuals whose recorded birth year differs by more than 1 year (entries without a DOB are kept); country only sets country_match (true/false/null) unless excludeNonMatchingCountry=true, which then drops matches whose listed countries exclude it (entries without country data are kept). entityType: a query's own value wins over the top-level one; "entity" means anything that is not an individual (organisations, vessels, aircraft), and list entries of unknown type always pass. lists: omit for all five; a list whose download fails is reported in lists_unavailable rather than failing the run. minScore: a candidate is returned only if its 0-100 name similarity is >= minScore; it does not change the price - 85 default, 90-95 for large batches with fewer false positives, 75-80 for transliterated names. maxMatchesPerName trims matches[] (best first) but match_count still counts all. 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.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lists | No | Optional, default all five. Any subset of "OFAC_SDN" | "OFAC_CONS" | "EU" | "UK" | "UN" (ids from list_sources). Example: ["OFAC_SDN","EU"] | |
| names | No | Optional if queries is given (at least one of the two is required). Plain person or organisation names (non-empty strings, any order/case/diacritics); $0.003 each. Example: ["Vladimir Putin","Acme Trading LLC"] | |
| queries | No | Optional if names is given. {name, id?, country?, dateOfBirth?, entityType?} objects with per-name filters; $0.003 each. Example: [{"name":"Ali Khamenei","id":"cust-42","country":"IR","dateOfBirth":"1939","entityType":"individual"}] | |
| minScore | No | Optional integer 60-100, default 85. Minimum 0-100 fuzzy name-similarity score for a match. Use 90+ for fewer false positives, ~80 for more recall. Example: 90 | |
| entityType | No | Optional, one of "any" | "individual" | "entity", default "any". Entity filter for all names; a query's own entityType wins. Example: "entity" | |
| maxMatchesPerName | No | Optional integer 1-100, default 10. Top matches returned per name (best first); match_count still reports the total. Example: 3 | |
| excludeNonMatchingCountry | No | Optional boolean, default false. true removes matches whose listed countries do not include the query country (entries without country data are kept). No effect without queries[].country. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Number of rows in items | |
| items | Yes | Dataset rows: type=screening or type=error |