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.

Countries
United StatesAUnited KingdomAGermanyAJapanA

Records are spread evenly across the selected countries.

Records
How many
Fields
Person
Address
Record
Format

A JSON array of flat objects. Missing values are null.

TypeScript type for these fields
/** Synthetic test record (seed …) */
interface TestRecord {
  id: number;
  full_name: string | null;
  email: string | null;
  phone: string | null;
  birth_date: string | null;
  street_line: string | null;
  unit: string | null;
  district: string | null;
  city: string | null;
  region: string | null;
  postal_code: string | null;
  country_code: string | null;
  country: string | null;
  postal_status: string | null;
}
50 profiles · 14 fields · JSON

Field reference

The example values are from one Japanese profile. Non-Latin countries also fill the *_latin fields.

KeyDescriptionExample
idRow number1
full_nameFull name石井 樹
full_name_latinFull name (Latin)Itsuki Ishii
given_nameGiven name樹
family_nameFamily name石井
sexSexmale
birth_dateDate of birth1992-02-25
ageAge34
emailEmail (reserved domain)itsuki_ishii@example.org
usernameUsernameitsukiishii46
phonePhone+81 90 XXXX XXXX
phone_statusPhone statuspattern
companyCompany合同会社石井 & 近藤
job_titleJob titleForward Directives Manager
street_lineStreet line岐阜市折立5-9
street_line_latinStreet line (Latin)5-9 Oritate, Gifu-shi
building_numberBuilding number5-9
streetStreet name折立
unitUnitサンライズハイム 212号室
districtDistrict / neighbourhood折立
cityCity岐阜市
city_latinCity (Latin)Gifu-shi
regionRegion / state岐阜県
region_latinRegion (Latin)Gifu
postal_codePostal code501-1132
postal_statusPostal code statusverified
country_codeCountry codeJP
countryCountryJapan
latitudeLatitude (locality)35.457
longitudeLongitude (locality)136.734
formattedFormatted address〒501-1132 岐阜県 岐阜市折立5-9 サンライズハイム 212号室
formatted_latinFormatted address (Latin)Sunrise Heim 212, 5-9 Oritate, Gifu-shi, Gifu, 501-1132
qualityCoverage levelA
seedSeedfields-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 verified are 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-fictional are 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.