utilyfe

Mock Data Generator

Describe your fields once and get fake rows as JSON, CSV or SQL. The same seed always gives the same data.

Runs entirely in your browser. Nothing you enter is uploaded or stored.

10 rows · same seed always gives the same data
The generated data appears here.
Rows

How to use the Mock Data Generator

  1. 1Write one field per line, as "name: type", or press "Try an example" to see the format.
  2. 2Choose how many rows you want and pick a seed; the same seed always regenerates the exact same data.
  3. 3Switch between JSON, CSV and SQL. For SQL, give the table a name.
  4. 4Copy the result into a fixture, a seed script or a test file.

The schema format

One field per line, as name: type:

id: uuid
name: fullName
email: email
age: int:18-65
active: boolean
role: pick:admin|editor|viewer

Field names become JSON keys, CSV column headers, or SQL column names: whatever you write is what you get back.

Every field type

Type Produces Example
uuid A random v4 UUID 63579236-7abf-4ffc-9c04-9707376ecae7
sequence 1, 2, 3, … one per row 1
firstName, lastName, fullName A name Ada Lovelace
email A name-shaped address ada.lovelace42@example.com
username A name-shaped handle ada.lovelace837
phone A US-style phone number (555) 123-4567
company A two-word company name Silver Group
jobTitle A job title Software Engineer
streetAddress, city, country, zipCode Address parts 482 Oak Ave
boolean true or false true
int:min-max A whole number in range int:1-100 → 57
float:min-max A number with 2 decimals float:0-1 → 0.43
price:min-max Same as float, but reads better for money price:5-500 → 264.19
date:startYear-endYear An ISO date date:2020-2024 → 2022-06-16
word, words:n Lorem ipsum words words:3 → ipsum dolor sit
sentence, paragraph Lorem ipsum prose n/a
pick:a|b|c One of your own listed values pick:small|medium|large

Why a seed, not just “regenerate”

Most fake-data generators give you a fresh, different set every time you load the page: fine for a quick look, useless for anything you need to come back to. This one is built on a seeded random number generator: the seed you type (any text) determines every value that follows, in order, every time.

That means:

  • The same seed and schema always produce the same rows. Share a seed with a teammate, or write it into a README, and they get byte-identical data.
  • Changing only the row count keeps the earlier rows the same: asking for 20 rows gives you the same first 10 as asking for 10, with 10 more appended. Useful when you want to grow a fixture without reshuffling the existing rows.
  • A different seed gives genuinely different data, so seed=test-1 and seed=test-2 won’t collide if you’re generating fixtures for two separate test cases.

Picking an output format

JSON is the default and suits a test fixture, a mock API response, or a .json seed file.

CSV suits importing into a spreadsheet or a database’s bulk-load tool. Values containing a comma or a quote are quoted and escaped correctly, so a pick field with commas in its values still produces valid CSV.

SQL writes one INSERT statement per row, with the table name you choose. String values are wrapped in single quotes with internal quotes doubled (the standard SQL escape), and booleans are written as TRUE/FALSE: supported by Postgres, MySQL 8+ and SQLite; substitute 1/0 by hand if your database only accepts those.

What it won’t do

Field values are generated independently: there’s no way to make one field depend on another (an endDate that’s always after a startDate, or a total that’s the sum of other fields). For that level of realism, generate here and adjust by hand, or use a dedicated fixture library in your own codebase.

Questions

What field types are available?
uuid, sequence (1, 2, 3…), firstName, lastName, fullName, email, username, phone, company, jobTitle, streetAddress, city, country, zipCode, boolean, int:min-max, float:min-max, price:min-max, date:startYear-endYear, word, words:n, sentence, paragraph, and pick:a|b|c for a fixed list of your own choices. pick is the escape hatch for anything not built in: statuses, categories, enum values.
Why does the same seed always give the same data?
Because it's built on a seeded random number generator rather than the browser's own Math.random or crypto: the same seed text always produces the exact same sequence of "random" values. That means a schema and seed can be shared, checked into a repository, or reused in a test suite, and it will keep generating identical rows every time, rather than a fresh, unreproducible set on every run.
Is this data safe to use as-is? Are these real names, real people?
The names are drawn from a small list of well-known figures in computing (Ada Lovelace, Alan Turing, and so on) combined into new first/last pairings, and email addresses use example.com and other placeholder domains rather than sending mail anywhere real. It's fake data meant to look plausible in a UI or a database, not a claim about any real individual: treat it the way you'd treat "Jane Doe" in a form example.
Can I control exactly which values appear for a field?
Yes, with pick:a|b|c: list the exact values, separated by |, and each row gets one of them at random. It's the right tool for enum-like fields: order status, subscription tier, user role, anything with a fixed, known set of values.
Is my schema or the generated data sent anywhere?
No. Everything (parsing the schema, generating rows, and formatting the output) happens in this browser tab. Nothing is uploaded, logged or saved.