KvK Handelsregister Scraper - Dutch Chamber of Commerce
Pricing
from $2.50 / 1,000 company records
KvK Handelsregister Scraper - Dutch Chamber of Commerce
Scrape the Dutch Chamber of Commerce (KvK) Handelsregister: search by name, city, postal code, or look up 8-digit KvK numbers. Get legal form, addresses, trade names, activity text, and registration date. Fast HTTP crawl on Apify, no login.
Pricing
from $2.50 / 1,000 company records
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by the Dutch Chamber of Commerce (Kamer van Koophandel / KvK) or its affiliates. Data is read from publicly accessible search cards only. No login. You are responsible for complying with applicable law (including GDPR) and the source terms. This is not a substitute for a paid extract, UBO extract, or other official KvK products. No warranty on accuracy or availability. Provided for informational and research use.
| KvK Handelsregister (NL) | Europages (Europe) | WLW (DACH) |
|---|---|---|
| KvK Handelsregister Scraper ◄── you are here | Europages Scraper | WLW Scraper |
| Dutch Chamber of Commerce search + KvK-number lookup | EU B2B directory, VAT, contacts, certificates | DE / AT / CH suppliers, phone, email, VAT |
KvK Handelsregister scraper (Kamer van Koophandel) for Apify — a KvK API alternative for public search cards. Turn a company name, city / postcode, or 8-digit KvK number into structured Dutch Chamber of Commerce rows. Collect KvK number, branch number (vestigingsnummer), legal form, active / deregistered status, establishment type, visiting and postal address, current and former trade names, activity text, and registration date when the public search card shows them.
Ideal for KYB / counterparty checks, CRM enrichment, Dutch SME lead lists, and market mapping. Fast HTTP crawl — no headless browser, no login. Export JSON, CSV, or Excel. Works from Python, Node.js, or an MCP / AI assistant via Apify.
When to use this Actor
- You need KvK Handelsregister identity from the public search (name, number, address, legal form)
- You want batch lookup of 8-digit KvK numbers in one run
- You prefer a browser-free Dutch company-register crawl on Apify
- You will enrich contacts later with a directory Actor (Europages / WLW)
When not to use this Actor
- Directors, UBO, RSIN, numeric SBI, employee count, or annual accounts — those are paid KvK products, not public search cards
- A legally certified extract (uittreksel) — this Actor does not order or download official PDFs
- Phone / email / website — not published on the public search card
- Non-Dutch registers — use a source-specific Actor instead
Key features
- Name search — trade name, statutory name, or keyword
- Batch KvK lookup — one or many 8-digit numbers
- City and postcode — appended to the query (the public index has no separate city parameter)
- Handelsregister-only rows — no advice-article pollution in the dataset
- Registration date on the public card when present
- Filters — active vs deregistered, establishment type, current vs former trade names
- Dutch or English search language
- Pagination beyond the website’s 50-result screen, still capped by
maxItems - Streaming results — dataset rows appear while the run is in progress
- Deduped push — unique by KvK number + branch number within a run
- Lightweight —
curl_cffiChrome TLS fingerprint, proxy optional (off by default)
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | String | "Philips" | Company name or keyword. Empty when you only look up KvK numbers. |
kvkNumbers | Array | [] | 8-digit KvK numbers (batch). |
city | String | — | Appended to the search query (e.g. Amsterdam). |
postalCode | String | — | Dutch postcode (1012AB). Can be used alone. |
activeOnly | Boolean | true | Only currently registered companies. |
establishmentTypes | Array | [] | hoofdvestiging, nevenvestiging, rechtspersoon, overig. Empty = all. |
tradeNameFilter | String | — | bestaandeHandelsnamen or vervallenHandelsnamen. Empty = both. |
language | String | "nl" | nl or en. |
maxItems | Integer | 20 | Max dataset rows (0 = all hits for your queries). |
requestDelaySecs | Number | 0.25 | Pause between HTTP requests. |
proxyConfiguration | Object | proxy off | Enable Apify Proxy only if you see 403/429. |
Provide at least one of: searchQuery, kvkNumbers, city, postalCode.
Example — name search
{"searchQuery": "Philips","activeOnly": true,"language": "nl","maxItems": 20}
Example — batch KvK lookup
{"kvkNumbers": ["90428587", "17062897"],"maxItems": 50}
Example — keyword + city
{"searchQuery": "bakker","city": "Amsterdam","activeOnly": true,"maxItems": 50}
Output fields
One dataset item per establishment or legal entity.
| Field | Type | Description |
|---|---|---|
kvkNumber | String | 8-digit KvK number |
branchNumber | String | 12-digit vestigingsnummer when present |
name | String | Name shown on the search card |
statutoryName | String | Current statutory name |
tradeNames | Array | Current trade names |
formerTradeNames | Array | Former names when the search matched them |
legalForm / legalFormCode | String | e.g. Besloten Vennootschap / BV |
isActive | Boolean | Currently registered |
registrationStatus | String | ingeschreven or uitgeschreven |
establishmentType | String | hoofdvestiging, nevenvestiging, rechtspersoon, overig |
registrationDate | String | YYYY-MM-DD when published |
activityDescription | String | Free-text activity (numeric SBI is not public) |
visitingAddress / postalAddress | Object | street, houseNumber, postalCode, city |
city / postalCode / street | String | Flattened visiting address for table views |
url | String | Public search URL for this KvK number |
scrapedAt | String | UTC timestamp |
Example output
{"kvkNumber": "90428587","branchNumber": "000056159579","name": "Philips & Philips B.V.","statutoryName": "Philips & Philips B.V.","tradeNames": ["Philips & Philips B.V."],"legalForm": "Besloten Vennootschap","legalFormCode": "BV","isActive": true,"registrationStatus": "ingeschreven","establishmentType": "hoofdvestiging","registrationDate": "2023-06-07","activityDescription": "Het uitoefenen van de rechtspraktijk als advocaat.","visitingAddress": {"street": "Van Hengellaan","houseNumber": "2","postalCode": "1217AS","city": "Hilversum"},"city": "Hilversum","postalCode": "1217AS"}
Use cases
| Use case | What you get |
|---|---|
| Verify a Dutch counterparty | KvK number, legal form, active flag, visiting address |
| Batch-enrich CRM KvK ids | One row per number with name, branch, status |
| Local lead list | Keyword + city or postcode, capped with maxItems |
| Main vs branch mapping | Same kvkNumber, distinct branchNumber |
| Deregistered check | Set activeOnly: false and read registrationStatus |
Public vs paid KvK data
| On this Actor (public search) | Not on this Actor (paid KvK products) |
|---|---|
| Name, KvK, vestigingsnummer, legal form | Directors / bestuurders, UBO |
| Visiting / postal address | RSIN, numeric SBI, employee count |
| Trade names, activity text, registration date | Annual accounts, certified extract PDF |
| Active vs deregistered | Insolvency extras beyond the public flag |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/kvk-handelsregister-scraper').call({searchQuery: 'Philips',language: 'nl',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/kvk-handelsregister-scraper").call(run_input={"searchQuery": "Philips", "language": "nl", "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("kvkNumber"), item.get("name"), item.get("city"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~kvk-handelsregister-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery":"Philips","language":"nl","maxItems":20}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name.
Example prompts:
- "Run KvK Handelsregister Scraper for searchQuery Philips, maxItems 20, and return KvK number, legal form, and city as JSON"
- "Look up KvK numbers 90428587 and 17062897 with KvK Handelsregister Scraper and summarise registration status"
- "Scrape bakeries in Amsterdam with KvK Handelsregister Scraper, then find matching EU suppliers with Europages Scraper"
Suite next step
After you have Dutch register identity (KvK number, legal form, address), run Europages Scraper for EU B2B contacts and VAT, or WLW Scraper for DACH supplier listings. For officers and published financials across EU registers, use North Data Scraper.
FAQ
Does this return directors? No. Public search cards do not include bestuurders. Do not expect an officers field.
Is there a 50-result limit? The public website UI shows at most 50 hits. This Actor paginates the same search index and stops at maxItems.
Can I filter by city? Yes — put the city in city (or in searchQuery). A dedicated city API parameter is not available on the public index.
Why is SBI / RSIN empty? Those fields are not on the public card. This Actor does not invent empty columns for them.
Do I need a proxy? Usually no. Enable Apify Proxy only if a run hits HTTP 403 or 429.
Is this the official KvK API? No. It reads public Handelsregister search cards only. You do not need a KvK API key, and it is not a substitute for Basisprofiel or a certified extract.
How do I export? Every run writes a dataset. Download JSON, CSV, or Excel from the run, or pull items with the Apify API / Python / Node.js client.
Related Actors
| Actor | Use for |
|---|---|
| KvK Handelsregister Scraper ◄── you are here | Dutch Chamber of Commerce public search + KvK lookup |
| Europages Scraper | Europe-wide B2B directory, VAT and contacts |
| WLW Scraper | DACH B2B suppliers from Wer liefert was |
| North Data Scraper | EU commercial-register identity, officers, published financials |