# Belgium KBO/BCE Company Scraper - Directors & VAT (`regdata/belgium-kbo-company-scraper`) Actor

Scrape Belgium's KBO/BCE registry from the official public search: company identity, status, legal form, address, NACEBEL activity codes and NAMED directors/managers. Lookup by enterprise/VAT number or company name. No API key.

- **URL**: https://apify.com/regdata/belgium-kbo-company-scraper.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 company records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Belgium KBO/BCE Company Scraper - Directors, VAT & NACEBEL Activities

Extract official company data from Belgium's **KBO/BCE** (Crossroads Bank for Enterprises / *Kruispuntbank van Ondernemingen* / *Banque-Carrefour des Entreprises*) - the national company register. Get **enterprise & VAT number, status, legal form, registered address, NACEBEL activity codes** and, crucially, the **named directors and managers** of each company. Look up by enterprise/VAT number or by company name and get clean, structured JSON in seconds.

There is **no official public API** for the KBO/BCE public search. This actor is the API.

### Why this actor

Most "Belgian company" data tools just echo the shallow GLEIF index - enterprise number, name, address, legal form - and stop there. **This actor goes deeper:** it reads the official KBO/BCE detail page and returns the data the others omit:

- **Named directors / managers** (the `Functions` block) - with role and appointment date
- **NACEBEL activity codes** - VAT, NSSO and EC schemes, across the 2025 / 2008 / 2003 versions
- **Full registered-seat address**, status, legal situation, start date, establishment-unit count
- All registered **names and abbreviations** with language and "since" dates

That makes it a real **KYC / KYB / due-diligence** source for Belgium, not just a lead list.

### Zero setup - clean structured data, no scripting

The KBO/BCE public search has **no official API**. This actor handles access, polite rate-limiting and parsing for you - send a number or a name and get structured JSON back. **No API key, no proxy, no browser to script.** All access costs are already included in the price.

### Quick Start

Click **Try it** and look up companies by enterprise or VAT number:

```json
{
  "searchMode": "byNumber",
  "enterpriseNumbers": ["0417.497.106", "BE0400378485"]
}
````

Any common format works: `0417.497.106`, `0417497106` or `BE0417497106`.

Or search by name (uses the registry's phonetic search):

```json
{
  "searchMode": "byName",
  "searchQuery": "Colruyt",
  "activeOnly": true,
  "maxResults": 25
}
```

### Input

| Field | Type | Description |
|------|------|-------------|
| `searchMode` | string | `byNumber` (exact lookup, best for KYC/enrichment) or `byName` (phonetic name search). Default `byNumber`. |
| `enterpriseNumbers` | array | Enterprise / VAT numbers (used in `byNumber` mode). Any format. |
| `searchQuery` | string | Company name (used in `byName` mode). |
| `language` | string | Label/description language: `en`, `nl`, `fr`, `de`. The data is identical across languages. Default `en`. |
| `activeOnly` | boolean | Name search: return only active entities. Default `true`. |
| `maxResults` | integer | Cap on records extracted. `0` = no limit. Default `0`. |
| `minIntervalMs` | integer | Polite delay between requests. Default `400`. |
| `proxyConfiguration` | object | Optional - **not needed** (the portal has no anti-bot). Only for very high-volume runs. |

### Output

One dataset item per company:

```json
{
  "enterpriseNumber": "0417.497.106",
  "vatNumber": "BE0417497106",
  "name": "Anheuser-Busch InBev",
  "status": "Active",
  "legalSituation": "Normal situation",
  "startDate": "August 2, 1977",
  "entityType": "Legal person",
  "legalForm": "Public limited company",
  "address": {
    "full": "Grand-Place 1, 1000 Bruxelles",
    "street": "Grand-Place 1",
    "postalCode": "1000",
    "municipality": "Bruxelles",
    "country": "Belgium"
  },
  "establishmentUnits": 5,
  "activities": [
    { "code": "70.100", "description": "Activities of head offices", "scheme": "VAT", "version": "2025", "since": "January 1, 2025" }
  ],
  "functions": [
    { "function": "Director", "personName": "Van Damme, Alexandre", "holderEnterpriseNumber": null, "since": "April 24, 2024" }
  ],
  "names": [ { "value": "Anheuser-Busch InBev", "note": "Name in French, since October 11, 2016", "since": "October 11, 2016" } ],
  "source": "KBO/BCE Public Search (kbopub.economie.fgov.be)",
  "sourceUrl": "https://kbopub.economie.fgov.be/kbopub/toonondernemingps.html?lang=en&ondernemingsnummer=0417497106",
  "scrapedAt": "2026-06-28T00:00:00.000Z"
}
```

### Common use cases

- **KYC / KYB onboarding** - verify a Belgian counterparty's existence, status and directors from the VAT number.
- **Due diligence & credit risk** - check legal situation (e.g. bankruptcy), activity codes and management.
- **B2B data enrichment** - resolve enterprise/VAT numbers to legal name, address and NACEBEL sector.
- **Sales & market research** - build a sector map of active Belgian entities by name.

### Data source, freshness & compliance

- **Source:** the official KBO/BCE **Public Search** (`kbopub.economie.fgov.be`), operated by the Belgian FPS Economy. Every record is stamped with its exact `sourceUrl` and retrieval timestamp.
- **Public, free data only.** This actor reads the free public-search interface; it does **not** bypass any login or paywall, and it does **not** access the non-public Belgian UBO register.
- **Query-driven by design.** It looks up the specific companies you ask for - it is not a bulk copy of the register.
- Company-officer data is published by the register by law for transparency (see CJEU *Manni*, C-398/15). Use the data lawfully (e.g. KYC/AML, due diligence, B2B) and respect applicable data-protection rules; the registry's reuse terms prohibit reuse of personal data for direct marketing.

### Notes

- Belgian enterprise numbers are 10 digits (e.g. `0417.497.106`); the VAT number is `BE` + those 10 digits.
- Some entities (VAT units, dormant subsidiaries) legitimately have no listed directors - `functions` is then empty.
- Phonetic name search is capped by the registry; refine the name (add a place or legal form) for very common names.

# Actor input Schema

## `searchMode` (type: `string`):

How to look up companies. "byNumber" fetches exact companies by enterprise/VAT number (most precise, ideal for KYC/KYB enrichment). "byName" runs the official phonetic name search and then fetches each match.

## `enterpriseNumbers` (type: `array`):

Belgian enterprise numbers or VAT numbers to look up (used when searchMode = byNumber). Any common format works: "0417.497.106", "0417497106" or "BE0417497106".

## `searchQuery` (type: `string`):

Company name to search for (used when searchMode = byName). Uses the registry's phonetic search, so minor spelling differences still match. Add a place or legal form to narrow very common names.

## `language` (type: `string`):

Language of the registry labels/descriptions (NACEBEL activity descriptions, status text). The data itself is identical across languages.

## `activeOnly` (type: `boolean`):

When searching by name, return only active (non-ceased) entities. Ignored in byNumber mode.

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

Maximum number of company records to extract. 0 means no limit. Useful to cap broad name searches.

## `minIntervalMs` (type: `integer`):

Polite delay between requests to the registry. Lower is faster but less courteous; 400ms is a safe default.

## Actor input object example

```json
{
  "searchMode": "byNumber",
  "enterpriseNumbers": [
    "0417.497.106",
    "BE0403019261"
  ],
  "searchQuery": "Colruyt",
  "language": "en",
  "activeOnly": true,
  "maxResults": 0,
  "minIntervalMs": 400
}
```

# Actor output Schema

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

KBO/BCE company records in the default dataset.

# 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 = {
    "enterpriseNumbers": [
        "0417.497.106"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/belgium-kbo-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 = { "enterpriseNumbers": ["0417.497.106"] }

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

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

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

```

## CLI example

```bash
echo '{
  "enterpriseNumbers": [
    "0417.497.106"
  ]
}' |
apify call regdata/belgium-kbo-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=regdata/belgium-kbo-company-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Belgium KBO/BCE Company Scraper - Directors & VAT",
        "description": "Scrape Belgium's KBO/BCE registry from the official public search: company identity, status, legal form, address, NACEBEL activity codes and NAMED directors/managers. Lookup by enterprise/VAT number or company name. No API key.",
        "version": "1.0",
        "x-build-id": "Q1ty0gzI63aQISuA2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/regdata~belgium-kbo-company-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-regdata-belgium-kbo-company-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/regdata~belgium-kbo-company-scraper/runs": {
            "post": {
                "operationId": "runs-sync-regdata-belgium-kbo-company-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/regdata~belgium-kbo-company-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-regdata-belgium-kbo-company-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchMode": {
                        "title": "Search mode",
                        "enum": [
                            "byNumber",
                            "byName"
                        ],
                        "type": "string",
                        "description": "How to look up companies. \"byNumber\" fetches exact companies by enterprise/VAT number (most precise, ideal for KYC/KYB enrichment). \"byName\" runs the official phonetic name search and then fetches each match.",
                        "default": "byNumber"
                    },
                    "enterpriseNumbers": {
                        "title": "Enterprise / VAT numbers",
                        "type": "array",
                        "description": "Belgian enterprise numbers or VAT numbers to look up (used when searchMode = byNumber). Any common format works: \"0417.497.106\", \"0417497106\" or \"BE0417497106\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Company name",
                        "type": "string",
                        "description": "Company name to search for (used when searchMode = byName). Uses the registry's phonetic search, so minor spelling differences still match. Add a place or legal form to narrow very common names."
                    },
                    "language": {
                        "title": "Output language",
                        "enum": [
                            "en",
                            "nl",
                            "fr",
                            "de"
                        ],
                        "type": "string",
                        "description": "Language of the registry labels/descriptions (NACEBEL activity descriptions, status text). The data itself is identical across languages.",
                        "default": "en"
                    },
                    "activeOnly": {
                        "title": "Active entities only (name search)",
                        "type": "boolean",
                        "description": "When searching by name, return only active (non-ceased) entities. Ignored in byNumber mode.",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of company records to extract. 0 means no limit. Useful to cap broad name searches.",
                        "default": 0
                    },
                    "minIntervalMs": {
                        "title": "Min interval between requests (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Polite delay between requests to the registry. Lower is faster but less courteous; 400ms is a safe default.",
                        "default": 400
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
