How to generate fake test data
This generator builds placeholder customer records you can drop into a database, a spreadsheet, a mock API or a UI prototype. Nothing is uploaded: the records are made in your browser from a seeded random number generator.
- Rows: type how many records you need, from 1 to 10,000.
- Region: United States, Canada or United Kingdom. The region sets the city, state or province, ZIP or postal code, phone format and country together, so a Denver row never gets a Texas ZIP code.
- Columns: tick the fields you want. There are 18, from
idandemailtobirthdateandcreated_at. - Format: JSON, CSV, SQL INSERT (with your own table name) or a plain aligned table.
- Seed: keep it to repeat the same data, or press Generate new data for a fresh one. Then use Copy or Download file.
How the data is made
Each row gets its own random stream, built from your seed and the row number. That means row 5 is identical whether you ask for 10 rows or 10,000, and ticking or unticking a column never changes the other columns. Names, streets and companies come from built-in word lists, and a few names carry accents or apostrophes (Björn, O'Brien) so you can catch encoding and quoting bugs. In SQL output an apostrophe is doubled, as in 'O''Brien'.
Contact details are chosen so they cannot reach a real person. Emails end in example.com, example.org or example.net, which RFC 2606 reserves for examples. US and Canadian phone numbers use 555-0100 to 555-0199, the block reserved for fictional use. UK numbers sit in 07700 900000 to 900999, which Ofcom sets aside for drama. IP addresses come from the three documentation blocks in RFC 5737. Age is worked out from the birthdate as of today, so the two always agree.
Worked example
With the starting settings (10 rows, United States, JSON, seed 42, columns Full name, Email, Phone and Street address) the first record is:
{
"name": "Björn Shah",
"email": "bjorn.shah48@example.net",
"phone": "(617) 555-0126",
"address": "3690 Lake Ln"
}
Switch Format to CSV and the same ten people appear as comma-separated lines. Pick SQL INSERT and set the table name to customers, and the first line becomes:
INSERT INTO customers (name, email, phone, address) VALUES ('Björn Shah', 'bjorn.shah48@example.net', '(617) 555-0126', '3690 Lake Ln');
Numeric columns such as age are written without quotes.
Limits to know about
- The most you can generate at once is 10,000 rows. Larger numbers are capped and the status line says so.
- Addresses join a random street number and common street name to a real city, so one may match a real place. They will not pass a postal address verification service, and nothing here is meant for getting around sign-up or identity checks.
- Names are random combinations and can match real people.
- For custom column names, number ranges or dates, use the CSV data generator. For standalone identifiers, use the UUID generator, and for a fake JSON endpoint see the mock API generator.
Frequently asked questions
Is this fake data safe to use in public demos and screenshots?
Yes for the contact fields: the email domains, phone ranges and IP blocks are reserved so they never belong to a real subscriber. Names and street addresses are random, so avoid presenting them as real customers.
How do I get exactly the same data again?
Leave the seed, region and row count as they were. The same seed always produces the same records, and you can type any word or number as a seed.
Which format should I use to fill a database?
Use SQL INSERT for a seed script you can run as is, CSV for bulk import tools such as PostgreSQL COPY or MySQL LOAD DATA, and JSON for APIs, fixtures and front-end mocks.
Do the age and birthdate columns match?
Yes. The tool picks an age from 18 to 80, then a birthdate that gives exactly that age today. Because it uses today's date, the same seed will show a different birthdate next year.