{ "zapier" :
Dutch company lookup in Zapier without code
Short answer
We do not have a published Zapier integration. You connect with the built-in Webhooks by Zapier step: a GET to our lookup endpoint with an Authorization header. The response fields are then mappable in any following step. The same approach works in Make, n8n or Power Automate with a generic HTTP step.
# action: GET
URL: ".../v1/lookup/68750110"
Header Authorization:
"Bearer YOUR_API_KEY"
# available in the next step
name "Acme B.V."
address__city "Amsterdam"
vat__valid true
The honest setup: a generic webhook step
There is no KVKBase app in the Zapier directory. What does exist, and works well, is Webhooks by Zapier, the built-in step for calling any REST API. The same pattern applies to Make (HTTP module), n8n (HTTP Request node) and Power Automate (HTTP action).
A working Zap looks like this:
| Step | Type | What it does |
|---|---|---|
| 1 | Trigger | New row, new form response, new deal |
| 2 | Filter | Continue only if the KVK number is 8 digits |
| 3 | Webhooks by Zapier, GET | Our lookup |
| 4 | Action | Write to CRM, sheet or database |
Step 2 is almost always skipped and it is the cheapest step in the Zap. Without it an empty or half-filled cell costs you a task and a lookup, and returns an error.
Step 3 configuration:
Action: Webhooks by Zapier > GET
URL: https://api.kvkbase.nl/v1/lookup/68750110?enrich=true
Headers: Authorization | Bearer YOUR_API_KEY
Replace the KVK number with the field reference from your trigger. Keep the key in the header rather than the query string: query strings end up in logs, on Zapier’s side and on ours.
How Zapier hands you the response
Zapier flattens the JSON before you can map it. Nested objects are joined with a double underscore, so address.city becomes address__city and vat.valid becomes vat__valid. Arrays such as activities and websites get collapsed: if you need exactly one SBI code, use a Formatter or Code step to pick the right element instead of assuming the first one is the main activity.
Here is the trap everyone falls into once. Zapier builds the mapping menu from your test response. Test without enrich=true and employees__total, websites and statutoryName never appear in that menu, so you can never map them. Test with a sole trader and the whole vat block is missing, because the VAT number is only derived for a BV and an NV.
So always test with exactly the URL and query parameters you will use in production, and with a company that has every field you need. If you change the request later, retest the step before the new fields show up.
When you only have a company name
Triggers often hand you a name and no number. Then you chain two webhook steps: first GET /v1/search?... with the name, which returns candidates with their KVK numbers, then GET /v1/lookup/{kvkNumber} with the number from the first hit.
Only do that where you can live with being wrong. A Zap always takes the first result, and for a name like “Van der Berg Holding” there are ten of them. For anything touching an invoice or a contract, put a human in the loop: push the candidates to Slack or into an approval step and enrich afterwards. Note that this route costs two lookups per record instead of one.
What actually breaks in production
A 404 stops the Zap. When a company no longer exists we return NOT_FOUND with a 404. Webhooks by Zapier treats any non-2xx as a failure and halts that run. Across a list of five hundred rows that is five hundred errors in your task history. Use GET /v1/verify/{kvkNumber} when you only need to know whether a number exists, or catch it with an error path so the rest continues.
A bulk trigger hits the rate limit. A spreadsheet of two thousand rows arriving at once fires two thousand calls. The free plan allows ten per minute, Starter sixty. Zapier reports RATE_LIMIT_EXCEEDED and auto-replays, which hits the limit again. Add a Delay step, or do the initial load with a script and let the Zap handle only new rows.
Silently empty fields. Map vat__number when the response had no such block and Zapier happily writes an empty value. No error, just a blank column. If you care, filter on vat__valid is true before applying a reverse charge.
Quota is not the same as the rate limit. The per-minute limit comes back if you wait. Your monthly quota does not. A Zap accidentally stuck in a loop can burn a free quota of fifty lookups in one morning. Check GET /v1/me/quota when a Zap starts failing for no obvious reason.
For repeatable work across hundreds or thousands of companies, a small script using POST /v1/lookup/batch always beats one Zap run per row. Zapier is at its best for the single case: one new form response, one new deal, one new customer.
Frequently asked
Are you in the Zapier app directory?
Which action should I pick?
Can I enrich hundreds of companies this way?
Is my API key safe inside a Zap?
Updated:
One call gives you the whole company
KVK data, the derived VAT number and a live VIES check, in a single request. The free plan covers 50 lookups a month and needs no card.
- 50
- free lookups a month
- 1
- request instead of three
- 0
- cards, contracts or sales calls