The fastest method: Use Sohovi's test data generator — choose your fields (name, email, phone, address, company, date, etc.), set the row count (up to 100k), and download a CSV. No code, no account required.
For programmatic generation in pipelines, see the Python Faker approach below.
Why Realistic Fake Data Matters
"Realistic" is not optional. Tests run on dummy data like "Test User, test@test.com, 123 Main St" don't reflect real-world data quality problems:
- Real names have apostrophes (O'Brien), hyphens (Mary-Jane), and non-ASCII characters (José García)
- Real emails have various domain patterns, not all @gmail.com
- Real phone numbers have inconsistent formatting
- Real addresses have abbreviations, apartment numbers, and international formats
If your tests use perfectly uniform fake data, they won't catch the data quality problems that appear in production.
Method 1: Sohovi Test Data Generator (Browser, No Code)
- Go to /tools/test-data-generator
- Add fields: first_name, last_name, email, phone, company, city, country, signup_date
- Set row count (100 for quick tests, up to 100,000 for load testing)
- Click Generate
- Download CSV
See exactly what's wrong with your data — try Sohovi free — try Sohovi free.
The generator produces realistic-looking data with:
- Names from diverse cultural backgrounds
- Valid email formats with varied domains
- Phone numbers in a consistent format
- Realistic company names (not "Acme Corp" for every row)
- Dates distributed across a sensible range
Method 2: Python Faker Library
from faker import Faker
import csv
fake = Faker()
Faker.seed(42) # for reproducible output
fields = ['first_name', 'last_name', 'email', 'phone', 'company', 'city', 'country']
with open('customers.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
for _ in range(1000):
writer.writerow({
'first_name': fake.first_name(),
'last_name': fake.last_name(),
'email': fake.email(),
'phone': fake.phone_number(),
'company': fake.company(),
'city': fake.city(),
'country': fake.country(),
})
Install: pip install faker
Faker's strength: Built-in localization — Faker('en_IN') generates Indian names, phone formats, and addresses. Faker('de_DE') generates German data. Useful for testing international data handling.
Method 3: Intentionally Dirty Test Data
For testing data quality tools, you want data that has the problems you're trying to catch:
import random
from faker import Faker
fake = Faker()
def dirty_name():
name = fake.first_name()
# Introduce random issues
issues = [
lambda n: n.upper(), # ALL CAPS
lambda n: n.lower(), # all lowercase
lambda n: n + " ", # trailing spaces
lambda n: n, # correct
]
return random.choice(issues)(name)
def dirty_email():
email = fake.email()
issues = [
lambda e: e, # correct
lambda e: e.replace('@', ''), # missing @
lambda e: e.upper(), # uppercase
lambda e: e + " ", # trailing space
]
return random.choice(issues)(email)
This produces data that looks like a real messy export — mixed casing, trailing spaces, format errors distributed randomly.
Sohovi lets you set up validation rules for any column and instantly see which rows fall outside them — no code or SQL required.
What Fields to Generate for Common Use Cases
| Use case | Required fields | |----------|----------------| | CRM / contact list | first_name, last_name, email, phone, company, title | | E-commerce orders | order_id, customer_email, product_name, quantity, price, order_date, shipping_address | | HR / employee | employee_id, first_name, last_name, department, hire_date, salary | | Event registration | name, email, company, ticket_type, registered_at |
Frequently Asked Questions
Q: Is it OK to use a real customer's data for testing if I anonymize it? Anonymization is complicated — see How to Anonymize a CSV Before Sharing It. True anonymization is hard; generating synthetic data from scratch is safer and avoids the risk entirely.
Q: Can Faker generate data that follows relationships (customer_id in orders matches customer_id in customers)? Yes — with some additional code. Generate customers first with assigned IDs, then generate orders referencing those IDs. Faker doesn't handle referential integrity automatically — you have to orchestrate it.
Q: How do I make the data look like a specific industry (e.g., medical)? Faker has medical-specific providers for some locales, and you can extend Faker with custom providers for domain-specific field values (diagnosis codes, product SKUs, account types).
Generate up to 100,000 rows of realistic fake customer data in seconds — no code, no account, download as CSV. Try the free test data generator.