A mock data generator with safe defaults
Seeding a database, mocking an API or preparing a load test all need the same thing: many records that look like real users but belong to nobody. This generator builds them from the fields you tick and exports them in the format your tooling reads — a JSON array for fixtures and API mocks, CSV for spreadsheets and bulk importers, NDJSON for streaming loaders and log pipelines, or SQL INSERT statements you can run directly.
Unlike generic random-data tools, every value is chosen so that it is harmless if it ever leaves the test environment. That is the point of test data: a staging system that sends a welcome e-mail or an SMS by mistake should not reach a real person.
The fields and where their values come from
| Field | Value |
|---|---|
id | UUID v4 (random), UUID v7 (time-ordered, sorts by creation time) or a running integer |
first_name, last_name, full_name, gender | Common names for the record’s country, in the local name order (see the name generator) |
email | Derived from the name, on example.com/.net/.org (RFC 2606) or a .test, .example or .invalid domain (RFC 2606 / RFC 6761) |
phone | Only from regulator-reserved fictional ranges (US/Canada, UK, Australia, France, Germany); null elsewhere |
street, city, region, postcode, country | Synthetic street, real city and region, postcode in the correct local format (see the address generator) |
company, job_title | Invented company names with the country’s usual legal suffix (GmbH, Ltd, S.A. de C.V.…) and common job titles |
birth_date, created_at | ISO 8601 dates: birth dates for ages 18–80, creation timestamps within the last year (UTC) |
iban | Structurally valid IBAN with correct check digits for countries that use IBANs; null elsewhere |
ipv4, ipv6 | Documentation ranges 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 (RFC 5737) and 2001:db8::/32 (RFC 3849) |
website | A URL under the reserved .example top-level domain |
is_active | Boolean, true for about 80% of records |
What you won’t find: social security numbers, national ID numbers, tax IDs, passport numbers or real card numbers. If your schema needs those columns, fill them with obviously invalid placeholders, or use the test values your payment provider documents — see our test card numbers by gateway.
Export formats
- JSON — a pretty-printed array of objects. Drop it into a fixtures folder, a mock server such as json-server or MSW, or a Postman collection.
- CSV — a header row plus one line per record, quoted according to RFC 4180 (commas, quotes and line breaks are escaped). Opens in Excel, Google Sheets and LibreOffice; for Excel, import it as UTF-8 so accented names display correctly.
- SQL INSERT — multi-row
INSERT INTO table (…) VALUES …;statements, 100 rows each, with quotes escaped,NULLfor missing values andTRUE/FALSEfor booleans. Works with PostgreSQL, MySQL 8, MariaDB and SQLite. - NDJSON — one JSON object per line, for streaming imports, Elasticsearch bulk loaders and BigQuery.
The preview shows up to 200,000 characters; Download always saves the complete file.
Tips for realistic test data
- Mix countries. The Mixed option draws each record from a random country, which quickly shows encoding problems, long values and missing postcodes (the UAE has none).
- Prefer UUID v7 for primary keys. Time-ordered IDs keep B-tree indexes compact when you insert thousands of rows. Generate standalone IDs with the UUID generator.
- Keep a fixed seed file. Generate once, commit the JSON or SQL, and every developer and CI run uses the same records — tests stay reproducible.
- Label test records. Reserved e-mail domains make test users easy to filter out of analytics and easy to delete later:
WHERE email LIKE '%@example.%'.
Frequently asked questions
Which e-mail domains are used?
example.com, example.net and example.org (reserved by RFC 2606), or, if you choose, subdomains of the reserved .test, .example and .invalid top-level domains. Mail to these domains can never reach a real person, so a test run that accidentally sends e-mail does no harm.
Are the phone numbers safe to dial?
They come only from ranges that regulators reserve for fiction (US and Canada 555-01xx, UK Ofcom drama numbers, Australia ACMA, France Arcep, Germany Bundesnetzagentur). For other countries the phone field is null rather than a random number that could belong to someone.
What IP addresses are generated?
Addresses from the documentation ranges 192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24 (RFC 5737) and the IPv6 documentation prefix 2001:db8::/32 (RFC 3849). They are never routed on the internet.
How do I import the SQL?
The output is plain INSERT INTO table (columns) VALUES …; with one statement per 100 rows, single quotes escaped, NULL for empty values and TRUE/FALSE for booleans. It runs on PostgreSQL, MySQL 8, MariaDB and SQLite. Create the table first with matching column names.
Are the IBANs valid?
For the countries that use IBANs, the field reuses the logic of our IBAN generator: correct length, structure and check digits, random account number. They are not real accounts. For countries without IBANs the value is null.