The easytestdata CLI
Generate QuickBooks Online (QBO) test data from your terminal, load it into a QBO sandbox, and purge it when you're done. No account needed.
$ npx easytestdata generate --template saas --scenario rapid-growth --seed 42 \
--start-date 2025-09-01 --format csv --output ./sample-data
Wrote 22 CSV files to ./sample-data/
EasyTestData plan: saas template · rapid-growth scenario · seed 42 · US · tag EZTD
Period 2025-09-01 to 2026-08-31 (12 months)
Customers 90 Bills 120
Vendors 10 Bill payments 102
Employees 30 Vendor credits 1
Invoices 1,080 Purchase orders 4
Payments 952 Expenses 48
Sales receipts 132 Payroll runs 24
Credit memos 58 Deposits 89
Refund receipts 4 Transfers 18
Estimates 205 Journal entries 17
Total revenue $2,000,000.00
Total expenses $1,880,000.00
Target profit $120,000.00
Target profit is before credits, refunds and adjustments; QuickBooks' P&L will differ.
$ head -3 sample-data/invoices.csv
doc_number,customer,txn_date,due_date,amount
EZTD-INV-0001,Nguyen Media,2025-09-13,2025-10-13,10242.14
EZTD-INV-0002,Reyes Architects,2025-09-16,2025-10-16,9268.4
That run: 90 customers, 1,080 invoices, 952 payments, 24 payroll runs and 2,854 transactions in total, with $2.0M revenue and a $120K target profit before adjustments (Sep 2025 – Aug 2026). Preview it in the playground.
Commands
Run with npx easytestdata <command>, or install it with npm install -g easytestdata. Node.js 22.13 or newer.
easytestdata generate
Generate a plan locally and write it as JSON or CSV. No QBO connection needed.
npx easytestdata generate --template restaurant --months 6 --revenue 500k \
--format json --output restaurant.json
easytestdata auth
Authorize a QBO sandbox company through your browser (Intuit OAuth). You need a free Intuit developer account with a sandbox company and an app. Use the app's Development Client ID and Secret, via QBO_CLIENT_ID / QBO_CLIENT_SECRET or --client-id / --client-secret, and add http://localhost:8085/callback to the app's Development redirect URIs first.
npx easytestdata auth
easytestdata load
Generate and load into your QBO sandbox. Takes the same generation flags as generate, plus --connection <name>, --dry-run (show what would be created) and --clear-first (purge generated data before loading).
npx easytestdata load --template saas --scenario rapid-growth --seed 42 --start-date 2025-09-01 --dry-run
npx easytestdata load --template saas --scenario rapid-growth --seed 42 --start-date 2025-09-01 --clear-first
easytestdata purge
Clear the sandbox. --mode generated (the default) finds everything tagged EZTD. Purge deletes the transactions it added, makes its customers, vendors, employees and items inactive (accounts stay), and never touches records you made by hand (details). Use --tag if you loaded with a different tag. --mode all deletes every transaction in the sandbox company. It asks for confirmation; pass -y in scripts.
npx easytestdata purge --mode generated
easytestdata templates · scenarios · plan
List the 8 industry templates and 8 scenarios, or print a summary of what a set of flags would generate.
npx easytestdata templates
npx easytestdata scenarios
npx easytestdata plan --template construction --revenue 1.5M --customers 40
Generation flags
Shared by generate, load and plan. A scenario (--scenario) sets revenue, target profit, customers and employees; explicit flags override it.
| Flag | What it does |
|---|---|
| -t, --template <name> | Industry template: professional-services, saas, restaurant, construction, retail, healthcare, nonprofit, real-estate |
| -p, --scenario <name> | Scenario: quick-demo, healthy-small, cash-crisis, rapid-growth, seasonal, mature-stable, audit-nightmare, new-company |
| --seed <n> | Seed for deterministic output. Same flags + same seed + same dates = same data. Without it a random seed is drawn and printed, so you can repeat the run. |
| -m, --months <n> | Number of months to generate. Default: the last 12 full months. |
| --start-date, --end-date | Explicit date range (YYYY-MM-DD). Use these to pin output in CI. |
| -r, --revenue <amount> | Total revenue for the period. Accepts 500k or 1.5M. |
| --profit <amount> | Target profit for the period; may be negative (-50k). Same formats as --revenue. |
| -c, --customers <n> | Number of customers. |
| -f, --format json|csv | generate only. JSON writes one file; CSV writes one file per record type. |
| -o, --output <path> | generate only. File (JSON) or directory (CSV). |
Run npx easytestdata <command> --help for the full list. Connections are saved in .easytestdata.json in the current directory; keep it out of version control.
Try it without installing anything
The playground runs the same engine in your browser and prints the matching command.