Looks real. Is 100% synthetic.

Real Fake Data Generators

by real-fake-data.com

A developer-friendly API for realistic but valid synthetic test data — almost any data with correct checksums, edge cases and validation variants. Safe for staging, demos, seeding, and tests.

$ curl https://api.real-fake-data.com/v1/email?domainCategory=regional

GET /v1/person-name200 OK
{
  "data": {
    "name": "Zuzana",
    "surname": "Nováková",
    "initials": "ZN",
    "sex": "f",
    "country": "sk"
  },
  "meta": {
    "seed": 7421,
    "generatorId": "any.person-name",
    "sex": "f"
  }
}

Every field is valid by format — and tied to no real person.

One request. The whole database.

Real Fake Database

by real-fake-data.com

Seed an entire nested dataset in a single call — users with their tasks, orders with their line items, posts dated after the author joined. You describe the shape; POST /v1/compose returns the whole tree, valid and reproducible.

POST /v1/composeBody
{
  "seed": 42,
  "time": {
    "start": "2026-05-01T00:00:00Z",
    "formats": {
      "day": "yyyy-MM-dd"
    }
  },
  "shared": {
    "restaurant": {
      "generator": "fr.company-name"
    }
  },
  "shape": {
    "restaurant": "$shared.restaurant.value",
    "menu": {
      "$count": 3,
      "dishId": "$generator.any.nanoid.value",
      "name": "$generator.fr.offering.offeringName",
      "price": "$generator.fr.offering.price",
      "currency": "$generator.fr.offering.currency"
    },
    "customers": {
      "$count": 3,
      "customerId": "$generator.any.uuid.value",
      "name": "$generator.fr.person-name.name",
      "email": "$generator.fr.email.value",
      "orders": {
        "$count": [
          1,
          2
        ],
        "orderId": "$generator.any.uuid.value",
        "placedAt": "$date.-2mo~+0d.day",
        "items": {
          "$count": 2,
          "dish": "$generator.fr.offering.offeringName",
          "price": "$generator.fr.offering.price"
        }
      }
    }
  }
}

One French restaurant, its menu, and customers with their orders — the whole shop from a single request. Scroll the response to see the full tree.

Test data you can actually trust

Faker libraries produce garbage that fails validation. Real Fake Data produces data that is correct by format and safe by design.

Valid checksums

National IDs and tax numbers pass real checksum validation, so they flow through your validators exactly like production data.

Real-world geography

Addresses are built from actual cities, streets, and postal-code prefixes — believable in any demo or screenshot.

Edge cases on demand

Flip a flag and a generator returns only edge cases — boundary values, unusual-but-valid records, and deliberately invalid checksums — so you can test how your product handles the hard inputs.

Deterministic & seedable

Pass a seed and get the same record every time. Reproducible fixtures for tests and stable demo environments.

Drop it into your stack

Pull valid records over REST or straight from your tests — no glue code required.

REST API + OpenAPI docs

A clean REST interface with a full OpenAPI spec, typed clients, and predictable JSON responses.

Playwright addon

Skip the HTTP calls — drop in the Playwright addon and pull seeded, valid records straight into your tests with one line per record.

MCP server

Connect an AI assistant — Claude, Cursor, any MCP client — and generate valid records conversationally, with no glue code.

From single records up to full database seed

Pull one record at a time, or POST a shape to /v1/compose and get a whole nested dataset — users, their orders, every line item — valid and reproducible in one call.

How it works

Three steps from zero to a fully seeded test environment.

  1. 01

    No API key required

    Start generating right away — the free tier is rate-limited per IP address. Add an API key only when you need higher limits on a paid plan.

  2. 02

    Pick how you connect

    Call the REST endpoint directly, drop in the Playwright addon for one-line fixtures, or connect the MCP server to your AI assistant. More interconnectors are on the way.

  3. 03

    Seed your app

    Drop the JSON into fixtures, factories, or demo databases. Everything validates — nothing is real.

Connect via
example.ts
const response = await fetch(
  "https://api.real-fake-data.com/v1/email?domainCategory=regional"
);
const { data } = await response.json();

console.log(data.value); // "anna.wojcik@wp.pl"

Ready to generate?

Try it live in the playground — no signup required.

Playwright addon

Realistic fixtures, one line per record

Drop the @przeslijmi/real-fake-data-playwright fixture into your tests and pull valid people, addresses, national IDs, and IBANs with a single call. Seeded by default — a failing test replays the exact same data, so repros are trivial.

Explore the Playwright addon
example.spec.ts
import { test, expect } from '@przeslijmi/real-fake-data-playwright';

test.use({ realFakeData: { baseUrl } });

test('registers a customer', async ({ page, fakeData }) => {
  const person = await fakeData.plPerson({ sex: 'f' });

  await page.getByLabel('PESEL').fill(person.pesel);
  await page.getByLabel('Surname').fill(person.surname);
});

MCP server

Generate test data from your AI assistant

Connect the @przeslijmi/real-fake-data-mcp server to Claude, Cursor, or any MCP client and ask for valid people, addresses, national IDs, and companies in plain language — across 27 EU countries, seeded on request.

Explore the MCP server
claude_desktop_config.json
{
  "mcpServers": {
    "real-fake-data": {
      "command": "npx",
      "args": ["-y", "@przeslijmi/real-fake-data-mcp"]
    }
  }
}

// then: "Generate 3 female Polish people."