Pricing
from $2.00 / 1,000 results
KvK Handelsregister Scraper
An Apify Actor for scraping data from the Dutch Chamber of Commerce (Kamer van Koophandel / KVK).
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
49
Total users
11
Monthly active users
7 days ago
Last modified
Categories
Share
An Apify Actor that scrapes the Dutch Chamber of Commerce (Kamer van Koophandel / KVK) Handelsregister (Trade Register). Search by company name or look up specific KVK numbers, with full control over filters, result source, and rate limiting.
What it does
- Search for companies by name or other identifiers
- Look up one or more KVK numbers directly (batch mode)
- Filter by registration status, vestiging type, and trade name type
- Choose between all results, Handelsregister only, or Advies & Inspiratie only
- Handles pagination automatically
- Rate-limited by default to avoid IP blocks — works without a proxy for moderate volumes
Input
Search fields
| Field | Type | Description | Default |
|---|---|---|---|
searchQuery | string | Search by company name or other identifier. Leave empty when using kvkNumbers. | — |
kvkNumbers | string[] | List of 8-digit KVK numbers to look up directly. Leave empty when using searchQuery. | [] |
maxPages | integer | Maximum result pages to fetch per query (0 = unlimited). | 0 |
pageSize | integer | Results per page (max 100). | 10 |
Filters
| Field | Type | Options | Default |
|---|---|---|---|
site | string | kvk2014 = All results, handelsregister = Handelsregister only, corporate = Advies & Inspiratie only | kvk2014 |
inschrijvingsstatus | string[] | ingeschreven (active), uitgeschreven (deregistered) | ["ingeschreven"] |
vestigingType | string[] | hoofdvestigingen, nevenvestigingen, rechtspersonen, overig | [] (all) |
handelsnamen | string[] | bestaandeHandelsnamen, vervallenHandelsnamen | [] (all) |
language | string | nl or en | nl |
Important:
inschrijvingsstatus,vestigingType, andhandelsnamenare Handelsregister-specific filters. Whensiteis set tocorporate(Advies & Inspiratie only), these filters have no effect and will return empty results if set. Leave them at their defaults or clear them when usingcorporate.
Performance
| Field | Type | Description | Default |
|---|---|---|---|
maxConcurrency | integer | Maximum parallel requests (max 5). | 5 |
maxRequestsPerMinute | integer | Rate limit cap. Lower if getting 429 errors without a proxy. | 120 |
proxyConfiguration | object | Apify proxy settings. Recommended for large scrapes to avoid IP rate-limiting. | disabled |
Example — search by company name
{"searchQuery":"Software","maxPages":2,"pageSize":20}
Example — direct KVK number lookup (batch)
{"kvkNumbers":["42009680","82871612"],"inschrijvingsstatus":["ingeschreven"],"site":"handelsregister"}
Example — include deregistered companies too
{"searchQuery":"Bakkerij","inschrijvingsstatus":["ingeschreven","uitgeschreven"],"vestigingType":["hoofdvestigingen","rechtspersonen"]}
Example — Advies & Inspiratie only (corporate)
Use only Search, Result source, Language, page size, and performance options. Leave Handelsregister filters empty / default.
{"searchQuery":"KPN","site":"corporate","language":"nl","pageSize":10,"maxPages":1}
See Output → Advies & Inspiratie for the dataset JSON shape.
Example — full Handelsregister filter set
{"kvkNumbers":["42009680"],"pageSize":10,"language":"nl","site":"kvk2014","inschrijvingsstatus":["ingeschreven","uitgeschreven"],"vestigingType":["hoofdvestigingen","nevenvestigingen","rechtspersonen","overig"],"handelsnamen":["bestaandeHandelsnamen"],"maxRequestsPerMinute":120}
Output
The dataset stores one JSON object per search hit. The shape depends on whether the hit is from the Handelsregister or from Advies & Inspiratie (KVK website articles). With site set to All results (kvk2014), you may get both shapes in the same run.
Handelsregister record
No resultType field — normalized company / establishment data:
{"id":"e027319e-bddf-4982-ac35-ed5cd4a96222","kvkNumber":"82871612","establishmentNumber":"000049081160","name":"Software Buddy","legalFormCode":"EMZ","legalForm":"Eenmanszaak","isActive":true,"isEstablishment":true,"registrationType":"Hoofdvestiging","visitingAddress":{"street":"Kloosterlaan","houseNumber":"33","houseNumberAddition":null,"postalCode":"1216NH","city":"Hilversum"},"postalAddress":{"street":null,"houseNumber":null,"houseNumberAddition":null,"postalCode":null,"city":null},"activityDescription":"Ontwikkelen, produceren en uitgeven van software...","currentTradeNames":["Software Buddy","Maxtrada"],"formerTradeNames":["Codemap NL"],"statutoryName":null,"source":"Actueel"}
Advies & Inspiratie (site: corporate, or mixed under kvk2014)
When KVK’s search returns Advies & Inspiratie hits (crawler-public), each row looks like this (excerpt — full content can be very long):
{"resultType":"advies-en-inspiratie","id":"4d4ee662-5cda-4b78-8545-52649a21c610","title":"Zo help je een werknemer met geldzorgen | KVK","url":"https://www.kvk.nl/personeel/zo-help-je-een-werknemer-met-geldzorgen/","description":"Vermoed je dat je werknemers geldzorgen hebben of vragen ze om een voorschot van salaris? Weet wat je als werkgever kunt doen om je werknemers te ondersteunen.","content":"Zo help je een werknemer met geldzorgen Esther Riphagen ...","language":"nl"}
| Field | Meaning |
|---|---|
resultType | Always advies-en-inspiratie for this shape |
id | Unique identifier from KVK |
title | Page title |
url | Article URL on kvk.nl |
description | Short teaser text |
content | Full article body from the source (often very long) |
language | Language code of the article |
Note on multiple records per KVK number
A single KVK number can return more than one record. For example, a company may have both a Rechtspersoon (legal entity) and one or more Vestiging (establishment) entries — each as a separate dataset item sharing the same kvkNumber but with a different id and establishmentNumber.
Rate limiting
Without a proxy, all requests go through the same IP. The default of 120 requests/minute is safe for most use cases. If you hit 429 errors:
- Lower
maxRequestsPerMinute(try 60) - Enable a proxy via
proxyConfiguration
With a proxy, session rotation automatically handles rate-limited requests by switching IP.
Pay Per Event Billing
This Actor uses Apify's Pay Per Event pricing — you only pay for what actually runs.
| Event | Charged by | Description |
|---|---|---|
apify-actor-start | Apify (auto) | Once per run start |
apify-default-dataset-item | Apify (auto) | Once per result record pushed |
kvk-search | Custom | Once per search or pagination page the scraper runs |
retry-event | Custom | Once per retry on a failed request |
event-proxy | Custom | Once per run when using Apify Proxy (no group) |
event-proxy-group | Custom | Once per run when using a proxy group (e.g. RESIDENTIAL) |
You can cap total spend in the Apify Console when starting a run via Max total charge (USD) or Max paid dataset items.
Disclaimer
This Actor is provided for educational and informational purposes only. By using it you agree to:
- Comply with KVK's Terms of Service
- Use the data responsibly and in accordance with applicable laws
- Not overload KVK servers with excessive requests
This Actor is not affiliated with or endorsed by KVK (Kamer van Koophandel).
