Skip to main content
This guide is outdated and will be removed on 1 November 2026. The up-to-date Netherlands reference is on the Netherlands country page.

Start here

This guide contains public integration notes for Netherlands. Use it for identifier formats, search behavior, and country-specific caveats. The live source of truth for coverage, pricing, data sources, documents, legal forms, roles, and status values is the pricing page.

Netherlands coverage, pricing, and sources

Open the current catalog for supported datapoints, documents, sources, identifiers, and availability.
Country details below are preserved as integration notes. If a table or example conflicts with the live pricing page, use the pricing page as the source of truth and contact support.

Data Sources

The Netherlands uses a single official registry — the KVK (Kamer van Koophandel / Chamber of Commerce) — accessed through multiple channels. Data retrieval follows a two-phase model: basic structured data from the KVK Search API, and detailed data (legal representatives, shareholders, capital, RSIN) from the HTML trade register extract via AI parsing.
  • KVK Search API — Provides basic company data in structured JSON: legal name, legal form, status, address, activity description, and trade names. This is a free, fast API that returns data immediately. Used for search results and base company profile data.
  • KVK Trade Register Extract (Uittreksel Handelsregister) — The official HTML extract from the KVK online trade register. Contains detailed data including legal representatives (Bestuurders, Gevolmachtigden), shareholders (Aandeelhouders, Vennoten), SBI activity codes, RSIN, share capital, and employee count. This HTML is AI-parsed to extract structured data.
Basic company data comes from KVK Search. Detailed officers, other key persons, shareholders, capital, RSIN and activity codes come from the trade register extract. Known roles use fixed translations and standardized values; unfamiliar titles can require AI enrichment.
Request otherKeyPersons in verification mode for supervisory and other non-representing appointments recorded in the extract. Prefill mode does not provide this datapoint. A company with no such appointments returns an empty list.

Company Identifiers

company.identifiers.euid is an optional European Unique Identifier. Supported domestic BV and NV forms. Uses the KVK number, not an establishment number or RSIN. Example: NLNHR.34259528. It is returned as an output identifier and cannot be used as a search input. See EUID coverage and interpretation.

Query Identifiers

KVK Number Format: The KVK number is always exactly 8 digits (^\d{8}$), and leading zeros are significant. There is no prefix and no published check digit. An establishment has its own 12-digit establishment number (vestigingsnummer), which is a different number.

Identifiers in API Response

Once you retrieve company data, the identifiers object contains all available identifiers for that entity:
Identifier Casing: The KVK number is returned under the lowercase key kvk. RSIN and VAT are uppercase.
GLEIF is the supplementary data source for this identifier. company.identifiers.lei is optional. It is returned when the KVK number (kvk) matches exactly one LEI through a GLEIF registration or validation reference. The Legal Entity Identifier has 20 uppercase alphanumeric characters, ending in two check digits. Coverage varies by entity. An absent lei does not prove that the company has no LEI. Lapsed, retired or merged LEIs may be returned; annulled LEIs are excluded.

Search Capabilities

Search Performance: Use KVK number searches for exact matching and best performance. Name searches query the KVK Search API and return multiple results. All search types have built-in retry handling for reliability. Name search returns one result per KVK number: branches are collapsed onto their company, and entities without an establishment (for example associations and foundations) are included.

Active companies only

Search only returns active companies, so activeOnly=true changes nothing here. Search only returns companies currently registered.

Quirks & Gotchas

Company Status

Company status is determined deterministically from the KVK actief boolean field. No AI inference is involved in status determination.
The KVK provides only a binary active/inactive status. There are no detailed closure reasons (bankruptcy, liquidation, etc.) or insolvency statuses available from the structured API. More detailed status information may occasionally be available in the trade register extract via AI parsing, but it is not systematically extracted.
The Netherlands has a two-tier legal form model. The level of detail you receive depends on whether the request buys the trade register extract (see when the extract is bought).
  • Without the extract (prefill mode, or company alone) the KVK search API returns 23 base legal forms. These are the values in the rechtsvorm field (e.g. “Besloten Vennootschap”, “Naamloze Vennootschap”, “Publiekrechtelijke Rechtspersoon”). This is a deterministic mapping with no AI involved.
  • With the extract (a verification request that also asks for legalRepresentatives or shareholders, or orders the Trade Register Extract document) you get 48 detailed legal forms extracted from the trade register document. These are the uitgebreideRechtsvorm values (e.g. “Besloten Vennootschap (blijkens statuten structuurvennootschap)”, “Naamloze Vennootschap (beleggingsmaatschappij met veranderlijk kapitaal)”, “Publiekrechtelijke Rechtspersoon: Gemeente”). A dedicated AI parser constrained to the 48-value enum extracts the detailed form from the document.
Both tiers map to the same standardized categories and ISO 20275 codes. The difference is granularity: the search API collapses variants into their parent form, while the extract resolves the specific subtype. Source: KVK official reference document “Lijst van output: uitgebreide rechtsvormen” (June 2025).

Without the extract (23 base forms)

With the extract (48 detailed forms)

With the extract, the legal form is extracted from the trade register document and resolved to one of 48 specific values. The 23 base forms above still appear when the base and detailed form are the same (e.g. “Eenmanszaak” stays “Eenmanszaak”). The additional 25 detailed variants only appear with the extract.
Without the extract, both appear as “Vereniging”.
Without the extract, all appear as “Overige Privaatrechtelijke Rechtspersoon”.
Foreign entities registered in the Netherlands. The KVK profile API returns a dynamic uitgebreideRechtsvorm with the foreign legal form name and country of establishment (e.g. “Société à responsabilité limitée (Frankrijk)”). The API response normalizes these to one of the 4 base forms below.
Without the extract, all appear as “Publiekrechtelijke Rechtspersoon”.
Legal representatives come from the KVK trade register extract. Names, birth dates, appointment dates and representation rules are returned when recorded. The filed role is preserved; known offices use fixed translations and standardized values.

Role catalogue

We use a closed list of canonical roles for the Netherlands. Every role.localName you receive in the API response is guaranteed to be one of these values. The list is built on top of ISO 5009, the international standard for official organizational roles published by ISO and maintained by GLEIF. ISO 5009 covers the statutory roles defined in the Dutch Civil Code (directors, supervisory board members, liquidators, and so on). We took the Dutch entries from the ISO 5009 code list and deduplicated them into canonical roles. On top of that, we added four roles that appear on Dutch trade register extracts but are out of scope for ISO 5009 because they are based on power of attorney (volmacht) rather than corporate governance:
  • Gevolmachtigde and Gevolmachtigd handelsagent, registered via KVK Form 13
  • Procuratiehouder, a historical commercial volmacht role
  • Bewindvoerder, a trustee appointed during suspension of payments
Shareholder roles (Aandeelhouder, Vennoot, Eigenaar) are not part of this list. They live in the shareholders field of the API response.

Full role enum

The catalogue covers the offices below. A person’s placement in legalRepresentatives or otherKeyPersons follows their recorded representation powers, rather than their title alone. Each ISO 5009 role can map to multiple OOR codes because the code depends on the legal form of the company. For example, “Bestuurder” is KHNVNO for a BV, TK4BXG for an NV, and PPIUMW for a Stichting.

Role normalization

Dutch trade register extracts sometimes use informal variants or add authority scope to a role name. Known variants are normalized to a published office. Unrecognized labels are preserved rather than forced into one of the examples below. Signing authority (sole or joint) is kept in representationMode, with the recorded scope when available. The role title does not override those conditions. An iso5009Code is included only when the official role matches the company’s legal form; it can be omitted when no match is established.

Other Key Persons

Verification mode returns non-representing appointments in otherKeyPersons. Supervisory board members and their chair belong here. One-tier non-executive directors and management-board members belong here when the extract does not grant them representation powers. A non-executive director can instead be a legal representative when the extract records those powers. Founder or association-membership appointments may also appear. Ownership alone remains in shareholders, without creating an additional officer role.

Shareholders

Shareholders are AI-extracted from the same KVK trade register extract as the officer data.

Dutch Terms for Shareholders

Extraction Logic

Ownership Fields

Critical: Ownership PercentagesShare percentages are only extracted when explicitly stated in the trade register extract (e.g., “50%”, “33,33%”). The system does not infer or calculate percentages. If no percentage is mentioned, sharePercentage is null. Do not assign 100% to each shareholder. Nationality is also null unless explicitly stated — the system does not assume Dutch nationality.
Shareholder data depends on the entity type. For BV/NV companies the register publishes a shareholder only when a single party holds 100% of the shares (see Reading an empty shareholders list). VOF/CV partnerships list their partners, and an Eenmanszaak its owner. Stichtingen (foundations) and Verenigingen (associations) have no shareholders.

Reading an empty shareholders list

Dutch law only obliges a company to register its shareholder when there is exactly one holding 100% of the shares (Enig aandeelhouder, Handelsregisterwet 2007 art. 17-18 and Handelsregisterbesluit 2008 art. 22). A BV or NV with two or more shareholders registers nothing: the Handelsregister simply has no shareholder record for it, and neither does the Uittreksel. So for the Netherlands:
An empty shareholders list is not a terminal node in an ownership chain. It means the Dutch register does not publish this company’s ownership, not that the chain ends. Measured across 4,322 real KVK extracts: 2,435 carry a sole shareholder and only 2 carry a multi-holder list.
When the list is empty and you need to continue the traversal:
  • legalRepresentatives — a Dutch holding structure is very often managed by its own parent, so a corporate Bestuurder with its own KVK number is usually the next entity up.
  • Trade Register History (Uittreksel Handelsregister Historie) — shows any sole-shareholder registration the company has had in the past, with start and end dates. If the history has none either, the company has never had a registered sole shareholder.
  • Financial Statements (Jaarrekeningen) — consolidated accounts frequently name the parent in the notes.
  • Deed of incorporation / statutory amendment (Akte van oprichting / Statutenwijziging) — the notarial deed names the subscribing shareholders at the time it was executed.

Activity Code Mapping

The Netherlands uses the SBI (Standaard Bedrijfsindeling) classification. SBI 2008 codes (5-digit) are extracted from the trade register extract via AI parsing. From these, NACE Rev 2.1 and ISIC Rev 5 codes are derived deterministically (no AI), and SBI 2025 codes are derived via the official CBS crosswalk (with LLM disambiguation for ambiguous mappings).

Company Profile (with Trade Register Extract)

One code in, one code out. You get one NACE and one ISIC code per declared SBI code. Where an SBI code has no single equivalent in the target revision, the shared parent class is returned rather than every candidate — SBI 2008 47190, for example, returns NACE 47 rather than both 47.12 and 47.91. See One code in, one code out. Main activity. The KVK trade register distinguishes the hoofdactiviteit from secondary activities. When the extract designates one, that SBI code carries isMainActivity: true, and the NACE, ISIC and SBI 2025 codes derived from it inherit the flag. Without the extract, the single code inferred from the activity description is flagged as the main activity and is marked isAIInferred: true alongside. Absence of the flag means the source did not say — not that the code is secondary.

Company profile without the extract (Search API only)

Deterministic vs. AI-inferred: When the trade register extract is available (company profile), NACE and ISIC are derived deterministically from SBI 2008 codes (isAIInferred: false). SBI 2025 codes use the CBS crosswalk — 1:1 mappings are resolved automatically, ambiguous mappings (multiple SBI 2025 candidates for one NACE code) are disambiguated by an LLM using the company’s activity description. When only the search API is available (prefill mode, or company alone), all codes are AI-inferred from the activity description text.

Data Availability Matrix

Legend: ✅ Available | ❌ Not Available | ⚠️ Conditionally Available | Async = Asynchronous processing

Documents by Company Type

All Companies

Trade Register Extract: The Uittreksel is an HTML document fetched from the KVK website and converted to PDF for delivery. The HTML content is AI-parsed to extract structured data.
Document Delivery Methods: The trade register extract uses a direct online flow (fast, ~30 sec). Financial statements and statutes use a mail flow: the document is ordered from KVK, delivered via email, then downloaded and saved. This adds latency but is the only retrieval method available for these document types.
Document Listing: Documents are listed via four parallel KVK API calls: (1) trade register extract availability, (2) trade register history availability, (3) financial statements, (4) statutes. If one source fails, partial results are still returned. Only if all four fail is an error thrown.

Example API Responses

All examples use placeholder data. Query: POST /v2/company with { "id": "<id>", "countryCode": "NL", "dataPoints": ["company", "legalRepresentatives"] }
Note: Closed companies have active: false and status Uitgeschreven (Deregistered). No detailed closure reason is available from the KVK.
Note: VOF partners (Vennoten) appear as both legal representatives (with the canonical role Beherend Vennoot) and shareholders. Ownership percentages are typically not stated for partnerships, so sharePercentage is null.
Note: For sole proprietorships, the owner (Eigenaar) appears as a shareholder. The entrepreneur is the company itself.
Note: Foundations (Stichtingen) have no shareholders — they are non-profit entities with a board of directors (Bestuurders). No UBOs are available from the KVK.
Documents are returned when "dataPoints": ["availableDocuments"] is requested.