# KvK Scraper — Dutch Company Register (Netherlands) (`luminous_yukon_plg/kvk-netherlands-company-scraper`) Actor

Search the Dutch Chamber of Commerce register and export company records: KVK number, legal form, officers' registered address, trade names, SBI activity and registration date. Same output schema across every registry in this series.

- **URL**: https://apify.com/luminous\_yukon\_plg/kvk-netherlands-company-scraper.md
- **Developed by:** [nandoll mo](https://apify.com/luminous_yukon_plg) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## KvK Scraper — Dutch Company Register (Netherlands)

Search the Dutch Chamber of Commerce register (**Kamer van Koophandel**) and get clean,
structured company data — KVK number, legal form, registered address, trade names,
activity description and registration date.

No API key, no KvK account, no rate-limit paperwork. Give it a search term, get a
spreadsheet.

### What you get

Every row uses the same schema, whether you searched by name, KVK number, or city:

```json
{
  "registry": "kvk",
  "country": "NL",
  "registrationNumber": "22004749",
  "name": "Bakkerij Kik",
  "statutoryName": "Bakkerij Kik B.V.",
  "tradeNames": ["Bakkerij Kik"],
  "legalForm": "Besloten Vennootschap",
  "legalFormCode": "BV",
  "active": true,
  "isBranch": false,
  "branchNumber": "000000714860",
  "registeredAt": "2005-05-30",
  "activityDescription": "Beheer van vermogen.",
  "address": {
    "street": "Haven Noordzijde",
    "houseNumber": "17",
    "postalCode": "4318AB",
    "city": "Brouwershaven",
    "country": "NL"
  },
  "sourceUrl": "https://www.kvk.nl/zoeken/handelsregister/?handelsnaam=22004749",
  "scrapedAt": "2026-08-23T10:34:29.247Z"
}
```

Export as JSON, CSV, Excel or XML, or pull it straight from the API.

### What people use it for

| | |
| --- | --- |
| **KYB / AML onboarding** | Verify that a Dutch counterparty exists, is still registered, and matches the details they gave you |
| **B2B lead lists** | "Every active BV in Rotterdam with 'advocaat' in its activity" — as a spreadsheet, not 400 browser tabs |
| **Due diligence** | Registration date, legal form and address history before a deal or a credit decision |
| **Monitoring** | Schedule a run and watch for newly registered companies in a sector or city |

### Input

| Field | Type | Description |
| --- | --- | --- |
| `searchTerm` | string, **required** | Company name, KVK number, address, or keyword. `bakkerij Amsterdam`, `90428587`, `advocaat Rotterdam` |
| `maxResults` | integer | Stop after this many records. Default `100` |
| `includeInactive` | boolean | Also return deregistered companies. Default `false` |

```json
{
  "searchTerm": "advocaat Rotterdam",
  "maxResults": 500,
  "includeInactive": false
}
```

### Tips

**Narrow the term to go deeper.** The register returns at most **10,000 matches per
query**. A broad term like `holding` hits that ceiling long before it runs out of
companies — split it by city (`holding Utrecht`, `holding Eindhoven`) to reach the rest.
The run tells you when it hits the ceiling.

**Search by KVK number for an exact lookup.** Feed it an 8-digit number and you get that
company, not a fuzzy name match.

**Branches are separate rows.** A company with several establishments returns one row per
establishment, each with its own `branchNumber`. `isBranch` tells them apart, and rows are
de-duplicated on the registry's own identifiers, so you never get the same establishment
twice.

### Part of a series

This actor is one of a family of European company-register scrapers that all emit the
**same schema**. Point a second country at the same pipeline without changing a single
field name. More registries are being added — if you need a specific country, open an
issue.

### Notes

- Data comes from the public Dutch trade register, which the Chamber of Commerce
  publishes for anyone to consult. Each row carries a `sourceUrl` so you can verify it.
- Officer and company records can contain **personal data**. You are responsible for
  having a lawful basis under GDPR for whatever you do with it — this actor gives you the
  public record, not permission to use it for any purpose.
- The register is the source of truth; this actor reflects what it returned at
  `scrapedAt`, nothing more.

### Support

Found a company the actor gets wrong, or need a field it does not return yet? Open an
issue on the actor page — bug reports on real records are the fastest way to improve it.

# Actor input Schema

## `searchTerm` (type: `string`):

Company name, KVK number, address or keyword. Example: "bakkerij Amsterdam" or "90428587".

## `maxResults` (type: `integer`):

Stop after this many records. The register returns at most 10,000 matches per query — narrow the search to reach beyond that.

## `includeInactive` (type: `boolean`):

Also return entries no longer registered with the Chamber of Commerce.

## Actor input object example

```json
{
  "searchTerm": "bakkerij",
  "maxResults": 100,
  "includeInactive": false
}
```

# Actor output Schema

## `companies` (type: `string`):

All matched company records as JSON — one item per record, in the schema documented on the dataset.

## `companiesCsv` (type: `string`):

The same records as a spreadsheet, with the address split into columns.

## `summary` (type: `string`):

How many records were returned, how many duplicates were skipped, the register's total hit count, and whether the result window truncated the search.

## `datasetView` (type: `string`):

Human-readable table of the results.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerm": "bakkerij"
};

// Run the Actor and wait for it to finish
const run = await client.actor("luminous_yukon_plg/kvk-netherlands-company-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "searchTerm": "bakkerij" }

# Run the Actor and wait for it to finish
run = client.actor("luminous_yukon_plg/kvk-netherlands-company-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerm": "bakkerij"
}' |
apify call luminous_yukon_plg/kvk-netherlands-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luminous_yukon_plg/kvk-netherlands-company-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7zrkm7Ko5ubP8NrJO/builds/YP61O6Hf2zKj7gB2x/openapi.json
