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
{
"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.
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.
{
"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.
- 01
No API key required
Start generating right away — the free tier is metered per IP address. Add an API key when you want your own monthly tokens rather than sharing a pool with everyone on that IP.
- 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.
- 03
Seed your app
Drop the JSON into fixtures, factories, or demo databases. Everything validates — nothing is real.
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 addonimport { 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 plus the United States and Canada, seeded on request.
Explore the MCP server{
"mcpServers": {
"real-fake-data": {
"command": "npx",
"args": ["-y", "@przeslijmi/real-fake-data-mcp"]
}
}
}
// then: "Generate 3 female Polish people."From the blog
Notes on realistic test data
-
Why we dropped monthly plans for pay-per-use
We used to sell monthly subscriptions with tiers. We replaced them with prepaid credits that never expire. The reason was not the money — it was that tiers forced us to build a product with features deliberately withheld.
-
Seeding a car workshop database, one field at a time
Building the app that runs a German car workshop? You need customers who own cars, cars with plausible plates, and repair orders that belong to the right vehicle. Here is that database, built up one step at a time.
-
Introducing extreme mode: correct data in a hostile encoding
Correct data, presented in the most disturbing way a real system ever sees it — untrimmed whitespace, invisible characters, homoglyphs, and right-to-left overrides. Does your pipeline survive it?