Follow the money. Find the ring.
GraphMule turns a transaction ledger into a network and searches its shape for money-muling cycles, smurfing bursts and layered shell accounts — the structures rule-based checks walk straight past.
Rules check transactions. Launderers design networks.
A $900 deposit looks clean. So do the eleven others that land in the same account before the day is out. On its own, no single transfer crosses a threshold.
GraphMule reads the ledger the way an investigator would. It maps accounts as nodes and transfers as edges, then looks at the shape of the whole.
How it works
From spreadsheet to suspect in three moves.
01 · Ingest
Drop in a ledger
A CSV of transfers with five columns: transaction id, sender, receiver, amount and timestamp. There's nothing to configure.
02 · Model
See it as a graph
Every account becomes a node and every transfer a directed, timestamped edge. A flat list of payments becomes a shape you can inspect.
03 · Detect
Isolate the rings
Four detectors walk the graph for cycles, fan-in, fan-out and shell layering. Each account they touch gets a suspicion score and a ring id.
What it looks for
Four detectors, each tuned to a laundering typology. Every match is returned as a ring with its member accounts and a risk score.
Thresholds mirror the backend detectors exactly. Nothing here is a mock-up.
Circular flow
01/04Money leaves an account and returns to it through three to five hops. This is the signature of a muling ring laundering its own funds.
3–5 hopsScore 95Fan-in smurfing
02/04Ten or more senders feed a single account within 72 hours. A large sum gets broken into deposits that each stay under reporting thresholds.
≥10 senders72hScore 88.5Fan-out smurfing
03/04One account pays out to ten or more receivers inside 72 hours, scattering the trail before anyone can follow it.
≥10 receivers72hScore 88.5Layered shells
04/04Funds pass through a chain of low-activity accounts, each with only two or three transactions. Their only job is to put distance between source and destination.
3 hops2–3 tx eachScore 92
Output
One upload. A complete case file.
You get an interactive network, ranked rings and accounts, and a structured report that downstream compliance tooling can read.
- Detectors
- 4Cycles, fan-in, fan-out and layered shells run on every upload.
- Smurfing window
- 72hBursts only count when they land inside 72 hours.
- Hop cycles
- 3–5Short loops are where muling rings hand funds back to themselves.
- Click export
- 1Every ring, account and score in one fraud_report.json.
{ "fraud_rings": [{ "ring_id": "RING_002", "member_accounts": ["RING1_A", "RING1_B", "RING1_C"], "pattern_type": "cycle", "risk_score": 95.0 }, …], "summary": { "total_accounts_analyzed": 243, "suspicious_accounts_flagged": 140, "fraud_rings_detected": 7, "processing_time_seconds": 0.076 }}FastAPI · NetworkX · Pandas · Next.js
See the network behind the numbers.
Upload your own ledger or start with the bundled sample. It holds seven planted rings and takes under a second to analyze.