Live Lab
Generate real synthetic fraud data — live.
This page runs the exact same generator that powers the CLI, compiled to run in your browser. Tune the controls, hit Generate, and you get genuine deterministic data you can download, test rules against, and explore. Nothing is sent to a server.
Your dataset will appear here
Pick a use case or set the controls, then hit Generate dataset. Everything below — KPIs, charts, the rules tester, and the transaction explorer — fills in with live data.
Seed {{ seedUsed }} — re-run with the same options for byte-identical data.
No seed set — output is randomized each run. Add a seed for reproducible data.
Risk-score distribution
Transaction risk scores bucketed into allow / review / block bands.
Fraud pattern mix
Fraud users generated per pattern.
Rules tester
Write a rule pack, score it instantly.
Edit the JSON, click Run, and see matched transactions plus precision / recall / F1 against the generated is_suspicious labels — the same engine as rules-test.
{{ rulesError }}
Available fields & operators
Operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, exists. Useful fields include risk_score, amount, payment_rail, recommended_action, is_suspicious, country_mismatch, corridor, reason_code_count, user_kyc_status, user_account_age_days, user_device_count, user_failed_login_attempts_24h, user_beneficiary_count_24h, user_ip_country_mismatch.
Per-rule matches
Transaction explorer
Search, filter, and inspect.
{{ number(filteredTx.length) }} of {{ number(dataset.transactions.length) }} transactions match
| Transaction | Amount | Risk | Action | Pattern |
|---|---|---|---|---|
| {{ t.transaction_id }} | {{ t.currency }} {{ number(Math.round(t.amount)) }} | {{ t.risk_score }} | {{ t.recommended_action }} | {{ t.fraud_pattern }} |
| No transactions match these filters. | ||||
Showing {{ rangeText }} of {{ number(filteredTx.length) }}
Select a transaction to see why it was flagged.
{{ selectedTx.transaction_id }}
{{ selectedTx.recommended_action }}User {{ selectedTx.user_id }} sent {{ selectedTx.currency }} {{ number(Math.round(selectedTx.amount)) }} via {{ selectedTx.payment_rail }} on corridor {{ selectedTx.ip_country }}-{{ selectedTx.beneficiary_country }}.
Reason codes
- {{ r }}
- No reason codes — clean transaction.