Fake Test Data Generator

Generate rows of realistic-looking but entirely made-up test data — names, emails, phones, addresses — for QA and database testing. Nothing here belongs to a real person.

241 views

All data below is randomly fabricated for testing purposes only — it does not describe any real person.

Why Testing With Real User Data Is a Bad Practice

Populating a development database by exporting a slice of the production customer table feels convenient, and it is one of the most common ways companies accidentally leak personal data. Under regulations like the EU's GDPR and Turkey's KVKK, personal data is supposed to be processed only for the specific purpose it was collected for and protected with security appropriate to that purpose — a staging or dev environment is routinely far less locked-down than production, often reachable by every engineer, sometimes even logged or backed up to less secure storage, or accidentally exposed if a staging URL is indexed or a test server is misconfigured. A real customer's name, email, phone number, and address sitting in a database that was never audited for that level of exposure is a textbook compliance and security liability, and "we used production data in a demo" is a recurring line in real data-breach postmortems. Fabricated data sidesteps the entire problem: there is no real person to notify, no consent basis to justify, and no breach to report if a test database leaks, because the rows never corresponded to anyone.

Beyond compliance, fabricated test data is also simply more useful for QA. Real production data reflects whatever your existing users happen to look like — it will not reliably contain the edge cases testers actually need, such as names with unusual characters, empty optional fields, maximum-length strings, or an even spread across every input a form accepts. Synthetic generation lets you control volume and shape precisely: this tool lets you request between 1 and 100 rows and pick exactly which fields populate, which is a workflow real customer exports were never designed for.

How the Randomness Works

Every value here — which name, which city, which digits in a phone number — is chosen using crypto.getRandomValues(), the Web Crypto API's cryptographically secure random number source, rather than Math.random(). To be precise about why: the actual security stakes of picking a fake name for a test row are close to zero, so this is not a security requirement in the way it would be for, say, generating a password or a session token. The reason this tool still uses it is to demonstrate the correct default habit — Math.random() is a fast, non-cryptographic pseudorandom generator whose output can, in principle, be predicted or reproduced across environments, while crypto.getRandomValues() draws from the operating system's secure entropy source and is the right tool any time randomness needs to be unpredictable, so reaching for it by default avoids the mistake of using Math.random() in a context — like generating a discount code or reset token — where predictability would actually matter. To avoid modulo bias (a subtle skew that makes some values very slightly more likely than others when the random range does not divide evenly into the output space), each pick uses rejection sampling: values that would introduce that skew are discarded and re-drawn.

  • Separate name and city pools per language: choosing "Turkish" data generates from a dedicated pool of Turkish given names, surnames and cities; choosing "English" draws from a separate English-language pool, so the data reads as locale-consistent rather than a mix of unrelated naming conventions.
  • Fake domains only: generated emails always use example.com, example.org or example.net, the domains formally reserved by RFC 2606 for documentation and testing use — never a real, registrable domain that could accidentally route mail somewhere.
  • CSV export is RFC 4180-formatted: fields are comma-separated and quoted, so values containing commas, quotes or line breaks still parse correctly in Excel, Google Sheets, or any standards-compliant CSV importer.
  • Entirely local: generation happens in your browser; nothing is sent to a server, logged, or stored anywhere beyond your own download.

Frequently Asked Questions

Is any of this data real or traceable to a real person?

No. Every row is assembled by randomly combining values from fixed name, city, company and domain pools built specifically for this tool. There is no lookup against any real person, customer list, or external data source — any resemblance to a real individual is coincidental.

Why does the tool use crypto.getRandomValues() instead of Math.random()?

The security stakes here are low, but the tool deliberately models the correct default habit: crypto.getRandomValues() draws from the operating system's secure entropy source and avoids the predictability risk that Math.random() carries, so using it by default builds the right instinct for contexts — like tokens or codes — where predictability would actually be a problem.

Can I use this to fill a production or shared database?

This tool is built for QA, staging, and local development testing — not for populating anything customer-facing. Since the values are randomly generated, duplicate names or emails across separate generation runs are possible and not checked for.

Why are the generated email domains always example.com or similar?

example.com, example.net and example.org are domains permanently reserved by RFC 2606 specifically for documentation and testing, guaranteed never to be assigned to a real organization — using them avoids the small but real risk of accidentally generating a fake address at a domain someone actually owns.

What format is the CSV download in?

It follows RFC 4180: comma-separated fields, each value wrapped in double quotes with any internal quotes escaped, and CRLF line endings — the format Excel, Google Sheets and virtually every database import tool expect by default.

Comments

No comments yet — be the first to write one!

Similar Tools