BRP Test Data Generator

Generate fictional person records in the category structure of the Dutch Basisregistratie Personen: 01 persoon, 02 and 03 ouders, 04 nationaliteit, 05 huwelijk of partnerschap, 06 overlijden, 08 verblijfplaats, 09 kind, plus the historie categories 55 and 58. Choose the life events you need, then export with the generator's own column names or paste the header row of the system you are feeding so the file arrives with names it already knows. Everything runs in your browser and all data is fictional.

Testing a Dutch pension administration? BRP delivers the person, and the employer delivers the employment through UPA. The UPA File Generator builds the matching Uniforme Pensioenaangifte files, with the same kind of life events.

Records
Seed
Reference year
Youngest age0
Oldest age95
Unusual names15%
Unusual street names15%
With a voorvoegsel25%
House number addition20%
Date format
Maximum children2

The counts repeat until the population is full, so what matters is their size relative to each other.

Single, no events
Married
Registered partnership
Divorced
Widowed
Remarried
Deceased
Deceased, with partner and child
Minor
Close to retirement
Lives abroad
Moved recently
Confidential (geheimhouding)
Data under investigation
No fixed address
Output mode
Delimiter
bsnBurgerservicenummer
aNumberA-nummer
firstNameVoornamen
affixVoorvoegsel
lastNameGeslachtsnaam
dateOfBirthGeboortedatum
genderGeslachtsaanduiding
residenceStreetStraatnaam
residenceHouseNumberHuisnummer
residenceHouseNumberAdditionHuisnummertoevoeging
residencePostalCodePostcode
residenceCityWoonplaatsnaam
countryOfResidenceAbroadLand verblijf buitenland
deathDateDatum overlijden
partnerBsnBSN partner
partnerFirstNameVoornamen partner
partnerLastNameGeslachtsnaam partner
partnershipStartDateDatum sluiting verbintenis
partnershipTypeSoort verbintenis
partnershipEndDateDatum ontbinding verbintenis
partnershipReasonReden ontbinding verbintenis
previousPartnerBsnBSN vorige partner
previousPartnerLastNameGeslachtsnaam vorige partner
previousPartnershipEndDateDatum ontbinding vorige verbintenis
childOneBsnBSN kind 1
childOneFirstNameVoornamen kind 1
childOneDateOfBirthGeboortedatum kind 1
lifeEventLife event (not a BRP field)

The Basisregistratie Personen holds a person as a persoonslijst split into numbered categories. The history of a category is numbered fifty higher, so an earlier partnership sits in 55 and a previous address in 58. Files exported from a BRP system usually carry those numbers as markers between the column blocks, which is how you can tell where one category ends and the next begins.

NrCategorieHistorieIn this generator
01Persoon51generated
02Ouder152generated
03Ouder253generated
04Nationaliteit54generated
05Huwelijk/geregistreerd partnerschap55generated
06Overlijden56generated
07Inschrijving-not generated
08Verblijfplaats58generated
09Kind-generated
10Verblijfstitel60not generated
11Gezagsverhouding61not generated
12Reisdocument66not generated
13Kiesrecht-not generated

Which version. Category numbering follows the Logisch Ontwerp BRP published by RvIG. It is unchanged across the 4.x releases and the later 20xx.Qn releases, so this generator is not tied to a single one. The standard is the Logisch Ontwerp BRP, published by RvIG.

bsnaNumberfirstNameaffixlastNamedateOfBirthgenderresidenceStreetresidenceHouseNumberresidenceHouseNumberAdditionresidencePostalCoderesidenceCity
5884563174713783589Elske-d'Hondt19931214VJulianalaan269-9711AAGroningen
2281198562846962883Femkein deBrouwer19510107VBurgemeester Baron van Voorst tot Voorststraat233-6411AAHeerlen
7485680981741240786Marijke-Peters19991016VJulianalaan315-6411AAHeerlen
3583853373253601124Anna-Smit20070829VMolenweg145-9711AAGroningen
3934288496995534084Julia-van Heemskerck van Beest tot Nijenhuis19410207VKerkstraat208-5611AAEindhoven
1029656994963846481Maite-Brouwer19530112VBeatrixstraat123-3011AARotterdam
3298314221013429086Nienke-Visser19981103VProfessor Doctor Jan van Zuijlenstraat37rood3011AARotterdam
5272774478140600960Roos-Schouten19480612VProfessor Doctor Jan van Zuijlenstraat214bis3512JEUtrecht
3459738846895052718Thijs-Kuipers19930901MMolenweg125-3512JEUtrecht
3722077282288009377SophiedeVos19551021VKerkstraat117-2511CW's-Gravenhage
5887665508428250929Aaltje-Visser19340111VSchoolstraat33-3512JEUtrecht
1166974288051554399Aaltje-Smit19320212VSchoolstraat208-2511CW's-Gravenhage

Showing the first 12 rows and 12 columns. The download contains all 50 rows and 28 columns.

Person test data in the BRP category structure

The Basisregistratie Personen stores a person as a persoonslijst split into numbered categories: 01 persoon, 02 and 03 ouders, 04 nationaliteit, 05 huwelijk of geregistreerd partnerschap, 06 overlijden, 07 inschrijving, 08 verblijfplaats and 09 kind, with the historie of a category numbered fifty higher, so 55 for an earlier partnership and 58 for a previous address. Systems that consume BRP data follow that shape, and test data that does not follow it exercises the wrong paths.

Every BSN passes the elfproef and never starts with a zero, so an importer cannot read it as a number and drop the first digit. A-nummers are ten digits. Municipality codes, country codes, gender M and V, partnership type H and P, and dissolution reason O and S all use the values the registration itself uses. Dates default to yyyymmdd, which is what most BRP exports carry.

Column names differ per system, which is the usual reason an import is rejected with nothing matched. Paste the header row of a file the target system already accepts and the generator maps its own fields onto those names, guessing the obvious ones and leaving the rest for you to set. Placeholder columns stay empty rather than disappearing, so the column count stays exactly as the target expects.

The CSV is comma separated with CRLF line endings, no byte order mark and quotes only where a value needs them, which is what importers expect. The Excel option adds a byte order mark and a sep= line, which makes Excel split the columns in any language version but breaks strict parsers, so use it only for reading. Everything runs in your browser and nothing is uploaded.

How the BRP Test Data Generator Works

  1. 01Set the number of records, the age range and the reference year the dates are calculated against
  2. 02Choose how many people of each life event you need, from married and divorced to deceased with a surviving partner
  3. 03Pick the output: a compact overview to read, the full structure for completeness, or your own header row
  4. 04Check the mapping table and set any column the automatic guess did not recognise
  5. 05Download the CSV, or the Excel variant if you only want to read it

Getting a BRP Import Accepted the First Time

Almost every rejected import comes down to column names rather than the file format. Take a file the target system already accepts, paste its first line into the header field, and let the generator produce the same columns in the same order. Leave placeholder and unused columns mapped to nothing so they stay empty instead of disappearing, because many importers check the column count. Then start small, with ten records and no unusual names, and only add edge cases once a clean file is accepted.

When to Use the BRP Test Data Generator

Use it when a system consumes person data from the Basisregistratie Personen and you need a realistic population to test it: pension administrations, insurers, municipalities, healthcare and any chain test where a death, a marriage or a move has to travel through several systems.

Common Use Cases

  • Life event testing: death with a surviving partner and a minor child, marriage, divorce, remarriage and moving abroad in one population
  • Import testing: match the header of a target system and see the file accepted instead of rejected
  • Correspondence testing: long surnames, apostrophes and voorvoegsels show how letter templates and address labels hold up
  • Edge case testing: confidential records, records under investigation and people without a fixed address
  • Volume testing: up to 5,000 person records in one file

Expert Tips

  • Note the seed in your test report so the same population can be regenerated later
  • Map placeholder columns to nothing rather than removing them, so the column count stays what the target expects
  • Turn the Excel option off for anything you import, it adds a sep= line that strict parsers read as data
  • Raise the share of unusual names once a clean file is accepted, that is where letter templates break

Frequently Asked Questions

What is a BRP persoonslijst?
It is how the Dutch Basisregistratie Personen holds one person: a set of numbered categories rather than a flat record. 01 is the person, 02 and 03 the parents, 04 nationality, 05 marriage or registered partnership, 06 death, 07 registration, 08 residence and 09 children. A category numbered fifty higher holds the history of that category, so 55 is an earlier partnership and 58 a previous address.
Are the BSN numbers real?
No. They are random numbers that satisfy the elfproef, which is what validation checks. They are not issued to any person. They also never start with a zero, because a spreadsheet or an importer reads such a value as a number and silently drops the first digit, after which it is no longer a valid BSN.
My import says no fields were matched. What now?
That message almost always means the column names are not in the target system's vocabulary, not that the file is malformed. Switch the output mode to match your own header row, paste the first line of a file that system does accept, and the generator will produce those exact column names in that exact order.
What is the difference between the compact and the full output?
Compact gives a short overview of about thirty columns: who the person is, where they live, the partner, an earlier partner, the first child and the life event the record was generated for. It is the version you scan yourself or hand to a colleague. Full structure writes every field the generator knows, across all the categories, for when the receiving system wants completeness. Both hold exactly the same people.
What happens to columns I do not map?
They stay in the file and are written empty. That matters, because many importers check the number of columns, and placeholder or unused columns are part of the expected layout even when they carry no data.
Which date format should I use?
yyyymmdd is the default because that is what most BRP exports carry, so 11 March 1995 is written as 19950311. ISO and Dutch notation are available for systems that expect them.
Can I reproduce the same file later?
Yes. The seed plus the settings fully determine the output, so noting the seed in your test report is enough to regenerate exactly the same records.
Does my data leave the browser?
No. Generation runs entirely in JavaScript on your own machine, including the header row you paste. Nothing is uploaded and the tool works offline once the page has loaded.

Related tools

12 suggested