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. Every field it chose is visible, and the actual data is then 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.
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), values for a list (active, banned), a span for dates (2024-01-01 – 2026-12-31), 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.
- The seed makes output reproducible: same schema + same seed = the exact same rows, today or next month. Re-roll for a fresh batch, or pin a seed in a bug report so everyone sees identical data.
- 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. |
| Address built from the row's name at a generic domain. | |
| 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). Options: 0 – 1000 |
| Decimal | Number with 2 decimal places in a range. 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. That correlation is what makes generated data read as real in a demo.
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 re-roll the seed and generate again: 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.