KVK APIkvk.nl ↗
Search and look up businesses in the Dutch KVK Handelsregister. Get registration details, legal form, addresses, and branch office entries via 2 endpoints.
What is the KVK API?
The KVK.nl API gives developers access to the Dutch Handelsregister (trade register) through 2 endpoints. Use search_businesses to run full-text queries against registered company names, KVK numbers, and addresses, or use get_business to retrieve all registration entries — including branch offices (vestigingen) and legal entities (rechtspersoon) — for a specific 8-digit KVK number.
curl -X GET 'https://api.parse.bot/scraper/9c941901-c954-4478-97b5-179954ecdf2b/search_businesses?page=1&query=bakker+amsterdam&page_size=10' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kvk-nl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: kvk_nl_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.kvk_nl_api import Kvk, BusinessNotFound
client = Kvk()
# Search businesses in the trade register by keyword.
for biz in client.businesses.search(query="bakker amsterdam", limit=3):
print(biz.naam, biz.kvk_nummer, biz.rechtsvorm)
# Get a single search result for drill-down.
hit = client.businesses.search(query="restaurant rotterdam", limit=1).first()
if hit:
print(hit.naam, hit.activiteitomschrijving)
# Look up a specific business by KVK number; handle not-found.
try:
detail = client.businesses.get(kvk_nummer="52185532")
print(detail.naam, detail.inschrijvingstype)
if detail.bezoeklocatie:
print(detail.bezoeklocatie.straat, detail.bezoeklocatie.postcode)
except BusinessNotFound as e:
print(f"not found: {e.kvk_nummer}")
print("exercised: businesses.search, businesses.get")
Full-text search across the KVK Handelsregister (Dutch trade register). Matches business names, KVK numbers, addresses, and keywords. Returns paginated results filtered to currently registered (ingeschreven) businesses. Each result includes registration details, legal form, address, and activity description.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| queryrequired | string | Search term: business name, KVK number, address, or keyword. |
| page_size | integer | Number of results per page (1-50). |
{
"type": "object",
"fields": {
"page": "current page number",
"items": "array of business registration entries",
"total": "total number of matching results",
"page_size": "results per page"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"naam": "Bakker Renovaties Amsterdam",
"actief": true,
"kvk_nummer": "52185532",
"rechtsvorm": "Eenmanszaak",
"postlocatie": null,
"handelsnamen": [
"Bakker Renovaties Amsterdam"
],
"bezoeklocatie": {
"plaats": "Zwanenburg",
"straat": "Populierenlaan",
"postcode": "1161SR",
"huisnummer": "76"
},
"rechtsvorm_code": "EMZ",
"vestigingsnummer": "000022142878",
"inschrijvingstype": "Hoofdvestiging",
"inschrijvingsdatum": "2011-03-01",
"activiteitomschrijving": "Timmer- en tegelzetwerken. Elektra- en cv-installateur."
}
],
"total": 305,
"page_size": 10
},
"status": "success"
}
}About the KVK API
Searching the Handelsregister
The search_businesses endpoint accepts a query string that can be a business name, KVK number, street address, or keyword. Results are filtered to currently registered (ingeschreven) businesses only. Pagination is controlled via page (1-based) and page_size (1–50 results per page). The response returns total, page, page_size, and an items array of business registration entries, each containing registration details, legal form, and address data.
Looking Up a Specific Business
The get_business endpoint takes a single required parameter: kvk_nummer, an 8-digit KVK registration number (for example, 52185532). It returns all associated registration entries under the entries array, along with a total count. A single KVK number can map to multiple entries when the business operates branch offices — the response distinguishes between vestigingen (branch locations) and the rechtspersoon (legal entity record), giving you a complete structural picture of the organisation.
Data Coverage
All data reflects the KVK Handelsregister, which is the official Dutch trade register maintained by the Kamer van Koophandel. Coverage is limited to Netherlands-registered entities. The API surfaces registration metadata — legal form, address, and branch structure — for active registrations. Historical deregistered entries and detailed financial filings are not part of the current response schema.
The KVK API is a managed, monitored endpoint for kvk.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kvk.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kvk.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Verify a Dutch supplier's legal registration status before onboarding them as a vendor.
- Auto-fill company details in a B2B signup form by looking up a KVK number.
- Map all branch offices of a Dutch company using the vestigingen entries from
get_business. - Build a company enrichment pipeline that resolves business names to canonical KVK records.
- Screen counterparties in Netherlands-based contracts for valid active registration.
- Aggregate legal form distributions across industries by querying
search_businesseswith sector keywords. - Cross-reference address data from the Handelsregister against other Dutch public datasets.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does KVK have an official developer API?+
What does `get_business` return when a KVK number has multiple locations?+
entries array. Each entry represents either a branch location (vestiging) or the legal entity record (rechtspersoon). The total field tells you how many entries exist. A company with three branch offices and one head office would typically return four entries.