Trade-Based Money Laundering Detection
About
Trade-based money laundering (TBML) detection for compliance teams, AML investigators, and financial intelligence units — delivered as an MCP server that plugs directly into Claude, Cursor, or any MCP-compatible AI agent.
Details
- Author
- apifyforge
- Downloads
- 151
- Categories
- AI
Jump to
- Benford‑Grubbs‑Fisher hybrid invoice anomaly detection
- Tarjan SCC + Johnson cycle enumeration for carousel fraud
- Logistic regression phantom entity screening
- Kolmogorov‑Smirnov FX arbitrage deviation detection
- Absorbing Markov chain jurisdictional cascade risk scoring
- 14 parallel data sources (UN COMTRADE, OFAC, OpenCorporates, etc.)
- Composite TBML Risk Score (0–100) with five weighted dimensions
- FinCEN SAR Form 111 evidence package aligned with 31 CFR 1020.320
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Trade-Based Money Laundering DetectionCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Add the server URL to your MCP‑compatible client (Claude Desktop, Cursor, Windsurf) by inserting the following configuration, then invoke any of the eight exposed tools via natural‑language prompts to your AI agent. No code is required from the analyst.
{
"mcpServers": {
"trade-based-money-laundering-mcp": {
"url": "https://ryanclinton--trade-based-money-laundering-mcp.apify.actor/mcp"
}
}
}
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"trade-based money laundering detection": {
"trade-based-money-laundering-mcp": {
"url": "https://ryanclinton--trade-based-money-laundering-mcp.apify.actor/mcp"
}
}
}
}
McpServers
{
"trade-based-money-laundering-mcp": {
"url": "https://ryanclinton--trade-based-money-laundering-mcp.apify.actor/mcp"
}
}
Trade-Based Money Laundering Detection MCP Server
> View on ApifyForge | Use on Apify Store
---
Quick Start
Add to your MCP client (Claude Desktop, Cursor, Windsurf):
{
"mcpServers": {
"trade-based-money-laundering-mcp": {
"url": "https://ryanclinton--trade-based-money-laundering-mcp.apify.actor/mcp"
}
}
}
---
Trade-based money laundering (TBML) detection for compliance teams, AML investigators, and financial intelligence units — delivered as an MCP server that plugs directly into Claude, Cursor, or any MCP-compatible AI agent. This server orchestrates 14 data sources and runs five peer-reviewed forensic algorithms to identify over-invoicing, carousel fraud, phantom entities, FX layering, and sanctions-adjacent ownership chains. The output is structured evidence ready for FinCEN SAR (Form 111) filing under 31 CFR 1020.320.
TBML accounts for an estimated $500–$800 billion laundered annually through trade channels, yet most compliance programs rely on manual invoice review. This server automates the full forensic pipeline: UN COMTRADE bilateral trade queries, cross-registry counterparty verification across six jurisdictions, OFAC and OpenSanctions screening, and multi-currency FX arbitrage detection — all triggered by natural-language prompts to your AI agent, with no code required from the analyst.
What data can you access?
| Data Point | Source | Example |
|---|---|---|
| 📦 Bilateral trade flows by HS commodity code | UN COMTRADE | US→UAE gold (HS 7108): 847 reported transactions |
| 🏢 Corporate registrations and beneficial ownership | OpenCorporates | Pinnacle Commodities Ltd, incorporated BVI 2024-01 |
| 🔑 Legal Entity Identifiers and ownership chains | GLEIF LEI | LEI: 2138003EK6UAINBBUS15, parent: Meridian Holdings |
| 🇬🇧 UK company filings and PSC records | UK Companies House | Nexo Trade UK Ltd, PSC: anonymous BVI trust |
| 🇨🇦 Canadian corporate registry data | Canada Corporations | Apex Resources Inc, status: active, directors: 1 |
| 🇦🇺 Australian Business Numbers and registrations | Australia ABN | ABN 51 824 753 942 — Registered 2023 |
| 🚫 OFAC Specially Designated Nationals and blocked persons | OFAC | SDN match: Al Noor Trading Co |
| 🌐 Global sanctions, PEP, and debarment lists | OpenSanctions | 42 list memberships across 8 sanctions programs |
| 💱 Spot foreign exchange rates (180+ currency pairs) | Exchange Rate Tracker | USD/AED: 3.6725, USD/CNY: 7.2341 |
| 📉 Historical exchange rate time series | Exchange Rate History | 30-day AED/USD history, daily closes |
| 🔍 Domain WHOIS and registration data | WHOIS Domain Lookup | nexotrade.ae: registered 2024-02-14, registrant hidden |
| 📊 OECD international trade and policy statistics | OECD Statistics | Trade openness index, tariff schedules |
| 🌍 IMF world economic and fiscal data | IMF Economic Data | GDP, current account balance, reserve assets |
| 🌐 IP address geolocation and ASN data | IP Geolocation Lookup | 185.220.x.x → AS: Mullvad VPN, SE |
MCP Tools
This server exposes 8 tools. Each tool charges a per-call fee when invoked.
| Tool | What it does | Cost |
|------|-------------|------|
| investigate_trade_pair | Bilateral trade flow investigation with Benford-Grubbs invoice analysis and entity sanctions screening | $0.040/call |
| detect_invoice_anomalies | Over/under-invoicing detection using Benford chi-squared + Grubbs outlier per HS6 + Fisher meta-p-value | $0.045/call |
| map_circular_trade_network | Carousel fraud and round-tripping detection via Tarjan SCC + Johnson cycle enumeration + CSI scoring | $0.045/call |
| verify_counterparty_legitimacy | Phantom entity screening using logistic regression on 4 bipartite graph features across 6+ registries | $0.040/call |
| analyze_fx_manipulation | FX arbitrage layering detection using Kolmogorov-Smirnov test on convenience score deviations | $0.040/call |
| screen_ownership_chain | Sanctions cascade risk via absorbing Markov chain: N = (I−Q)⁻¹, absorption probability B = N·R | $0.045/call |
| compute_tbml_risk_score | Comprehensive 0–100 TBML composite score running all 5 forensic algorithms across up to 14 actors | $0.045/call |
| generate_sar_evidence_package | FinCEN SAR Form 111 evidence package with regulatory references, severity ratings, and narrative template | $0.050/call |
Why use the Trade-Based Money Laundering Detection MCP Server?
A single TBML investigation using traditional methods requires a compliance analyst to manually query UN COMTRADE, cross-reference three or four corporate registries, pull OFAC and OpenSanctions results, build a spreadsheet of exchange rate histories, and then synthesize findings against FATF typology guidance. That process takes days. A single case might cost $2,000–$5,000 in analyst time — and it still misses statistical anomalies that require chi-squared tests to detect.
This server compresses that workflow to seconds. An analyst prompts their AI agent ("screen Apex Commodities Ltd in the US–UAE gold corridor") and receives a structured JSON report with Benford p-values, Grubbs outliers by HS6 code, phantom entity probability scores, KS-test FX deviations, Markov chain absorption probabilities, and a pre-populated SAR evidence package — all referencing the exact regulatory provisions that apply.
Beyond speed, the server provides capabilities that are impossible to replicate manually:
- Benford-Grubbs-Fisher hybrid — catches systematic invoice manipulation invisible to per-transaction review
- Tarjan SCC + Johnson cycle enumeration — identifies multi-hop carousel structures that span 3–6 entities
- Absorbing Markov chain — quantifies the probability that an ownership chain eventually reaches a sanctioned jurisdiction, even through legitimate intermediary layers
- Parallel data collection — up to 14 actors run simultaneously, not sequentially
Platform benefits for teams using this server via Apify:
- Scheduling — run daily corridor monitors on a cron schedule to catch emerging patterns
- API access — trigger investigations programmatically from your case management system via HTTP
- Monitoring — receive Slack or email alerts when runs fail or return critical risk scores
- Audit trail — every run is logged with input parameters and full JSON output for compliance records
- Integrations — connect to Zapier, Make, or webhooks to route high-risk findings to your case queue
Features
- Modified Benford-Grubbs hybrid with Fisher meta-p-value — applies Benford's law chi-squared goodness of fit (df=8) on first digits of trade values, runs Grubbs' outlier test per HS6 commodity code, then combines all p-values via Fisher's method: X² = −2·Σln(pᵢ) distributed as chi-squared with df=2k
- Tarjan's Strongly Connected Components algorithm — builds a directed graph from trade records and applies Tarjan's SCC in O(V+E) time to identify closed trade loops; follows with Johnson's cycle enumeration to list all elementary cycles up to configurable depth (default: 6)
- Circularity Suspicion Index (CSI) — computed per cycle as cycle_count × avg_value_variance / node_count, providing a rank-ordered list of the most suspicious circular structures
- Phantom entity logistic regression — scores P(phantom) = sigmoid(w₀ + w₁·age_ratio + w₂·employee_ratio + w₃·address_density + w₄·web_age_gap) using four bipartite graph features derived from corporate registry and WHOIS data
- Kolmogorov-Smirnov FX arbitrage detection — computes convenience scores (deviation from covered interest parity) for each currency pair, transforms via normal CDF, and applies KS test against expected uniform distribution; flags pairs where D > critical value at α=0.05
- Absorbing Markov chain jurisdictional cascade — treats 30 FATF blacklist/greylist jurisdictions and 13 medium-risk financial centers as absorbing states; computes fundamental matrix N = (I−Q)⁻¹ and absorption probability matrix B = N·R to quantify cascade risk
- 14 parallel data sources — UN COMTRADE, OpenCorporates, GLEIF LEI, UK Companies House, Canada Corporations, Australia ABN, OFAC, OpenSanctions, Exchange Rate Tracker, Exchange Rate History, WHOIS, OECD, IMF, IP Geolocation — all called concurrently, not sequentially
- Composite TBML Risk Score (0–100) — five-dimension weighted scoring: price anomaly (20%), counterparty risk (20%), jurisdiction risk (15%), circular trade involvement (15%), volume anomaly (15%), entity opacity (15%); thresholds: 0–15 Low, 16–35 Moderate, 36–55 Elevated, 56–75 High, 76–100 Critical
- SAR evidence package aligned with 31 CFR 1020.320 — categorized evidence items (Trade Pricing, Sanctions Exposure, Corporate Opacity, Circular Trade, FX Manipulation), severity ratings (low/medium/high/critical), specific regulatory references (OFAC EO 13224, CDD Rule 31 CFR 1010.230, FATF TBML Guidance 2020), and FinCEN filing recommendations with statutory deadlines
- Per-call spending controls — each tool call checks eventChargeLimitReached before executing; set a maximum budget per session to prevent runaway costs during exploratory investigations
- Jurisdiction risk taxonomy — hardcoded sets covering 15 FATF blacklist/greylist countries (IR, KP, MM, SY, YE, BF, CM, CD, HT, KE, ML, MZ, NG, PH, ZA, SS, TZ, VN) and 13 medium-risk financial centers (AE, HK, SG, CY, MT, LU, LI, MC, AD, GI, JE, GG, IM)
- Shell company indicator detection — flags deep ownership chains (≥3 hops), secrecy jurisdiction registration (BVI, Cayman, Panama, Seychelles, Marshall Islands, Vanuatu, Samoa), recent incorporation (<6 months), missing jurisdiction data, no trade activity, excessive counterparties (>10), and shared-jurisdiction clustering
Use cases for TBML detection and AML investigation
Bank AML compliance and transaction monitoring
BSA/AML compliance officers at correspondent banks, trade finance units, and money services businesses use this server to investigate trade transactions flagged by their transaction monitoring systems. Instead of manually correlating SWIFT messages with corporate registry lookups and OFAC checks, the analyst prompts their AI agent with the counterparty name and trade corridor. The server returns a full risk assessment within minutes, with SAR-ready evidence if thresholds are exceeded. This replaces workflows that previously required three days of analyst time per case.
Export control and sanctions screening
Export compliance teams use verify_counterparty_legitimacy and screen_ownership_chain to screen new trade counterparties before shipment approval. The phantom entity logistic regression catches recently incorporated shell companies with implausible employee-to-revenue ratios, and the absorbing Markov chain quantifies indirect sanctions exposure through layered ownership structures — both patterns that rule-based systems miss. This is particularly relevant for dual-use goods subject to EAR/ITAR restrictions.
Financial intelligence unit investigations
FIUs and law enforcement financial investigators use generate_sar_evidence_package to accelerate case preparation. The tool runs the complete 5-algorithm forensic pipeline, then assembles a structured evidence dossier with exact regulatory citations (31 CFR 1020.320, OFAC EO 13224, CDD Rule 31 CFR 1010.230) and a narrative template aligned with FinCEN SAR Form 111. Cases that previously took two weeks to build are packaged in under an hour.
Trade finance due diligence
Banks and non-bank trade finance providers (factoring companies, commodity traders) use investigate_trade_pair before issuing letters of credit or documentary collections. The Benford-Grubbs analysis on UN COMTRADE data detects systematic price manipulation in the counterparty's historical trade flows — a leading indicator of invoice fraud that appears before any single transaction becomes suspicious on its own.
Carousel fraud detection for VAT and customs authorities
Tax authorities and customs agencies use map_circular_trade_network to identify carousel VAT fraud patterns where goods cycle between entities across jurisdictions to generate fraudulent input tax credit claims. Tarjan's SCC identifies the strongly connected components; Johnson's cycle enumeration lists every elementary cycle; the CSI score ranks the most suspicious loops for investigation priority.
Corporate risk and third-party due diligence
Corporate compliance teams conducting enhanced due diligence on high-risk suppliers, joint venture partners, or acquisition targets use compute_tbml_risk_score as a quantitative risk gate. A score above 56 (High) triggers escalation to the legal team. The five-dimension breakdown (price anomaly, counterparty risk, jurisdiction risk, circular trade, entity opacity) identifies which specific factor drove the rating, focusing remediation efforts.
How to use the TBML Detection MCP Server
Step 1: Connect the server to your AI agent
Add the server URL to your MCP client configuration. The server runs in Apify's standby mode — it stays warm and responds within 1–2 seconds of your first prompt.
Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"trade-based-money-laundering": {
"url": "https://trade-based-money-laundering-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_API_TOKEN"
}
}
}
}
Cursor — add to .cursor/mcp.json in your project root or ~/.cursor/mcp.json globally:
{
"mcpServers": {
"trade-based-money-laundering": {
"url": "https://trade-based-money-laundering-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_API_TOKEN"
}
}
}
}
Other MCP clients — connect to https://trade-based-money-laundering-mcp.apify.actor/mcp using the Streamable HTTP transport. Pass your Apify API token in the Authorization: Bearer header.
Step 2: Run your first investigation
Once connected, prompt your AI agent in plain language:
- "Investigate trade flows between China and UAE for gold (HS 7108) and check if Nexo Metals Ltd appears on any sanctions lists"
- "Screen Pinnacle Resources Inc for phantom entity indicators — their domain is pinnacleresources.ae"
- "Map circular trade patterns among these five entities: [list]"
- "Generate a SAR evidence package for Al Fajr Trading LLC, trade corridor US–UAE electronics, case reference INV-2026-0441"
Step 3: Review the output
Each tool returns structured JSON. Your AI agent will interpret the statistical findings (Benford p-values, KS statistics, CSI scores) and provide a plain-language summary with recommended next steps.
Step 4: Use the SAR evidence package
If generate_sar_evidence_package returns evidence items at high or critical severity, download the full JSON output from the Apify Dataset tab. The package includes regulatory references and narrative templates for FinCEN Form 111 completion — hand this to your BSA officer for review and filing within the 30-day window per 31 CFR 1020.320(b)(3).
Tool parameters
investigate_trade_pair
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| reporter_country | string | Yes | — | Exporting/reporting country (ISO code or name, e.g. "US", "China") |
| partner_country | string | Yes | — | Importing/partner country (ISO code or name, e.g. "AE", "UAE") |
| commodity | string | No | all commodities | HS code or description (e.g. "7108" for gold, "2709" for crude oil) |
| entity_name | string | No | — | Specific company to screen against sanctions and corporate registries |
| year | string | No | most recent | Trade year to query (e.g. "2025") |
detect_invoice_anomalies
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| trade_corridor | string | Yes | — | Trade corridor query (e.g. "US China electronics", "Brazil UAE gold") |
| hs_codes | string[] | No | all codes | Specific HS codes to analyze (e.g. ["7108", "2709"]) |
| max_records | number | No | 100 | Maximum trade records to analyze (more = slower but better Benford sample) |
map_circular_trade_network
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| entities | string[] | Yes | — | Country or company names to include in the network (min 1) |
| commodity | string | No | — | Focus on a specific commodity (HS code or name) |
| max_depth | number | No | 6 | Maximum cycle length to search (higher = more thorough, slower) |
verify_counterparty_legitimacy
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| company_name | string | Yes | — | Company name to verify across registries and sanctions lists |
| domain | string | No | — | Company website domain for WHOIS age gap analysis (e.g. "nexotrade.ae") |
| jurisdiction | string | No | — | Known jurisdiction ISO code for targeted registry search (e.g. "GB", "CA", "AU") |
analyze_fx_manipulation
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| currencies | string[] | Yes | — | Currency codes to analyze (e.g. ["AED", "CNY", "RUB"]) |
| trade_corridor | string | No | — | Trade corridor for contextual trade data (e.g. "US UAE") |
| base_currency | string | No | "USD" | Base currency for rate analysis |
screen_ownership_chain
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| entity_name | string | Yes | — | Entity to trace ownership chain for |
| lei | string | No | — | LEI code if known (accelerates GLEIF lookup) |
| max_depth | number | No | 5 | Maximum ownership chain depth to trace |
compute_tbml_risk_score
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| entity_name | string | Yes | — | Primary entity to investigate |
| trade_corridor | string | No | — | Trade corridor context (e.g. "US UAE gold") |
| domain | string | No | — | Entity website domain for WHOIS analysis |
| currencies | string[] | No | ["AED","CNY","HKD"] | Relevant currencies for FX analysis |
generate_sar_evidence_package
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| entity_name | string | Yes | — | Primary entity under investigation |
| trade_corridor | string | No | — | Trade corridor (e.g. "US UAE gold") |
| domain | string | No | — | Entity website domain |
| currencies | string[] | No | ["AED","CNY","HKD"] | Relevant currencies |
| case_reference | string | No | auto-generated | Internal case reference number (e.g. "INV-2026-0441") |
Prompt examples
Bilateral trade investigation:
Investigate trade flows between Brazil and UAE for gold (HS 7108) in 2025.
Also check if Ouro Brasil Exportadora Ltda appears on any sanctions lists.
Phantom entity screen:
Use verify_counterparty_legitimacy to screen "Nexo Global Commodities FZE"
with domain nexoglobal.ae, jurisdiction AE.
Full SAR package:
Generate a SAR evidence package for Al Fajr Trading LLC.
Trade corridor: US UAE electronics.
Domain: alfajrtrading.ae
Currencies: AED, CNY
Case reference: INV-2026-0441
Usage tips
- Start with investigate_trade_pair — it runs Benford-Grubbs and sanctions screening in a single call. Use findings to decide which specialized tools to invoke next.
- Provide the domain when verifying counterparties — the WHOIS web_age_gap feature (company age minus domain age) is one of the strongest phantom entity predictors. Without a domain, this feature defaults to a neutral score.
- Use max_records: 200 for Benford analysis — Benford's law requires a minimum of ~50 values for a reliable chi-squared test. More records improve p-value accuracy, especially for low-volume trade corridors.
- For circular trade mapping, include country names alongside companies — the network graph is richer when it can connect corporate entities to their trading-country nodes from UN COMTRADE data.
- Set a spending limit — use Apify's per-run maximum spend setting to cap investigation costs. The server respects eventChargeLimitReached and returns a clear error rather than partially completing an expensive call.
Output example
compute_tbml_risk_score response for a high-risk entity:
{
"entity": "Nexo Global Commodities FZE",
"tbmlRiskScore": {
"score": 71,
"riskLevel": "high",
"dimensions": {
"priceAnomaly": {
"score": 0.82,
"weight": 0.20,
"weighted": 0.164,
"detail": "Benford p=0.003 — strong deviation from expected first-digit distribution. 14 Grubbs outliers across HS codes 7108, 7113, 7115. Fisher meta chi-sq=31.4 (df=28, p=0.0031)."
},
"counterpartyRisk": {
"score": 0.90,
"weight": 0.20,
"weighted": 0.180,
"detail": "2 OFAC SDN matches. 1 OpenSanctions match (SDGT program). Corporate records: 0 LEI found — reduced transparency."
},
"jurisdictionRisk": {
"score": 0.90,
"weight": 0.15,
"weighted": 0.135,
"detail": "Registered in AE (medium-risk). BVI beneficial owner detected via GLEIF. Cayman Islands intermediate holding."
},
"circularTrade": {
"score": 0.50,
"weight": 0.15,
"weighted": 0.075,
"detail": "2 SCCs detected. 3 elementary cycles found, max CSI=4.17. Tarjan SCC across 8-entity network."
},
"volumeAnomaly": {
"score": 0.68,
"weight": 0.15,
"weighted": 0.102,
"detail": "Max single transaction 14.3x above entity mean. Spike in Q4 2024 inconsistent with prior 8-quarter baseline."
},
"entityOpacity": {
"score": 0.80,
"weight": 0.15,
"weighted": 0.120,
"detail": "Incorporated 8 months ago. Domain registered 6 months ago. WHOIS: registrant hidden via PrivacyGuard."
}
},
"compositeScore": 0.776,
"normalizedScore": 71
},
"dataSources": {
"tradeRecords": 94,
"corporateRecords": 23,
"leiRecords": 0,
"sanctionsHits": 3,
"fxRates": 187,
"historicalFxRates": 90,
"oecdRecords": 7,
"imfRecords": 4,
"whoisRecords": 1
}
}
generate_sar_evidence_package response excerpt:
{
"caseReference": "INV-2026-0441",
"entity": "Nexo Global Commodities FZE",
"generatedAt": "2026-03-20T09:14:33.221Z",
"sarReport": {
"overallRisk": "critical",
"estimatedIllicitValue": 4820000.00,
"evidenceItems": [
{
"category": "Sanctions Exposure",
"finding": "Entity \"Nexo Global Commodities\" linked to sanctioned \"Al Baraka Exchange LLC\"",
"severity": "critical",
"evidence": "Direct sanctions edge detected. Program: SDGT",
"regulatoryRef": "OFAC — Executive Order 13224; 50 USC 1705(a)"
},
{
"category": "Trade Pricing",
"finding": "over-invoicing detected: United States -> UAE (HS 7108 Gold)",
"severity": "critical",
"evidence": "Reported unit price $64,200.00 deviates 87.3% from benchmark $34,280.00",
"regulatoryRef": "31 CFR 1020.320 — BSA/AML Suspicious Activity Reporting"
},
{
"category": "Corporate Opacity",
"finding": "Recently incorporated entity in secrecy jurisdiction: \"Nexo Global Commodities\"",
"severity": "high",
"evidence": "Incorporated 8 months ago in Cayman Islands. Pattern consistent with shell company formation.",
"regulatoryRef": "CDD Rule 31 CFR 1010.230 — Beneficial Ownership Requirements"
},
{
"category": "Circular Trade",
"finding": "Reciprocal trade detected: \"Nexo Global Commod\" <-> \"Meridian Metals Ltd\"",
"severity": "medium",
"evidence": "Bidirectional trade flows may indicate carousel fraud or round-tripping.",
"regulatoryRef": "FATF Guidance — Trade-Based Money Laundering (2006, updated 2020)"
}
],
"recommendations": [
"File SAR within 30 days per 31 CFR 1020.320(b)(3)",
"Block transactions and file OFAC report per 31 CFR 501.603",
"Conduct enhanced due diligence on shell entities per CDD Rule 31 CFR 1010.230",
"Investigate carousel fraud indicators per FATF TBML Guidance (2020)"
]
}
}
Output fields
compute_tbml_risk_score output
| Field | Type | Description |
|-------|------|-------------|
| entity | string | Entity name as provided |
| tbmlRiskScore.score | number | Normalized composite score 0–100 |
| tbmlRiskScore.riskLevel | string | low / moderate / elevated / high / critical |
| tbmlRiskScore.dimensions.priceAnomaly.score | number | Benford-Grubbs-Fisher anomaly score 0–1 |
| tbmlRiskScore.dimensions.counterpartyRisk.score | number | Sanctions proximity and registry gap score 0–1 |
| tbmlRiskScore.dimensions.jurisdictionRisk.score | number | FATF jurisdiction risk score 0–1 |
| tbmlRiskScore.dimensions.circularTrade.score | number | Circular trade involvement score 0–1 |
| tbmlRiskScore.dimensions.volumeAnomaly.score | number | Volume spike score 0–1 |
| tbmlRiskScore.dimensions.entityOpacity.score | number | Shell company opacity score 0–1 |
| dataSources.tradeRecords | number | UN COMTRADE records retrieved |
| dataSources.corporateRecords | number | Total corporate registry records across all registries |
| dataSources.leiRecords | number | GLEIF LEI records found |
| dataSources.sanctionsHits | number | Combined OFAC + OpenSanctions hits |
| dataSources.fxRates | number | Current spot rate records |
| dataSources.historicalFxRates | number | Historical rate data points |
generate_sar_evidence_package output
| Field | Type | Description |
|-------|------|-------------|
| caseReference | string | Provided or auto-generated reference (TBML-{timestamp}) |
| entity | string | Entity under investigation |
| generatedAt | string | ISO 8601 timestamp |
| sarReport.overallRisk | string | low / medium / high / critical |
| sarReport.estimatedIllicitValue | number | Estimated dollar value of anomalous trade flows |
| sarReport.evidenceItems[].category | string | Trade Pricing / Sanctions Exposure / Corporate Opacity / Circular Trade / FX Manipulation |
| sarReport.evidenceItems[].finding | string | Plain-language finding description |
| sarReport.evidenceItems[].severity | string | low / medium / high / critical |
| sarReport.evidenceItems[].evidence | string | Supporting quantitative evidence |
| sarReport.evidenceItems[].regulatoryRef | string | Applicable regulation or guidance |
| sarReport.recommendations[] | string[] | Ordered action items with statutory deadlines |
detect_invoice_anomalies output
| Field | Type | Description |
|-------|------|-------------|
| recordsAnalyzed | number | Total UN COMTRADE records analyzed |
| benfordAnalysis.chiSquaredStatistic | number | Chi-squared test statistic (df=8) |
| benfordAnalysis.pValue | number | Benford p-value (< 0.05 = non-conforming) |
| benfordAnalysis.conformsTobenford | boolean | True if p > 0.05 |
| benfordAnalysis.digitDistribution | array | Observed vs expected per digit 1–9 |
| grubbsResults | object | Grubbs outlier results per HS6 code |
| fisherMetaPValue | number | Combined p-value across all HS6 tests |
| overallAnomalyScore | number | 0–1 composite anomaly score |
| anomalousInvoices | array | Individual transactions flagged as outliers |
| interpretation | string | CRITICAL / ELEVATED / LOW text with statistical context |
screen_ownership_chain output (Markov chain)
| Field | Type | Description |
|-------|------|-------------|
| markovChainAnalysis.overallCascadeRisk | number | Weighted average absorption probability 0–1 |
| markovChainAnalysis.absorbingStates | array | Identified sanctioned/high-risk jurisdictions in chain |
| markovChainAnalysis.transientStates | array | Non-sanctioned jurisdictions in chain |
| dataSources.corporateRecords | number | Records across all 4 registries |
| dataSources.leiRecords | number | GLEIF records found |
| dataSources.sanctionsHits | number | OFAC + OpenSanctions combined |
| interpretation | string | HIGH RISK / MODERATE RISK / LOW RISK with absorption percentage |
How much does it cost to run TBML investigations?
This server uses pay-per-event pricing — you pay per tool call, not per month. Platform compute costs are included.
| Tool | Price per call | 10 calls | 50 calls | 200 calls |
|------|---------------|----------|----------|-----------|
| investigate_trade_pair | $0.040 | $0.40 | $2.00 | $8.00 |
| detect_invoice_anomalies | $0.045 | $0.45 | $2.25 | $9.00 |
| map_circular_trade_network | $0.045 | $0.45 | $2.25 | $9.00 |
| verify_counterparty_legitimacy | $0.040 | $0.40 | $2.00 | $8.00 |
| analyze_fx_manipulation | $0.040 | $0.40 | $2.00 | $8.00 |
| screen_ownership_chain | $0.045 | $0.45 | $2.25 | $9.00 |
| compute_tbml_risk_score | $0.045 | $0.45 | $2.25 | $9.00 |
| generate_sar_evidence_package | $0.050 | $0.50 | $2.50 | $10.00 |
A full investigation workflow — trade pair investigation, counterparty verification, ownership chain screen, and SAR package — costs approximately $0.175 total across four tool calls. Running 50 complete investigations per month costs under $9.
You can set a maximum spending limit per session in Apify's console. The server checks this limit before executing each tool call and returns a clear error message if the limit is reached, so investigations never exceed your budget.
Compare this to commercial TBML screening platforms that charge $500–$2,000/month for rule-based screening with no statistical algorithms. This server delivers peer-reviewed forensic methods at a fraction of the cost, with no subscription commitment.
How to call this server from code
Python
```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.
