Synthetic fraud simulation CLI

Build safer fraud systems without touching real customer data.

fintech-fraud-sim is a TypeScript command-line tool that generates realistic synthetic fintech users, accounts, devices, beneficiaries, merchants, transactions, events, risk scores, fraud patterns, reports, and exports — for QA, fraud operations, AML demos, dashboards, and model prototypes.

✓ {{ badge }}

Run locally

Generate a fraud dataset

CLI
{{ heroCommand }}
{{ stat.value }} {{ stat.label }}
{{ f.tag }}

{{ f.title }}

{{ f.body }}

!

Synthetic-only safety promise

All generated data is synthetic. It contains no real names, phone numbers, emails, BVNs, NINs, bank account numbers, or any real personal data. Identifiers are fabricated and labels like bvn_like_id or synthetic_bvn_check are intentionally fictional. Use it for testing, education, and fraud-model prototyping only — never as a stand-in for production data or a real watchlist.

Quick start

Up and running in three steps

Requires Node.js 22 or newer. No build step or database is needed — everything runs locally.

{{ i + 1 }}

{{ step.title }}

{{ step.desc }}

{{ step.code }}

Local development

Clone the repo and build from source if you want to extend it.

{{ localDev }}

Command reference

One CLI, the whole fraud-data workflow.

From generation to validation, model export, evaluation, dashboards, and a local API — every step has a dedicated command.

Command What it does
{{ c.cmd }} {{ c.desc }}

Key generate options

Option Default Description
{{ o.opt }} {{ o.def }} {{ o.desc }}

Copy-paste recipes

{{ r.title }}

{{ r.code }}

Fraud patterns

{{ patterns.length }} built-in typologies

Each pattern injects characteristic signals and reason codes so detection systems have something realistic to catch. Combine them with --patterns and tune the mix with --pattern-weights.

{{ p.name }}

{{ p.desc }}

Risk scoring and recommended actions

Every user and transaction carries a risk_score from 0–100 mapped to a recommended action, so you can test allow / review / block flows end to end.

{{ band.label }}

{{ band.desc }}

Use-case presets

Production-shaped defaults out of the box.

Pass --use-case <name> to apply realistic defaults for a product domain. Explicit flags always override the preset.

Use case Built for Default signals
{{ u.name }} {{ u.builtFor }} {{ u.signals }}
{{ team.name }}

{{ team.desc }}

Outputs & data model

Seven linked entity types, many formats.

Datasets are relational: users own accounts and devices, add beneficiaries, and transact with merchants. Shared network_id, device_id, and beneficiary_id values let graph systems reconstruct fraud rings.

Entities generated

  • {{ e.name }} — {{ e.desc }}

Output formats

{{ fmt }}

Use --format both for CSV + JSON, or --format all to write every format at once. A summary.json with dataset totals and fraud breakdowns is always included.

Note: Parquet uses a dependency-free fallback writer — .parquet files contain columnar JSON plus a manifest. Swap in a binary Parquet integration before loading into strict Parquet-only tools.

Sample transaction record

{{ sampleRecord }}

Programmatic API

Import it as a TypeScript library.

Generate and validate datasets in code — fully typed, deterministic with a seed, and ready to wire into test suites or pipelines.

{{ apiSnippet }}

Library users can also register custom country profiles and platform presets via defineGenerationPlugin and registerGenerationPlugin.

FAQ

Common questions

{{ item.q }}+

Ready to explore?

Generate a real dataset in your browser — no install required.