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.
Every setting on this page is also a field in the API. POST /api/v1/tools/brp-test-data-generator, or generate_brp_test_data from an AI assistant. The same seed returns the same people, so a test suite can assert on a fixed BSN and a pipeline can rebuild its fixtures. Full parameter reference.
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.
The counts repeat until the population is full, so what matters is their size relative to each other.
bsnBurgerservicenummeraNumberA-nummerfirstNameVoornamenaffixVoorvoegsellastNameGeslachtsnaamdateOfBirthGeboortedatumgenderGeslachtsaanduidingresidenceStreetStraatnaamresidenceHouseNumberHuisnummerresidenceHouseNumberAdditionHuisnummertoevoegingresidencePostalCodePostcoderesidenceCityWoonplaatsnaamcountryOfResidenceAbroadLand verblijf buitenlanddeathDateDatum overlijdenpartnerBsnBSN partnerpartnerFirstNameVoornamen partnerpartnerLastNameGeslachtsnaam partnerpartnershipStartDateDatum sluiting verbintenispartnershipTypeSoort verbintenispartnershipEndDateDatum ontbinding verbintenispartnershipReasonReden ontbinding verbintenispreviousPartnerBsnBSN vorige partnerpreviousPartnerLastNameGeslachtsnaam vorige partnerpreviousPartnershipEndDateDatum ontbinding vorige verbintenischildOneBsnBSN kind 1childOneFirstNameVoornamen kind 1childOneDateOfBirthGeboortedatum kind 1lifeEventLife 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.
| Nr | Categorie | Historie | In this generator |
|---|---|---|---|
| 01 | Persoon | 51 | generated |
| 02 | Ouder1 | 52 | generated |
| 03 | Ouder2 | 53 | generated |
| 04 | Nationaliteit | 54 | generated |
| 05 | Huwelijk/geregistreerd partnerschap | 55 | generated |
| 06 | Overlijden | 56 | generated |
| 07 | Inschrijving | - | not generated |
| 08 | Verblijfplaats | 58 | generated |
| 09 | Kind | - | generated |
| 10 | Verblijfstitel | 60 | not generated |
| 11 | Gezagsverhouding | 61 | not generated |
| 12 | Reisdocument | 66 | not generated |
| 13 | Kiesrecht | - | 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.
| bsn | aNumber | firstName | affix | lastName | dateOfBirth | gender | residenceStreet | residenceHouseNumber | residenceHouseNumberAddition | residencePostalCode | residenceCity |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 588456317 | 4713783589 | Elske | - | d'Hondt | 19931214 | V | Julianalaan | 269 | - | 9711AA | Groningen |
| 228119856 | 2846962883 | Femke | in de | Brouwer | 19510107 | V | Burgemeester Baron van Voorst tot Voorststraat | 233 | - | 6411AA | Heerlen |
| 748568098 | 1741240786 | Marijke | - | Peters | 19991016 | V | Julianalaan | 315 | - | 6411AA | Heerlen |
| 358385337 | 3253601124 | Anna | - | Smit | 20070829 | V | Molenweg | 145 | - | 9711AA | Groningen |
| 393428849 | 6995534084 | Julia | - | van Heemskerck van Beest tot Nijenhuis | 19410207 | V | Kerkstraat | 208 | - | 5611AA | Eindhoven |
| 102965699 | 4963846481 | Maite | - | Brouwer | 19530112 | V | Beatrixstraat | 123 | - | 3011AA | Rotterdam |
| 329831422 | 1013429086 | Nienke | - | Visser | 19981103 | V | Professor Doctor Jan van Zuijlenstraat | 37 | rood | 3011AA | Rotterdam |
| 527277447 | 8140600960 | Roos | - | Schouten | 19480612 | V | Professor Doctor Jan van Zuijlenstraat | 214 | bis | 3512JE | Utrecht |
| 345973884 | 6895052718 | Thijs | - | Kuipers | 19930901 | M | Molenweg | 125 | - | 3512JE | Utrecht |
| 372207728 | 2288009377 | Sophie | de | Vos | 19551021 | V | Kerkstraat | 117 | - | 2511CW | 's-Gravenhage |
| 588766550 | 8428250929 | Aaltje | - | Visser | 19340111 | V | Schoolstraat | 33 | - | 3512JE | Utrecht |
| 116697428 | 8051554399 | Aaltje | - | Smit | 19320212 | V | Schoolstraat | 208 | - | 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.
This is one of 21 tools built on actual Dutch regulations rather than generic maths: salary and severance, notice periods and WW duration, BTW and mortgages, public holidays, AOW age, and GDPR-safe test data for Dutch systems.
See all Dutch toolsThis generator is part of a set of GDPR-safe Dutch test data tools: test BSNs, IBANs, document numbers, BRP records, and UPA files. All of them work in the browser, and several are available as a REST API and MCP server for CI pipelines and AI agents.
View the Dutch test data toolkitHow the BRP Test Data Generator Works
- 01Set the number of records, the age range and the reference year the dates are calculated against
- 02Choose how many people of each life event you need, from married and divorced to deceased with a surviving partner
- 03Pick the output: a compact overview to read, the full structure for completeness, or your own header row
- 04Check the mapping table and set any column the automatic guess did not recognise
- 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?→
Are the BSN numbers real?→
My import says no fields were matched. What now?→
What is the difference between the compact and the full output?→
What happens to columns I do not map?→
Which date format should I use?→
Can I reproduce the same file later?→
Does my data leave the browser?→
Related tools
12 suggested- 01Dutch Exam Grade Calculator - Eindexamen SE/CE Pass CheckCalculate Dutch eindexamen final grades from SE and CE marks and check the havo/vwo slaag-zakregeling. Free, instant, browser-based.
- 02Dutch School Holidays - Schoolvakanties 2026-2027 per RegionAll Dutch school holiday dates (schoolvakanties) for regio noord, midden, and zuid with a countdown to the next break. Free and browser-based.
- 03Dutch Student Finance Calculator - Studiefinanciering 2026Estimate your monthly DUO studiefinanciering: basisbeurs, aanvullende beurs, and student travel product, with official 2026 amounts. Free and instant.
- 04Dutch Doorstroomtoets Guide - Score to SchooladviesConvert a doorstroomtoets standaardscore into the matching toetsadvies and secondary school level, with an explainer of the advies process. Free, browser-based.
- 0530% Ruling Calculator - Dutch Expat Tax Benefit 2026Calculate your tax-free allowance under the Dutch 30% ruling with 2026 rules: salary norms, WNT cap, and net advantage. Free, instant, browser-based.
- 06Dutch Holiday Allowance Calculator - Vakantiegeld Gross and NetCalculate your Dutch 8% holiday allowance (vakantiegeld) and estimate the net payout after the bijzonder tarief. Free, instant, browser-based.
- 07Dutch Severance Calculator - Transitievergoeding 2026Calculate your statutory Dutch transition payment: 1/3 monthly salary per year of service, pro rata by day, with the 2026 cap. Free and browser-based.
- 08Dutch Mileage Calculator - Kilometervergoeding 2026Calculate your untaxed Dutch travel reimbursement per week, month, and year at the 2026 rate of EUR 0.25 per km. Free, instant, browser-based.
- 09Freelance Rate Calculator - Dutch ZZP Hourly RateCalculate the hourly rate you need as a Dutch freelancer to hit your target net income, with 2026 ZZP tax rules and a salary comparison. Free and browser-based.
- 10Dutch Notice Period Calculator - Opzegtermijn and Last Working DayCalculate the statutory Dutch notice period for employee or employer and the exact date your contract ends. Free, instant, browser-based.
- 11Dutch Working Days Calculator - Werkdagen Between Two DatesCount working days between two dates excluding weekends and Dutch public holidays, with the full holiday list per year. Free and browser-based.
- 12Erfbelasting Calculator 2026 - Dutch Inheritance TaxCalculate Dutch inheritance tax for 2026 with official exemptions per heir, from EUR 2,769 for a friend to EUR 828,035 for a partner.
From the blog
Further reading- Dutch Test Data: Generate Valid Test BSNs, IBANs and BRP RecordsHow to generate GDPR-safe Dutch test data: BSN numbers that pass the elfproef, IBANs with valid check digits, and BRP persoonslijst records. Free tools and API.7 min read
- Dutch Test Data from a Script: BRP and UPA Generators over API and MCPGenerate BRP/GBA persons and UPA pension declarations from your test suite, your seed script or your AI assistant. Every setting on the tool page is a field in the request, and the same seed always returns the same data.9 min read
- Your AOW Age: What Is Fixed and What Is Still a GuessHow the Dutch state pension age works, why it differs per birth date, and the difference between a legally fixed AOW age and an expected one. With a free calculator.6 min read