Tools
Mock Data Generator
Build a schema — names, emails, prices, dates, UUIDs, your own enums — and get up to 1,000 rows of realistic fake data as JSON, CSV or SQL. Seeded and reproducible, generated entirely in your browser. Or describe the dataset in plain English and let the resident AI set up the fields for you.
Runs on a small language model hosted on this site's own server — give it a few seconds, then tweak the fields it builds.
Fields — name · type · options
Output
More on this site: all tools ·JSON formatter ·JSON to code ·regex checker ·the arcade · writing
Found a bug or missing a field type? Tell me— reports get fixed fast.
What is this tool?
A free mock data generator for developers: define the shape of a record — a user, a product, an order, a sensor reading — and it produces as many rows of realistic fake data as you need, up to 1,000 at a time, in JSON, CSV or ready-to-paste SQLINSERT statements. Use it to seed a development database, fill an empty UI with believable content, write API fixtures, or reproduce a bug that only shows up with "real-looking" data.
Everything is generated in your browser — there is no upload, no account, and the schema you build is saved only in your own browser's local storage. The one optional exception is the AI schema builder — off by default — which is this tool's twist:
The AI twist
Flip the AI describe switch and you can skip the clicking: type "50 employees with name, department and a salary between 30k and 90k" and a small language model fills in the schema builder for you — field names, types, ranges, enum values, even the row count and SQL table name. The model is not a cloud API: it's a compact open-weights model running on this website's own server — the same machine that writes regexes for theregex checker and paints for thepalette generator. Your description is the only thing sent, and nothing about you is stored with it.
The best part is what happens next: the AI's schema lands in thesame editable builder you'd have used by hand, and the rows appear in the output pane straight away. Every field it chose is visible, and the actual data is generated by the deterministic engine on your device — so the AI can't hallucinate a malformed row. If it picked a wrong type, change it in one click and the output regenerates instantly.
It reads the shape of your ask, not just the topic. Say"50 usernames starting with the letter s" and you get a single username column of 50 rows — not a padded-out user table. Describe a full record and you get the whole table. Constraints like a range (30k-90k), an enum's values, or a "starts with" prefix ride along into the field options.
How to use it
- Start from a preset (Users, Products, Orders, Blog posts) or add fields one by one.
- Each field is a name, a type, and an optional options text: a range for numbers (
18-65, k/m shorthand like30k-90kworks), values for a list (active, banned), a span for dates (2024-01-01 – 2026-12-31), a decimal precision for floats (4dp), or a null rate (10% null) on any type. - Pick the row count and format — JSON for fixtures, CSV for spreadsheets and imports, SQL for seeding a table.
- Hit Generate data for a fresh batch — click it as many times as you like, each press rolls new rows and jumps you to the output.
- The seed (optional, for power users) makes output reproducible: type a number and the same schema returns the exact same rows, today or next month — pin one in a bug report so everyone sees identical data. Leave it alone and Generate picks a new one each time.
- Copy the output or download it as
.json,.csvor.sql.
Field types
People
| Type | Generates |
|---|---|
| Full name | First and last name — used to derive emails and usernames in the same row. |
| First name | Given name, consistent with other name fields in the row. |
| Last name | Family name, consistent with other name fields in the row. |
| Username | Handle derived from the row's name, like mrossi42 — never repeats in a batch. Add "starts with s" to constrain the opening. Options: starts with s |
Address built from the row's name at a generic domain — never repeats in a batch. Options: starts with s | |
| Phone | Fictional 555 number, +1 (312) 555-0147 style. |
| Job title | Seniority + role, like Senior Data Analyst. |
Business
| Type | Generates |
|---|---|
| Company | Invented two-word company name, like Cobalt Labs. |
| Product name | Adjective-material-thing, like Ergonomic Oak Desk. |
Place
| Type | Generates |
|---|---|
| City | Real-world city from a broad international pool. |
| Country | Country name from a broad international pool. |
| Street address | Number + invented street, like 742 Juniper Lane. |
| Postal code | Five-digit code (kept as a string — leading zeros survive). |
| Latitude | Decimal degrees, 4 decimal places. Options: -90 – 90 |
| Longitude | Decimal degrees, 4 decimal places. Options: -180 – 180 |
Numbers & IDs
| Type | Generates |
|---|---|
| Row number | Sequential integer — 1, 2, 3… or from any start value. Options: start at 1 |
| Integer | Whole number in a range (inclusive) — k/m shorthand works, 30k is 30,000. Options: 0 – 1000 |
| Decimal | Number in a range, 2 decimal places — add e.g. 4dp for more precision. Options: 0 – 100 |
| Price | Money-shaped decimal, always 2 decimal places. Options: 1 – 999 |
| UUID | Random version-4 UUID. |
Choice
| Type | Generates |
|---|---|
| Pick from list | One of the values you list — statuses, categories, tags. Options: active, inactive, banned |
| True / false | Boolean, 50/50. |
Date & time
| Type | Generates |
|---|---|
| Date | ISO date (YYYY-MM-DD) in a range. Options: 2024-01-01 – 2026-12-31 |
| Date & time | ISO 8601 timestamp (UTC) in a range. Options: 2024-01-01 – 2026-12-31 |
Text
| Type | Generates |
|---|---|
| Word | Single lorem word. |
| Sentence | One lorem sentence — titles, labels, short strings. |
| Paragraph | A few lorem sentences — descriptions, comments, bodies. |
Web
| Type | Generates |
|---|---|
| URL | https link to an invented domain. |
| Domain | Invented hostname, like cascade.dev. |
| IPv4 address | Dotted-quad address like 172.16.254.3. |
| Hex color | #rrggbb color code. |
Rows are internally consistent where it matters: if a record has name fields and an email or username, they agree —Lina Kimura gets lina.kimura@example.com, not a random string. A schema with several person fields (sayauthor and reviewer) gets a distinct person for each, with the second email tracking the second name. And because generated data ends up in tables withUNIQUE constraints, emails and usernames never repeat within a batch.
Fake by construction
"Realistic" never means "real". Phone numbers use the reserved555 exchange, emails end in generic domains likeexample.com, companies and street names are invented, and people are random combinations drawn from name pools — so nothing generated here can collide with an actual person's data. That makes it safe for screenshots, demos and public test suites, where scraping "just a little" production data is how privacy incidents start.
Output format notes
- JSON keeps honest types: numbers are numbers, booleans are booleans, missing values are
null— not strings pretending. - CSV follows RFC 4180 quoting: cells containing commas, quotes or newlines are quoted, quotes are doubled, and nulls become empty cells. Field order matches your schema.
- SQL emits multi-row
INSERTstatements chunked 100 rows at a time, with single quotes escaped by doubling and identifiers quoted only when they need it. The syntax is standard enough for PostgreSQL, MySQL, MariaDB and SQLite alike.
FAQ
Is it free? Yes — free, no sign-up, no limits beyond the 1,000-row cap per batch.
Is my data uploaded anywhere? No. Generation runs entirely in your browser and works offline once the page is loaded. The optional AI schema builder — only if you've switched it on — sends exactly one thing: the description you typed. It never sees the generated data at all.
Why a seed? Because random test data that changes on every refresh is a debugging nightmare. The seed pins the randomness: commit it next to a failing test and every teammate regenerates byte-identical rows.
Can I generate more than 1,000 rows? Per batch, no — it keeps the page instant on any device. But pressGenerate data again for another 1,000: each batch is different, and SQL output appends cleanly.
Which SQL dialect is the output? Deliberately plain multi-row inserts — no backticks, no ON CONFLICT, no dialect-specific types — so it pastes into PostgreSQL, MySQL and SQLite unchanged. Create the table first; this tool fills it.
Need model classes for this JSON? Paste the output into the JSON to code converterand get Dart, TypeScript, Python, Go, Kotlin or Swift models in one step.
Built from scratch for this site in vanilla TypeScript — a pure, unit-tested generation core with a seeded PRNG, zero runtime dependencies, and a self-hosted small language model on schema-drafting duty.