Netherlands Company Search (KVK) API and MCP — Find Companies by Name
Send a name and get back matching Dutch companies: KVK number, name, status, legal form, registration date, address, activity description, trade names and branch details, with a link to each record. Set max_items to control the batch.
- You send
- a company name
- You get back
- matching Dutch companies with KVK number, status, legal form, address, activity, trade names and branch number
- Coverage
- Netherlands — entities on KVK Handelsregister.
- Price
- 1 point per returned record — $1 per 1,000
- Billed per record actually returned, capped by max_items. A request that returns nothing costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| KVK Handelsregister directly | Type the name into KVK Handelsregister and read the results | Usually free, sometimes per-document | A different interface, language and data shape for every country you add |
| Collecting it yourself | Build and host a crawler per register, then keep each one alive | Infrastructure and maintenance | Registers change their pages without warning, and nobody is on the hook when yours breaks |
| NeuralVerge | One request, the same shape as every other source in the catalog | $1 per 1,000, misses not billed | Covers Netherlands — other countries are separate sources with the same request format |
What you get back
Every field in the example response below.
| Field | Type | Description |
|---|---|---|
session_id | string | Id of this run, for tracing. |
kind | string | Source type of the response. |
keyword | string | The search text you sent. |
max_items | number | The cap you set on returned records. |
start_page | number | Results page the search started from. |
partial | boolean | Whether the result set is incomplete. |
human | string | Readable summary with the number of results and matches found. |
total_points | number | Points charged: one per returned record. |
machine.total_items | number | Records returned in this batch. |
machine.first_item | object | The first returned record, same shape as one entry of items. |
machine.items[] | array | The returned records. |
machine.total_found | number | Matches the register reports for the search; null when it does not report one. |
machine.page_count | number | Result pages read. |
machine.blocked | boolean | Whether the register refused the request. |
machine.proxy_traffic_bytes | number | Size of the data transferred for the run, in bytes. |
machine.items[].registration_number | string | KVK number. |
machine.items[].name | string | Company or establishment name. |
machine.items[].status | string | Registration status, e.g. Ingeschreven (registered). |
machine.items[].address | string | Visiting address. |
machine.items[].url | string | Link to the listing on the register. |
machine.items[].company_type | string | Legal form. |
machine.items[].incorporation_date | string | Registration date (YYYY-MM-DD). |
machine.items[].legal_form_code | string | Short legal-form code, e.g. BV. |
machine.items[].branch_number | string | Branch (vestiging) number. |
machine.items[].registration_type | string | Hoofdvestiging (head office) or another type. |
machine.items[].activity | string | Activity description in Dutch. |
machine.items[].trade_names[] | array | Trade names. |
machine.items[].former_trade_names[] | array | Former trade names; empty in the sample. |
machine.items[].statutory_name | string | Name as in the articles. |
machine.items[].postal_address | null | Null in the sample. |
Example response
A real response, as returned.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "nl_companies_search",
"keyword": "philips",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Netherlands — KVK Handelsregister — company search\n\n- **Keyword:** philips\n- **Results:** 2 of 1549 found\n- **Proxy traffic:** 31.9 KB",
"machine": {
"total_items": 2,
"first_item": {
"registration_number": "90428587",
"name": "Philips & Philips B.V.",
"status": "Ingeschreven",
"address": "Van Hengellaan 2, 1217AS Hilversum",
"url": "https://www.kvk.nl/zoeken/?source=handelsregister&q=90428587",
"company_type": "Besloten Vennootschap",
"incorporation_date": "2023-06-07",
"legal_form_code": "BV",
"branch_number": "000056159579",
"registration_type": "Hoofdvestiging",
"activity": "Het uitoefenen van de rechtspraktijk als advocaat.",
"trade_names": [
"Philips & Philips B.V."
],
"former_trade_names": [],
"statutory_name": "Philips & Philips B.V.",
"postal_address": null
},
"items": [
{
"registration_number": "90428587",
"name": "Philips & Philips B.V.",
"status": "Ingeschreven",
"address": "Van Hengellaan 2, 1217AS Hilversum",
"url": "https://www.kvk.nl/zoeken/?source=handelsregister&q=90428587",
"company_type": "Besloten Vennootschap",
"incorporation_date": "2023-06-07",
"legal_form_code": "BV",
"branch_number": "000056159579",
"registration_type": "Hoofdvestiging",
"activity": "Het uitoefenen van de rechtspraktijk als advocaat.",
"trade_names": [
"Philips & Philips B.V."
],
"former_trade_names": [],
"statutory_name": "Philips & Philips B.V.",
"postal_address": null
},
{
"registration_number": "17062897",
"name": "Philips Stadion",
"status": "Ingeschreven",
"address": "PSV-laan 81, 5616LX Eindhoven",
"url": "https://www.kvk.nl/zoeken/?source=handelsregister&q=17062897",
"company_type": "Stichting",
"incorporation_date": "1983-11-02",
"legal_form_code": "ST",
"branch_number": "000001978284",
"registration_type": "Hoofdvestiging",
"activity": "Het houden van aandelen van PSV N.V. en het bevorderen van het voetbal en andere sporten in het algemeen",
"trade_names": [
"Philips Stadion"
],
"former_trade_names": [],
"statutory_name": "Stichting PSV Voetbal",
"postal_address": null
}
],
"total_found": 1549,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 32628
},
"total_points": 2
}How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
Results come back in the same envelope as every other source: a session id, a readable summary, the structured result and the points charged.
curl -X POST https://api.neuralverge.ai/functions/v1/run-nl-companies-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"philips","max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Get the number for a full lookup.
Use legal form, activity and address to pick the right entity from a list.
Collect Dutch entities carrying a keyword, with activity text.
Check supplier names against the register.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Netherlands — entities on KVK Handelsregister.
Read at request time, so the answer reflects the register as it stands when you ask.
KVK Handelsregister is a public register. Every response carries the source URL it was read from and a session id you can trace.
- —Results are matches on name, so a brand name can return unrelated entities.
- —postal_address is null in the sample.
- —Name history and establishment lists are in Netherlands company, not here.
Questions, answered
machine.total_found reports the register's count (1,549 for philips in the sample).
Related sources
Try netherlands company search on your own data
One request format across every source in the catalog.