πŸ€–
Developer Tools
February 16, 20266 min readBy SoftStash Team

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.

fake datatest datamock dataJSONCSVdeveloper tools

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).

The safer default: Generate realistic fake data for every non-production environment. It is structurally valid, never identifiable, safe to commit to version control, and reproducible. Real data in dev/test environments is a liability by default.

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:

  1. 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.
  2. 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.
  3. 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.42

Real-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.csv

Real-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:

DimensionSoftStashMockaroo (Free)
Account requiredNoYes
Row limit (free)1,000 per generation1,000/day total
Subscription needed for moreNoYes ($50/year)
Data uploaded to a serverNeverYes (schema + data)
API accessN/APaid plans only
Works offlineYes (after page load)No
Output formatsJSON, CSVJSON, CSV, SQL, Excel, and more
Field type varietyCommon types coveredVery 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.

Fake data vs. data anonymization: These are separate tools for separate purposes. A fake data generator creates fictional records from scratch β€” nothing is based on real individuals. A data anonymization tool takes real records and transforms them to remove identifying information while preserving statistical properties. If you have real user data that you need to use in a test environment, anonymization is the appropriate tool (look at tools like ARX, Amnesia, or PostgreSQL's pg_anonymizer). If you need test data from scratch and have no real data to base it on, a fake data generator like this one is exactly right.

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 β†’