# Belgium KBO/BCE Company Scraper - Named Directors & NACEBEL (`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, Automation, Agents
- **Stats:** 3 total users, 1 monthly users, 95.5% 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 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

## 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, in bulk. There is no official public API for the KBO/BCE public search - this actor is the API.

**No login, no API key, nothing to configure** - a number or a name in, structured JSON out.

### Goes deeper than the GLEIF index

Most "Belgian company" tools just echo the shallow GLEIF index - enterprise number, name, address, legal form - and stop. **This actor 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, and 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.

### What data do you get?

One record 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", "since": "April 24, 2024" } ],
  "source": "KBO/BCE Public Search (kbopub.economie.fgov.be)",
  "sourceUrl": "https://kbopub.economie.fgov.be/kbopub/toonondernemingps.html?ondernemingsnummer=0417497106",
  "scrapedAt": "2026-06-28T00:00:00.000Z"
}
```

### How much does it cost?

**Pay per result** - you are not charged for Apify platform usage, only per company record. See the **Pricing** tab on this page for the current figure. The free Apify plan returns a small preview. No subscription, no minimum.

### Is it legal, and where does the data come from?

Data comes from the official **KBO/BCE Public Search** at [kbopub.economie.fgov.be](https://kbopub.economie.fgov.be/), operated by the Belgian FPS Economy. This actor reads the free public-search interface only - it does **not** bypass any login or paywall, and it does **not** access the non-public Belgian UBO register. Company-officer data is published by the register by law for transparency (see CJEU *Manni*, C-398/15). Use the data lawfully (KYC/AML, due diligence, B2B); the registry's reuse terms prohibit reuse of personal data for direct marketing.

### How do I use it?

Click **Try it** and look up companies by enterprise or VAT number (any format: `0417.497.106`, `0417497106`, `BE0417497106`):

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

Or search by name: `{ "searchMode": "byName", "searchQuery": "Colruyt", "activeOnly": true, "maxResults": 25 }`.

### Input options

| Field | Type | Description |
|------|------|-------------|
| `searchMode` | string | `byNumber` (exact lookup, best for KYC/enrichment) or `byName` (phonetic name search). Default `byNumber`. |
| `enterpriseNumbers` | array | Enterprise / VAT numbers (any format), used in `byNumber` mode. |
| `searchQuery` | string | Company name, used in `byName` mode. |
| `language` | string | Label language: `en`, `nl`, `fr`, `de` (data is identical). Default `en`. |
| `activeOnly` | boolean | Name search: return only active entities. Default `true`. |
| `maxResults` | integer | Cap on records extracted (`0` = no limit). Default `0`. |

### What you can do with it

- **KYC / KYB onboarding** - verify a Belgian counterparty's existence, status, and directors from the VAT number.
- **Due diligence & credit risk** - check the 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.

### Run it from code

```bash
## cURL - start a run and get the dataset back
curl -X POST "https://api.apify.com/v2/acts/regdata~belgium-kbo-company-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "searchMode": "byNumber", "enterpriseNumbers": ["0417.497.106"] }'
```

```javascript
// Node.js - apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('regdata/belgium-kbo-company-scraper').call({ searchMode: 'byNumber', enterpriseNumbers: ['0417.497.106'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
## Python - apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("regdata/belgium-kbo-company-scraper").call(run_input={"searchMode": "byNumber", "enterpriseNumbers": ["0417.497.106"]})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Integrations

Runs anywhere Apify does: call it from the **REST API**, **schedule** recurring enrichment, pipe results into **n8n / Make / Zapier**, or use it from any **MCP client** (Claude, Cursor) via [mcp.apify.com](https://mcp.apify.com).

### FAQ

**Is it legal?** Yes. It reads the free public KBO/BCE search; officer data is published by law for transparency (CJEU *Manni*). It does not touch the non-public UBO register. Respect the registry's reuse terms (no personal-data reuse for direct marketing).

**Do I need an account, API key, or proxy?** No - none of them. Just an Apify account.

**byNumber vs byName?** `byNumber` is an exact lookup (best for KYC / enrichment); `byName` is the registry's phonetic search (refine common names with a place or legal form).

**A company has no directors listed - why?** Some entities (VAT units, dormant subsidiaries) legitimately have no listed directors, so `functions` is empty. That is a correct answer, not a miss.

**What export formats are supported?** JSON, CSV, Excel, or XML, or read live via the API.

### Related actors

Part of a suite of official government registry actors - **no public API to build or maintain**, pay per result, nothing to configure.

| Country | Actors |
|---|---|
| Poland | [BDO](https://apify.com/regdata/bdo-waste-registry-scraper) · [CRBR](https://apify.com/regdata/crbr-beneficial-owners-scraper) · [KRS (financials)](https://apify.com/regdata/poland-krs-financial-scraper) · [EKW](https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper) · [KNF](https://apify.com/regdata/knf-registry-scraper) · [KRS (board)](https://apify.com/regdata/krs-fullnames-scraper) · [KRZ](https://apify.com/regdata/krz-debtor-scraper) · [MSiG](https://apify.com/regdata/msig-scraper) · [KYB check](https://apify.com/regdata/poland-kyb-check) · [PEP (Sejm)](https://apify.com/regdata/poland-parliamentary-pep-scraper) · [REGON (sites)](https://apify.com/regdata/polish-premises-prospector) · [REGON](https://apify.com/regdata/polish-regon-scraper) · [UOKiK](https://apify.com/regdata/uokik-clauses-scraper) |
| Germany | [Insolvenzbekanntmachungen](https://apify.com/regdata/germany-insolvency-scraper) · [Handelsregister](https://apify.com/regdata/germany-handelsregister-scraper) |
| Spain | [BORME](https://apify.com/regdata/borme-corporate-acts-scraper) · [Registro Mercantil](https://apify.com/regdata/spain-company-directory-scraper) · [Registro Público Concursal](https://apify.com/regdata/spain-concursal-scraper) |
| Italy | [INI-PEC](https://apify.com/regdata/italy-pec-lookup) · [Registro Imprese](https://apify.com/regdata/italy-registro-imprese-scraper) |
| Austria | [Ediktsdatei](https://apify.com/regdata/austria-ediktsdatei-scraper) · [WKO](https://apify.com/regdata/wko-business-directory-scraper) |
| France | [Societe.com](https://apify.com/regdata/societe-com-scraper) |
| Belgium | **KBO / BCE (this actor)** |
| Czechia | [ISIR](https://apify.com/regdata/czech-isir-insolvency-scraper) |
| Slovakia | [RPVS](https://apify.com/regdata/slovakia-rpvs-ubo-scraper) |
| Cyprus | [DRCOR](https://apify.com/regdata/cyprus-drcor-company-scraper) |
| Ireland | [CRO](https://apify.com/regdata/ireland-cro-company-scraper) |
| Portugal | [Publicações MJ](https://apify.com/regdata/portugal-corporate-acts-scraper) |
| Nigeria | [CAC](https://apify.com/regdata/nigeria-cac-company-scraper) |
| Colombia | [RUES](https://apify.com/regdata/colombia-rues-company-scraper) |
| USA | [California SoS](https://apify.com/regdata/california-sos-business-scraper) · [California UCC](https://apify.com/regdata/california-ucc-lien-scraper) |
| UAE | [ADGM](https://apify.com/regdata/uae-adgm-public-register-scraper) |
| Global | [Adverse media](https://apify.com/regdata/adverse-media-screener) |

**Common combinations:** company register -> [UBO](https://apify.com/regdata/crbr-beneficial-owners-scraper) -> [insolvency/debtors](https://apify.com/regdata/krz-debtor-scraper) -> [adverse media](https://apify.com/regdata/adverse-media-screener) is the standard KYB/onboarding chain.

For Poland that whole chain is one call: [Poland KYB Risk Check](https://apify.com/regdata/poland-kyb-check) takes a NIP or KRS and returns identity, beneficial owners and insolvency - screened against the company **and every beneficial owner** - as a single verdict, billed once per completed check.

> Full suite: [apify.com/regdata](https://apify.com/regdata) · Callable from any MCP client via [mcp.apify.com](https://mcp.apify.com)

# 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

Download the OpenAPI definition: https://api.apify.com/v2/actors/351So27NN0PP66iBS/builds/zQCnxEWZoMgLDcakX/openapi.json
