Mock Data Generator

Build a schema, generate realistic fake rows, and download them as CSV, TSV, JSON, NDJSON, SQL, XML, HTML or Excel. Up to 5 million rows, no sign-up, and nothing ever leaves your browser.

Start from a preset

Or build your own schema below

Columns

Preview

First 25 rows

What This Mock Data Generator Does Differently

Most "random data" sites hand you a column of unrelated values: a first name from one row, an email belonging to somebody else, a postcode from a different country entirely. That is fine until you actually load the file into a staging database and your joins, validators and display logic start behaving in ways real data never would. This generator builds a coherent identity for every row first — person, address, employer — and then fills your columns from it. The email is derived from the name in the same row. The postal code format matches the selected country. Rearranging your columns does not break any of it.

Reproducible output is the headline feature

Type anything into the Seed box and the generator becomes deterministic: the same schema plus the same seed produces a byte-identical file, on any machine, in any browser. That is what turns generated data into something you can actually commit to a repository. Your fixture file stops being a mystery blob that nobody dares regenerate — anyone can rebuild it from the seed and get the same bytes, so a diff in CI means a real change, not just fresh randomness. Leave the seed blank and you get fresh data on every run instead.

One detail that most generators get wrong: anything derived from “now” quietly breaks reproducibility. A column defined as some date between 2020 and today shifts every time the clock moves, so a seeded rerun a minute later produces a different file. Here, a seeded run anchors now to midnight UTC rather than the live clock, so repeated runs on the same day match exactly — and Copy share link pins the exact anchor into the URL, so a shared or committed schema keeps reproducing the same bytes indefinitely. Set an explicit To date on your date columns and the output is fixed regardless.

Everything runs in your browser

There is no account, no row cap behind a paywall, no API key and no upload. The generator is plain JavaScript running in your tab; the only network request it ever makes is fetching the ZIP library from a CDN when you choose Excel output. You can disconnect from the network after the page loads and keep generating files. That matters more than it sounds: schemas often mirror a real production table, and column names alone can leak a surprising amount about an internal system.

Field types available

Output formats and what they are good for

Why generated CSVs are a security problem (and how this one is not)

Spreadsheet software treats any cell beginning with =, +, - or @ as a formula. A CSV containing =cmd|'/c calc'!A1 can therefore trigger a command prompt when somebody opens it in Excel — the well-documented CSV injection class of attack. Test data ends up in exactly the places where this bites: shared with QA, attached to tickets, imported into admin dashboards. This tool prefixes any such cell with an apostrophe by default, which forces the value to be treated as text and renders it inert. You can disable the guard with the checkbox above when you specifically want to test how your own importer handles those characters.

Generating very large datasets

Up to 100,000 rows the file is assembled in memory and handed to the browser as a normal download. Beyond that, tick Stream straight to disk: the generator writes CSV, TSV, JSON or NDJSON in chunks through the File System Access API and never holds the full dataset in RAM, which is what makes multi-million-row files possible in a tab. Streaming needs a Chromium browser (Chrome, Edge, Opera, Brave or Arc); Safari and Firefox have not shipped the API, and fall back to the in-memory limit.

Limitations worth knowing

Privacy

Your schema, your seed and the generated rows exist only in your browser tab. Nothing is transmitted, logged or stored on a server, and the share link encodes your schema in the URL itself rather than saving it anywhere. Because the data is entirely synthetic, it carries none of the GDPR, HIPAA or DPDP obligations that come with copying a production table into a test environment — which is the real reason to use generated data in the first place.

Frequently Asked Questions

No account, no email, no API key. You can generate 100,000 rows in memory or up to 5 million rows with streaming enabled, as often as you like. The limits are what a browser tab can physically handle, not a paywall.
It makes the output deterministic. The same schema plus the same seed produces a byte-identical file every time, on any machine. That lets you commit a generated fixture to your repository and have anyone rebuild it exactly, so a diff in CI reflects a real change rather than new randomness. Columns with an open-ended date range anchor to midnight UTC instead of the live clock so reruns still match, and a share link pins that anchor permanently. Leave the seed blank if you want different data on every run.
Yes. Each row starts life as one coherent identity — a person, an address and an employer — and every column you add reads from it. So the email is built from that row's first and last name, the postcode matches the selected country's format, and the city sits in the state shown beside it. This holds no matter what order you arrange the columns in.
Nothing is uploaded. Generation, preview and download all happen inside your browser tab. The only outbound request the tool ever makes is loading the ZIP library from a CDN when you pick Excel output — and even that fetches code, never your data. Disconnect from the network after the page loads and everything except XLSX keeps working.
Yes. Pick your dialect (MySQL, PostgreSQL, SQLite or SQL Server) and the output uses the right identifier quoting — backticks, double quotes or brackets — with string literals escaped correctly, including backslashes for MySQL. You get a CREATE TABLE with a sensible type per column followed by batched multi-row INSERT statements. Turn the CREATE TABLE off if the table already exists.
No. They are synthetic numbers built with a correct Luhn check digit, which is what payment forms and validation libraries check first — so they let you exercise your validation path. They are not issued to anyone, carry no funds, and will always be declined by a real payment processor.
That is the CSV injection guard. Excel and other spreadsheet apps execute any cell starting with =, +, - or @ as a formula, so a leading apostrophe forces it to be read as plain text instead. Uncheck the guard if you are deliberately testing how your own importer handles those characters.
Use Copy share link. The entire schema — columns, types, options, row count, format, locale and seed — is encoded into the URL itself, so anyone who opens it lands on the same setup. Nothing is saved on a server, and pairing the link with a seed means the recipient can regenerate exactly the same file you did.
Yes. It is a genuine Open XML workbook with a bold frozen header row, auto-sized columns, and numeric columns written as real numbers rather than text — so SUM and sorting work immediately with no "convert to number" prompt. It opens in Excel, LibreOffice, Google Sheets and Numbers, and is validated in testing against strict OOXML parsers.
That is a different job — use the Sample File Generator, which produces a file of an exact byte size in 25 formats. Use this tool when you need structured rows with realistic values; use that one when you need a file of exactly 100 MB to test an upload limit.