KvK Handelsregister Scraper avatar

KvK Handelsregister Scraper

Pricing

$4.00/month + usage

Go to Apify Store
KvK Handelsregister Scraper

KvK Handelsregister Scraper

An Apify Actor for scraping data from the Dutch Chamber of Commerce (Kamer van Koophandel / KVK).

Pricing

$4.00/month + usage

Rating

0.0

(0)

Developer

No-Code Venture

No-Code Venture

Maintained by Community

Actor stats

0

Bookmarked

33

Total users

4

Monthly active users

7 days ago

Last modified

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

FieldTypeDescriptionDefault
searchQuerystringSearch by company name or other identifier. Leave empty when using kvkNumbers.
kvkNumbersstring[]List of 8-digit KVK numbers to look up directly. Leave empty when using searchQuery.[]
maxPagesintegerMaximum result pages to fetch per query (0 = unlimited).0
pageSizeintegerResults per page (max 100).10

Filters

FieldTypeOptionsDefault
sitestringkvk2014 = All results, handelsregister = Handelsregister only, corporate = Advies & Inspiratie onlykvk2014
inschrijvingsstatusstring[]ingeschreven (active), uitgeschreven (deregistered)["ingeschreven"]
vestigingTypestring[]hoofdvestigingen, nevenvestigingen, rechtspersonen, overig[] (all)
handelsnamenstring[]bestaandeHandelsnamen, vervallenHandelsnamen[] (all)
languagestringnl or ennl

Important: inschrijvingsstatus, vestigingType, and handelsnamen are Handelsregister-specific filters. When site is set to corporate (Advies & Inspiratie only), these filters have no effect and will return empty results if set. Leave them at their defaults or clear them when using corporate.

Performance

FieldTypeDescriptionDefault
maxConcurrencyintegerMaximum parallel requests (max 5).5
maxRequestsPerMinuteintegerRate limit cap. Lower if getting 429 errors without a proxy.120
proxyConfigurationobjectApify 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"
}
FieldMeaning
resultTypeAlways advies-en-inspiratie for this shape
idUnique identifier from KVK
titlePage title
urlArticle URL on kvk.nl
descriptionShort teaser text
contentFull article body from the source (often very long)
languageLanguage 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.

EventCharged byDescription
apify-actor-startApify (auto)Once per run start
apify-default-dataset-itemApify (auto)Once per result record pushed
kvk-searchCustomOnce per search or pagination page the scraper runs
retry-eventCustomOnce per retry on a failed request
event-proxyCustomOnce per run when using Apify Proxy (no group)
event-proxy-groupCustomOnce 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).

Resources