How to Generate Realistic Fake Test Data (JSON & CSV) for Free
Populate databases, prototype UIs, and write tests with realistic fake names, emails, addresses, phone numbers, and more β exported as JSON or CSV, all in your browser.
Every developer eventually hits the same wall: you need data to test against, but using real user data is a liability, Lorem Ipsum is useless for anything beyond paragraph filler, and hand-crafting 500 test records in JSON is a way to ruin an afternoon. Fake data generators exist to solve exactly this problem β and the SoftStash Fake Data Generator does it for free, locally, with no account, no row limits, and no subscription.
This guide covers why realistic fake data matters, what the generator produces, how to use it effectively across different workflows, and how to import the output into every common database and toolchain.
Why You Cannot Use Real User Data for Testing
Using production data in development or test environments is a compliance and legal risk under multiple regulatory frameworks:
- GDPR (Europe): Article 25 requires data minimization by design. Copying real user records β names, emails, addresses β into a staging database violates this principle unless the data has been properly anonymized. A breach of that staging environment exposes real people's data.
- HIPAA (US healthcare): Protected Health Information (PHI) cannot be used in test environments without either a Business Associate Agreement or proper de-identification per the Safe Harbor or Expert Determination methods. Using real patient records in a dev database is a direct HIPAA violation.
- CCPA (California): Personal information of California residents carries specific rights and restrictions. Using real customer records in any non-production context without appropriate controls creates unnecessary risk exposure.
Beyond compliance, there are practical engineering reasons to avoid real data in tests: real data is messy in unpredictable ways (it has null fields, special characters, and Unicode that tests might not be written to handle), it changes over time (making tests non-deterministic), and it contains values that may accidentally trigger real side effects (sending emails to real addresses, charging real payment methods).
Why Lorem Ipsum Is the Wrong Tool for Data
Lorem ipsum is fine for filling text blocks in a layout mockup. It is completely wrong for testing data-driven UIs and APIs because:
- It does not stress-test real field lengths. Email addresses, phone numbers, and zip codes all have specific formats and maximum lengths. "Lorem ipsum dolor sit amet" in an email field will not reveal that your input validation is wrong, but
[email protected]will. - It does not reveal edge cases in your UI. A name like "JosΓ© GarcΓa-LΓ³pez" tests your character encoding. A company name like "O'Brien & Associates, LLC" tests your SQL escaping. "Lorem ipsum" tests neither.
- It makes your mockups and prototypes look fake in a way that matters. Stakeholders reviewing a prototype with realistic names, realistic cities, and realistic email addresses can evaluate the design properly. Placeholder text breaks the illusion and makes it harder to spot actual usability problems.
What the SoftStash Fake Data Generator Produces
The generator supports a wide range of field types across multiple categories. You select which fields to include, and each generated record contains realistic, properly formatted values for every selected field:
Personal Information
- Full name β culturally realistic first + last name combinations
- First name and last name separately (useful when your schema stores them in different columns)
- Email address β properly formatted, using the generated name as the local part
- Phone number β US format with area code
- Date of birth β generates adults between 18 and 80 years old
- Gender β male / female / non-binary
Address
- Street address β realistic house number and street name
- City β real US and international city names
- State β US states and international equivalents
- Country
- ZIP / postal code β format matches the selected country
Internet & Identity
- Username β generated from the name with numbers appended for realism
- URL β realistic personal or company website URLs
- IP address β valid IPv4 addresses in public ranges
- User agent β real browser user-agent strings from common browsers
Finance
- Credit card number β passes Luhn algorithm validation, so it will not be rejected by format validators; uses realistic card number prefixes (Visa 4xxx, Mastercard 5xxx) but is not a real card number
- IBAN β valid format for European bank account numbers
Identifiers & System Fields
- UUID β v4 UUID for database primary keys and correlation IDs
- SSN β US Social Security Number format (XXX-XX-XXXX)
- Dates and random numbers within configurable ranges
How to Use the Generator
Open /tools/fake-data. The interface gives you three controls:
- Select your fields: Check the boxes for every field type you want in the output. You can select as few as one field (just email addresses, for example) or the full set for comprehensive user records.
- Set the record count: Enter a number between 1 and 1,000. For load testing seed data, use 1,000. For a Storybook story or a design mockup, 5β10 records is usually enough.
- Choose output format: Select JSON or CSV. JSON is better for API testing and JavaScript toolchains. CSV is better for database imports, spreadsheet review, or tools like Postman.
Click "Generate." The output appears in the text area below. Use the "Copy" button to copy it to your clipboard, or "Download" to save the file locally. Generation is instantaneous for up to 1,000 records β all computation happens in your browser.
JSON Output Example
Here is a representative 3-record snippet of JSON output with personal, address, and internet fields selected:
[
{
"id": "a3f7c2e1-8b4d-4f6a-9c1e-2d5b8f3a0c7e",
"firstName": "Meredith",
"lastName": "Okafor",
"email": "[email protected]",
"phone": "(312) 554-8821",
"dateOfBirth": "1988-03-14",
"gender": "female",
"street": "2841 Birchwood Drive",
"city": "Columbus",
"state": "OH",
"zipCode": "43215",
"country": "United States",
"username": "meredith_okafor88",
"ipAddress": "74.125.224.18"
},
{
"id": "b8e2d5f1-3a9c-4e7b-8d2f-1c6a4e9b0d3f",
"firstName": "Derek",
"lastName": "Nascimento",
"email": "[email protected]",
"phone": "(415) 703-2294",
"dateOfBirth": "1995-11-02",
"gender": "male",
"street": "509 Elmwood Court",
"city": "Portland",
"state": "OR",
"zipCode": "97201",
"country": "United States",
"username": "derek_n95",
"ipAddress": "192.0.2.147"
},
{
"id": "c1d4f9a2-7e3b-4c8d-a5f2-0b9e6c1d4f8a",
"firstName": "Simone",
"lastName": "Bertrand",
"email": "[email protected]",
"phone": "(617) 889-4471",
"dateOfBirth": "1979-07-28",
"gender": "female",
"street": "77 Harborview Terrace",
"city": "Boston",
"state": "MA",
"zipCode": "02101",
"country": "United States",
"username": "simone_b79",
"ipAddress": "203.0.113.42"
}
]CSV Output Example
The same data in CSV format, ready to import into a spreadsheet, a database, or any tool that accepts delimited files:
id,firstName,lastName,email,phone,dateOfBirth,gender,street,city,state,zipCode,country,username,ipAddress
a3f7c2e1-8b4d-4f6a-9c1e-2d5b8f3a0c7e,Meredith,Okafor,[email protected],(312) 554-8821,1988-03-14,female,2841 Birchwood Drive,Columbus,OH,43215,United States,meredith_okafor88,74.125.224.18
b8e2d5f1-3a9c-4e7b-8d2f-1c6a4e9b0d3f,Derek,Nascimento,[email protected],(415) 703-2294,1995-11-02,male,509 Elmwood Court,Portland,OR,97201,United States,derek_n95,192.0.2.147
c1d4f9a2-7e3b-4c8d-a5f2-0b9e6c1d4f8a,Simone,Bertrand,[email protected],(617) 889-4471,1979-07-28,female,77 Harborview Terrace,Boston,MA,02101,United States,simone_b79,203.0.113.42Real-World Example 1: Seeding a User Database for Load Testing
Load testing a user-facing API requires a populated database. You need enough records to simulate realistic query performance, pagination behavior, and search indexing β but you cannot use real user data, and hand-crafting thousands of SQL inserts is not practical.
With the fake data generator, generate 1,000 records with all user-relevant fields selected, download as CSV, then import directly into your database:
-- PostgreSQL: import CSV directly into users table
COPY users (id, first_name, last_name, email, phone, date_of_birth, city, state, zip_code)
FROM '/path/to/fake_users.csv'
DELIMITER ','
CSV HEADER;
-- MySQL equivalent:
LOAD DATA LOCAL INFILE '/path/to/fake_users.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
-- MongoDB (using mongoimport):
mongoimport --db myapp --collection users --type csv --headerline --file fake_users.csvReal-World Example 2: Populating a Storybook Story or Design Mockup
When building a UI component β a user table, a contact card, a search results list β the data you test against shapes whether you catch real problems. A table of 10 users where one has a very long name, one has an international character in their email, and one has a city that wraps onto two lines will reveal layout bugs that a table of identical placeholder rows never would.
Generate 10β20 records as JSON, paste the output directly into your Storybook story or component fixture file:
// UserTable.stories.ts
import type { Meta, StoryObj } from '@storybook/react';
import { UserTable } from './UserTable';
// Paste generated JSON directly from SoftStash:
const fakeUsers = [
{ id: "a3f7c2e1...", firstName: "Meredith", lastName: "Okafor", email: "[email protected]", city: "Columbus" },
{ id: "b8e2d5f1...", firstName: "Derek", lastName: "Nascimento", email: "[email protected]", city: "Portland" },
// ... more records
];
const meta: Meta<typeof UserTable> = { component: UserTable };
export default meta;
export const WithData: StoryObj<typeof UserTable> = {
args: { users: fakeUsers },
};Real-World Example 3: API Integration Test Fixtures
Integration tests for an API endpoint that creates or updates user records need a reliable, deterministic set of input data. Rather than writing fixture objects by hand, generate a set of records once, save the JSON file to your test fixtures directory, and import it in your tests:
// tests/fixtures/users.json β generated by SoftStash, committed to version control
// tests/api/users.test.ts
import users from '../fixtures/users.json';
import { createUser } from '../../src/api/users';
describe('POST /api/users', () => {
it.each(users.slice(0, 10))('creates user with valid data (%s)', async (user) => {
const response = await createUser(user);
expect(response.status).toBe(201);
expect(response.body.email).toBe(user.email);
});
});Importing into Postman Collections
For API testing with Postman, generate your test records as JSON and use Postman's data file feature to run a request once per record. Save the JSON output as a file, then in Postman: open your collection runner, select the request, and attach the JSON file as the "Data" source. Postman will iterate through each record, substituting the values into your request body using {{firstName}}, {{email}}, and similar variable syntax.
This turns a manually written POST request into an automated test that runs against 100 different realistic user records in seconds β without requiring any test framework setup.
SoftStash vs. Mockaroo
Mockaroo is the most well-known online fake data generator. It is a solid tool, but it has friction that SoftStash removes entirely:
| Dimension | SoftStash | Mockaroo (Free) |
|---|---|---|
| Account required | No | Yes |
| Row limit (free) | 1,000 per generation | 1,000/day total |
| Subscription needed for more | No | Yes ($50/year) |
| Data uploaded to a server | Never | Yes (schema + data) |
| API access | N/A | Paid plans only |
| Works offline | Yes (after page load) | No |
| Output formats | JSON, CSV | JSON, CSV, SQL, Excel, and more |
| Field type variety | Common types covered | Very extensive |
If you need highly specialized field types or SQL output, Mockaroo remains valuable. For the common case β generating realistic JSON or CSV for user records β SoftStash requires no account setup, no daily limit management, and no concern about your data schema being sent to a third-party server.
Privacy: All Generation Happens Locally
Every name, email, address, and UUID the generator produces is created by JavaScript running in your browser tab. The field types you select, the number of records you request, and the output data itself are never transmitted to any server. SoftStash has no backend component involved in data generation.
This matters less when generating fake data specifically (since it is all fictional by definition), but it matters for the schema you are using it to test against. If your field selections reveal the structure of a sensitive internal system, that information stays local too.
Generate Your First Dataset Now
Whether you are seeding a load test database, populating a Storybook story, writing API test fixtures, or just demoing a feature with something that looks real β realistic fake data is the right foundation, and generating it should take 30 seconds.
Open the SoftStash Fake Data Generator, select your fields, set your record count, choose JSON or CSV, and hit Generate. No account, no row limit, no cost, nothing uploaded anywhere.
Generate Realistic Test Data in Seconds
Up to 1,000 records. JSON or CSV. Names, emails, addresses, UUIDs, credit cards, and more. Free, local, no account required.
Open Fake Data Generator βRelated tools: JSON Formatter Β· UUID Generator Β· Regex Tester Β· CSV to JSON Β· All SoftStash
Try the Tools β 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools β