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 (
web-api.kvk.nl/zoeken) — 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.
Two-phase data retrieval: Basic company data comes from the KVK Search API (fast, structured JSON). Detailed data (legal representatives, shareholders, capital, RSIN, SBI codes) requires fetching and AI-parsing the HTML trade register extract, which takes longer but provides comprehensive information. The trade register HTML is fetched once and reused by multiple data sources (company enrichment, legal representatives, shareholders) via document factorization.
Company Identifiers
Query Identifiers
| Company Type | Source | Format | Example | Notes |
|---|---|---|---|---|
| All entities | KVK | 8 digits (KVK number) | 53781066 | Kamer van Koophandel number — the universal Dutch business identifier |
Identifiers in API Response
Once you retrieve company data, theidentifiers object contains all available identifiers for that entity:
| Identifier Type | Format | Example | Found In |
|---|---|---|---|
KVK | 8 digits | 53781066 | All entities (from Search API) |
RSIN | 9 digits | 123456789 | Tax/fiscal identification number (from trade register extract, AI-parsed) |
Search Capabilities
| Search Type | Pattern | Example | Match Type | Expected Results |
|---|---|---|---|---|
| By KVK Number | 8 digits | 53781066 | Exact | Single company (1 result) |
| By Name | Text string | "Philips" | Fuzzy | Multiple results |
Quirks & Gotchas
| Quirk | Details |
|---|---|
| Two-phase data retrieval | Basic company data comes from the KVK Search API (fast, free); detailed data (legal reps, shareholders, capital) requires fetching and AI-parsing the HTML trade register extract. Legal reps and shareholders take longer to return. |
| KVK website access | KVK website access requires automated session handling. Search and establishment number retrieval are performed against the KVK website. |
| Legal form is deterministic | Unlike most countries, Dutch legal form mapping uses a fully pre-computed lookup table (25 entries) with no AI involvement. |
| No UBO data | Ultimate beneficial owner information is not available from the KVK API or trade register extract. The UBO register in the Netherlands is not publicly accessible. |
| Null ownership percentages | Ownership percentages are only extracted when explicitly stated in the trade register extract. null means “not stated”, not “0%”. The system never infers or calculates percentages. |
| Null nationality | Nationality is always null unless explicitly stated in the document. The system does not assume Dutch nationality for shareholders of Dutch companies. |
| SBI codes via AI | SBI activity codes are AI-extracted from the trade register extract HTML, not from a structured API field. Quality depends on AI parsing accuracy. |
| Establishment number required | Document listing and fetching requires the vestigingsnummer (establishment number), which is obtained automatically before documents can be listed. |
| Partial document failures | The three document listing calls (extract, financials, statutes) run in parallel. If one fails, partial results are returned. Only if all three fail is an error thrown. |
| KVK identifier casing | The system uses consistent KVK casing (uppercase) for identifiers, not kvk or KvK. |
| Statutes filtering | Only statutes with tapedForAvg === true are included in the document list. This filters out draft or internal documents. |
| Document delivery via email | Financial statements and statutes are ordered from KVK, delivered via email, then downloaded. This adds latency (~30 sec). Trade register extracts use a direct online flow. |
| AI model for legal reps | Legal representative parsing uses GPT-5.1 exclusively (no model racing). The AI extracts birth dates, start dates, roles, and authorization scope. |
| Company self-filtering | AI parsing sometimes includes the main company itself as a legal representative or shareholder. The system automatically filters these out by matching on KVK number. |
Company Status
Company status is determined deterministically from the KVKactief boolean field. No AI inference is involved in status determination.
| Local Status | English | Standardized Status | Notes |
|---|---|---|---|
| Ingeschreven | Registered | Active | actief = true |
| Uitgeschreven | Deregistered | Closed | actief = false |
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.
Legal Forms
The Netherlands uses a pre-computed mapping of 25 legal forms from the KVKrechtsvormOmschrijving field to standardized categories and ISO 20275 codes. This mapping is fully deterministic — no AI inference is involved.
Key Business Forms
| Dutch Name | Abbr. | English | Standardized | ISO 20275 |
|---|---|---|---|---|
| Besloten Vennootschap | BV | Private Limited Company | Limited Liability Company | 54M6 |
| Naamloze Vennootschap | NV | Public Limited Company | Corporation | B5PM |
| Eenmanszaak | — | Sole Proprietorship | Sole Proprietorship | 4QXM |
| Vennootschap Onder Firma | VOF | General Partnership | Partnership | 62Y3 |
| Commanditaire Vennootschap | CV | Limited Partnership | Partnership | CODH |
| Maatschap | — | Partnership | Partnership | 9AAK |
Cooperatives & Non-Profits
| Dutch Name | English | Standardized | ISO 20275 |
|---|---|---|---|
| Cooperatie | Cooperative | Cooperative | NFFH |
| Onderlinge Waarborg Maatschappij | Mutual Guarantee Company | Cooperative | DEO1 |
| Vereniging | Association | Nonprofit Organization | 33MN |
| Stichting | Foundation | Nonprofit Organization | V44D |
| Kerkgenootschap | Religious Society or Church | Nonprofit Organization | L7HX |
European & Foreign Forms
| Dutch Name | English | Standardized | ISO 20275 |
|---|---|---|---|
| Europese naamloze vennootschap (SE) | European Public Limited-Liability Company (SE) | Corporation | BBEB |
| Europees economisch samenwerkingsverband | European Economic Interest Grouping | Other | 5WU6 |
| Europese cooperatieve vennootschap (SCE) | European Cooperative Society (SCE) | Cooperative | BBEB |
| Kapitaalvennootschap binnen EER | Capital company within the EEA | Corporation | BBEB |
| Kapitaalvennootschap buiten EER | Capital company outside the EEA | Corporation | BBEB |
| Buitenlandse Rechtsvorm | Foreign Legal Form | Other | M1IZ |
| Overige buitenlandse rechtspersoon of vennootschap | Other foreign legal entity or company | Other | M1IZ |
Other Forms
| Dutch Name | English | Standardized | ISO 20275 |
|---|---|---|---|
| Publiekrechtelijke Rechtspersoon | Public Law Legal Entity | Government-Owned Entity | A0W7 |
| Rederij | Shipping Company | Corporation | UNJ2 |
| Eenmanszaak met Meerdere Eigenaren | Sole Proprietorship with Multiple Owners | Other | 4QXM |
| Rechtspersoon in oprichting | Legal entity in formation | Other | EZQW |
| Vereniging van Eigenaars | Owners’ Association | Other | GNXT |
| Overige Privaatrechtelijke Rechtspersoon | Other Private Law Legal Entity | Other | M1IZ |
Legal Representatives
Legal representatives are extracted from the KVK trade register extract HTML via AI parsing. The HTML content is fetched from the KVK website, converted to Markdown (stripping scripts, styles, navigation, and images), and then processed by GPT-5.1 (exclusively, no model racing) to identify legal representatives.Common Roles
Director & Management Roles
Director & Management Roles
| Dutch Role | English Translation | Typical Classification |
|---|---|---|
| Bestuurder | Director / Manager | Legal Representative |
| Directeur | Director | Legal Representative |
| Enig aandeelhouder/directeur | Sole Shareholder / Director | Legal Representative |
| Bestuurder - Alleen/zelfstandig bevoegd | Director - Sole/Independent Authority | Legal Representative |
| Bestuurder - Gezamenlijk bevoegd | Director - Jointly Authorized | Legal Representative |
Authorized Representative Roles
Authorized Representative Roles
Partnership Roles
Partnership Roles
| Dutch Role | English Translation | Typical Classification |
|---|---|---|
| Vennoot | Partner | Legal Representative |
| Beherend vennoot | Managing Partner | Legal Representative |
| Commanditaire vennoot | Limited Partner | Other Key Person |
AI Parsing Details
The AI extracts the following fields for each legal representative:| Field | Dutch Source Term | Description |
|---|---|---|
| Birth date | Geboortedatum | Date of birth |
| Start date | Datum in functie | Date the person started in the role |
| Role | (Section header / context) | Role title (Bestuurder, Gevolmachtigde, etc.) |
| Name title | (Mr., Mrs., Dr., etc.) | Honorific prefix only |
AI Parsing Behavior: The system does not extract
authorityDetails or scope of authorization fields for legal representatives. Title extraction is limited to honorifics (Mr., Mrs., Dr.) as part of individual.name.title — role information is captured separately. The AI is instructed to only include explicitly mentioned legal representatives and to exclude the main company itself from the results.Other Key Persons
Other key persons are not systematically extracted as a separate category for the Netherlands. The AI parsing classifies all extracted persons from the trade register extract as either legal representatives or shareholders based on context. There is no separate “other key persons” data source.Shareholders
Shareholders are extracted from the KVK trade register extract HTML via AI parsing, using the same HTML document as legal representatives (fetched once via document factorization).Dutch Terms for Shareholders
| Dutch Term | English | Entity Type | Found In |
|---|---|---|---|
| Aandeelhouders | Shareholders | BV, NV companies | Capital companies |
| Vennoten | Partners | VOF, CV partnerships | Partnerships |
| Eigenaar | Owner | Eenmanszaak (sole proprietorship) | Sole proprietorships |
Extraction Logic
| Source | When Used | Data Extracted |
|---|---|---|
| Trade Register Extract HTML | Always (AI-parsed) | Partners, Shareholders, Owners with names and optional share percentages |
Ownership Fields
| Field | Description | Source |
|---|---|---|
sharePercentage | Ownership percentage | Only if explicitly stated in document (null if not stated) |
type | Individual or Company | Determined from AI parsing context |
nationality | Nationality | Only if explicitly stated (null by default — never assumes Dutch) |
Shareholder data is available for BV/NV companies, VOF/CV partnerships (as partners), and Eenmanszaak (as owner). Stichtingen (foundations) and Verenigingen (associations) do not have shareholders.
Activity Code Mapping
The Netherlands uses the SBI (Standaard Bedrijfsindeling) classification, which is the Dutch implementation of NACE Rev. 2. SBI codes are extracted from the trade register extract via AI parsing. When only an activity description is available (from the Search API), the system enriches it to NACE/ISIC codes via AI.| Classification | Source | Example | AI Inferred? |
|---|---|---|---|
| SBI | Trade register extract (AI-parsed) | 6201 | Partially (AI-extracted from HTML) |
| NACE | Derived from SBI or AI-enriched from description | 6201 | Sometimes |
| ISIC | Derived from NACE or AI-enriched | 6201 | Sometimes |
Activity Codes by Source
| Source | Classifications Returned | Notes |
|---|---|---|
| Trade Register Extract | SBI + NACE + ISIC | All SBI codes from document (AI-parsed). Multiple codes extracted. |
| KVK Search API (fallback) | NACE + ISIC (AI-enriched from activiteitomschrijving) | When trade register extract is not available (e.g., onboarding profile) |
AI Enrichment: SBI codes are AI-extracted from the trade register extract HTML. When the search API provides only an
activiteitomschrijving (activity description text), the system enriches this to NACE/ISIC codes via AI. Every activity item includes an isAIInferred flag to distinguish official vs. AI-derived codes.Data Availability Matrix
| Data Type | BV/NV | VOF/CV | Eenmanszaak | Stichting/Vereniging | Notes |
|---|---|---|---|---|---|
| Company Profile | ✅ Async | ✅ Async | ✅ Async | ✅ Async | Basic data from Search API + AI enrichment from trade register |
| Legal Representatives | ✅ | ✅ | ✅ | ✅ | AI-parsed from trade register extract HTML |
| Shareholders | ✅ | ✅ (as partners) | ✅ (as owner) | ❌ | AI-parsed; VOF/CV show partners, EMZ shows owner |
| Ultimate Beneficial Owners | ❌ | ❌ | ❌ | ❌ | Not available from KVK (UBO register not publicly accessible) |
| Establishments | ❌ | ❌ | ❌ | ❌ | Not yet implemented |
| Activity Codes | ⚠️ AI-inferred | ⚠️ AI-inferred | ⚠️ AI-inferred | ⚠️ AI-inferred | SBI codes from trade register extract + AI enrichment |
Documents by Company Type
All Companies
| Document Type | API Category | Format | SKU | Availability | Notes |
|---|---|---|---|---|---|
| Uittreksel Handelsregister (Trade Register Extract) | tradeRegisterExtract | NLD_REGISTER_EXTRACT | ✅ When available | Online extract from KVK (~30 sec, 24h cache) | |
| Jaarrekening (Financial Statements) | financialStatements[] | NLD_FINANCIAL_STATEMENTS | ✅ When filed | Annual accounts from KVK (delivered via email, 99-year cache) | |
| Statuten (Articles of Association) | articlesOfAssociation[] | NLD_STATUS | ✅ When filed | Corporate statutes from KVK (delivered via email, filtered by tapedForAvg, 99-year cache) |
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 three parallel KVK API calls: (1) trade register extract availability, (2) financial statements, (3) statutes. If one source fails, partial results are still returned. Only if all three fail is an error thrown.
Example API Responses
All examples use placeholder data. Query:POST /company with { "id": "<id>", "countryCode": "NL", "dataPoints": ["companyProfile"] }
Active BV (Source: KVK)
Active BV (Source: KVK)
Closed NV (Source: KVK)
Closed NV (Source: KVK)
active: false and status Uitgeschreven (Deregistered). No detailed closure reason is available from the KVK.VOF Partnership (Source: KVK)
VOF Partnership (Source: KVK)
Vennoten) appear as both legal representatives and shareholders. Ownership percentages are typically not stated for partnerships, so sharePercentage is null.Eenmanszaak -- Sole Proprietorship (Source: KVK)
Eenmanszaak -- Sole Proprietorship (Source: KVK)
Eigenaar) appears as a shareholder. The entrepreneur is the company itself.Stichting -- Foundation (Source: KVK)
Stichting -- Foundation (Source: KVK)
Bestuurders). No UBOs are available from the KVK.Available Documents (company example)
Available Documents (company example)
Documents are returned when
"dataPoints": ["availableDocuments"] is requested.| API Category | Document | Notes |
|---|---|---|
tradeRegisterExtract | Uittreksel Handelsregister PDF | When available (~30 sec, online flow) |
financialStatements[] | Jaarrekening (annual accounts) | When filed, PDF format (mail flow) |
articlesOfAssociation[] | Statuten (corporate statutes) | When filed, PDF format (mail flow, filtered by tapedForAvg) |