Mock Data Generator for JSON, CSV, and APIs

Test suites and demos stall when an API needs a few hundred believable rows and nobody wants to invent them by hand. This generator fills that gap with six ready templates, a seeded random source, and three export formats. Set the seed once and the same rows come back on every run, which makes a failing test reproducible for a teammate. The page computes everything locally, so nothing you generate is uploaded.

Generate Deterministic Test Rows

Seeded rows in three formats Same seed, same rows, every time.

Template and fields

Pick a template to load its field list.

id · idfirstName · firstNamelastName · lastNameemail · emailusername · usernamecity · citysignupDate · dateISOactive · bool

Rows, seed, and format

Row count clamps to 1-5000. The same seed with the same settings returns the same rows.

Output

10 rows · 8 fields · seed 42
Download file

How It Works

Each template is a list of fields with types such as email, price, uuid, or dateISO. Picking a template loads its field chips, and the generator walks the list once per row, drawing every value from the same seeded random stream. The seed is an integer, and the stream is a small fixed function, so seed 42 with the user template always yields the same eight columns.

Row counts run from 1 to 5000, and anything outside that range is pulled back to the nearest edge. The JSON option prints a pretty array with two-space indent, the CSV option writes a header row and quotes cells that contain commas or quotes, and the JSON Lines option writes one compact object per line for streaming loaders.

The byte count in the summary line measures the UTF-8 length of the current output, so you can see how large a fixture is before wiring it into a load test. The download link always points at the latest generation and picks its extension from the format selector.

Template Fields Typical use
User accounts 8 fields Auth mocks, profile screens, signup tests
Customer records 8 fields CRM demos, billing tables, tier logic
Product catalog 6 fields Shopfront layouts, search filters, stock badges
Transactions 6 fields Payment webhooks, ledger exports, status charts
Addresses 6 fields Checkout forms, shipping labels, address books
URLs and pages 6 fields Crawler fixtures, sitemap tests, redirect tables

Before and After

Before (hand-typed rows)
[
  { "name": "John", "email": "a@b.c" },
  { "name": "Jane", "email": "x@y.z" }
]
After (user template, seed 42, 2 rows)
[
  {
    "id": "id_64861526",
    "firstName": "Bruno",
    "lastName": "Fischer",
    "email": "caleb.thomas@example.org",
    "username": "amara.pixel",
    "city": "Edinburgh",
    "signupDate": "2025-11-10T05:37:37Z",
    "active": false
  },
  {
    "id": "id_50201750",
    "firstName": "Ivy",
    "lastName": "Miller",
    "email": "jonas_wilson@example.com",
    "username": "sana.parse",
    "city": "Lyon",
    "signupDate": "2022-02-15T01:51:22Z",
    "active": true
  }
]
Before (spreadsheet paste)
id,email,city
id_64861526,caleb.thomas@example.org,Edinburgh
id_50201750,jonas_wilson@example.com,Lyon
After (same seed as CSV)
id,firstName,lastName,email,username,city,signupDate,active
id_64861526,Bruno,Fischer,caleb.thomas@example.org,amara.pixel,Edinburgh,2025-11-10T05:37:37Z,false
id_50201750,Ivy,Miller,jonas_wilson@example.com,sana.parse,Lyon,2022-02-15T01:51:22Z,true

Use Cases

Scenario What you need Result
API demo fixtures Fifty user rows that look real on a screen share JSON array pasted straight into a mock server
Load test data Thousands of transactions for a throughput run JSON Lines file accepted by bulk loaders
Frontend form testing Dropdown values, prices, and stock counts to fill Customer or product template output
Local database seeding Rows for a fresh database on a new machine CSV imported with the COPY command

Common Mistakes

  • Running a fresh random source on every attempt. Values that change every time make a bug report impossible to replay; pick a seed and keep it next to the test.
  • Pasting 5000 rows into a page that expects a handful. Stay at 10 or 50 rows while wiring the endpoint, then raise the count once the shape is right.
  • Treating CSV as safe for any value. Commas and quotes are handled by the exporter, but a spreadsheet can still rewrite an id column on import; import as text.
  • Fixing generated JSON by hand and regenerating later. Any manual edit disappears on the next run; change the template or the seed instead.

Best Practices

  • Store the seed in the test file beside the request so a failure can be replayed with identical rows.
  • Match the format to the consumer: JSON array for fetch mocks, CSV for spreadsheets, JSON Lines for bulk loaders.
  • Read the field chips before copying the output so the keys line up with the schema you validate against.
  • Raise the row count only after a small run succeeds; a 5000-row file is painful to read in a review diff.

Frequently Asked Questions

What does deterministic mean on this page?

The same template, row count, and seed always produce identical output. The generator draws values from a seeded random stream, so a colleague running seed 42 with the user template sees the same rows you do. Change the seed and the data changes in a repeatable way.

Which output formats are available?

Three: a pretty-printed JSON array with two-space indent, a CSV file with a header row and standard quoting, and JSON Lines with one compact object per line. The download link picks the matching extension, so you get .json, .csv, or .jsonl depending on the format you chose.

How many rows can I generate at once?

The row count accepts 1 to 5000. Values outside that range are pulled back to the nearest edge, so a typo such as 99999 becomes 5000 rather than freezing the tab. Start with 10 rows for a quick check and raise the count when you load a test database.

Can I edit the templates or add my own fields?

This page ships six fixed templates: user accounts, customer records, product catalog, transactions, addresses, and URLs. The field lists come from the template file bundled with the site, so a new shape means editing the source rather than typing into the page.

Is any of my data sent to a server?

No. Generation runs in the browser tab with a bundled word list and a seeded random stream. Nothing you pick or download leaves the machine, and no account is needed. Closing the tab discards the output.

Why seed test data at all?

A fixed seed makes bugs repeatable. When a failing API call returns row 7 of seed 42, a teammate can regenerate the same row and debug against identical values instead of guessing what the data looked like.

Does the CSV handle commas and quotes inside values?

Yes. Cells that contain commas, double quotes, or line breaks are wrapped in double quotes, and inner quotes are doubled, following the usual CSV convention. That keeps importers from splitting a value at the wrong comma.