AIDEVELOPER TOOLS

Financial Crime Screening MCP Server

Financial crime screening MCP server that connects your AI agent or compliance workflow to 13 live data sources for AML/CFT due diligence. Give it an entity name and it returns a structured AML Risk Tier — LOW, MEDIUM, HIGH, or PROHIBITED — with dimensional scores, SAR filing recommendations, and supporting evidence. Purpose-built for banks, crypto exchanges, money service businesses, and compliance teams that need audit-ready risk classifications on demand.

Try on Apify Store
$0.15per event
1
Users (30d)
14
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.15
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

entity-screens
Estimated cost:$15.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
entity-screenFull AML/CFT screening across sanctions, watchlists, and corporate registries.$0.15
sanctions-deep-checkDeep sanctions verification against OFAC SDN and OpenSanctions.$0.08
criminal-watchlistScan Interpol Red Notices and FBI Most Wanted databases.$0.08
pep-analysisCheck FARA foreign agent registrations and FEC campaign finance for PEP indicators.$0.08
shell-detectionAnalyze company for shell indicators, nominee directors, and haven jurisdictions.$0.10
fi-verifyVerify FDIC insurance status and regulatory standing.$0.08
proximity-scoreCalculate adverse signal convergence across all databases.$0.15
aml-classificationFull 13-actor AML risk tier classification (LOW/MEDIUM/HIGH/PROHIBITED).$0.30

Example: 100 events = $15.00 · 1,000 events = $150.00

Connect to your AI agent

Add this MCP server to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.

MCP Endpoint
https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp
Claude Desktop Config
{
  "mcpServers": {
    "financial-crime-screening-mcp": {
      "url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp"
    }
  }
}

Documentation

Financial crime screening MCP server that connects your AI agent or compliance workflow to 13 live data sources for AML/CFT due diligence. Give it an entity name and it returns a structured AML Risk Tier — LOW, MEDIUM, HIGH, or PROHIBITED — with dimensional scores, SAR filing recommendations, and supporting evidence. Purpose-built for banks, crypto exchanges, money service businesses, and compliance teams that need audit-ready risk classifications on demand.

The server runs on Apify's Standby infrastructure and exposes 8 MCP tools via a persistent /mcp endpoint. Each tool dispatches parallel requests to the underlying actor fleet — sanctions databases, criminal watchlists, foreign agent registries, corporate registries, and financial regulators — then applies a five-dimensional AML scoring engine to produce quantified, explainable risk output. No subscriptions. No monthly minimums. You pay per tool call.

What data can you access?

Data PointSourceExample
📋 US Treasury SDN and blocked personsOFAC Sanctions"Meridian Trade LLC" — exact match, score 1.00
🌐 Global sanctions, PEPs, and watchlistsOpenSanctions (100+ lists)EU consolidated list, UN Security Council
🚨 International wanted personsInterpol Red NoticesCharges: wire fraud, money laundering
🔴 US federal wanted personsFBI Most WantedFugitive status, last known location
🏛️ Foreign agent registrationsFARA DOJ RegistryForeign principal, country of origin
🗳️ Political contribution recordsFEC Campaign Finance$485,000 in contributions — PEP indicator
🏢 Corporate registry (140+ jurisdictions)OpenCorporates (200M+ records)Jurisdiction: VG, status: dissolved
🔑 Legal entity identificationGLEIF LEI DatabaseLEI: 549300ABCD1234567890
🤝 Nonprofit 990 financial dataProPublica Nonprofit ExplorerIRS revocation status
⚠️ Consumer financial complaintsCFPB Complaint Database73 complaints — pattern of harm
🏦 US bank institution verificationFDIC Bank DataActive/inactive insurance status
📑 SEC regulatory filingsSEC EDGAR8-K, SC 13D, enforcement filings
📈 Insider transaction disclosuresSEC Form 4 Insider TradingSale/buy ratio — 87% sales

Why use Financial Crime Screening MCP Server?

Manual AML screening for a single entity requires opening six or more government portals, running name searches with spelling variants, recording results in a spreadsheet, and repeating the process periodically. A trained compliance analyst spends 45-90 minutes per entity on initial onboarding. With high-volume customer pipelines or transaction monitoring queues, that throughput does not scale.

Vendors like Dow Jones Risk and Refinitiv World-Check charge $15,000-60,000 per year for subscription access to similar data. This MCP gives you programmatic access to the same primary sources — OFAC, Interpol, FBI, FARA, OpenSanctions, SEC, FDIC, CFPB — for a few dollars per screen, with no minimum commitment.

  • Scheduling — run periodic re-screening on watchlist changes or on a compliance calendar via Apify's built-in scheduler
  • API access — trigger screenings from Python, JavaScript, Claude Desktop, Cursor, or any MCP-compatible client
  • Parallel execution — all actor calls within each tool run in parallel, returning results in seconds rather than minutes
  • Monitoring — get Slack or email alerts when screening runs complete or return unexpected results
  • Integrations — connect results to case management systems, Google Sheets, HubSpot, or webhooks

Features

  • Eight focused MCP tools covering the full AML screening workflow: entity screen, sanctions deep check, criminal watchlist scan, PEP analysis, shell detection, financial institution verification, proximity scoring, and full AML classification
  • 13 live data sources queried in real time — results always reflect the current published state of each database, not a cached copy
  • Five-dimensional AML scoring engine allocating points across Sanctions Exposure (0-35), Corporate Transparency (0-25), Political Exposure (0-20), Financial Regulatory Standing (0-10), and Proximity to Crime (0-10) for a total score of 0-100
  • Automatic PROHIBITED escalation — any direct sanctions match with confidence >= 0.95 triggers PROHIBITED tier regardless of the composite score, with a SAR filing mandate
  • Fuzzy name matching — OFAC and OpenSanctions hits are separated into exact matches (score >= 0.95) and fuzzy matches (0.50-0.95) for prioritized review queues
  • Shell company detection using seven textual indicators (registered agent, nominee, bearer shares, trust company, corporate services, shelf company, formation agent) across OpenCorporates records
  • Shell haven jurisdiction check against 12 known offshore jurisdictions: Panama (PA), British Virgin Islands (VG), Cayman Islands (KY), Belize (BZ), Seychelles (SC), Samoa (WS), Vanuatu (VU), Marshall Islands (MH), Bermuda (BM), Jersey (JE), Guernsey (GG), Isle of Man (IM)
  • Proximity-to-crime convergence scoring — each adverse signal category that activates adds 17 points to a 0-100 convergence score; four or more categories converging triggers CRITICAL classification
  • PEP detection via FEC threshold logic — campaign contributions above $10,000 trigger potential PEP flag; above $100,000 trigger confirmed PEP classification
  • FARA foreign agent mapping — identifies registered foreign agents with their foreign principals and country of origin
  • Nonprofit money laundering flag — IRS-revoked nonprofit status is treated as a distinct AML red flag
  • Spending limit enforcement — every tool checks Actor.charge() before execution and returns a structured error if the per-run budget ceiling is reached
  • Stateless Streamable HTTP transport — each POST to /mcp instantiates a fresh McpServer with no session state, enabling horizontal scaling

Use cases for financial crime screening

Bank customer onboarding and KYC

Compliance teams at banks and credit unions use comprehensive_entity_screen at account opening to check new applicants against OFAC, OpenSanctions, Interpol, and FBI simultaneously. The structured output feeds directly into the onboarding case file, reducing analyst time from 60 minutes to under 5 minutes per customer while producing an auditable record.

Crypto exchange AML and FinCEN compliance

Cryptocurrency exchanges subject to FinCEN's MSB rules and the EU's MiCA regulation use aml_risk_classification before enabling withdrawals or high-value trading. The PROHIBITED tier output, combined with the sarRequired flag and SAR narrative guidance, satisfies recordkeeping obligations under the Bank Secrecy Act.

Correspondent banking due diligence

Respondent banks seeking to establish correspondent relationships require enhanced due diligence under FATF Recommendation 13. financial_institution_verify cross-checks FDIC insurance status, corporate registration, and CFPB complaint density to surface institutions that may be impersonating regulated banks or have patterns of consumer harm.

Transaction monitoring and SAR investigation

Compliance investigators using proximity_to_crime_score can triage transaction monitoring alerts by convergence level before committing analyst time to full investigation. A CRITICAL convergence score (four or more adverse signal categories) escalates directly to SAR preparation; a NONE score clears the alert without manual review.

PEP screening for high-value accounts

Private banks and wealth managers required to identify politically exposed persons use pep_influence_analysis to check FARA registrations and FEC contribution totals. The tool returns a PEP classification with supporting evidence and a recommendation for enhanced due diligence, source-of-wealth verification, and senior management approval.

Shell company investigation and beneficial ownership

Corporate investigators and FinCEN examiners use corporate_shell_detection to identify potential layering structures before processing wire transfers. The tool produces a shell risk score (0-100) with itemized indicator findings, supporting beneficial ownership documentation requests under the CDD Rule.

How to screen an entity for financial crime

  1. Connect your MCP client — Add the server URL https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp to Claude Desktop, Cursor, Windsurf, or any MCP-compatible AI agent.
  2. Choose the right tool — Start with comprehensive_entity_screen for initial onboarding, or aml_risk_classification when you need a full documented risk determination with dimensional scores.
  3. Run the screening — Pass the entity name and type (individual/company). The server dispatches up to 13 parallel actor calls and typically returns results within 30-90 seconds.
  4. Review the AML Risk Tier — The response includes a tier (LOW/MEDIUM/HIGH/PROHIBITED), a numeric score, dimensional breakdowns, a SAR recommendation, and all supporting evidence for your compliance file.

Input parameters

This is an MCP server — there are no traditional actor input fields. Each tool accepts its own parameters as defined below.

Tool parameters

ToolParameterTypeRequiredDefaultDescription
comprehensive_entity_screenentity_namestringYesName of the person or company to screen
comprehensive_entity_screenentity_typeenumNounknownindividual, company, or unknown
comprehensive_entity_screencountrystringNoTwo-letter country code hint (e.g. US, GB)
sanctions_deep_checkentity_namestringYesName to check against OFAC and OpenSanctions
sanctions_deep_checkinclude_aliasesbooleanNotrueSearch known aliases and transliterations
criminal_watchlist_scannamestringYesName to search in Interpol and FBI databases
criminal_watchlist_scannationalitystringNoNationality hint to narrow Interpol search
pep_influence_analysisnamestringYesPerson or organization name
pep_influence_analysisinclude_campaign_financebooleanNotrueInclude FEC campaign finance records
corporate_shell_detectioncompany_namestringYesCompany name to analyze for shell indicators
corporate_shell_detectionjurisdictionstringNoKnown jurisdiction of the company
financial_institution_verifyinstitution_namestringYesName of the financial institution
financial_institution_verifyinclude_complaintsbooleanNotrueInclude CFPB consumer complaint analysis
proximity_to_crime_scoreentity_namestringYesEntity to score for signal convergence
proximity_to_crime_scoreentity_typeenumNounknownindividual, company, or unknown
aml_risk_classificationentity_namestringYesEntity name to classify
aml_risk_classificationentity_typeenumNounknownindividual, company, or unknown
aml_risk_classificationcountrystringNoCountry code hint

Connection configuration examples

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "financial-crime-screening": {
      "url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}

Cursor / Windsurf / Cline (.cursor/mcp.json or equivalent):

{
  "mcpServers": {
    "financial-crime-screening": {
      "url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}

Direct HTTP call for individual tool:

curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "aml_risk_classification",
      "arguments": {
        "entity_name": "Meridian Trade & Finance LLC",
        "entity_type": "company",
        "country": "PA"
      }
    },
    "id": 1
  }'

Usage tips

  • Match entity type to the search — pass entity_type: "individual" for persons to skip LEI, OpenCorporates, and FDIC lookups, which reduces cost and latency.
  • Use comprehensive_entity_screen for initial onboarding and reserve aml_risk_classification for final risk determinations that require a documented dimensional score.
  • Country code hints narrow results — passing country: "VG" when you already know an entity is BVI-registered improves match precision across corporate registries.
  • Batch via the Apify API — for high-volume screening queues, call the MCP tools programmatically from Python or JavaScript with Promise.all across multiple entities.
  • Store the full JSON response — the structured output with dimensional scores is designed to serve as the analytical record in a compliance case file.

Output example

Below is a representative response from aml_risk_classification for a hypothetical high-risk entity.

{
  "entity": "Meridian Trade & Finance LLC",
  "entityType": "company",
  "amlRiskTier": "PROHIBITED",
  "riskScore": 82,
  "directSanctionsMatch": true,
  "sarRequired": true,
  "dimensions": {
    "sanctionsWatchlist": {
      "score": 35,
      "max": 35,
      "findings": [
        "1 EXACT sanctions match — OFAC/OpenSanctions. PROHIBITED.",
        "3 fuzzy sanctions match(es) — manual review required"
      ]
    },
    "corporateTransparency": {
      "score": 20,
      "max": 25,
      "findings": [
        "Shell company indicators detected: registered agent, nominee",
        "Registered in known shell company jurisdiction: VG",
        "Entity incorporated only 2 months ago — high-risk age for AML"
      ]
    },
    "politicalExposure": {
      "score": 12,
      "max": 20,
      "findings": [
        "Registered foreign agent under FARA — principals: Government of Ruritania"
      ]
    },
    "financialRegulatory": {
      "score": 5,
      "max": 10,
      "findings": [
        "FDIC record shows INACTIVE/CLOSED institution — entity may be impersonating a bank"
      ]
    },
    "proximityCrime": {
      "score": 10,
      "max": 10,
      "findings": [
        "CRITICAL CONVERGENCE: 4 adverse signal categories (sanctions, foreign agent, shell indicators, consumer complaints) — strong proximity to financial crime"
      ]
    }
  },
  "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.",
  "actorsUsed": 13
}

Output fields

FieldTypeDescription
entitystringEntity name as submitted
entityTypestringindividual, company, or unknown
amlRiskTierstringLOW, MEDIUM, HIGH, or PROHIBITED
riskScorenumberComposite AML score 0-100
directSanctionsMatchbooleanTrue if any sanctions hit has confidence >= 0.95 or exact match
sarRequiredbooleanTrue for HIGH and PROHIBITED tiers
dimensions.sanctionsWatchlist.scorenumberPoints scored in sanctions dimension (max 35)
dimensions.sanctionsWatchlist.findingsarrayHuman-readable finding strings for each signal
dimensions.corporateTransparency.scorenumberPoints scored in corporate transparency dimension (max 25)
dimensions.corporateTransparency.findingsarrayShell indicators, jurisdiction flags, status issues
dimensions.politicalExposure.scorenumberPoints scored in PEP dimension (max 20)
dimensions.politicalExposure.findingsarrayFARA registrations, FEC contribution totals
dimensions.financialRegulatory.scorenumberPoints scored in regulatory standing dimension (max 10)
dimensions.financialRegulatory.findingsarrayFDIC status, CFPB complaint density, insider trading ratio
dimensions.proximityCrime.scorenumberSignal convergence score (max 10)
dimensions.proximityCrime.findingsarrayConvergence level and active category list
recommendationstringTier-specific compliance action (block, file SAR, enhanced DD, standard processing)
actorsUsednumberNumber of underlying actors called in this run

For sanctions_deep_check, additional fields include blocked (boolean), summary (verdict string), exactMatches (array), and fuzzyMatches (array). For proximity_to_crime_score, additional fields include proximityScore (0-100), convergenceLevel (NONE/LOW/MODERATE/HIGH/CRITICAL), activeSignals (count), and breakdown (per-category array).

How much does it cost to screen entities for financial crime?

Financial Crime Screening MCP Server uses pay-per-event pricing — you pay $0.045 per tool call. There is no subscription, no monthly minimum, and no charge for idle standby time.

ScenarioTool callsCost per callTotal cost
Quick sanctions check1$0.045$0.045
Initial onboarding (screen + shell + PEP)3$0.045$0.135
Full AML classification (13 actors)1$0.045$0.045
Daily re-screening of 100 entities100$0.045$4.50
Monthly batch of 1,000 entities1,000$0.045$45.00

You can set a maximum spending limit per run to control costs. The server checks your budget ceiling before each tool execution and returns a structured error if the limit is reached rather than continuing to charge.

Apify's free tier includes $5 of monthly platform credits — enough to run approximately 110 full AML classifications with no payment required.

Compare this to Dow Jones Risk Center or Refinitiv World-Check at $15,000-60,000 per year for subscription access to the same primary data sources. With this MCP, most compliance teams running 500-2,000 screenings per month spend $22-$90/month with no commitment.

Financial crime screening using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

# Start the MCP server actor in standby mode
actor_client = client.actor("ryanclinton/financial-crime-screening-mcp")

# Call the AML classification tool via HTTP (the actor runs as a persistent server)
import urllib.request
import json

url = "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_APIFY_TOKEN"
}
payload = {
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
        "name": "aml_risk_classification",
        "arguments": {
            "entity_name": "Meridian Trade & Finance LLC",
            "entity_type": "company",
            "country": "PA"
        }
    },
    "id": 1
}

req = urllib.request.Request(url, json.dumps(payload).encode(), headers)
with urllib.request.urlopen(req) as response:
    result = json.loads(response.read())

content = json.loads(result["result"]["content"][0]["text"])
print(f"Entity: {content['entity']}")
print(f"AML Risk Tier: {content['amlRiskTier']}")
print(f"Risk Score: {content['riskScore']}/100")
print(f"SAR Required: {content['sarRequired']}")
print(f"Recommendation: {content['recommendation']}")

JavaScript

const MCP_URL = "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp";
const API_TOKEN = "YOUR_API_TOKEN";

async function screenEntity(entityName, entityType = "unknown") {
    const response = await fetch(MCP_URL, {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "Authorization": `Bearer ${API_TOKEN}`
        },
        body: JSON.stringify({
            jsonrpc: "2.0",
            method: "tools/call",
            params: {
                name: "aml_risk_classification",
                arguments: { entity_name: entityName, entity_type: entityType }
            },
            id: 1
        })
    });

    const envelope = await response.json();
    const result = JSON.parse(envelope.result.content[0].text);

    console.log(`Entity: ${result.entity}`);
    console.log(`AML Risk Tier: ${result.amlRiskTier} (score: ${result.riskScore}/100)`);
    console.log(`Direct Sanctions Match: ${result.directSanctionsMatch}`);
    console.log(`SAR Required: ${result.sarRequired}`);
    console.log(`Recommendation: ${result.recommendation}`);

    for (const [dim, data] of Object.entries(result.dimensions)) {
        console.log(`  ${dim}: ${data.score}/${data.max} — ${data.findings[0]}`);
    }

    return result;
}

await screenEntity("Meridian Trade & Finance LLC", "company");

cURL

# Screen an entity for AML risk
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "aml_risk_classification",
      "arguments": {
        "entity_name": "Meridian Trade & Finance LLC",
        "entity_type": "company"
      }
    },
    "id": 1
  }'

# Run a quick sanctions check only
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "sanctions_deep_check",
      "arguments": {
        "entity_name": "Viktor Petrov",
        "include_aliases": true
      }
    },
    "id": 2
  }'

# List all available tools
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 3}'

How Financial Crime Screening MCP Server works

Actor fleet and parallel dispatch

The MCP server is implemented in TypeScript using @modelcontextprotocol/sdk version 1.17.5 with Express 5 as the HTTP host. When a tool call arrives at the /mcp endpoint, getServer() instantiates a fresh McpServer and StreamableHTTPServerTransport in stateless mode (no sessionIdGenerator). This allows horizontal scaling without shared session state.

Each tool calls runActorsParallel() from actor-client.ts, which wraps Promise.all() over an array of runActor() calls. Each runActor() invokes ApifyClient.actor(name).call(input, { waitSecs: 120, memory: 256 }) and extracts the default dataset. Failed actor calls return empty arrays rather than throwing, so a single source outage does not abort the entire screen. The 13 underlying actors cover: ofac-sanctions-search, opensanctions-search, interpol-red-notices, fbi-wanted-search, fara-foreign-agents, fec-campaign-finance, opencorporates-search, gleif-lei-lookup, nonprofit-explorer, edgar-filing-search, sec-insider-trading, cfpb-consumer-complaints, and fdic-bank-search.

Five-dimensional AML scoring engine

scoring.ts implements computeAMLRisk() which scores five independent dimensions and sums them to a capped total of 100 points.

Dimension 1 — Sanctions and Watchlist Exposure (max 35 points): Exact sanctions matches (confidence >= 0.95 or match === "exact") add 30 points and set directSanctionsMatch = true. Fuzzy matches add up to 15 additional points (5 per match). Interpol Red Notice hits add 15 points. FBI Most Wanted hits add 15 points. Any direct match triggers automatic PROHIBITED tier override regardless of the composite total.

Dimension 2 — Corporate Transparency (max 25 points): Missing corporate records for non-individuals score 12 points. Shell company textual indicators in OpenCorporates records (checked via case-insensitive JSON.stringify scan against 7 terms) score 8 points. Registration in one of 12 shell haven jurisdictions scores 6 points. Dissolved or inactive company status scores 5 points. Companies incorporated within the last 3 months score 5 points; within 12 months score 2 points. Missing LEI for registered companies scores 4 points. IRS-revoked nonprofit status scores 6 points.

Dimension 3 — Political Exposure (max 20 points): FARA registration scores 12 points plus 4 additional points for more than 3 foreign principal records. FEC contributions above $100,000 score 10 points; above $10,000 score 5 points; any FEC record scores 2 points. The totalDonations figure is computed by summing amount, contribution_receipt_amount, or total fields across all FEC records.

Dimension 4 — Financial Regulatory Standing (max 10 points): More than 5 SEC filings of enforcement-interest form types (8-K, SC 13D, 10-K/A) score 3 points. An insider trading portfolio where more than 80% of transactions are sales scores 4 points as a potential flight or front-running signal. More than 50 CFPB complaints score 3 points; more than 10 score 1 point. An inactive or closed FDIC record scores 5 points as a bank impersonation indicator.

Dimension 5 — Proximity to Crime (max 10 points): Counts how many of 6 adverse signal categories are active (sanctions, Interpol, FBI, FARA, >20 CFPB complaints, shell indicators) and converts convergence count to score: 1 category = 2 pts, 2 = 4 pts, 3 = 7 pts, 4+ = 10 pts. This dimension captures that co-occurrence of multiple weak signals is a stronger AML indicator than any single strong signal.

Risk tier thresholds and SAR logic

tierFromScore() maps the composite total to a tier: >= 71 or directSanctionsMatch === true → PROHIBITED; >= 46 → HIGH; >= 21 → MEDIUM; else LOW. sarRequired is set to true for both PROHIBITED and HIGH tiers. Each tier maps to a specific compliance recommendation string, with PROHIBITED returning the full BSA obligation text including the 30-day SAR filing window and the prohibition on tipping off the subject.

Tips for best results

  1. Screen at onboarding and re-screen on events. Initial screening catches known bad actors. Schedule comprehensive_entity_screen on a 90-day cycle and trigger sanctions_deep_check immediately when OFAC publishes a new SDN update.

  2. Use entity type to reduce latency and cost. Passing entity_type: "individual" skips corporate registry lookups (OpenCorporates, GLEIF, FDIC, Nonprofit Explorer), cutting the actor pool from 13 to 9 and reducing response time by 20-40%.

  3. Treat fuzzy sanctions matches as review required, not cleared. The sanctions_deep_check tool separates exact matches from fuzzy matches with confidence 0.50-0.95. Fuzzy matches require manual analyst review — do not auto-clear them.

  4. Combine with the Sanctions Network Analysis MCP for ownership graphs. This server screens the named entity directly. For detecting sanctions exposure through beneficial ownership chains and corporate intermediaries, pipe the output into ryanclinton/sanctions-evasion-network-mcp.

  5. Use proximity_to_crime_score for triage, aml_risk_classification for final determination. The proximity tool runs 6-7 actors and returns a convergence score in 15-30 seconds. Reserve the full classification (13 actors, 30-90 seconds) for entities that fail triage or require a documented decision.

  6. Log the full JSON response, not just the tier. Regulatory examiners and auditors expect to see the supporting evidence for AML decisions. The dimensional scores and findings arrays constitute the analytical record.

  7. Set a spending limit for bulk runs. When screening large batches programmatically, set maxTotalChargeUsd in your Apify run configuration. The server checks the limit before each tool call and exits cleanly when reached.

Combine with other Apify actors

ActorHow to combine
Sanctions Network Analysis MCPPass entity names from HIGH-tier screens into the network MCP to trace sanctions exposure through ownership chains and corporate intermediaries
Export Control Screening MCPCombine with financial crime screening for dual-use technology exporters requiring both AML and EAR/OFAC trade compliance clearance
OFAC Sanctions SearchRun direct OFAC queries with custom parameters when you need raw SDN data without the AML scoring layer
OpenSanctions SearchQuery the 100+ consolidated watchlists directly for bulk screening pipelines that pre-filter before calling the full MCP
Interpol Red NoticesPull Interpol Red Notice details directly for law enforcement and investigative workflows outside the AML context
GLEIF LEI LookupVerify LEI registration and ownership hierarchy for corporate counterparties before initiating wire transfers
FARA Foreign AgentsMap foreign agent networks and foreign principal relationships for geopolitical risk assessments

Limitations

  • US-centric regulatory coverage. FDIC, CFPB, FEC, and FARA are US government sources. Non-US financial institutions and foreign PEPs may have limited coverage. Supplement with country-specific regulator checks for cross-border transactions.
  • No real-time OFAC API integration. The underlying actor queries published OFAC data. There is a latency between an SDN list update and when the actor reflects that change. For true real-time OFAC compliance at the transaction level, pair this tool with a dedicated OFAC API subscription.
  • Fuzzy matching requires human review. Matches with confidence 0.50-0.95 are returned for review but not auto-escalated. The tool cannot determine on its own whether a fuzzy match represents the same person or a coincidental name similarity.
  • Not a substitute for legal counsel. The SAR filing recommendation is a compliance guidance string based on the AML scoring output. Actual SAR filing obligations are determined by applicable law and institutional policy, not by this tool's output alone.
  • Corporate transparency limited to OpenCorporates coverage. OpenCorporates covers 200M+ records across 140 jurisdictions but some jurisdictions have limited or delayed data. Entities registered in jurisdictions not covered by OpenCorporates will trigger the "no corporate record found" scoring penalty.
  • No biometric or document verification. This tool works with entity names only. It does not perform identity document verification, photo matching, or biometric checks required for full KYC under some regulatory frameworks.
  • Parallel actor calls are capped at 120-second timeout. If a slow underlying actor (e.g., EDGAR during peak load) times out, that dimension returns empty results rather than failing the entire screen. The output will note actorsUsed which may be less than expected.
  • Not designed for natural-person privacy-restricted jurisdictions. Querying individuals in jurisdictions with strong natural person data privacy laws (e.g., certain EU member states) through OpenCorporates and GLEIF may surface limited results. OFAC and OpenSanctions queries are compliant with applicable sanctions screening exemptions.

Integrations

  • Apify API — Trigger screenings programmatically, manage spending limits, and retrieve run history from your compliance platform
  • Webhooks — Post screening results to your case management system, compliance workflow engine, or alerting platform when each run completes
  • Zapier — Route PROHIBITED-tier results to a Slack channel or Jira ticket for immediate analyst review
  • Make — Build automated periodic re-screening workflows that trigger on watchlist update events
  • Google Sheets — Log screening results to a compliance register spreadsheet for audit trail purposes
  • LangChain / LlamaIndex — Use this MCP as a compliance tool within AI agent pipelines for automated onboarding, transaction review, or investigation workflows

Troubleshooting

  • Tool returns empty dimension data despite a known high-risk entity — One or more underlying actors may have timed out. Check actorsUsed in the response. If it is less than expected, retry the run. The 120-second per-actor timeout is a hard limit — slow government APIs during peak hours occasionally exceed it.

  • Fuzzy sanctions matches appearing for a common name — Common names (e.g., "John Smith") will generate many false positives in fuzzy matching. Narrow the search with a country code hint (country: "US") or use sanctions_deep_check with include_aliases: false to reduce noise. The compliance decision on fuzzy matches always requires human review.

  • spending limit reached error on first call — Your Apify account's maxTotalChargeUsd for the run is set too low. Increase the spending limit in your Apify run settings or programmatic call parameters. Each tool call costs $0.045.

  • Server returns 405 on GET requests — The MCP endpoint only accepts POST requests per the JSON-RPC 2.0 spec. Use POST for all tool calls and tools/list discovery. GET to /mcp intentionally returns a 405 with an instructional error message.

  • Results differ between two runs for the same entity — All databases are queried live. OFAC updates the SDN list without notice. OpenSanctions ingests new source data continuously. Results reflect the state of each database at query time, so variation between runs is expected and by design.

Responsible use

  • This server accesses only publicly available government data: OFAC, OpenSanctions, Interpol, FBI, FARA, FEC, SEC, CFPB, FDIC, GLEIF, and OpenCorporates.
  • AML screening results are analytical aids, not legal determinations. Compliance decisions must be made by qualified personnel under applicable law.
  • Comply with GDPR, CCPA, and applicable data protection law when storing screening results that include personal information.
  • Do not use this tool to screen individuals for purposes unrelated to legitimate compliance, due diligence, or risk management workflows.
  • SAR filing obligations and timelines are governed by BSA/FinCEN regulations, not by the recommendation strings returned by this tool.
  • For guidance on web scraping legality, see Apify's guide.

FAQ

How does financial crime screening with this MCP differ from paid compliance platforms like World-Check or Dow Jones Risk Center? This MCP queries the same primary sources (OFAC SDN, Interpol, FBI, FARA, FEC, OpenSanctions) that commercial platforms aggregate, at a fraction of the cost. Commercial platforms add proprietary editorial content, enhanced data linkage, and SLA guarantees. This tool is best suited for teams that need programmatic, AI-integrated AML screening without a six-figure annual contract.

How accurate is the fuzzy name matching for sanctions screening? OFAC matching uses the built-in fuzzy matching in the underlying ofac-sanctions-search actor, which applies Levenshtein distance and transliteration to catch variant spellings. Hits with confidence >= 0.95 are classified as exact matches. Hits between 0.50 and 0.95 are returned as fuzzy matches requiring human review. The false positive rate for common names is non-trivial and manual review is always required for fuzzy results.

How current are the watchlist databases? All databases are queried live at the time of each tool call. There is no cached snapshot. Results reflect the published state of OFAC, OpenSanctions, Interpol, FBI, and other sources at query time. OFAC typically updates the SDN list within hours of a new designation.

Can I use financial crime screening results as the basis for a SAR filing? The aml_risk_classification tool returns dimensional scores, evidence findings, and a compliance recommendation that form the analytical basis for a SAR narrative. The tool explicitly surfaces sarRequired: true for HIGH and PROHIBITED tiers. However, the actual SAR filing must be prepared and submitted by a qualified BSA/AML officer in accordance with FinCEN Form 114 requirements.

Is it legal to use this tool for AML compliance screening? Yes. This tool queries publicly available government databases and is designed to support legitimate compliance workflows. OFAC screening is a legal obligation for US financial institutions under the Bank Secrecy Act. For guidance on data access legality, see Apify's guide on web scraping legality.

How many entities can I screen per hour? Each tool call runs up to 13 actors in parallel and typically completes in 30-90 seconds. In practice, 40-80 full AML classifications per hour is achievable from a single client. For higher throughput, run multiple concurrent MCP calls using the Apify API.

Does this MCP support batch screening of multiple entities? The MCP protocol is designed for single-entity tool calls. For batch screening, use the Apify API to dispatch multiple concurrent HTTP requests to the MCP endpoint. A Python asyncio loop or JavaScript Promise.all across entity lists is the recommended pattern.

What happens when an underlying actor is unavailable or times out? Each runActor() call is wrapped in a try-catch that returns an empty array on failure. A timed-out actor does not abort the overall screening. The response includes actorsUsed so you can see how many sources contributed. If a critical dimension (e.g., sanctions) returns empty due to timeout, treat the result as inconclusive and rerun.

Can I schedule periodic re-screening for ongoing monitoring? Yes. Use Apify's scheduler to trigger re-screening runs on a daily, weekly, or custom calendar. Combine with webhooks to push results to your case management system automatically when screenings complete.

Does the shell company detection cover beneficial ownership? The corporate_shell_detection tool identifies shell company indicators in publicly available corporate records — nominee directors, registered agents, bearer shares, shell haven jurisdictions. It does not resolve the full beneficial ownership chain. For structured ownership mapping and UBO research, supplement with ryanclinton/sanctions-evasion-network-mcp.

What does the PROHIBITED tier mean in practice? PROHIBITED is triggered by a direct sanctions match (OFAC or OpenSanctions confidence >= 0.95) or a composite risk score above 70. The recommendation text mirrors BSA obligations: block the transaction, file a SAR within 30 days, do not tip off the subject, escalate to the BSA/AML officer immediately.

How is the proximity-to-crime score different from the overall AML risk score? The proximity score (0-100, from proximity_to_crime_score tool) measures only signal convergence — how many of 6 adverse categories are simultaneously active — weighted at 17 points per category. The AML risk score (0-100, from aml_risk_classification) is a weighted composite across all 5 dimensions where sanctions exposure carries the most weight (max 35 points). The proximity score is a faster, cheaper triage signal; the AML risk score is the full documented determination.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. 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 data source additions, enterprise integrations, or white-label compliance deployments, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

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.

Ready to try Financial Crime Screening MCP Server?

Start for free on Apify. No credit card required.

Open on Apify Store