AML Entity Screening
AML entity screening that searches 13 public compliance databases simultaneously — so your BSA/AML team gets a complete risk picture in under two minutes instead of hours of manual lookups. Enter any person or company name and receive a structured risk report with a four-tier classification (LOW / MEDIUM / HIGH / PROHIBITED), dimensional scoring across five compliance domains, and explicit SAR filing guidance aligned with FinCEN requirements.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| analysis-run | Full intelligence analysis run | $0.30 |
Example: 100 events = $30.00 · 1,000 events = $300.00
Documentation
AML entity screening that searches 13 public compliance databases simultaneously — so your BSA/AML team gets a complete risk picture in under two minutes instead of hours of manual lookups. Enter any person or company name and receive a structured risk report with a four-tier classification (LOW / MEDIUM / HIGH / PROHIBITED), dimensional scoring across five compliance domains, and explicit SAR filing guidance aligned with FinCEN requirements.
This actor orchestrates 13 sub-actors in parallel: OFAC SDN list, OpenSanctions (40+ international sanctions lists), Interpol Red Notices, FBI Most Wanted, FARA foreign agent registrations, FEC campaign finance records, OpenCorporates corporate registry, GLEIF LEI database, FDIC bank verification, SEC EDGAR filings, SEC insider trading records, CFPB consumer complaints, and IRS nonprofit registry. All results feed a weighted 100-point AML risk scoring engine with shell company detection, PEP classification, and proximity-to-crime convergence analysis.
What data can you extract?
| Data Point | Source | Example |
|---|---|---|
| 🔴 AML risk tier | Scoring engine | PROHIBITED |
| 📊 AML risk score (0-100) | 5-dimension model | 78 |
| ✅ Direct sanctions match flag | OFAC / OpenSanctions | true |
| 📋 SAR filing requirement | Scoring engine | true |
| 📝 Compliance recommendation | Scoring engine | TRANSACTION MUST BE BLOCKED. File SAR within 30 days. |
| 🚫 Exact sanctions matches | OFAC SDN + OpenSanctions | [{"name": "Pinnacle Trading Ltd", "score": 0.98, "programs": ["SDGT"]}] |
| 🔎 Fuzzy sanctions matches | OFAC SDN + OpenSanctions | [{"name": "Pinnacle Trade Corp", "score": 0.72}] |
| 🌍 Interpol Red Notice hits | Interpol public database | [{"forename": "Aleksei", "name": "Volkov", "nationality": "RU"}] |
| 🔫 FBI Most Wanted hits | FBI public database | 1 FBI Most Wanted match — US federal law enforcement target |
| 🏛️ FARA foreign agent status | DOJ FARA registry | {"isForeignAgent": true, "principals": ["Ministry of Trade, CN"]} |
| 💰 FEC campaign finance total | FEC public database | $247,500 in reported contributions |
| 🐚 Shell company risk score | Corporate record analysis | 75 / HIGH |
| 🏦 FDIC institution verification | FDIC bank registry | {"insured": false, "found": false} |
| 📐 Dimensional score breakdown | Scoring engine | sanctionsWatchlist: 30/35, politicalExposure: 16/20 |
| 🔗 Proximity-to-crime convergence | Multi-signal analysis | convergenceScore: 85, convergenceLevel: "CRITICAL" |
Why use AML Entity Screening?
Manual AML screening means logging into OFAC's SDN search, then OpenSanctions, then Interpol's notices database, then the FBI site, then DOJ FARA, then FEC.gov, then OpenCorporates, then GLEIF, then SEC EDGAR — nine separate tools, each requiring a separate search, with no consolidated risk score at the end. An experienced compliance analyst spends 45-90 minutes per entity. At scale, that is not viable.
This actor automates the entire process. All 13 databases are queried in parallel. Results are normalized, deduplicated, and fed through a calibrated scoring engine that weights each signal according to its AML significance. You receive one structured JSON report per entity, with dimensional scores you can map directly to your compliance framework.
Beyond the time saving, the output is auditable. Every database checked is documented. Every finding is recorded with its source. Every score has supporting findings text. That audit trail is what regulators expect to see when they review your onboarding files.
- Scheduling — run daily or weekly batch re-screening to catch newly added sanctions designations on existing customers
- API access — integrate screening into your onboarding pipeline via Python, JavaScript, or any HTTP client
- Structured JSON output — feed results directly into case management systems, decision engines, or compliance dashboards
- Monitoring — configure Slack or email alerts when runs fail or return PROHIBITED-tier results
- Integrations — connect to Zapier, Make, Google Sheets, HubSpot, or webhooks for downstream workflow automation
Features
- Parallel 13-actor architecture — all sub-actors run simultaneously via
Promise.all, cutting total runtime compared to sequential screening - Four-tier AML classification — LOW (0-20), MEDIUM (21-45), HIGH (46-70), and PROHIBITED (71-100 or any direct sanctions match), directly mappable to standard BSA/AML risk frameworks
- OFAC SDN exact-match detection — sanctions hits with a confidence score of 0.95 or above are classified as exact matches and immediately trigger PROHIBITED status regardless of numeric score
- OpenSanctions coverage — queries OpenSanctions which aggregates 40+ international sanctions, watchlist, and PEP lists beyond OFAC
- Interpol Red Notice and FBI Most Wanted screening — each adds 15 points to the sanctions/watchlist dimension and generates an immediate escalation alert
- PEP detection via FARA and FEC — FARA foreign agent registration adds 12 points; FEC donations over $100,000 add 10 points; thresholds calibrated to standard PEP screening frameworks
- Shell company detection across 12 jurisdictions — checks corporate records for nominee directors, bearer shares, trust companies, shelf companies, and formation agents; flags registration in Panama (PA), BVI (VG), Cayman Islands (KY), Belize (BZ), Seychelles (SC), and seven other secrecy jurisdictions
- LEI absence flag — entities with corporate registrations but no Legal Entity Identifier score higher on opacity, following FATF recommendations on beneficial ownership transparency
- Nonprofit revocation detection — IRS-revoked nonprofit status is flagged as an AML red flag, a known vector for financial crime
- Inactive/dissolved entity detection — transacting through a dissolved or struck-off company adds 5 points to the corporate transparency dimension
- FDIC impersonation check — if an entity claims to be a bank, FDIC records are verified; a closed or inactive FDIC record adds 5 points and generates a specific finding
- Proximity-to-crime convergence scoring — counts how many distinct adverse signal categories overlap on one entity; 4 or more categories scores maximum 10 points, because convergence is a stronger indicator than any single signal
- SAR filing guidance — PROHIBITED and HIGH tiers set
sarRequired: trueand the recommendation text mirrors FinCEN SAR filing requirements, including the 30-day window and the do-not-tip-off rule - Entity-type optimization — setting
entityTypetopersonskips the four corporate-specific sub-actors (OpenCorporates, GLEIF, nonprofit, FDIC), reducing cost and run time for individual screening
Use cases for AML entity screening
BSA/AML onboarding compliance
BSA/AML compliance officers at banks, credit unions, and money services businesses need to screen every new customer before account opening. Manual lookups across OFAC, GLEIF, and criminal databases are time-consuming and hard to audit. This actor produces a structured screening report for each entity with explicit PROHIBITED/HIGH/MEDIUM/LOW classification, dimensional findings, and SAR filing guidance — the exact format that supports your Customer Due Diligence (CDD) and Enhanced Due Diligence (EDD) policies.
Fintech KYC pipeline integration
Fintech platforms and neobanks processing high volumes of account applications cannot screen entities manually. This actor's API access and structured JSON output allows direct integration into automated onboarding decision engines. PROHIBITED-tier results can trigger automatic rejection; HIGH-tier results can route to a manual review queue; LOW-tier results proceed automatically. The sarRequired flag provides an unambiguous signal for your compliance workflow.
Legal and advisory pre-engagement screening
Law firms, accountants, and consultants conducting pre-engagement client due diligence need to check new clients against sanctions, foreign agent registrations, and adverse regulatory records before accepting an engagement. This actor runs all relevant checks in a single operation and produces a defensible written record documenting what was checked and when, supporting your firm's AML obligations under applicable professional regulations.
Transaction monitoring and counterparty screening
Corporate finance, trade finance, and payments teams need to screen counterparties before high-value transactions. Running AML entity screening on the beneficial owners of counterparty companies — cross-referencing OFAC, FARA, FEC, and OpenCorporates — surfaces politically exposed persons and foreign agent connections that standard transaction monitoring systems miss.
Audit and investigation evidence building
Internal audit teams and financial crime investigation units need to document exactly which databases were checked during an investigation, what was found, and how the risk tier was determined. This actor produces a timestamped, structured JSON report recording all 13 database results plus scoring dimensions — an auditable evidence file suitable for regulatory examination.
Correspondent banking and wire transfer screening
Correspondent banks and payment processors face strict requirements to screen originators and beneficiaries against sanctions lists before processing transfers. The actor's direct OFAC integration and automatic PROHIBITED classification for exact matches provides a machine-readable go/no-go signal that can be consumed programmatically in a payments processing pipeline.
How to run AML entity screening
- Enter the entity name — Type the full name of the person or company you want to screen, for example "Pinnacle Capital Holdings" or "Aleksei Petrov". Exact spelling improves match accuracy; you can also run variant spellings as separate queries.
- Select entity type — Choose
personfor individuals (faster, skips corporate checks),companyfor businesses (runs all 13 sub-actors), oranyif you are unsure. The default isany. - Add country code (optional) — Enter a two-letter ISO country code such as
US,RU, orCNto help narrow ambiguous results. Leave blank if the country is unknown. - Start the actor and download results — Click "Start" and wait approximately 90-120 seconds. When the run completes, download the full screening report from the Dataset tab in JSON, CSV, or Excel format.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
entityName | string | Yes | — | Full name of the person or company to screen. Example: "Pinnacle Capital Holdings" |
entityType | string | No | "any" | Screening mode: "person" skips corporate sub-actors (faster); "company" runs all corporate checks; "any" runs all 13 sub-actors |
country | string | No | — | Optional ISO 3166-1 alpha-2 country code (e.g., "US", "RU", "CN") to narrow search results |
Input examples
Screen a company for full AML due diligence:
{
"entityName": "Pinnacle Capital Holdings",
"entityType": "company",
"country": "PA"
}
Screen an individual — faster, person-specific checks only:
{
"entityName": "Aleksei Volkov",
"entityType": "person",
"country": "RU"
}
Quick check — unknown entity type, no country filter:
{
"entityName": "Meridian Trade Partners"
}
Input tips
- Use full legal names — "Acme Corporation Ltd" returns more accurate matches than "Acme Corp". For individuals, include first name, last name, and any known aliases as separate runs.
- Screen variants separately — If an entity has known name variants or transliterated spellings, run each variant as a separate query. Sanctions lists frequently contain transliterated Cyrillic, Arabic, and Chinese names.
- Select person for individual screening — Using
entityType: "person"skips four corporate sub-actors, cutting cost by approximately 30% and runtime by 20-30 seconds. - Country code reduces false positives — Adding the country code is especially helpful for common names. "Wang Wei" in CN returns far more targeted results than an unfiltered global search.
- Batch via API for volume screening — For screening lists of 50+ entities, trigger runs programmatically via the API rather than clicking through the console for each entity.
Output example
{
"screenedAt": "2026-03-20T14:32:11.204Z",
"entity": "Pinnacle Capital Holdings",
"entityType": "company",
"country": "PA",
"actorsUsed": 13,
"amlRiskTier": "PROHIBITED",
"amlRiskScore": 83,
"directSanctionsMatch": true,
"sarRequired": true,
"recommendation": "TRANSACTION MUST BE BLOCKED. File Suspicious Activity Report (SAR) within 30 days. Do not tip off the subject. Escalate to BSA/AML officer immediately.",
"scoringDimensions": {
"sanctionsWatchlist": {
"score": 30,
"max": 35,
"findings": [
"1 EXACT sanctions match(es) — OFAC/OpenSanctions. PROHIBITED.",
"3 fuzzy sanctions match(es) — manual review required"
]
},
"corporateTransparency": {
"score": 21,
"max": 25,
"findings": [
"Shell company indicators detected: registered agent, nominee",
"Registered in known shell company jurisdiction: PA",
"No LEI found — entity lacks standard financial identifier"
]
},
"politicalExposure": {
"score": 14,
"max": 20,
"findings": [
"Registered foreign agent under FARA — principals: Ministry of Trade, CN",
"Political donor: $47,500 in FEC-reported contributions — potential PEP connection"
]
},
"financialRegulatory": {
"score": 4,
"max": 10,
"findings": [
"4/5 insider transactions are sales — potential front-running or flight"
]
},
"proximityCrime": {
"score": 10,
"max": 10,
"findings": [
"CRITICAL CONVERGENCE: 5 adverse signal categories (sanctions, foreign agent, shell indicators, consumer complaints, Interpol) — strong proximity to financial crime"
]
}
},
"sanctions": {
"totalHits": 4,
"exactMatches": [
{
"name": "Pinnacle Capital Holdings SA",
"matchScore": 0.97,
"programs": ["SDGT", "CUBA"],
"source": "OFAC SDN"
}
],
"fuzzyMatches": [
{ "name": "Pinnacle Capital Corp", "matchScore": 0.71, "source": "OpenSanctions" },
{ "name": "Pinnacle Cap Hldg", "matchScore": 0.65, "source": "EU Consolidated List" },
{ "name": "Pinnacle Capital HLD", "matchScore": 0.58, "source": "UN Security Council" }
],
"blocked": true,
"ofac": { "hits": 1, "records": [{ "name": "Pinnacle Capital Holdings SA", "matchScore": 0.97 }] },
"openSanctions": { "hits": 3, "records": [] }
},
"criminalWatchlists": {
"interpol": { "hits": 1, "records": [{ "entity_id": "/notices/2024-35901", "forename": "Carlos", "name": "REYES MONTOYA", "nationality": "CO" }] },
"fbi": { "hits": 0, "records": [] },
"alert": "WATCHLIST MATCH — escalate immediately for manual review."
},
"politicalExposure": {
"pepClassification": "POLITICALLY EXPOSED",
"fara": {
"registrations": 2,
"isForeignAgent": true,
"records": [
{ "registrantName": "Pinnacle Capital Holdings", "foreignPrincipal": "Ministry of Trade, CN", "registrationDate": "2023-07-14" }
]
},
"campaignFinance": {
"records": 8,
"totalDonations": 47500,
"data": []
}
},
"shellCompanyAnalysis": {
"shellRisk": "HIGH",
"shellScore": 75,
"indicators": [
"Found \"registered agent\" in corporate record",
"Found \"nominee\" in corporate record",
"Registered in shell haven: PA",
"No LEI despite having corporate registration — reduced transparency"
],
"corporateRecords": [
{ "name": "Pinnacle Capital Holdings SA", "jurisdictionCode": "pa", "status": "Active", "incorporationDate": "2023-11-02" }
],
"lei": [],
"nonprofitRecords": []
},
"financialInstitution": {
"fdic": { "found": false, "insured": false, "records": [] },
"complaints": { "count": 23, "records": [] }
},
"secAnalysis": {
"filings": [],
"insiderTrading": [
{ "issuerName": "Pinnacle Capital Holdings", "transactionType": "Sale", "transactionDate": "2025-09-03", "sharesTraded": 125000 }
]
},
"proximityCrime": {
"convergenceScore": 85,
"convergenceLevel": "CRITICAL",
"activeSignals": 5,
"totalCategories": 7,
"breakdown": [
{ "category": "OFAC/OpenSanctions", "hits": 4, "signal": true },
{ "category": "Interpol", "hits": 1, "signal": true },
{ "category": "FBI", "hits": 0, "signal": false },
{ "category": "Foreign Agent (FARA)", "hits": 2, "signal": true },
{ "category": "Consumer Complaints", "hits": 23, "signal": true },
{ "category": "Shell Company Indicators", "hits": 1, "signal": true }
]
}
}
Output fields
| Field | Type | Description |
|---|---|---|
screenedAt | string | ISO 8601 timestamp of when the screening was run |
entity | string | Entity name as submitted |
entityType | string | Entity type used for screening (person, company, or any) |
country | string | Country filter applied, or "not specified" |
actorsUsed | number | Number of sub-actors executed (9 for persons, 13 for companies) |
amlRiskTier | string | Top-level classification: LOW, MEDIUM, HIGH, or PROHIBITED |
amlRiskScore | number | Aggregate score 0-100 across all five dimensions |
directSanctionsMatch | boolean | true if any OFAC/OpenSanctions hit has confidence ≥ 0.95 or match: "exact" |
sarRequired | boolean | true for HIGH and PROHIBITED tiers |
recommendation | string | Plain-English compliance action aligned with BSA/FinCEN guidance |
scoringDimensions.sanctionsWatchlist.score | number | Score 0-35 for sanctions and watchlist dimension |
scoringDimensions.sanctionsWatchlist.findings | array | Text findings supporting the sanctions score |
scoringDimensions.corporateTransparency.score | number | Score 0-25 for corporate transparency dimension |
scoringDimensions.corporateTransparency.findings | array | Shell company and registration findings |
scoringDimensions.politicalExposure.score | number | Score 0-20 for PEP dimension |
scoringDimensions.politicalExposure.findings | array | FARA and FEC findings |
scoringDimensions.financialRegulatory.score | number | Score 0-10 for financial regulatory dimension |
scoringDimensions.financialRegulatory.findings | array | SEC, CFPB, and FDIC findings |
scoringDimensions.proximityCrime.score | number | Score 0-10 for convergence of adverse signals |
scoringDimensions.proximityCrime.findings | array | Convergence analysis findings |
sanctions.totalHits | number | Total OFAC and OpenSanctions hits |
sanctions.exactMatches | array | Hits with confidence ≥ 0.95 or match: "exact" |
sanctions.fuzzyMatches | array | Hits with confidence 0.50–0.94 |
sanctions.blocked | boolean | true if any exact match found |
sanctions.ofac.hits | number | Hit count from OFAC SDN search |
sanctions.openSanctions.hits | number | Hit count from OpenSanctions search |
criminalWatchlists.interpol.hits | number | Interpol Red Notice match count |
criminalWatchlists.fbi.hits | number | FBI Most Wanted match count |
criminalWatchlists.alert | string | Escalation alert text if any watchlist hit found |
politicalExposure.pepClassification | string | POLITICALLY EXPOSED or NOT IDENTIFIED AS PEP |
politicalExposure.fara.isForeignAgent | boolean | true if entity has active FARA registration |
politicalExposure.fara.registrations | number | Count of FARA registrations found |
politicalExposure.campaignFinance.totalDonations | number | Total dollar value of FEC-reported contributions |
shellCompanyAnalysis.shellRisk | string | LOW, MEDIUM, or HIGH |
shellCompanyAnalysis.shellScore | number | Shell risk score 0-100 (each indicator adds 15 points, capped at 100) |
shellCompanyAnalysis.indicators | array | Text descriptions of each shell indicator found |
shellCompanyAnalysis.corporateRecords | array | Raw OpenCorporates records |
shellCompanyAnalysis.lei | array | Raw GLEIF LEI records |
financialInstitution.fdic.insured | boolean | true if FDIC shows active/insured institution |
financialInstitution.complaints.count | number | Number of CFPB consumer complaints found |
secAnalysis.filings | array | Raw SEC EDGAR filing records |
secAnalysis.insiderTrading | array | Raw SEC insider trading records |
proximityCrime.convergenceScore | number | 0-100 score based on active signal category count |
proximityCrime.convergenceLevel | string | NONE, LOW, MODERATE, HIGH, or CRITICAL |
proximityCrime.activeSignals | number | Count of distinct adverse signal categories with hits |
proximityCrime.breakdown | array | Per-category hit counts and signal flags |
How much does it cost to run AML entity screening?
AML Entity Screening uses pay-per-run pricing — compute costs depend on entity type and how many sub-actors execute. Screening a company (13 sub-actors) costs approximately $0.12-$0.18 per run. Screening a person (9 sub-actors) costs approximately $0.08-$0.12 per run. Platform compute costs are included.
| Scenario | Sub-actors | Approx. cost per run | Monthly total (50 runs) |
|---|---|---|---|
| Quick individual check | 9 | ~$0.10 | ~$5 |
| Standard company screen | 13 | ~$0.15 | ~$7.50 |
| High-volume individual batch (200/mo) | 9 each | ~$0.10 | ~$20 |
| High-volume company batch (200/mo) | 13 each | ~$0.15 | ~$30 |
| Enterprise (1,000 screens/mo) | 9-13 each | ~$0.12 avg | ~$120 |
You can set a maximum spending limit per run to control costs. The actor stops when your budget is reached.
Compare this to Dow Jones Risk & Compliance, Refinitiv World-Check, or ComplyAdvantage at $500-$5,000 per month — with this actor, most compliance teams run 500-1,000 screenings per month for well under $150, with no subscription contract.
AML entity screening using the API
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/aml-entity-screening").call(run_input={
"entityName": "Pinnacle Capital Holdings",
"entityType": "company",
"country": "PA"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
tier = item.get("amlRiskTier")
score = item.get("amlRiskScore")
sar = item.get("sarRequired")
recommendation = item.get("recommendation")
print(f"Entity: {item['entity']}")
print(f"Risk tier: {tier} (score: {score})")
print(f"SAR required: {sar}")
print(f"Action: {recommendation}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/aml-entity-screening").call({
entityName: "Pinnacle Capital Holdings",
entityType: "company",
country: "PA"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(`Entity: ${item.entity}`);
console.log(`Risk tier: ${item.amlRiskTier} (score: ${item.amlRiskScore})`);
console.log(`SAR required: ${item.sarRequired}`);
console.log(`Direct sanctions match: ${item.directSanctionsMatch}`);
console.log(`Shell risk: ${item.shellCompanyAnalysis?.shellRisk}`);
console.log(`Recommendation: ${item.recommendation}`);
}
cURL
# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~aml-entity-screening/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entityName": "Pinnacle Capital Holdings",
"entityType": "company",
"country": "PA"
}'
# Fetch results (replace DATASET_ID from the run response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How AML Entity Screening works
Phase 1: Parallel database queries
The actor builds a list of sub-actor calls based on entityType. For companies and any, all 13 sub-actors are included. For individuals, the four corporate-specific sub-actors (OpenCorporates, GLEIF LEI, nonprofit explorer, FDIC) are excluded. All calls execute simultaneously via Promise.all through the runActorsParallel function in actor-client.ts, each with a 120-second timeout and 256 MB memory allocation. Individual sub-actor failures are caught and return empty arrays, so a single unavailable source never blocks the entire screening.
Phase 2: Dimensional scoring
The computeAMLRisk function in scoring.ts processes all returned data through five independent scoring functions:
- Sanctions and Watchlist (0-35 pts): Iterates all OFAC and OpenSanctions hits. Hits with
matchScore >= 0.95ormatch === "exact"add 30 points and setdirectSanctionsMatch = true. Fuzzy hits (0.50-0.94) add 5 points each, capped at 15 points total. Interpol Red Notice hits add 15 points. FBI Most Wanted hits add 15 points. Total capped at 35. - Corporate Transparency (0-25 pts): Searches corporate records for 7 shell indicator terms:
registered agent,nominee,bearer shares,trust company,corporate services,shelf company,formation agent. Checks jurisdiction codes against 12 known secrecy jurisdictions (PA, VG, KY, BZ, SC, WS, VU, MH, BM, JE, GG, IM). Checks company status for dissolved/inactive/struck keywords. Companies incorporated under 3 months old score 5 points; under 12 months score 2 points. Missing LEI adds 4 points. IRS-revoked nonprofit status adds 6 points. - Political Exposure (0-20 pts): FARA registration adds 12 points; 3+ FARA registrations add a further 4. FEC contributions over $100,000 add 10 points; $10,000-$100,000 adds 5 points.
- Financial Regulatory (0-10 pts): SEC enforcement-type filings (8-K, SC 13D, 10-K/A) exceeding 5 adds 3 points. Insider selling exceeding 80% of total trades adds 4 points. CFPB complaints above 50 add 3 points; 11-50 adds 1 point. Inactive/closed FDIC record adds 5 points.
- Proximity to Crime (0-10 pts): Counts distinct adverse signal categories with hits. 4+ categories score 10; 3 categories score 7; 2 categories score 4; 1 category scores 2. This convergence measure prevents single-signal noise from driving the tier.
Phase 3: Tier classification and SAR guidance
The total score and directSanctionsMatch flag are passed to tierFromScore. Any direct sanctions match triggers PROHIBITED regardless of score. Score > 70 = PROHIBITED, > 45 = HIGH, > 20 = MEDIUM, ≤ 20 = LOW. The recommendationFromTier function maps each tier to a specific compliance action, including the FinCEN-aligned instruction for PROHIBITED cases: block transaction, file SAR within 30 days, do not tip off the subject, escalate to BSA/AML officer.
Phase 4: Supplementary analysis and output assembly
Beyond the dimensional scores, the actor builds four supplementary analysis blocks in main.ts: the sanctions deep-check (splitting exact from fuzzy matches), shell company analysis (enumerating every indicator with its source record and computing a 0-100 shell score), PEP analysis (checking FARA and computing total FEC donation amount), and proximity-to-crime breakdown (per-category hit counts with signal flags). All blocks plus the raw sub-actor results are assembled into a single comprehensive JSON report and pushed to the Apify dataset.
Tips for best results
-
Run the most common spelling first, then aliases. Sanctions databases contain many transliterations and name variants. Screen the primary legal name first, then known aliases as separate runs. Merge results manually if you need a combined view.
-
Use
entityType: "person"for individuals. This skips OpenCorporates, GLEIF, nonprofit, and FDIC sub-actors. Runs 20-30 seconds faster and costs roughly 30% less. The 9 remaining sub-actors cover all high-risk signals for individuals. -
Treat MEDIUM-tier results as triggers for Enhanced Due Diligence (EDD). A MEDIUM score (21-45) does not mean the entity is clear — it means the available data warrants deeper manual review. Collect source-of-funds documentation, verify beneficial ownership, and document your decision.
-
For companies, always check the ultimate beneficial owner (UBO) separately. Screen both the company and the known UBOs as individuals. Shell company risk in corporate records often points to a person who may themselves appear on sanctions or PEP lists.
-
Re-screen high-value relationships on a schedule. OFAC updates the SDN list weekly. OpenSanctions adds new designations daily. An entity that screened LOW at onboarding may be added to a list months later. Use Apify's scheduler to run weekly re-screening on your highest-risk customer segments.
-
Check the
directSanctionsMatchfield first in your code. Before reading scores or dimensions, checkdirectSanctionsMatch === true. If true, you must block regardless of other findings. Build this as a hard gate in your decision logic, not a threshold. -
Preserve the full JSON output as your audit record. The
screenedAttimestamp,actorsUsedcount, and per-source raw records in the output constitute an auditable screening record. Store the full JSON in your compliance case management system, not just the tier and score.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| Waterfall Contact Enrichment | After AML screening surfaces key individuals (UBOs, FARA principals), enrich their contact profiles through a 10-step cascade to build a complete investigative picture |
| Company Deep Research | Run for entities that score MEDIUM or HIGH to gather comprehensive intelligence: news coverage, financial data, corporate history, and connected entities |
| WHOIS Domain Lookup | Cross-reference domain registrant data against AML findings to identify hidden beneficial owners using anonymized registration patterns |
| Website Tech Stack Detector | Profile the entity's digital footprint to corroborate or contradict the stated business activity — a shell company often has no substantive web presence |
| B2B Lead Qualifier | For cleared entities (LOW tier), pass directly into lead qualification and enrichment to accelerate compliant onboarding of legitimate prospects |
| Trustpilot Review Analyzer | Supplement formal AML screening with adverse media signals from customer review patterns — patterns of fraud complaints are a meaningful corroborating indicator |
| SEC EDGAR Filing Analyzer | For entities with SEC filings surfaced in the AML report, perform deep analysis of filing content for material misstatements, late filings, and enforcement history |
Limitations
- Name-matching accuracy depends on spelling. The actor queries each sub-actor using the entity name as submitted. Sanctions databases contain transliterations and abbreviations. A name variant not submitted will not be matched. Screen all known aliases separately.
- No global corporate registry coverage. OpenCorporates covers 150+ jurisdictions but is not exhaustive. Entities registered in jurisdictions with limited registry access may return no corporate records, which itself scores as opacity but does not confirm the entity is unregistered.
- No adverse media or news screening. The actor does not search news databases, press archives, or internet sources for adverse media mentions. Adverse media screening is a recommended complement — consider Company Deep Research for narrative intelligence.
- PEP database is indirect. PEP classification is derived from FARA registrations and FEC donation records, which are specific to US-regulated foreign agent and campaign finance activity. The actor does not query dedicated global PEP databases (like World-Check PEP lists). Non-US PEPs who have not registered with FARA or donated to US campaigns may not be flagged.
- CFPB data covers US consumer financial services only. Complaints are limited to the US Consumer Financial Protection Bureau database. Non-US entities and non-financial businesses are not covered by this signal.
- No real-time sanctions streaming. The actor queries current database states at run time. It does not provide real-time streaming updates when new designations are added between screening runs. Schedule regular re-screening for ongoing monitoring.
- Sub-actor timeout is 120 seconds each. Slow API responses from individual sub-actors may result in empty results for that source, which is recorded but does not fail the run. Check
actorsUsedversus expected sub-actor count if you suspect dropped results. - Not a legal or regulatory opinion. The output is data aggregation and scoring, not legal advice or a regulatory determination. Compliance decisions must be made by qualified compliance officers using this output as one input among others.
Integrations
- Zapier — trigger AML screening automatically when a new contact is created in your CRM, and route PROHIBITED results to a compliance review task
- Make — build multi-step compliance workflows: screen entity, evaluate tier, push to case management system, notify compliance officer via Slack
- Google Sheets — export screening results to a compliance register spreadsheet, with one row per entity and color-coded risk tiers
- Apify API — integrate directly into onboarding pipelines, KYC decision engines, or payments processing systems for programmatic go/no-go decisions
- Webhooks — configure webhooks to post PROHIBITED or HIGH tier results immediately to your incident management system
- LangChain / LlamaIndex — feed structured AML screening outputs into AI compliance agents to automate narrative report generation or case summarization
Troubleshooting
-
PROHIBITED result but confident the entity is clean — Verify whether the match is exact (
directSanctionsMatch: true) or fuzzy. Fuzzy matches at 0.50-0.94 confidence require manual review. Check thesanctions.exactMatchesandsanctions.fuzzyMatchesarrays for the specific matching records. A fuzzy match on a common name may be a false positive — document your review decision in your compliance file. -
Empty results from multiple sub-actors — Some public APIs experience intermittent availability. The actor handles individual failures gracefully (returns empty arrays). If more than 3-4 sub-actors return empty results simultaneously, retry the run. Check the actor run log for
Actor X failederror messages to identify which sources were unavailable. -
Run taking longer than 3 minutes — The parallel 13-actor architecture typically completes in 90-120 seconds. Longer runtimes usually indicate one or more sub-actors hitting rate limits or slow API responses. The 120-second per-sub-actor timeout means a run can extend up to that limit if a sub-actor is unresponsive. You can monitor individual sub-actor performance in the Apify console run logs.
-
Shell score is HIGH but entity looks legitimate — The shell company scoring detects patterns commonly associated with shell companies, but these patterns can also appear in legitimate businesses (e.g., a legitimate company using a registered agent service, or being incorporated in an offshore jurisdiction for tax reasons). Review the
shellCompanyAnalysis.indicatorsarray to understand which specific indicators triggered the score, then apply professional judgment. -
FEC records return large volumes for a common name — Campaign finance records are matched by name string. Common names may return many unrelated individuals. Review the
politicalExposure.campaignFinance.datarecords to confirm they relate to the specific entity being screened before acting on the PEP classification.
Responsible use
- This actor only accesses publicly available compliance data from official government and regulatory sources.
- All data sources — OFAC, Interpol, FBI, FARA, FEC, OpenCorporates, GLEIF, FDIC, SEC EDGAR, CFPB, and IRS — are public record databases.
- Screening results must be used in compliance with applicable laws including the Bank Secrecy Act, EU AML Directives, and GDPR where personal data is involved.
- Do not use AML screening results to discriminate unlawfully, harass individuals, or share outside of legitimate compliance, legal, or investigative purposes.
- SAR filings triggered by this output must comply with FinCEN requirements, including the prohibition on tipping off subjects.
- For guidance on data use, see Apify's guide on web scraping legality.
FAQ
How does AML entity screening classify entities as PROHIBITED?
PROHIBITED status is triggered by either a direct sanctions match (any OFAC or OpenSanctions hit with confidence ≥ 0.95 or match: "exact") or a total score above 70. A direct sanctions match triggers PROHIBITED automatically, regardless of the numeric score. This ensures no exact sanctions hit can ever be downgraded by other factors.
What does an AML risk score of MEDIUM actually mean for my compliance process? A MEDIUM score (21-45) means the entity has adverse signals that require Enhanced Due Diligence (EDD) before proceeding. You should collect additional identification documentation, verify source of funds, obtain senior officer approval, and document your review. MEDIUM does not mean the entity is prohibited — it means you need more information before making a decision.
How many databases does AML entity screening check? The actor checks 13 databases for company screening: OFAC SDN, OpenSanctions (40+ international lists), Interpol Red Notices, FBI Most Wanted, DOJ FARA, FEC campaign finance, OpenCorporates, GLEIF LEI, IRS nonprofit registry, SEC EDGAR, SEC insider trading, CFPB consumer complaints, and FDIC bank registry. For individual (person) screening, 9 of these databases run — the four corporate-specific ones are skipped.
How accurate is the shell company detection? Shell company detection searches corporate records for 7 specific indicator terms (nominee, bearer shares, registered agent, trust company, corporate services, shelf company, formation agent) and checks registration jurisdiction against 12 known secrecy jurisdictions. These are established AML red flags per FATF typologies. The detection identifies patterns associated with shell companies but cannot definitively confirm a company is a shell — use indicators to inform EDD rather than as a conclusive determination.
Is it legal to screen entities using publicly available compliance data? Yes. All data sources queried are official public government and regulatory databases. OFAC, FARA, FEC, SEC EDGAR, FDIC, CFPB, and Interpol Red Notices are public record. Accessing and aggregating publicly available compliance data for AML screening is consistent with BSA/AML obligations, not contrary to them.
How is PEP status determined without a dedicated PEP database? PEP classification is derived from two US-regulated data sources: FARA (Department of Justice foreign agent registration) and FEC (Federal Election Commission campaign finance). An entity with FARA registrations is acting as a registered foreign agent, which is a standard PEP indicator. FEC contributions above $10,000 indicate political connection. This approach covers US-nexus PEP indicators but does not replace a dedicated global PEP database for entities with no US connections.
How is this different from Dow Jones Risk & Compliance or Refinitiv World-Check? Dow Jones and World-Check are enterprise subscription platforms at $500-$5,000+/month with curated, manually reviewed PEP and adverse media databases. This actor provides automated aggregation of public government databases only — no curated PEP lists, no adverse media content, no human analyst review. The trade-off: dramatically lower cost ($0.10-$0.18 per screen versus subscription pricing), but narrower coverage. Best suited for teams that need defensible public-record screening on a budget, not as a direct replacement for enterprise platforms in high-regulation environments.
Can I screen entities in bulk via the API?
Yes. The API supports full programmatic access. You can trigger runs sequentially in a loop or use a batch orchestration approach to screen lists of entities. For high-volume screening (100+ entities), consider running with entityType: "person" where applicable to reduce cost, and implement exponential backoff between runs to avoid rate-limiting sub-actors.
How long does a typical AML screening run take? Most runs complete in 90-120 seconds for company screening (13 sub-actors in parallel) and 60-90 seconds for individual screening (9 sub-actors). The bottleneck is the slowest responding sub-actor, not the total number of calls, because all sub-actors execute in parallel.
What happens if one of the 13 sub-actors fails during a run?
Individual sub-actor failures return empty arrays and are logged as errors in the run log. The run continues and produces a complete report based on the sources that did respond. The actorsUsed field in the output shows how many sub-actors were called, but does not distinguish successful from failed calls. If a critical source (OFAC, OpenSanctions) fails, consider re-running the screening.
Can I schedule AML entity screening to run automatically for ongoing monitoring? Yes. Use Apify's built-in scheduler to run screenings daily or weekly on high-risk customer segments. Configure a webhook to notify your compliance team when any run produces a PROHIBITED or HIGH result. This supports continuous monitoring requirements under BSA/AML programs.
What SAR filing guidance does the actor provide?
For PROHIBITED-tier results, the recommendation field states: "TRANSACTION MUST BE BLOCKED. File Suspicious Activity Report (SAR) within 30 days. Do not tip off the subject. Escalate to BSA/AML officer immediately." This text mirrors FinCEN's SAR filing requirements. The sarRequired flag is true for both PROHIBITED and HIGH tiers. Note that this is informational guidance — your qualified BSA/AML officer must make the final SAR filing decision.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try AML Entity Screening?
Start for free on Apify. No credit card required.
Open on Apify Store