DEV Community

Cover image for Netherlands KVK — post-KVK-API-2024 reality / developer guide
OpenRegistry
OpenRegistry

Posted on

Netherlands KVK — post-KVK-API-2024 reality / developer guide

Netherlands KVK — post-KVK-API-2024 reality / developer guide

The Netherlands' company register — Kamer van Koophandel (KVK) — quietly changed how developers access corporate data when the modernised KVK Open Data API became the canonical machine interface. The open-data tier now exposes a limited but real-time slice of the Handelsregister: activity start date, legal form, activity codes, and the latest adopted annual accounts.

The key constraint is intentional: the free tier strips personally identifying information. Company names, addresses, directors, shareholders, and UBOs are not returned. Those surfaces remain behind paid register extracts or AML‑gated channels.

For developers building compliance tooling, research pipelines, or AI agents, the result is unusual: the Netherlands publishes a technically clean API surface, but the most recognisable identifiers are removed. Integration therefore revolves around the 8‑digit KVK number rather than company names.


What the registry actually exposes

The official data source is the KVK Open Data interface at opendata.kvk.nl. OpenRegistry proxies the public surface via MCP tools.

Important characteristics of the upstream API:

  • Identifier: 8‑digit kvkNummer
  • Search capability: none on the free tier
  • Formats: JSON for profile metadata, XBRL-derived JSON trees for financials
  • Rate limits:
    • Basic company profile: ~100 requests / 5 minutes
    • Annual accounts: ~1 request / minute

The OpenRegistry surface exposes the following capabilities for Netherlands:

Tool Status Notes
get_company_profile ✅ live lookup by 8‑digit KVK number
list_filings ✅ live returns latest adopted accounts
get_financials ✅ live embedded XBRL tree
search_companies ⛔ 501 no name search in free dataset
get_officers ⛔ 501 paid register extract only
get_shareholders ⛔ 501 shareholder registers are private
get_persons_with_significant_control ⛔ 501 AML‑restricted UBO register
get_charges ⛔ 501 pledges and mortgages held elsewhere

This asymmetry is deliberate: the Netherlands treats the open-data feed as a statistical and financial disclosure interface, not a full corporate register export.


What's paywalled or restricted

Developers quickly discover that most of the recognisable company metadata is gated.

The following surfaces are not present in the open API:

  • company name
  • trading names
  • full address
  • directors and officers
  • shareholder registers
  • UBO / beneficial ownership
  • full register extracts

To obtain these fields you must use one of the paid channels:

  • Digitaal uittreksel (digital extract) purchased per company
  • Handelsregister REST subscription (~€6.40/month + €0.02 per request)

These paid interfaces are not proxied by OpenRegistry.

For AML‑related data the restrictions are even stronger. The Dutch UBO register is accessible only to obliged entities such as banks, notaries, auditors and law‑enforcement.


Country-specific quirks

Integrators almost always run into the same Netherlands‑specific edge cases.

1. No name search in the free API

The open-data tier requires a known KVK number. Searching by company name returns a 501 error.

Typical workflow:

  1. Use the EU BRIS portal or another registry to discover the KVK number
  2. Query the open-data endpoint using the number

2. The company name is intentionally blank

The HVDS (high‑value dataset) specification deliberately removes PII. As a result, company_name is empty even for well‑known firms.

This is not a bug — it is a legal design decision under Dutch privacy rules.

3. Only BV and NV legal forms are included

The free dataset focuses on the two main commercial structures:

  • BV — Besloten Vennootschap (private limited company)
  • NV — Naamloze Vennootschap (public limited company)

Other entity forms appear only through the paid register interfaces.

4. Financial filings return a single XBRL tree

Unlike many registries, the Dutch feed exposes only the most recent adopted accounts. Historical filings are not returned.

The response structure is a nested XBRL concept tree where financial fields such as:

  • Assets
  • Equity
  • NetResultAfterTax
  • CashAndCashEquivalents

appear as leaf nodes inside sections like BalanceSheet or IncomeStatement.


Worked example: ASML Holding N.V.

A well‑known Dutch company with KVK number 17085815 is semiconductor manufacturer ASML Holding N.V..

Example MCP request:

get_company_profile
{
  "jurisdiction": "NL",
  "company_id": "17085815"
}
Enter fullscreen mode Exit fullscreen mode

Typical fields returned:

{
  "datumAanvang": "19840401",
  "actief": "J",
  "rechtsvormCode": "NV",
  "postcodeRegio": "55",
  "activiteiten": [
    { "sbiCode": "26110", "soortActiviteit": "Hoofdactiviteit" }
  ],
  "lidstaat": "NL"
}
Enter fullscreen mode Exit fullscreen mode

To retrieve the latest adopted financial statements:

get_financials
{
  "jurisdiction": "NL",
  "company_id": "17085815"
}
Enter fullscreen mode Exit fullscreen mode

The result contains a structured XBRL tree including balance sheet and income statement sections.


Connecting an MCP client

Add the hosted endpoint to any MCP‑compatible client.

Example configuration:

{
  "mcpServers": {
    "openregistry": {
      "url": "https://openregistry.sophymarine.com/mcp"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Claude Desktop, Cursor, Cline, Goose, and other agent frameworks can then query the Dutch register using the same tool interface as other jurisdictions.


Why this registry matters

The Netherlands demonstrates an interesting regulatory compromise: a high‑quality API with strict privacy filtering.

For AI agents and automated compliance tools, the practical implication is that the Dutch registry is primarily a numeric‑identifier lookup service combined with structured financial filings.

While it does not expose the full corporate record, it provides a reliable programmatic channel for:

  • verifying legal activity status
  • retrieving industry classification codes
  • accessing machine‑readable financial statements

Try it yourself

You can query the Dutch register through OpenRegistry's hosted MCP endpoint with no signup required.

Example company page:

https://openregistry.sophymarine.com/company/NL/17085815

The free anonymous tier allows 20 requests per minute across all supported jurisdictions.


OpenRegistry's full coverage

OpenRegistry is a free remote MCP server giving AI agents real-time access to
company-registry data from 28 national governments. This article focused on
Netherlands; the same toolkit covers:

UK Companies House · Ireland CRO · Australia ABR · Switzerland Zefix · Norway Brreg · France Sirene/RNE · Finland PRH · Czech ARES · Poland KRS · Taiwan GCIS · Canada Corporations Canada · Canada BC · Canada NWT · Belgium KBO · Isle of Man Registry · Iceland RSK · Liechtenstein HR · New Zealand Companies Office · Monaco RCI · Italy Registro Imprese · Spain BORME · Hong Kong Companies Registry · Malaysia SSM · South Korea OPENDART · Cyprus DRCOR · Mexico PSM · Cayman CIMA · Russia EGRUL

→ Hosted MCP endpoint: https://openregistry.sophymarine.com/mcp
→ Docs: https://openregistry.sophymarine.com/docs/
→ Free anonymous tier: 20 req/min, all tools, every jurisdiction.

Made by Sophymarine.

Top comments (0)