Mock Data Generator
Generate realistic fake test data — names, emails, addresses, phone numbers, UUIDs, dates and more — as JSON, CSV or ready-to-run SQL INSERT statements. Tick the fields you want, choose how many rows, and copy or download the result. Everything runs in your browser: nothing is uploaded and no real people are used.
0 rows
What each field produces
| Field | Column | Type | What you get |
|---|---|---|---|
| ID (sequential) | id | number | A row number that starts at 1 and counts up — a simple primary key. |
| UUID | uuid | string | A random RFC 4122 version-4 UUID, e.g. a globally unique identifier. |
| First name | first_name | string | A given name picked from a varied international list. |
| Last name | last_name | string | A family name from a varied international list. |
| Full name | full_name | string | The row’s first and last name joined — kept consistent within the row. |
email | string | An address built from the same row’s name, e.g. jane.smith@example.com. | |
| Username | username | string | A handle derived from the row’s name plus a number, e.g. jsmith417. |
| Phone | phone | string | A formatted number such as (415) 555-0132. |
| Street address | street_address | string | A house number, street name and street type, e.g. 482 Oak Ave. |
| City | city | string | A city name from a worldwide list. |
| State | state | string | A two-letter US state code, e.g. CA. |
| ZIP / postcode | zip | string | A five-digit postal code (kept as text so leading zeros survive). |
| Country | country | string | A country name from a worldwide list. |
| Company | company | string | A made-up company such as “Patel Solutions”. |
| Job title | job_title | string | A common role, e.g. Product Manager. |
| Date | date | string | An ISO date within the last five years, e.g. 2024-03-18. |
| Date-time | datetime | string | An ISO 8601 timestamp, e.g. 2024-03-18T09:41:07Z. |
| Boolean (active) | active | boolean | A true/false flag — a real boolean in JSON, TRUE/FALSE in SQL. |
| Number | number | number | A whole number from 0 to 999. |
| Price | price | number | A decimal amount with two places, e.g. 42.99. |
| Colour (hex) | color | string | A random hex colour such as #3fa9c2. |
| IPv4 address | ipv4 | string | A dotted IPv4 address, e.g. 172.16.4.91. |
| Domain | domain | string | A domain name, e.g. garcia.io. |
| URL | url | string | An https URL, e.g. https://lee.com/dolor. |
| Paragraph (lorem) | paragraph | string | A short lorem-ipsum sentence of placeholder text. |
Output formats
| Format | Best for |
|---|---|
| JSON | Seeding NoSQL stores, mocking API responses, or importing into apps that read JSON. Output is an array of objects. |
| CSV | Opening in a spreadsheet or bulk-importing into a database or CRM. First line is the header row; values are quoted only when they need escaping. |
| SQL | Dropping straight into a database. A single multi-row INSERT statement — strings are quoted and escaped, numbers and booleans are left bare. |
How to use it
- Tick the fields you need — or use Select all to grab everything and untick the ones you don’t want. The output columns follow the order shown in the list.
- Set the number of rows (up to 1,000) and choose your format: JSON, CSV or a SQL INSERT (set the table name for SQL).
- The data appears instantly. Press Regenerate for a fresh random set, then Copy or Download the file.
How the data is generated
Every value is produced on your own device with plain JavaScript. Random choices come from the
browser’s crypto.getRandomValues — a cryptographically strong, unbiased source —
applied to short built-in word lists of names, cities, countries, streets and job titles.
Each row begins from a single randomly chosen person so that related fields agree: the full
name matches the first and last name, and the email and username are derived from that same
name. Independent fields such as price, colour or IP address are randomised on their own.
The formatter also handles the fiddly details that break naïve exports. In CSV, any value that
contains a comma, a double-quote or a line break is wrapped in quotes and its internal quotes
are doubled, so the columns never shift. In SQL, text is wrapped in single quotes with any
apostrophe escaped (O'Brien → 'O''Brien'), while numbers and booleans
are written bare (TRUE/FALSE) so the statement runs as-is. In JSON,
numbers and booleans stay as real JSON types rather than strings.
Common uses for mock data
- Seed a database or CMS during development so screens aren’t empty.
- Mock an API response to build a front end before the back end exists.
- Stress-test lists, tables and pagination with hundreds of rows.
- Fill demos and screenshots with plausible records instead of “test test”.
- Write documentation and tutorials using safe, non-personal sample data.
- Avoid copying real customer data into staging — a common privacy risk.
JSON vs CSV vs SQL — which should I use?
Reach for JSON when the consumer is code: it is an array of objects with real
numbers and booleans, ideal for mocking an API or seeding a document database. Reach for
CSV when a human or a spreadsheet is involved, or when a tool offers a
“bulk import from CSV” option — the escaping here means a comma inside an address or a quote
inside a note won’t corrupt the file. Reach for SQL when you want to load rows
directly into a relational database: the single multi-row INSERT is the fastest way
to populate a table, and because the values are properly quoted and typed you can paste it into a
client and run it without edits.
Frequently asked questions
- What is mock (dummy) data and why would I need it?
- Mock data is realistic-looking but entirely made-up information used in place of real records. Developers and testers use it to seed a database, populate a UI while it is being built, test how an app behaves with lots of rows, demo a product, or write examples — all without touching real customer data. Because none of it describes a real person, it sidesteps the privacy and compliance risk of copying production data into a test environment.
- Is the data really random, and does it describe real people?
- The values are drawn at random from generic word lists (common first and last names, cities, countries, street names, job titles) using the browser’s cryptographically strong random number generator. Any resemblance between a generated name-and-email combination and a real person is pure coincidence — nothing here is scraped from or linked to real records, so it is safe to publish in tests, demos and documentation.
- Are the fields in a row consistent with each other?
- Yes, where it makes sense. Each row starts from one randomly chosen person, so the full name matches the first and last name, and the email and username are built from that same name (for example Jane Smith → jane.smith@example.com and jsmith417). Independent fields like city, price or colour are randomised separately, which is exactly how real records look.
- Which output format should I choose — JSON, CSV or SQL?
- Use JSON when you are mocking an API response or seeding a document store — it is an array of objects with real numbers and booleans. Use CSV to open the data in a spreadsheet or bulk-import it, with proper escaping so commas, quotes and line breaks inside a value never break the columns. Use SQL when you want to paste the rows straight into a database: it produces one multi-row INSERT with strings safely quoted and numbers and booleans left unquoted.
- How many rows can I generate at once?
- From 1 up to 1,000 rows per run, which is enough to seed a table or exercise a paginated list. Everything is generated on your device, so larger sets are limited only to keep the page responsive; press Regenerate for a completely fresh set of values, or change the row count and the output updates instantly.
- Is anything uploaded to a server?
- No. The entire generator is plain JavaScript that runs in your browser, so the data never leaves your device and the tool keeps working offline. That also means you can safely use it behind a corporate firewall or on an air-gapped machine without worrying about where your test data goes.