By Ryan Clinton. Apify Store creator publishing as ryanclinton at ApifyForge.
The problem: the entire incumbent AML market (World-Check, ComplyAdvantage, LexisNexis Bridger, Refinitiv, Dow Jones Risk, Sayari, Quantexa, Napier) was built for one persona: a compliance analyst sitting in front of a case management screen, reading prose, scrolling source PDFs, and deciding whether to escalate. Every output choice flows from that assumption. Free-text reason strings. Composite scores between 0 and 100. PDF case files. Analyst-seat licensing. In 2026 a growing share of AML decisions are starting to be made by AI agents wired into account-opening flows, payment systems, crypto onboarding, and transaction monitoring pipelines. Those agents can't read prose safely. They need decisions encoded in machine semantics that a regulator can also replay months later. That output shape doesn't exist in the incumbent category.
Analyst tooling externalises the decision onto the human. Machine-actionable compliance internalises it in deterministic enums, replayable audit IDs, and explicit autonomy contracts. That sentence is the whole post. Everything below is what it means in practice.
The compliance runtime, in one diagram
Customer entity input
│
▼
16 parallel primary-source fan-out
(OFAC, OpenSanctions, Interpol, FBI, FARA, FEC, OpenCorporates,
GLEIF, Nonprofit Explorer, SEC EDGAR, SEC Insider, CFPB, FDIC,
Federal Register, DOL WHD, DOL EBSA)
│
▼
Deterministic scoring (5 dimensions, no LLM, pure function)
│
▼
Jurisdiction overlay (FATF + Basel AML Index + Tax Justice + OECD)
│
▼
Institutional policy overlay (6 named profiles + custom rules)
│
▼
DECISION ENVELOPE
┌────────────────────────────────────────────────────────┐
│ amlRiskTier · decision.recommendedAction │
│ evidence[] (severity + dimension + automationImpact) │
│ obligations[] · operationalRestrictions[] │
│ autonomyContract.allowedActions[] │
│ complianceEvents[] · decisionAuditId · riskMemory │
└────────────────────────────────────────────────────────┘
│
▼
AI agents · payment systems · CRM gates · SIEM / SOAR ·
Apify dataset · Zapier / Make / n8n · regulatory replay
One layer in. One envelope out. Every downstream consumer branches on the same enums.
What is machine-actionable compliance? Machine-actionable compliance is deterministic AML decision infrastructure that emits stable enums, structured evidence, autonomy contracts, and replayable audit IDs. The output is something an AI agent or automation pipeline can branch on without parsing prose, and a regulatory examiner can reproduce months later from the same input.
Why it matters: AI agents are starting to make real regulated decisions inside fintech onboarding flows, crypto exchanges, and embedded-finance platforms. The output shape of the compliance API is suddenly the load-bearing interface for whether those agents are safe to deploy. Analyst-grade prose is unsafe at automation speed.
Use it when: you're wiring an agent that has to approve, hold, or escalate a customer or transaction without an analyst in the loop, or you're paying for an AML vendor whose only consumer is a human reading a PDF case file.
Also known as: AI-native AML, deterministic compliance runtime, agent-grade sanctions screening, machine-readable AML output, automation-safe compliance, regulator-replayable AML decisions.
Quick answer:
- Is: machine-safe AML decision layer between primary-source data and AI agents or automation pipelines.
- Emits: stable enums, booleans, structured evidence arrays, replayable audit IDs. No prose. No PDFs.
- Use for: agent-driven onboarding gates, sanctions screening inside payment flows, scheduled bulk re-screening, SIEM-routed compliance events.
- Skip for: human-only case investigation tooling, narrative SAR drafting where an analyst owns the file end-to-end.
- Pipeline: primary sources → deterministic scoring → policy overlay → decision envelope → audit replay.
- Tradeoff: opinionated stable enums in exchange for an automation surface AI agents can act on under explicit autonomy boundaries.
Problems this solves:
- How to give an AI agent AML risk data it can actually act on
- How to gate autonomous account approvals by sanctions confidence
- How to make compliance decisions replayable for regulatory examiners months later
- How to route AML events into a SIEM / SOAR without re-parsing vendor prose
- How to apply institutional policy (BSA bank, crypto exchange, MSB, EU obliged entity) to a screening result deterministically
- How to integrate AML screening into Zapier / Make / n8n / BI pipelines without an analyst seat
In this article: What it is · Why incumbents fall short · The four decision layers · What the envelope looks like · Incumbents vs runtime · Alternatives · Limitations · FAQ
Key takeaways:
- A composite risk score is not a decision. The score is an input; the decision envelope is the output.
amlRiskTier,recommendedAction,escalationPolicy,autonomyContractare the primitives an agent or pipeline actually branches on. - Compliance belongs in enums, not prose.
decision.recommendedAction = "enhanced_due_diligence"is a value an automation system can route on. "Enhanced due diligence recommended" inside a PDF is not. - Determinism is the regulatory primitive. Probabilistic LLM-driven scoring fails the regulator question "why did the system decide this?" because the answer changes over time. Same-input, same-output is the only output shape that passes a BSA examination.
- Replayability has to be a primary key, not a feature. A 16-character
decisionAuditIdthat retrieves the exact decision basis months later is the difference between a vendor demo and a regulator-defensible system of record. - AI agents need explicit autonomy contracts.
autonomyContract.allowedActions[]andautonomyContract.prohibitedActions[]are the governance primitives that gate how much an agent is allowed to do unsupervised. Without them, every agent call is a compliance theatre exercise. - Compliance events are an event-bus payload, not a notification.
complianceEvents[]routes directly into Splunk, Sentinel, Chronicle oneventType + severity. SIEM-grade routing was never a feature of analyst tooling.
What machine-actionable compliance looks like: concrete examples
| Scenario | Incumbent AML vendor output | Machine-actionable compliance output |
|---|---|---|
| New customer onboarding, clean entity | Analyst PDF, "no adverse findings, recommend approve" | amlRiskTier: "LOW", decision.recommendedAction: "auto_approve", agentInstructions.safeToAutoApprove: true, autonomyContract.allowedActions: ["create_account", "fund_initial_deposit"] |
| Fuzzy sanctions name overlap, confidence 0.72 | Yellow flag awaiting analyst review | decision.recommendedAction: "manual_review", agentInstructions.safeToAutoApprove: false, confidence.recommendedHandling: "human_review", autonomyContract.prohibitedActions: ["account_approval", "fund_release"] |
| Direct OFAC SDN match | Red row on screening dashboard, escalate to L2 | directSanctionsMatch: true, amlRiskTier: "PROHIBITED", decision.recommendedAction: "block", decision.escalationPolicy.fileSAR: true, complianceEvents[0].eventType: "NEW_SANCTIONS_MATCH" |
| FATF grey-list jurisdiction + high shell score | Score 67/100 with reason text in PDF | fatfFlag: "GREY", policyEvaluation.recommendedActionUnderPolicy: "enhanced_due_diligence", obligations[0]: { type: "EDD_REVIEW", deadline: "30d", source: "BSA 31 CFR 1010.620" } |
| Quarterly re-screen of existing customer | Re-run the case, new PDF | entity_change_detection returns delta.tierChanged: "MEDIUM->HIGH", delta.riskDelta: +14, delta.requiresImmediateReview: true |
| Regulator audit, two years later | Re-pull screening, hope outputs match | get_decision_audit(decisionAuditId) returns the exact rule version, source snapshots, dimensional scores, and evidence as of the original decision date |
What is machine-actionable compliance?
In practice, machine-actionable compliance means replacing ambiguous prose with explicit operational decisions software can safely execute. Consider a traditional AML API returning "Entity appears associated with a higher-risk jurisdiction and may require further review." A human analyst understands the implied action. An AI agent doesn't. Should it block onboarding? Request documents? Queue enhanced due diligence? Freeze withdrawals? Escalate to compliance? Ignore the signal? Six plausible interpretations, all defensible, none of them the same outcome. Machine-actionable compliance makes the action explicit: decision.recommendedAction = "enhanced_due_diligence", autonomyContract.prohibitedActions = ["account_approval", "fund_release"], obligations[0] = { type: "EDD_REVIEW", deadline: "30d" }. No interpretation required.
Machine-actionable compliance applies across sanctions screening APIs, KYC onboarding systems, transaction monitoring workflows, SAR escalation systems, compliance automation pipelines, and AI-driven financial operations. Anywhere the output of a compliance API was historically read by a human and is now read by software, the same shape change applies: prose becomes enums, scores become actions, recommendations become contracts.
Definition (short version): Machine-actionable compliance is a deterministic AML decision runtime that converts customer entities into reproducible, replayable, machine-safe verdicts an AI agent or automation pipeline can act on without parsing prose.
Where analyst tooling answers "what's in this case file?", a compliance runtime answers "what should the system do, with what confidence, under what regulatory obligation, with what audit trail, and what is an AI agent allowed to do unsupervised?" It's a different output shape, not a faster version of the same thing.
The category has three layers. The data layer is the public and customer-supplied source set every screening vendor already touches: OFAC SDN, OpenSanctions, Interpol Red Notices, FBI Most Wanted, FARA, FEC, OpenCorporates, GLEIF, SEC EDGAR, CFPB, FDIC, Federal Register, jurisdictional risk indexes. The scoring layer turns raw matches into deterministic dimensional risk: direct sanctions, jurisdictional risk, beneficial-ownership opacity, adverse regulatory history, behavioural anomalies. The decision layer is the new one. It emits a machine-safe envelope: AML risk tier, recommended action enum, escalation policy with notify channels, autonomy contract, compliance events, regulatory obligations with deadlines, operational restrictions, audit ID.
AI agents and automation pipelines consume the decision layer. Analysts can still consume the same decision via a human-readable case bundle export. Both views share the underlying source data, but the decision shape is the load-bearing primitive, not the PDF.
Why do traditional AML APIs fail for AI agents?
Every incumbent AML API was designed with a human analyst as the primary consumer. That single assumption is responsible for every shape choice that fails when an AI agent is the actual consumer.
Free-text reason strings are the clearest example. An analyst can read "Subject appears on the EU consolidated sanctions list under Council Regulation 833/2014. Recommend escalation to L2." and act correctly. An AI agent has to extract intent from prose, which means the agent's behaviour now depends on the LLM's interpretation of a vendor's writing style. That introduces a probabilistic step into a regulated decision path. Regulators flag exactly that pattern.
Composite scores between 0 and 100 are the second failure. A score is summary signal; it isn't a decision. Two entities scoring 67 can need wildly different actions if one is a fuzzy sanctions hit and the other is a FATF-grey jurisdiction with high shell-score. An agent branching on the score collapses both into the same handling. An agent branching on the decision envelope routes them differently and correctly.
No replayability is the third. If a regulatory examiner asks "why did the system flag this customer 14 months ago?", the vendor needs to return the exact rule version, source snapshots as of that day, and dimensional scoring that produced the verdict. Most incumbents have no replay surface. They re-run the screening against today's data and hope the answer is close. That doesn't satisfy a BSA examination.
No autonomy contract is the fourth. An AI agent acting on a compliance API needs an explicit allow-list of actions it's permitted to take based on the verdict. Without that, the agent makes its own governance decision, which is the thing every regulator is currently trying to stop.
The four decision layers of a compliance runtime
A machine-actionable compliance envelope exposes four ordered layers. Agents and automation systems branch on them in order. Each layer adds a different decision affordance.
1. Risk layer: what the entity actually looks like. amlRiskTier (LOW / MEDIUM / HIGH / PROHIBITED). riskScore (composite 0–100). directSanctionsMatch (boolean override). fatfFlag (NONE / GREY / BLACK). dimensions{} (per-dimension scores with findings). This is the descriptive layer: what the upstream data says.
2. Action layer: what should happen. decision.recommendedAction (block / enhanced_due_diligence / manual_review / monitor / auto_approve). decision.urgency (1h / 24h / 48h / 72h / 7d / 30d / none). decision.escalationPolicy (notifyLegal, notifyCompliance, fileSAR, blockTransaction, notify-channel routing). obligations[] (regulatory deadlines with jurisdiction + source citation). operationalRestrictions[] (downstream account-state flags). This is the prescriptive layer: what the system should do.
3. Automation layer: what AI agents are permitted to do. agentInstructions.safeToAutoApprove (boolean gate). operationalReadiness.automationSafe (full-automation eligibility). autonomyContract.allowedActions[] (explicit agent action allow-list). autonomyContract.prohibitedActions[] (explicit refuse list). confidence.recommendedHandling (automate / human_review / advisory_only). complianceEvents[] (normalised event-bus payload for SIEM / SOAR). This is the governance layer.
4. Replay layer: what regulators can reconstruct months later. decisionAuditId (16-character lookup key). sourceLineage{} (per-source snapshot timestamps captured at decision time). sourceRecordCounts{} (per-source record counts). policyProfileApplied (which institutional profile was active). get_decision_audit / export_case_bundle / evidence_diff / simulate_under_policy (replay tools). This is the regulatory layer, and it's the one missing from almost every incumbent vendor.
What does a machine-actionable AML envelope look like?
A compact view of one classification. The full envelope adds sourceLineage{}, runSummary{}, dimensions{}, topContributors[], narrative{}, confidence{}, derivedFrom{}, stateNarrative{}, trustLayer{}, operationalReadiness{}, jurisdictionRisk{}, and relationshipNetwork{} for company entities.
{
"entity": "Meridian Trade & Finance LLC",
"amlRiskTier": "HIGH",
"riskScore": 61,
"directSanctionsMatch": false,
"fatfFlag": "GREY",
"decision": {
"recommendedAction": "enhanced_due_diligence",
"urgency": "24h",
"escalationPolicy": {
"fileSAR": false,
"notifyCompliance": true,
"notifyLegal": false,
"blockTransaction": false,
"notifyChannels": ["compliance@", "L2-aml-queue"]
}
},
"evidence": [
{
"code": "JURISDICTION_FATF_GREY",
"severity": "medium",
"dimension": "jurisdiction",
"automationImpact": "REVIEW",
"source": "https://www.fatf-gafi.org/en/publications/Fatfgeneral/Documents/grey-list.html"
},
{
"code": "SHELL_INDICATOR_OPAQUE_BO",
"severity": "medium",
"dimension": "beneficial_ownership",
"automationImpact": "REVIEW",
"source": "https://opencorporates.com/companies/vg/..."
}
],
"obligations": [
{
"type": "EDD_REVIEW",
"deadline": "30d",
"jurisdiction": "US",
"regulatorySource": "BSA 31 CFR 1010.620"
}
],
"operationalRestrictions": [
{ "flag": "EDD_PENDING", "channels": ["wire_outbound", "high_value_deposit"] }
],
"autonomyContract": {
"allowedActions": ["queue_edd_workflow", "request_additional_documentation"],
"prohibitedActions": ["account_approval", "fund_release", "wire_outbound"]
},
"complianceEvents": [
{ "eventType": "TIER_ESCALATION", "severity": "medium", "detail": "MEDIUM -> HIGH on FATF grey overlay" }
],
"agentInstructions": {
"safeToAutoApprove": false,
"nextBestAction": "queue_edd_workflow"
},
"policyEvaluation": {
"policyProfileApplied": "bsa_bank_us",
"originalTier": "MEDIUM",
"adjustedTier": "HIGH",
"overridesApplied": ["bsa_treats_fatf_grey_as_high"]
},
"decisionAuditId": "a3f1d29c7b4e8051",
"riskMemory": {
"snapshotsRetained": 12,
"daysInElevatedState": 47,
"projectedTier30d": "HIGH"
}
}
Every value an AI agent or automation pipeline needs is an enum, a boolean, an integer, or a structured array. No prose. The narrative fields exist for human consumption later; they're never the routing surface.
Analyst AML vendors vs compliance runtime infrastructure
| Dimension | Incumbent AML APIs | Compliance runtime infrastructure |
|---|---|---|
| Primary consumer | Compliance analyst | AI agent + automation pipeline + analyst |
| Decision surface | Free-text reason strings + composite score | Stable enums (recommendedAction, urgency, automationImpact) |
| Evidence shape | PDF case file with footnoted sources | Structured array: severity + dimension + automationImpact + source URL |
| Replay model | Re-run today, hope outputs match | decisionAuditId retrieves exact rule version + source snapshots months later |
| Determinism | Probabilistic scoring, opaque ensembles | Pure function: same input → same verdict, no LLM in the scoring path |
| Governance for AI agents | Not addressed | Explicit autonomyContract.allowedActions[] + prohibitedActions[] |
| SIEM / SOAR integration | Manual mapping, vendor-specific | Normalised complianceEvents[] event-bus payload |
| Institutional policy overlay | Custom config inside vendor portal | Named profiles (BSA bank, crypto exchange, MSB, EU obliged, fund admin) + caller-supplied custom rules |
| Regulatory obligations | Mentioned in case prose | obligations[] with deadline, jurisdiction, regulatorySource citation |
| Operational system integration | Webhook to a queue | operationalRestrictions[] flags routed to account-state systems |
| Pricing model | Annual contract + analyst-seat licence | Pay-per-decision infrastructure pricing |
| Data sourcing | Vendor-curated single index | Primary-source fan-out, customer-supplied upstream API keys |
Comparison based on publicly documented features of major AML vendor APIs as of May 2026 and may change as the category shifts toward agent-native output.
The orthogonal axis the table reduces to: incumbents optimise the case-file experience. Runtimes optimise the decision interface. Both layers are valuable. They aren't substitutes. But if the consumer is an AI agent, only the runtime is safe to deploy.
Why determinism is the load-bearing regulatory property
Regulators ask four questions of any system that drives an AML decision: can you explain it, can you reproduce it, can you audit it, and is the escalation logic stable? Probabilistic systems struggle with all four. An LLM-driven AML classifier producing today's verdict won't necessarily produce the same verdict tomorrow on the same input. The model weights are versioned, the prompt scaffold can drift, the sampling temperature affects edge cases. That isn't a bug. It's the design of the technology. It's also the reason a BSA examiner can refuse to accept the verdict as a defensible compliance basis.
A deterministic compliance runtime produces reproducible outcomes from a versioned rule set plus source evidence. Every score is a pure function of the upstream data and the rule version. Months later, an examiner replays the exact verdict through a decisionAuditId lookup. The evidence[] array, the policyEvaluation block, the sourceLineage timestamps, and the dimensional scores all reproduce identically as long as the rule version matches. That's the difference between AI-era compliance infrastructure and AI-era compliance theatre.
The cost of determinism is opinionated rules. The runtime has to commit to specific thresholds: at what shell-detection score does an EDD trigger fire? At what FATF flag does a jurisdiction overlay bump the tier? Incumbents avoid the commitment by passing the judgement to the analyst; a runtime can't, because the consumer isn't a human. Named policy profiles (bsa_bank_us, crypto_exchange_us, msb_remittance_us, eu_obliged_entity, fund_administrator, standard) plus caller-supplied custom rules let the customer overlay institutional risk tolerance on top of the deterministic base. Both the financial-crime-screening-mcp and its dataset twin financial-crime-screening carry the same six profiles plus up to twenty caller-supplied custom rules per call.
The thesis is not anti-LLM. It's anti-probabilistic-decisioning-inside-the-regulated-decision-path. LLMs remain genuinely valuable for summarisation, draft SAR narrative generation, analyst copilots, evidence search across long unstructured case files, workflow acceleration, customer communication, and any task where the output is reviewed by a human before it influences a regulated action. What machine-actionable compliance rules out is the LLM sitting inside the deterministic decision path itself, where its outputs would directly drive block / approve / EDD / escalate verdicts an automation system executes without human review. That distinction is the difference between LLMs as compliance accelerators (good) and LLMs as compliance arbiters (a regulatory trap).
How AI agents actually consume machine-actionable AML output
Why agents fail with prose. An agent reading "may require enhanced review" has to pick one of six interpretations and commit to one without ground truth. Two consecutive calls on the same entity to the same agent can produce different downstream actions because the LLM rerolled the interpretation. That's a regulatory-trust failure: the decision was non-reproducible at the agent layer even when the upstream data was stable. Production compliance teams cannot defend that to an examiner.
What agents need instead. A stable enum the agent can branch on without language understanding. decision.recommendedAction == "block" is a string equality check. autonomyContract.prohibitedActions is a set-membership check. agentInstructions.safeToAutoApprove is a boolean. None of these require the agent to interpret prose, all of them are reproducible across calls, and all of them survive an audit because the same data produced the same enum at decision time and produces it again on replay.
Example operational branch. An agent onboarding a new customer for a US BSA-regulated bank sees recommendedAction = "enhanced_due_diligence" plus autonomyContract.prohibitedActions = ["account_approval", "fund_release"]. The agent's logic: open a manual-review ticket with the decisionAuditId attached, route to the L2 analyst queue with urgency = "72h", mark the customer account in a pending_edd state, and emit a complianceEvents entry to the SIEM with severity = "high". None of those actions required the agent to interpret narrative text — every one of them is a branch on a stable enum.
The code. The agent integration pattern is the same across Claude Desktop, Cursor, Cline, Windsurf, and autonomous orchestration systems. The MCP transport from the Financial Crime Screening MCP server registers a stable tool surface and the agent calls into it:
result = mcp_client.call_tool(
"aml_risk_classification",
arguments={
"entity": "Meridian Trade & Finance LLC",
"policy_profile": "bsa_bank_us"
},
headers={"X-OpenSanctions-Api-Key": customer_key}
)
# Branch on enums. Never on prose.
if result["decision"]["recommendedAction"] == "block":
block_account_open(reason_code=result["evidence"][0]["code"])
elif result["agentInstructions"]["safeToAutoApprove"]:
approve_account_open()
else:
queue_for_human_review(
audit_id=result["decisionAuditId"],
urgency=result["decision"]["urgency"],
next_action=result["agentInstructions"]["nextBestAction"]
)
The agent never reads the narrative. It branches on decision.recommendedAction, persists the decisionAuditId to the case management system, respects the autonomyContract.allowedActions[], and emits complianceEvents[] directly to the SIEM. The narrative exists for the human who reviews the audit trail later, not for the agent making the call.
For pipeline consumers without MCP (Zapier, Make, n8n, BI tools that ingest Apify datasets directly), the same engine is exposed as the dataset-output twin. One row per entity, identical envelope shape, identical decisionAuditId semantics. The transport is different; the decision contract is the same. Suite-cohesion patterns like this are how we structure the wider ApifyForge intelligence surface. The supply-chain category we covered a day earlier follows the same agent-native shape.
What goes in an autonomy contract?
An autonomy contract is the explicit allow-list and refuse-list of actions an AI agent is permitted to take on a given decision verdict. It's the governance primitive that turns an AML API into deployment-safe infrastructure.
The minimum shape:
{
"autonomyContract": {
"allowedActions": [
"queue_edd_workflow",
"request_additional_documentation",
"schedule_periodic_rescreen"
],
"prohibitedActions": [
"account_approval",
"fund_release",
"wire_outbound",
"credit_line_increase"
],
"humanEscalationRequired": true,
"escalationChannel": "compliance@",
"escalationSLA": "24h"
}
}
The agent treats prohibitedActions[] as a hard refuse-list. If a user asks the agent to release funds on a HIGH-tier entity, the agent refuses, citing the contract, regardless of how the request was phrased. The contract is signed by the verdict: the same input deterministically produces the same allow-list and refuse-list. That property is what makes the agent's refusal defensible in front of a regulator. Without an autonomy contract, the agent's refusal logic lives in the LLM's prompt scaffold, which means the refusal is probabilistic and can drift. With one, the refusal is a deterministic function of the compliance verdict.
What are the alternatives to a compliance runtime?
The category split matters because most "AML modernisation" projects land on one of the wrong sides of it.
Incumbent AML APIs with custom integration layers. World-Check, ComplyAdvantage, LexisNexis Bridger, Refinitiv, Dow Jones Risk, Sayari. Best for analyst-driven case workflows where a human is the load-bearing decision-maker. Where they break for AI agents: free-text reason strings and PDF case files have to be parsed by an LLM before an agent can act, which introduces a probabilistic step into a regulated decision path. The customer still owns building the audit replay surface, the autonomy-contract layer, the event-bus normaliser, the institutional policy overlay, and the SIEM-routing translator. None of those are vendor-supplied. That's a maintained custom integration project, not a deployment.
LLM-driven AML triage systems. Hawk AI, Lucinity, Featurespace, Quantexa with an LLM layer on top. Best for accelerating analyst review on existing transaction-monitoring backlogs. Where they break for runtime use: the scoring path includes an LLM, which means the verdict is probabilistic and isn't reproducible months later in a regulator examination. Useful as an analyst assistant; not safe as the deciding system in front of an autonomous agent.
In-house rule engines built on raw sanctions data. Some larger banks build their own AML decisioning on top of OFAC SDN, OpenSanctions, and internal customer-data warehouses. Best for institutions with mature compliance engineering teams and a multi-year build budget. Where they break at scale: you still own the deterministic scoring engine, the dimensional weighting, the policy-profile overlay surface, the obligation-mapping by jurisdiction, the autonomy-contract specification, the replay store, the source-lineage timestamping, the SIEM-event normaliser, and the institutional rule-version migration story. That's a multi-person compliance engineering team operating a maintained service indefinitely, not a project that ships.
Data warehouse approaches. Snowflake or BigQuery with sanctions lists loaded as tables, SQL rule joins. Best for retrospective reporting and analytics. Where they break for runtime: warehouses produce queries, not decisions. There's no decision envelope, no autonomy contract, no audit replay key, no event-bus payload. The downstream automation system has to construct all of it from raw query results. The customer still owns the full decision-contract surface.
Build directly on primary sources (OFAC, OpenSanctions, Interpol, FBI APIs). Best for technical teams with very specific custom requirements that no vendor satisfies. Where this breaks for compliance-grade output: you inherit the full surface area. Fault isolation across heterogeneous source uptimes, schema-drift detection per source, jurisdictional risk overlay maintenance, BSA-versus-EU-AMLR obligation mapping, fuzzy-match disambiguation rules, replay storage, autonomy-contract specification, and a per-source freshness contract. Each one is its own scoped sub-project. None of them is the bit the product roadmap is actually trying to solve.
Each approach has trade-offs along correctness, replay surface, automation safety, regulatory defensibility, and time-to-deploy. The right choice depends on whether the load-bearing consumer is a human analyst or an automation system, and whether the institution has the compliance engineering depth to operate a runtime as a maintained service.
When you need a compliance runtime
You probably need machine-actionable compliance infrastructure if:
- You're building an AI agent that approves, holds, or escalates customer onboarding without an analyst in the loop
- You're running scheduled bulk re-screening across an existing customer book and the analyst seat licence cost no longer scales
- Your transaction monitoring pipeline routes events into a SIEM / SOAR and the current vendor format requires a custom parser per event type
- You operate in multiple jurisdictions (US BSA + EU AMLR + UK FCA) and need institutional-policy overlay applied at the API level
- Regulatory examiners have asked you to demonstrate reproducible decision basis on past verdicts and you don't currently have a replay surface
- You're a fintech or embedded-finance platform offering banking-as-a-service and your customers need machine-actionable AML output to integrate
You probably don't need it if:
- Your AML programme is entirely human-analyst-driven and your team is comfortable with the PDF / case-file workflow
- You handle fewer than 50 screenings per month and incumbent free tiers are sufficient
- Your only compliance surface is OFAC SDN screening with no PEP, jurisdiction, or beneficial-ownership requirements
- You don't yet have automated downstream systems that can act on the decision envelope
- You're a non-regulated entity and AML screening is voluntary best-practice rather than statutory
Operational outcomes once you're on machine-actionable compliance
Teams that switch from analyst-tooling output to a compliance runtime report a consistent operational pattern. False-positive review volume drops because fuzzy sanctions matches arrive with explicit confidence.recommendedHandling = "human_review" rather than as ambiguous flagged rows the analyst has to triage from scratch. Escalation ambiguity drops because recommendedAction is a stable enum and the L1 queue knows exactly which bucket each verdict lands in. Onboarding throughput improves because clean entities trip safeToAutoApprove = true without human review, freeing analysts for the cases that actually need judgement. Audit-preparation costs drop because regulatory examiners ask for decisionAuditId lookups instead of re-running the screen against drifted upstream data. Automation safety improves because agents respect autonomyContract.prohibitedActions[] as hard refuse-lists rather than interpreting prose. None of those outcomes require new headcount; they come from the output shape change alone.
The wider operational effect is fewer ambiguous escalations, safer automation, lower analyst review volume, and dramatically better replayability during regulatory examinations. That's the productisation gap between analyst tooling and machine-actionable compliance infrastructure.
Implementation checklist
If you've decided machine-actionable compliance is the right pattern, the deployment sequence:
- Map the decision points in your current onboarding, transaction monitoring, and re-screening flows. List every place an AML verdict drives an automated downstream action. Those are the consumers that need the decision envelope.
- Decide whether the load-bearing transport is MCP (AI agent calls one entity at a time) or dataset (Zapier / Make / n8n / BI scheduled bulk). Both can run side-by-side. The MCP transport and the dataset twin share the same engine.
- Pick the institutional policy profile that matches your regulator (
bsa_bank_us,crypto_exchange_us,msb_remittance_us,eu_obliged_entity,fund_administrator, orstandard). Layer custom rules on top for institution-specific risk tolerance. - Provision upstream API keys (OpenSanctions, OpenCorporates, DOL) on the customer side. Customer-supplied keys mean the runtime never holds your credentials, and the per-source cost stays on your invoice with the provider.
- Wire
decisionAuditIdinto your case management system as a foreign key on every verdict. This is the regulatory-replay primary key. Without it, you can't reconstruct past decisions. - Route
complianceEvents[]into your SIEM / SOAR via the existing event bus. Split routing oneventType(NEW_SANCTIONS_MATCH, TIER_ESCALATION, OBLIGATION_DEADLINE_APPROACHING) andseverity. - Wire
operationalRestrictions[]into your account-state system so downstream banking actions respect the flags automatically. - Implement the autonomy contract on the agent side. The agent treats
prohibitedActions[]as a hard refuse list and never executes anything outsideallowedActions[]. - Schedule periodic re-screening via Apify's built-in scheduler. The
entity_change_detectiontool returns structured deltas, not full re-screens. Feed only the deltas into your operational queue. - Test the replay surface before going live. Pull a
decisionAuditIdfrom a real run, store the verdict, wait a week, replay viaget_decision_audit, confirm the output matches. That's the regulator-defensibility smoke test.
Common misconceptions
"AML is too regulated for AI agents to touch." What's regulated is the decision basis, the documentation, and the escalation logic, not whether an agent or a human makes the call. A deterministic runtime with replayable audit IDs and explicit autonomy contracts produces a more defensible compliance basis than a human analyst clicking through PDFs, because every output is reproducible and the agent's refusal logic is a deterministic function of the verdict.
"LLMs make compliance better because they read source documents." LLMs introduce a probabilistic step into the decision path. Regulators ask "why did the system decide this?" and the LLM's answer changes over time even on the same input. That's the failure mode the BSA examination process is currently being tightened around. LLMs are useful for analyst-assist drafting (SAR narrative drafting, case summarisation); they are not safe as the deciding system.
"A composite risk score is enough output for an agent." A score is descriptive signal, not a decision. Two entities scoring 67 can need wildly different actions if one is a fuzzy sanctions hit and the other is a FATF-grey jurisdiction with shell-company indicators. An agent branching on the score collapses both cases into the same handling. An agent branching on the decision envelope routes them differently and correctly.
"Audit replay is a vendor feature, not a category requirement." It's the load-bearing regulatory primitive. Without decisionAuditId retrieval, a regulator examining a verdict 14 months later has to re-run today's screening and accept that the output may differ. That isn't a defensible compliance position. Replay isn't a feature; it's the contract.
"Machine-actionable just means JSON output." JSON is necessary, not sufficient. The shape that matters is stable enums for the action surface, structured evidence with severity + dimension + automation-impact triads, explicit autonomy contracts, normalised event-bus payloads, regulatory obligations with deadlines and source citations, and replay primary keys. Vendor APIs that return JSON case files with free-text fields inside are still analyst-shape outputs in a JSON wrapper.
Best practices for deploying a compliance runtime
- Branch on enums, never parse recommendation prose. The narrative fields exist for the human reviewing the audit trail. Every automation decision is a function of
decision.recommendedAction,agentInstructions.safeToAutoApprove, and the autonomy contract. - Persist
decisionAuditIdeverywhere the verdict touches. Case management, transaction logs, customer state, SIEM events, ticket systems. The audit ID is the join key that lets a regulator reconstruct any past decision. - Call
get_entity_memorybefore paying for a fresh screen. It returns prior snapshots, deltas, and recurring dimensions for free. Most re-screening flows don't need a full re-classification; they need the structured delta. - Route
complianceEvents[]directly to your SIEM / SOAR. The payload is normalised oneventType + severityso Splunk, Sentinel, and Chronicle can route without custom parsers. - Treat fuzzy sanctions matches (confidence 0.50–0.95) as human-review mandatory. No autonomy contract should grant an agent the ability to clear a fuzzy match, even when
safeToAutoApproveis true. The runtime won't grant it, but document the discipline explicitly in your governance. - Version your custom policy rules. Custom rules attach to the deterministic base. When you change a threshold, the rule version changes, and downstream replay needs the version to reproduce the verdict.
- Mirror
decisionAuditIdand source snapshots to your own retention system. The runtime keeps a finite snapshot history per actor lifetime. Multi-year regulatory record-keeping is the customer's responsibility. - Record every operator override. Whenever a human overrides an automated verdict, capture the override via
record_operator_action. That's the operator-decision lineage regulators ask for during examinations.
Common mistakes when integrating a compliance runtime
- Treating the recommended action prose as the routing surface. Always route on the enum. The string is for the audit trail human-reader.
- Skipping the autonomy contract because "the agent is well-behaved". A well-behaved agent without an explicit refuse-list is a probabilistic governance position. Auditors want a deterministic one.
- Storing customer API keys in agent memory. Customer-supplied OpenSanctions / OpenCorporates keys are pass-through per-request. They never live in the runtime, and they should never live in the agent's persisted memory either.
- Re-screening the full customer book on every cycle. Use
entity_change_detectionfor monitoring loops. The full-classification cost is for new entities and first-time onboarding; re-screening is for deltas. - Routing all
complianceEvents[]at the same severity. The payload carriesseverityper event for a reason. Page oncriticalandhigh, queue onmedium, log onlow. Treating them all as alerts swamps the on-call queue. - Ignoring
obligations[]deadlines. Each regulatory obligation has a deadline and a citation. Missing the deadline is the thing that produces an enforcement action, not the original verdict.
Mini case study: what changes when an embedded-finance platform switches transport
A hypothetical embedded-finance platform running 2,000 customer screenings per month on an incumbent AML vendor:
Before. Analyst-seat licence at roughly $24,000/year. Every new customer onboarding produces a PDF case file. An analyst reads each one and clicks approve / hold / escalate. Average analyst time per case: 8 to 12 minutes for clean cases, 30+ minutes for fuzzy hits. Re-screening cycle is a separate analyst workflow. No replay surface; when a regulator asks about a past verdict, the team re-screens against today's data. Onboarding agent on the platform side reads the PDF, extracts intent with an LLM, and acts on it. Three production incidents per year traced to the agent misinterpreting case-file prose.
After. Pay-per-decision pricing at $0.30 per classification on the dataset twin, roughly $7,200/year for the same volume. Onboarding agent calls the MCP transport directly, branches on decision.recommendedAction, respects the autonomy contract, and only routes to a human when confidence.recommendedHandling = "human_review". Analyst time concentrated on the cases that actually need judgement, not on triaging clean approvals. decisionAuditId is the join key in the case management system; regulatory replay is a single lookup. Scheduled bulk re-screening via Apify's scheduler on the dataset twin, one row per entity into the data warehouse. SIEM ingests complianceEvents[] directly. The three categories of agent-on-prose incidents stop happening because the agent never reads the prose. Numbers vary by institutional volume mix and risk profile; this reflects one workflow shape, not a universal ROI claim.
Key facts about machine-actionable compliance
- Machine-actionable compliance is deterministic AML decision infrastructure that emits stable enums, structured evidence, autonomy contracts, and replayable audit IDs.
- The category exists because the incumbent AML market was built for human analysts reviewing PDF case files, not for AI agents or automation pipelines acting unsupervised.
- Determinism (same input → same verdict) is the load-bearing regulatory property. Probabilistic LLM-driven systems can't satisfy a BSA examination because their outputs change over time.
- A 16-character
decisionAuditIdretrieves the exact decision basis months later, including the rule version, source snapshots, dimensional scores, and evidence. That's the regulatory replay primary key. - AI agents consume the decision envelope through the Financial Crime Screening MCP server at the same
/mcpendpoint Claude Desktop, Cursor, Cline, and Windsurf connect to. - Pipeline consumers without MCP (Zapier, Make, n8n, BI tools) use the dataset-output twin. Same engine, same envelope, one row per entity.
- Six named institutional policy profiles (
bsa_bank_us,crypto_exchange_us,msb_remittance_us,eu_obliged_entity,fund_administrator,standard) plus up to twenty caller-supplied custom rules per call let institutional risk tolerance overlay on top of the deterministic base. - Compliance events route directly into SIEM / SOAR systems (Splunk, Sentinel, Chronicle) via the
complianceEvents[]normalised event-bus payload. No vendor-specific parser required.
Glossary
AML risk tier. Final risk classification: LOW / MEDIUM / HIGH / PROHIBITED. The descriptive output of the runtime.
Decision envelope. The full machine-actionable response from a single classification call: risk tier, recommended action, evidence, obligations, autonomy contract, compliance events, audit ID.
recommendedAction enum. Stable action vocabulary: block / enhanced_due_diligence / manual_review / monitor / auto_approve. The primary routing surface for automation.
Evidence triad. Every evidence item carries severity + dimension + automationImpact. The triad is what SIEM / SOAR systems route on.
decisionAuditId. 16-character hex identifier that retrieves the exact decision basis months later. The regulatory-replay primary key.
Autonomy contract. Explicit allow-list and refuse-list of actions an AI agent is permitted to take on a given verdict. The governance primitive that gates unsupervised agent action.
Compliance event bus. complianceEvents[] is a normalised event-bus payload for downstream SIEM / SOAR routing, structured on eventType + severity.
Policy profile. Named institutional risk-tolerance overlay applied on top of the deterministic scoring base. Six built-in profiles plus caller-supplied custom rules.
Broader applicability: beyond AML
The patterns the compliance runtime exposes apply beyond financial crime. Any regulated decision domain where an AI agent or automation pipeline acts on a verdict needs the same shape: deterministic scoring, stable action enums, replayable audit IDs, explicit autonomy contracts, normalised event-bus payloads, regulatory obligations with deadlines.
The shape generalises to:
- Healthcare compliance. HIPAA breach triage, prior authorisation gating, formulary compliance decisions.
- Tax compliance. Sales-tax nexus determinations, beneficial-ownership reporting under FinCEN CTA, withholding-tax classifications.
- Trade compliance. Export-control classification (EAR, ITAR), Section 301 tariff determinations, sanctioned-end-use checks.
- ESG / supply-chain compliance. Modern slavery determinations, conflict-minerals classifications, Scope 3 emissions attestations.
- Data-protection compliance. GDPR lawful-basis routing, data-subject-rights workflow gating, cross-border transfer decisions.
Each is a domain where the same architectural problem holds: the load-bearing consumer is becoming an automation system, the incumbent vendors output analyst PDFs, and the gap between the two is filled by deterministic decision infrastructure with replay surfaces and autonomy contracts. The compliance runtime architecture for AML is a template, not a vertical.
Limitations
- US-centric regulatory coverage. FDIC, CFPB, FEC, FARA, DOL WHD, DOL EBSA, Federal Register are US government sources. Non-US institutions have less direct coverage and rely more on OpenSanctions and jurisdictional risk overlays.
- OpenSanctions, OpenCorporates, and DOL data sources require customer-supplied API keys. Without them, those sources are skipped with a
missing-credentialentry indataSourceErrors. - Snapshot history is retained per actor lifetime, not indefinitely. For multi-year regulatory record-keeping, mirror
decisionAuditIdand source snapshots to your own retention system. - Fuzzy sanctions matches (confidence between 0.50 and 0.95) always require human review. The runtime can't determine on its own whether a fuzzy name overlap is the same person.
- The runtime produces audit-ready inputs to compliance workflows; the workflows themselves remain human-supervised. It is not a substitute for FinCEN Form 114 filing, SAR filing decisions, or qualified BSA/AML officer judgement.
- The bulk-mode actor caps at 100 entities per run. Larger portfolios dispatch multiple parallel runs or use the MCP transport's
batch_screentool. - The category is new. Naming, contract shape, and best practices are still settling across vendors. Some primitives (
autonomyContract,operationalRestrictions,obligationswith citations) are uncommon in incumbent APIs as of May 2026.
Frequently asked questions
What is machine-actionable compliance?
Machine-actionable compliance is a deterministic AML decision runtime that emits stable enums, structured evidence with severity + dimension + automation-impact triads, replayable audit IDs, and explicit autonomy contracts. The output is something an AI agent or automation pipeline can branch on without parsing prose, and a regulatory examiner can reproduce months later from the same input. It's a different output shape from incumbent analyst-oriented AML vendors, not a faster version of the same thing.
Why can't AI agents just use existing AML APIs?
Incumbent AML APIs were designed for human analysts. Outputs are free-text reason strings, composite scores, and PDF case files. For an AI agent to act on those, it has to extract intent with an LLM, which introduces a probabilistic step into a regulated decision path. Regulators flag exactly that pattern. The agent also has no autonomy contract, no replay primary key, and no normalised event-bus payload, all of which it needs to deploy safely.
How does deterministic compliance differ from LLM-based AML?
Deterministic compliance produces reproducible verdicts from a versioned rule set and source evidence. Same input always produces the same output, months later, as long as the rule version matches. LLM-based AML introduces a probabilistic step in the scoring path, which means the verdict can change over time on the same input. That property fails the regulator's first question, "why did the system decide this?" Deterministic systems pass it; LLM-based systems struggle.
What is decisionAuditId and why does it matter?
decisionAuditId is a 16-character hex identifier returned with every classification. It retrieves the exact decision basis months later: the rule version, source snapshots as of the original decision date, dimensional scores, evidence, and applied policy profile. It's the regulatory-replay primary key. Without it, a regulator examining a past verdict has to re-run today's screening and accept that the output may have drifted, which is not a defensible compliance position.
When should I use the MCP transport vs the dataset transport?
Use the MCP server when an AI agent (Claude Desktop, Cursor, Cline, Windsurf, or an autonomous orchestration system) calls one entity at a time inside an onboarding or payment flow. Use the dataset-output twin when a pipeline (Zapier, Make, n8n, BI ingest, scheduled bulk re-screening) consumes results, when webhook-triggered async event flows route results downstream, or when a data warehouse needs one row per entity. Same engine, same envelope. Only the transport changes.
What's in an autonomy contract for an AI agent?
An autonomy contract specifies the explicit allow-list and refuse-list of actions an agent is permitted to take on a given verdict. allowedActions[] lists permitted operations (queue EDD, request documentation, schedule re-screen). prohibitedActions[] lists hard refuses (account approval, fund release, wire outbound). The contract is signed by the verdict: same input deterministically produces the same allow-list. The agent treats prohibitedActions[] as a hard refuse regardless of how a user phrases a request, which makes the refusal defensible in a regulator examination.
Is machine-actionable compliance regulated differently than analyst-driven AML?
No. The regulatory framework (BSA in the US, AMLR in the EU, FCA rules in the UK) doesn't change. What changes is the documentation surface and the decision basis. A deterministic runtime produces a more defensible compliance basis than analyst clicks through PDFs because every verdict is reproducible and every override is logged via record_operator_action. The runtime makes the audit trail tighter, not looser. The regulated obligations (SAR filing, EDD timelines, BO verification) remain identical and stay human-supervised.
How does this compare to building it in-house on raw sanctions data?
Building in-house gives you full control but you inherit the full surface: fault isolation across heterogeneous sources, schema-drift detection per source, jurisdictional risk overlay maintenance, BSA-vs-EU-AMLR obligation mapping, fuzzy-match disambiguation, replay storage, autonomy-contract specification, SIEM-event normaliser, and a per-source freshness contract. That's a multi-person compliance engineering team operating a maintained service indefinitely. Some institutions do it; most don't have the engineering depth. The runtime exposes the same decision envelope as a managed service with customer-supplied upstream credentials, so the institution still owns the data sources but doesn't own the orchestration surface.
Ryan Clinton publishes Apify actors and MCP servers as ryanclinton and builds developer tools at ApifyForge. This post focuses on AML and financial-crime compliance, but the same architectural patterns (deterministic decision infrastructure, stable enums, replayable audit IDs, explicit autonomy contracts) apply broadly to any regulated decision domain where an AI agent or automation pipeline now consumes the verdict in place of a human analyst.
Last updated: May 2026