Skip to content

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.

-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-dateExplicit 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|csvgenerate 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.