KvK Handelsregister Scraper - Dutch Chamber of Commerce avatar

KvK Handelsregister Scraper - Dutch Chamber of Commerce

Pricing

from $2.50 / 1,000 company records

Go to Apify Store
KvK Handelsregister Scraper - Dutch Chamber of Commerce

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 hereEuropages ScraperWLW Scraper
Dutch Chamber of Commerce search + KvK-number lookupEU B2B directory, VAT, contacts, certificatesDE / 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
  • Lightweightcurl_cffi Chrome TLS fingerprint, proxy optional (off by default)

Input parameters

ParameterTypeDefaultDescription
searchQueryString"Philips"Company name or keyword. Empty when you only look up KvK numbers.
kvkNumbersArray[]8-digit KvK numbers (batch).
cityStringAppended to the search query (e.g. Amsterdam).
postalCodeStringDutch postcode (1012AB). Can be used alone.
activeOnlyBooleantrueOnly currently registered companies.
establishmentTypesArray[]hoofdvestiging, nevenvestiging, rechtspersoon, overig. Empty = all.
tradeNameFilterStringbestaandeHandelsnamen or vervallenHandelsnamen. Empty = both.
languageString"nl"nl or en.
maxItemsInteger20Max dataset rows (0 = all hits for your queries).
requestDelaySecsNumber0.25Pause between HTTP requests.
proxyConfigurationObjectproxy offEnable Apify Proxy only if you see 403/429.

Provide at least one of: searchQuery, kvkNumbers, city, postalCode.

{
"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.

FieldTypeDescription
kvkNumberString8-digit KvK number
branchNumberString12-digit vestigingsnummer when present
nameStringName shown on the search card
statutoryNameStringCurrent statutory name
tradeNamesArrayCurrent trade names
formerTradeNamesArrayFormer names when the search matched them
legalForm / legalFormCodeStringe.g. Besloten Vennootschap / BV
isActiveBooleanCurrently registered
registrationStatusStringingeschreven or uitgeschreven
establishmentTypeStringhoofdvestiging, nevenvestiging, rechtspersoon, overig
registrationDateStringYYYY-MM-DD when published
activityDescriptionStringFree-text activity (numeric SBI is not public)
visitingAddress / postalAddressObjectstreet, houseNumber, postalCode, city
city / postalCode / streetStringFlattened visiting address for table views
urlStringPublic search URL for this KvK number
scrapedAtStringUTC 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 caseWhat you get
Verify a Dutch counterpartyKvK number, legal form, active flag, visiting address
Batch-enrich CRM KvK idsOne row per number with name, branch, status
Local lead listKeyword + city or postcode, capped with maxItems
Main vs branch mappingSame kvkNumber, distinct branchNumber
Deregistered checkSet 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 formDirectors / bestuurders, UBO
Visiting / postal addressRSIN, numeric SBI, employee count
Trade names, activity text, registration dateAnnual accounts, certified extract PDF
Active vs deregisteredInsolvency 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 ApifyClient
client = 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.

ActorUse for
KvK Handelsregister Scraper ◄── you are hereDutch Chamber of Commerce public search + KvK lookup
Europages ScraperEurope-wide B2B directory, VAT and contacts
WLW ScraperDACH B2B suppliers from Wer liefert was
North Data ScraperEU commercial-register identity, officers, published financials