{ "diy" :

Rolling your own against using an API

Short answer

Dutch Business Register data is public and the KVK publishes a free open dataset with basic company data, so rolling your own is a real option, especially for one-off or low volume work. The work is not in the first version, it is in the upkeep: VIES is SOAP and goes offline per member state, addresses need normalising, legal forms need mapping, and a cache has to stay fresh. Scraping the KVK website instead of using the API is also a terms-of-service problem.

cURL
# DIY: KVK call, then VIES SOAP,
# then mapping, then caching.

# Or one call:
curl ".../v1/lookup/68750110" \
  -H "Authorization: Bearer KEY"

{
  "vat": {
    "valid": true,
    "validatedAt": "2026-08-22"
  }
}

Building it yourself is a serious option

This is not a straw man to knock down. Dutch register data is public, the KVK publishes a free open dataset with basic company data, and there is a documented API. For a one-off enrichment of a file, a migration, an analysis or an internal tool, rolling your own is often simply the right call. You do not need anyone selling you a subscription for that.

The picture changes the moment it becomes something that keeps running.

PieceRolling your ownKVKBase
Fetch a company profileKVK API or open datasetone call
Merge search, profile and branchyourself, several callsin the response
Derive the VAT numberyourself, valid for BV and NV onlybuilt in
VIES checkyourself, SOAP, retries and cachelive in the response
Address normalisationyourselfstructured fields
Legal form mappingyours to maintainlegalForm
Cache refreshyour schedule, your problem24 hours on active companies
Monthly costinfrastructure plus hoursfree, EUR 19 or EUR 49

Scraping against the API

Briefly, and without the sermon. The data is public, but the KVK website has terms of use and automated extraction generally falls outside them. There is an API and an open dataset sitting right next to it that serve the same purpose. And if you are weighing it anyway: a scraper is also the weakest of the three technically, because any frontend change breaks your parser and you find out when your data goes quiet.

Using the open dataset is not scraping and does not carry that problem.

Where the hours actually go

Four places, in order of how often they surprise people.

VIES. The VAT number is not in the Business Register. You derive it as NL + KVK number + B01, and that only holds for BV and NV. Then it has to be checked against VIES, which is SOAP. VIES is frequently slow and member states go offline independently of each other. So you need retries, a timeout that does not hang your checkout, and a cache with its own validity window.

The gotcha that most often breaks in production: “invalid” and “VIES was unreachable” are not the same thing. Map both onto a single false and you will block legitimate customers during an outage with no idea why. Keep the reason separately, even if your UI only does one thing with it. The background is in the guide to VAT number validation with VIES.

Addresses. Street, house number and addition do not arrive clean in one field. Additions like A, bis, 2-hoog and zwart have to stay separate from the house number, otherwise your address stops matching anything later. We return houseNumber and houseNumberAddition as separate fields for exactly that reason.

Legal forms. The register notations are not what you want to show in your UI and not what you want in your invoicing logic. You build a mapping table, and that table is never finished.

Refreshing. A copy of the open dataset is a snapshot by definition. Registrations, relocations and name changes keep going. You need an import schedule, a way to know how old your copy is, and a decision about what to do with a KVK number you do not have yet. That is maintenance, not construction.

For the validation rules on the KVK number itself you do not need to invent anything, they are in the post on KVK number validation and the checksum.

Who should roll their own

Build it yourself if it is one-off, if it stays internal, if your volume is low enough that an outage hurts nobody, or if you already have a team maintaining integrations like this. That is not a second-best answer, it is the cheapest solution for that situation.

If you end up with us, it is because this sits in a customer path and has to keep working without anyone looking at it weekly: one call for company plus VAT, or the embeddable widget if you would rather write no backend at all. And if you do build it yourself, at least carry the distinction between invalid and unreachable through. That is the mistake that costs the most money.

Frequently asked

Am I allowed to scrape the KVK website?
The data is public, but the website has terms of use and automated extraction generally falls outside them. There is also an API and an open dataset that serve the same purpose without that exposure. Practically, scraping is the fragile option too, because every frontend change breaks your parser.
Is building it yourself cheaper?
In euros per lookup, almost always, because the open dataset is free and the KVK API costs EUR 6.40 per month plus EUR 0.02 per paid profile query. In engineering and maintenance hours, rarely, unless you run it once and never touch it again.
What is the hardest part to build yourself?
VIES. It is SOAP, it is frequently slow, and member states go offline independently. You need retries, a cache with its own validity window, and an explicit distinction between invalid and unreachable. That last one is almost always forgotten and blocks legitimate customers.
When is rolling your own the right call?
For one-off work, a migration, an analysis, or an internal tool with a handful of users. Also when you already have a team carrying integrations and wanted your own contract with the KVK anyway. For a product form that customers pass through daily, the maintenance load is usually the deciding factor.
Can I just load the open dataset into my database?
For basic company data you can, but then refreshing is your problem. Registrations, deregistrations, relocations and name changes keep happening, so you need an import schedule and a way to know how old your copy is. A frozen copy of the register becomes unusable faster than people expect.

Updated:

One call gives you the whole company

KVK data, the derived VAT number and a live VIES check, in a single request. The free plan covers 50 lookups a month and needs no card.

50
free lookups a month
1
request instead of three
0
cards, contracts or sales calls