Test data generator
Mock users with names, contact details and addresses that pass format validation in their own country. Pick the fields, choose JSON, NDJSON, CSV or SQL, and keep the seed so CI gets the same fixture every time.
Field reference
The example values are from one Japanese profile. Non-Latin countries also fill the *_latin fields.
| Key | Description | Example |
|---|---|---|
| id | Row number | 1 |
| full_name | Full name | 石井 樹 |
| full_name_latin | Full name (Latin) | Itsuki Ishii |
| given_name | Given name | 樹 |
| family_name | Family name | 石井 |
| sex | Sex | male |
| birth_date | Date of birth | 1992-02-25 |
| age | Age | 34 |
| Email (reserved domain) | [email protected] | |
| username | Username | itsukiishii46 |
| phone | Phone | +81 90 XXXX XXXX |
| phone_status | Phone status | pattern |
| company | Company | 合同会社石井 & 近藤 |
| job_title | Job title | Forward Directives Manager |
| street_line | Street line | 岐阜市折立5-9 |
| street_line_latin | Street line (Latin) | 5-9 Oritate, Gifu-shi |
| building_number | Building number | 5-9 |
| street | Street name | 折立 |
| unit | Unit | サンライズハイム 212号室 |
| district | District / neighbourhood | 折立 |
| city | City | 岐阜市 |
| city_latin | City (Latin) | Gifu-shi |
| region | Region / state | 岐阜県 |
| region_latin | Region (Latin) | Gifu |
| postal_code | Postal code | 501-1132 |
| postal_status | Postal code status | verified |
| country_code | Country code | JP |
| country | Country | Japan |
| latitude | Latitude (locality) | 35.457 |
| longitude | Longitude (locality) | 136.734 |
| formatted | Formatted address | 〒501-1132 岐阜県 岐阜市折立5-9 サンライズハイム 212号室 |
| formatted_latin | Formatted address (Latin) | Sunrise Heim 212, 5-9 Oritate, Gifu-shi, Gifu, 501-1132 |
| quality | Coverage level | A |
| seed | Seed | fields-example |
Reproducible fixtures
Each record gets its own random stream, seeded with seed:country:index. Exporting 10 rows or 10,000 gives the same first 10 rows, and splitting the work into chunks does not change the output. Output is stable for a given data version. When the open datasets are refreshed, the version number on the data sources page changes.
Dates of birth are calculated from the day you generate, so ages are correct at export time. A fixture exported today keeps the same birth dates; only the computed age column changes if you regenerate later.
Using an export in tests
// tests/fixtures/users.json was exported with seed "ci-2026" (50 profiles, JSON)
import users from './fixtures/users.json';
test.each(users.slice(0, 10))('accepts $country_code address', async ({ full_name, street_line, city, postal_code, country_code }) => {
const res = await api.post('/customers', { name: full_name, street: street_line, city, postcode: postal_code, country: country_code });
expect(res.status).toBe(201);
});Good to know
- Will these values pass validation?
- Postcodes marked
verifiedare real codes in the right place, so postcode-to-city lookups should accept them. Street names are synthetic, so address-verification services that check streets will usually reject them. That is useful when testing failure paths. - What about phone validation?
- Numbers marked
reserved-fictionalare valid in format and reserved by regulators for fiction. Others are national patterns with X placeholders. Turn on digit filling in the single-profile tool if you need numeric values, and never dial them. - Can I use the data commercially?
- Yes, inside your own software and tests. The place data is derived from GeoNames (CC BY 4.0), so credit GeoNames if you redistribute the files. See licences.