Generate synthetic user records for testing, development, and database seeding. Pick a locale, a count, and an output format (JSON, CSV, or SQL inserts), and the tool produces that many fake-but-realistic user records — names, emails, phone numbers, street addresses, cities, and postal codes — all locale-appropriate.
The tool runs entirely in your browser with hand-curated locale data. No external library is loaded, no network request is made, and your generated data never leaves your device. Records are cryptographically random when Web Crypto is available, falling back to Math.random otherwise.
Supported locales
Five locales, hand-curated:
- United States — English first/last names from the SSA top-name list, US phone format
(XXX) XXX-XXXX, 5-digit ZIP. - United Kingdom — English names from ONS top-name data, UK phone format
0XXXX XXXXXX, UK postcode formatAB1 2CD. - Germany — German names,
+49phone format, 5-digit PLZ, German street types (Straße, Gasse, Weg). - France — French names, French phone format
0X XX XX XX XX, 5-digit code postal, French street types (rue, avenue, boulevard, place). - Netherlands — Dutch names, Dutch phone format
0X-XXXXXXXX, Dutch postal format1234 AB, Dutch street types (straat, laan, plein).
Each locale has ~30 first names, ~30 last names, ~10 street types, and ~10 city names. That’s enough variety for test data while keeping the total payload under 15 KB for all five combined — compared to Faker-js’s ~500 KB when you include its full locale set.
Output formats
JSON — a pretty-printed array of user objects. The default when you want to paste data into a JSON fixture file or feed it to a test framework.
[
{
"firstName": "Alice",
"lastName": "Smith",
"email": "alice.smith@example.com",
"phone": "(555) 123-4567",
"street": "123 Main Street",
"city": "New York",
"zip": "10001"
}
]
CSV — a header row followed by one record per line, with RFC 4180 escaping for values that contain commas, quotes, or newlines. The fastest way to get fake data into a spreadsheet.
firstName,lastName,email,phone,street,city,zip
Alice,Smith,alice.smith@example.com,(555) 123-4567,123 Main Street,New York,10001
SQL — one INSERT INTO users statement per record, with single quotes escaped by doubling. Drops straight into a psql or mysql client for seeding a test database.
INSERT INTO users (first_name, last_name, email, phone, street, city, zip) VALUES ('Alice', 'Smith', 'alice.smith@example.com', '(555) 123-4567', '123 Main Street', 'New York', '10001');
Example: seeding a dev database
You need 100 user records to populate a development database. Pick the US locale, set count to 100, pick SQL format, click generate, copy the output, and paste it into your psql session:
psql mydb < fake-users.sql
One hundred users, all with realistic names, valid email format, locale-correct phone numbers, and ZIP codes that would pass a regex check. Your app’s user-related features can be exercised without creating real accounts.
Example: testing a form with international input
Your signup form claims to support international users. Generate 50 records in the NL locale — you’ll get Dutch names with diacritics (ë, ï), Dutch postal codes, and +31 equivalent phone numbers. Feed them through your form and see which ones fail validation. You’ll usually find at least one: a regex that assumed ASCII names, a phone validator that only matches US formats, a postal code check that expected 5 digits.
This is better than inventing a few Dutch names yourself because you’ll test against actual frequency patterns — you’ll see common surnames like “de Jong” and “van der Berg” that have spaces and prefixes, which are a common source of form bugs.
Example: generating a CSV for a stress test
Your data import feature needs to handle a 1000-row CSV. Pick any locale, set count to 1000, pick CSV format, generate, and save the output as a .csv file. Drop it into your import flow and watch for performance issues, encoding problems, and edge cases like quoted fields or non-ASCII characters. Using generated data guarantees consistency — you can regenerate the exact same stress test as many times as you need.
Using generated data safely
Emails use reserved test domains (example.com, example.co.uk, example.de, etc.). These domains are defined by IANA and the top-level registries as “safe for documentation and testing” — they don’t resolve to real mail servers. This matters because generated test data sometimes ends up in real systems by accident, and emails sent to these reserved domains will simply fail to deliver rather than reaching real people. Never change this to use a real domain.
Phone numbers are not real. They use correct local formats but random digits. Occasionally a generated number will happen to be a real working number — treat them as “format checking only”, not “numbers you can actually call”.
Street addresses pair real street names with random numbers. The addresses are not real — they just look like addresses. Don’t use them for any geocoding work.
What this tool does not do
It does not generate UUIDs, user IDs, or timestamps — for IDs, the UUID generator produces v4 or v7 values to any count. It does not handle company names, job titles, or business data — just personal user data. It does not support weighted name distribution (e.g., generating names at the actual frequency they appear in US census data); every name in the list is equally likely. For placeholder prose to populate the fake profiles’ “bio” field, the lorem ipsum generator is the companion.