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

Webhooks by Zapier
# 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:

StepTypeWhat it does
1TriggerNew row, new form response, new deal
2FilterContinue only if the KVK number is 8 digits
3Webhooks by Zapier, GETOur lookup
4ActionWrite 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?
No. There is no published KVKBase Zapier app. You connect through Webhooks by Zapier, the built-in step that can call any REST API. It requires a paid Zapier plan, because Webhooks is a premium app.
Which action should I pick?
GET for a normal lookup, with the full URL and an Authorization header. Custom Request only when you need a POST, for example for the batch endpoint, since that is where you supply the JSON body yourself.
Can I enrich hundreds of companies this way?
Only up to a point. A trigger that yields hundreds of rows fires the same number of calls and hits the per-minute limit. For real bulk work a script against the batch endpoint is faster and cheaper than one Zap run per row.
Is my API key safe inside a Zap?
It sits as plain text in the step configuration and anyone with edit access to the Zap can read it. Use a separate key for automations so you can revoke it without breaking your other integrations.

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