Free tool

Mock data generator

Make fake test data in your browser: add fields such as names, emails, UUIDs, dates, prices and statuses, then get up to 10,000 rows as JSON, NDJSON, CSV or SQL INSERT statements. Start from a preset, or build your own schema.

Free · no sign-up · runs in your browser, nothing is uploaded

Fields (8)
Presets:
Use a dot in a name (address.city) to nest it in JSON.
Format
Output

Generating…

Field types

TypeExampleOptions
Row number1, 2, 3Start value
UUID v4b3f1c2d4-…-4…none (always unique)
First, last, full namePriya PatelNames from many countries, some with accents
Emailpriya.patel12@example.comBuilt from the same row's name, ASCII only
Phone+1-415-555-0142Fictional 555-01xx numbers
City, country, codeLisbon, Portugal, PTCity and country match in each row
URL, URL pathhttps://example.com/…, /nisl/augue-12example.com, .org and .net only
IPv4 / IPv6203.0.113.7 / 2001:db8:…Documentation ranges only
Date, date-time, Unix time2025-03-14T09:26:53ZFrom and to dates (UTC)
Integer, decimal42, 19.99Min, max, decimal places
BooleantruePercent true
One of a listpaidValues with weights: paid:6, refunded:1
Word, sentence, paragraphLorem ipsum dolorLorem ipsum filler

Every field can be partly null (set a percent) and most can be unique. If a unique field runs out of values, for example 50 unique integers between 1 and 10, the tool says which field and why instead of looping. For one-off IDs, the UUID generator makes v4, v7 and ULIDs in bulk.

Test data that cannot reach real people

Random emails and phone numbers can belong to someone. If a test sends a welcome email or an SMS by mistake, it goes to a stranger. This generator only uses values that are reserved for examples:

KindValues usedReserved by
Email domainsexample.com, example.org, example.netRFC 2606
Phone numbers555-0100 to 555-0199NANPA, for fictional use
IPv4192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24RFC 5737
IPv62001:db8::/32RFC 3849

RFC 2606 also reserves the .test, .example, .invalid and .localhost top-level domains, which are handy for fake hostnames in configs.

JSON, NDJSON, CSV or SQL?

  • JSON is one array of objects. Good for API mocks, fixtures and front-end props. Dot names become nested objects.
  • NDJSON (JSON Lines) has one JSON object per line. Tools like jq, BigQuery and Elasticsearch's bulk API read it line by line, so large files do not have to fit in memory.
  • CSV follows RFC 4180: values with commas, quotes or line breaks are quoted, inner quotes are doubled, lines end in CRLF and nulls are empty. Opens in Excel and Google Sheets. Pick a semicolon, tab or pipe delimiter if your import expects one. To reshape it, use CSV to JSON or the CSV viewer.
  • SQL writes multi-row INSERT statements, with an optional CREATE TABLE. Strings are escaped by doubling single quotes; MySQL also gets backslashes escaped, and SQL Server gets N'…' for non-ASCII text. Date-times are written as UTC in the form each database accepts: 2024-05-01 10:20:30 for MySQL, without the Z for SQL Server.
CREATE TABLE "users" (
  "id" INTEGER NOT NULL PRIMARY KEY,
  "email" VARCHAR(255) NOT NULL,
  "is_active" BOOLEAN NOT NULL
);

INSERT INTO "users" ("id", "email", "is_active") VALUES
  (1, 'olivia.garcia1@example.com', TRUE),
  (2, 'kpark2@example.org', FALSE);

Generate fake data in code

For data you regenerate in CI or need in the millions, script it. Seed the generator so test runs are repeatable.

// JavaScript: @faker-js/faker
import { faker } from '@faker-js/faker';
faker.seed(42);
const users = faker.helpers.multiple(() => ({
  id: faker.string.uuid(),
  name: faker.person.fullName(),
  email: faker.internet.email({ provider: 'example.com' }),
  createdAt: faker.date.past(),
}), { count: 100 });

# Python: Faker
from faker import Faker
Faker.seed(42)
fake = Faker()
users = [{"name": fake.name(), "email": fake.email(), "city": fake.city()} for _ in range(100)]

-- PostgreSQL: a million rows without leaving the database
INSERT INTO users (id, email, created_at)
SELECT gen_random_uuid(),
       'user' || g || '@example.com',
       now() - random() * interval '365 days'
FROM generate_series(1, 1000000) AS g;

Faker for JavaScript builds emails on real free-mail domains such as gmail.com unless you pass a provider, so set it to example.com if your tests can send mail. Python Faker's fake.email() uses example domains by default (safe=True).

Tips for useful test data

  • Add nulls on purpose. Real data has missing phones and empty companies. A 10-20% null rate on optional fields finds the UI and query bugs that perfect data hides.
  • Weight your statuses. Most orders are paid and a few are refunded. Weights like paid:6, pending:2, refunded:1 make charts and filters look like production.
  • Test the edges. Include names with accents and apostrophes (the name lists have both), the minimum and maximum of each range, and at least one long text field.
  • Never copy production data into dev. Fake data avoids leaking personal data into laptops, logs and screenshots.

Need a real backend for the data? DevHunt lists database tools and API tools. For placeholder prose rather than rows, use the lorem ipsum generator.

FAQ

What is mock data?+

Mock data is fake data shaped like your real records: users with names and emails, orders with totals and dates. You use it to fill a dev database, build a UI before the API is ready, write tests or show a demo, without touching real customer data.

How do I generate fake data for testing?+

Add a field for each column, pick its type (name, email, date, number, one of a list), set the number of rows and choose JSON, CSV or SQL. The output updates as you edit. In code, the Faker library does the same in JavaScript and Python, as shown above.

Can I get the same data again?+

Yes. The data comes from a seeded generator, so the same fields, row count and seed always give the same rows. The schema and seed are kept in the page URL; bookmark or share the link to reproduce the data. Press New data for a different seed.

Are the emails and phone numbers real?+

No, and they are picked so they cannot be. Emails use example.com, example.org and example.net, which RFC 2606 reserves for documentation. Phone numbers use 555-0100 to 555-0199, which NANPA keeps for fictional use. IP addresses come from the ranges set aside for documentation.

How many rows can I generate?+

Up to 10,000 per run, for free and without an account. Everything is generated in your browser. For more, run it a few times with different seeds, or use generate_series in PostgreSQL or a Faker script (see the code section).

How do I make nested JSON?+

Put a dot in the field name. address.city and address.country become {"address": {"city": …, "country": …}} in JSON and NDJSON. In CSV the header stays address.city, and in SQL the column becomes address_city.

Can I import the SQL into my database?+

Yes. Pick your dialect (PostgreSQL, MySQL, SQLite or SQL Server) so identifiers are quoted the right way, booleans are written the right way and CREATE TABLE uses matching column types. Rows are split into INSERT statements of at most 1,000 rows, the SQL Server limit for one VALUES list.

Sources: RFC 2606 (reserved domain names) · RFC 5737 (IPv4 documentation ranges) · RFC 3849 (IPv6 documentation prefix) · NANPA: 555 line numbers · RFC 4180 (CSV) · JSON Lines · Microsoft Learn: Table Value Constructor · PostgreSQL: generate_series · Faker (JavaScript) · Faker (Python). Checked 2026-10-31.