RunLocalTools

Fake Test Data Generator: CSV, JSON, SQL, XML and Excel, Free and Offline

Generate realistic fake data for testing: linked tables, 12 locales, seeded and repeatable, safe reserved values, up to 100,000 rows per table. Export CSV, JSON, SQL, XML, Excel. Runs in your browser.

 

What it does

You describe a table by listing its fields (name, email, phone, IBAN, date, UUID and about 70 other types), pick how many rows you want, and the tool produces a complete data set you can paste into a database, a spreadsheet or a test suite. You can build several tables that point at each other, so an orders table only refers to customer IDs that really exist in customers.

The output is fake by design. Emails use reserved domains, card numbers come from published payment-test lists, and IP addresses use documentation ranges, so nothing you generate should reach a real person or a real server.

How it works

Everything is generated in your browser from a seed. The seed goes through a hash (xmur3) into a small, fast random generator (mulberry32), and every field gets its own stream of random numbers. That has two useful consequences: the same seed and schema always produce the same rows, and adding or removing one field does not reshuffle the values in the others.

A few techniques are worth knowing about:

  • Row coherence. Within a row, the email is built from the generated name, and city, region, postcode, country and phone prefix belong to the same locale. In “mixed” mode each row picks its own locale, and everything in that row follows it.
  • Linked tables. Parent tables are generated first, then child fields pick from the parent’s real values. A “skewed” option makes a few parents popular, like real order data.
  • Unique fields. If a value collides, the generator re-rolls it. If a field cannot produce enough distinct values (say 100 unique cities from a list of a dozen), you get a plain error naming the field instead of silent duplicates.
  • Valid check digits. IBANs pass the mod-97 check for 15 countries, and card numbers pass the Luhn check. BICs are format-valid only.
  • Formulas and dates. Template fields such as {{first_name}}.{{last_name}}@example.com can reference other fields. “Date after another field” and “Age from a birthdate” keep dates logically consistent.

How to use it

  1. Pick a preset (Users, Customers and orders, Employees and more) or start from a sample: paste a CSV or JSON snippet and the tool guesses a schema from the column names and values.
  2. Edit the fields. Use the gear icon on a field for its options, such as ranges, distributions, formats and pick-lists with weights.
  3. Set the number of rows per table, choose a locale, and leave safe mode on unless you have a reason not to.
  4. Check the live preview, then press Generate.
  5. Choose a format on the right, adjust its options (delimiter, SQL dialect, rows per INSERT), then download or copy. Several tables download as one zip.
  6. Copy the share link to give someone the exact schema and seed, or save the schema under a name to reuse later.

Safe mode and chaos mode

Safe mode (on by default) swaps in values that cannot belong to real people: reserved email domains, published test card numbers and documentation IP ranges. One limit to know: phone numbers are only guaranteed fictional for en-US, en-GB, fr-FR and de-DE. In other locales they follow real numbering formats and could match a real person, and the tool tells you when your schema includes them.

Chaos mode is a per-field percentage that replaces some values with awkward ones: quotes and commas, embedded newlines, emoji, right-to-left text, very long strings, SQL and script snippets, and edge-case numbers and dates. It is meant for testing importers and validators, and it does not disturb the values in other fields.

Output formats

  • CSV and TSV with your choice of delimiter, quoting, line endings and BOM. Spreadsheet-formula neutralising is on by default, and plain phone numbers stay untouched.
  • JSON and NDJSON, pretty or compact.
  • SQL INSERT for PostgreSQL, MySQL/MariaDB, SQLite and SQL Server, with optional CREATE TABLE and batched rows. Tables come out parents-first so foreign keys load cleanly. If you already have a CSV you want turned into inserts, the CSV to INSERT SQL converter does that, and the SQL formatter will tidy any statements you paste in afterwards.
  • XML, YAML, Markdown table, HTML table and TypeScript interfaces with a typed array.
  • Excel (.xlsx), one sheet per table.

Limits

  • Up to 100,000 rows per table, 12 tables and 60 fields per table.
  • Large outputs are shown truncated in the preview box, but copy and download always use the full file.
  • Excel export and multi-file zips load a small helper library from a CDN the first time you use them. Everything else works fully offline.
  • Names, cities and streets come from built-in lists per locale, so very large data sets will repeat common values. Turn on “unique” only for fields with enough variety.

Privacy

The schema, seed and generated data stay in your browser. Sample files you drop in are read once to guess a schema and are not stored. Saved schemas live in this browser only. If your sample holds real personal data, the tool copies short lists of repeated values (such as statuses) into pick-lists and warns you to review them before sharing. If you need to scrub real data rather than invent new data, the CSV anonymizer is built for that.

FAQ

Is any of the data real?

No. Names, addresses and companies are assembled from built-in lists, and the values are random. With safe mode on, the email domains, card numbers and IPs are also reserved or published test values.

Can I get the same data again?

Yes. Use the same seed and schema and you get the same rows. The share link contains both. Changing the tool’s version could change the built-in lists, so save the output if you need it to stay fixed for years.

Are the card numbers and IBANs usable?

They are for testing only. Card numbers in safe mode come from the payment industry’s published test numbers, so they repeat once you ask for more rows than the list holds. IBANs have valid check digits but random bank and account digits, so keep them out of live payment flows.

How do I test an importer with messy data?

Set a chaos percentage on the fields you care about, generate, and export as CSV or SQL. You will get quotes, newlines, emoji, injection strings and out-of-range numbers mixed into otherwise normal rows.

Can it fill in a schema from my existing data?

Yes. Paste a CSV, TSV or JSON array of objects, or send a table from another tool. Column names and value shapes are used to choose field types, and only the inferred schema is kept.

Does anything get uploaded?

No. There is no server. Generation, preview and export all run in your browser tab.