# Belgium KBO Company Scraper — Directors, VAT & NACE Codes (`neuralverge/neuralverge-kbo-company`) Actor

Scrape any company in Belgium from the Belgian KBO/BCE register by enterprise number — name, legal form, status, address, start date, directors, characteristics, VAT & NSSO NACE-BEL activity codes and external links. Structured JSON, no API key. A miss costs only the small run fee.

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

## Pricing

from $5.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/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 Company Scraper — Directors, VAT & NACE Codes ✅ No API Key

Scrape any Belgian company from the **KBO/BCE** (Crossroads Bank for Enterprises,
kbopub.economie.fgov.be) by enterprise number — name, KBO number, legal form, status,
address, directors & functions, characteristics, VAT & NSSO NACE-BEL activity codes,
entity links and official external links. Powered by the Neuralverge API. **No API key
or account required**, and **you only pay for companies we actually find**.

Ideal for KYC/KYB, due diligence, compliance, lead enrichment and feeding company data
to AI agents.

### ✨ Why this Actor

- 🇧🇪 **Full KBO/BCE profile** — identity, functions, characteristics, VAT/NSSO activity
  codes, entity links and external links in one structured object.
- 💸 **Pay per the companies you get** — unresolved numbers are skipped and never
  billed. A miss costs only the $0.005 lookup fee — no empty, billable result rows.
- 🔑 **No API key or account** — extraction runs on the Neuralverge backend.
- ⚡ **Real-time & structured** — fresh data each run and one predictable JSON schema.

### 🔧 How it works

1. **Provide a Belgian enterprise number** (ondernemingsnummer, e.g. `725609983`, with or
   without dots) — or an advanced full KBO public-search URL.
2. **Run the Actor.** Fetching and AI-structuring the profile happens on the Neuralverge
   backend.
3. **Get one dataset row per company** — the source `url`, the extraction `settings`
   (including the JSON schema) and the structured `machine` object. Export to CSV,
   JSON or Excel, or pull it over the Apify API.

If the company can't be resolved, it's logged and **skipped without charge**.

### Input

One company per run.

| Field | Type | Notes |
|---|---|---|
| `companyNumber` | string | The Belgian enterprise number (ondernemingsnummer), with or without dots. |
| `companyUrl` | string | Advanced: a full KBO public-search URL to use instead of the number. |

```json
{
  "companyNumber": "725609983"
}
```

### What you'll receive

Each dataset row mirrors the Neuralverge system output and has three top-level blocks:

- **`url`** — the KBO profile URL that was scraped.
- **`settings`** — the extraction settings, including the full JSON schema used, at
  `settings.extract_schema_json`.
- **`machine`** — the structured result with these sections: `general_information`
  (kbo\_number, enterprise\_name, legal\_form, address, status, start\_date), `functions`,
  `entrepreneurial_skills`, `characteristics`, `authorisations`, `vat_activities`
  (NACE-BEL), `nsso_activities` (NACE-BEL), `financial_information`, `entity_links` and
  `external_links`.

> **Nulls & empty sections are normal.** Only data present in the KBO is filled — many
> entities have no `authorisations`, `entrepreneurial_skills` or `entity_links`, and
> `financial_information.last_filing_date` can be `null`.

#### Example output (real run)

A real dataset row from a KBO profile, shown **in full** — including the complete
extraction **schema** (`settings.extract_schema_json`) and the full **machine-readable
result** (`machine`). The `human` markdown summary is produced by the system but omitted
from the dataset.

```json
{
  "url": "https://kbopub.economie.fgov.be/kbopub/toonondernemingps.html?lang=en&ondernemingsnummer=725609983",
  "settings": {
    "has_schema": true,
    "country_code": "us",
    "extract_schema_json": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "title": "KBO Profile Data",
      "description": "Schema for extracting structured data from a Belgian Crossroads Bank for Enterprises (KBO) profile.",
      "type": "object",
      "properties": {
        "general_information": {
          "type": "object",
          "description": "General identification and contact information for the entity.",
          "properties": {
            "kbo_number": {
              "type": "string",
              "description": "The unique KBO number of the entity (e.g., '0123.456.789')."
            },
            "enterprise_name": {
              "type": "string",
              "description": "The official name of the enterprise."
            },
            "legal_form": {
              "type": "string",
              "description": "The legal form of the enterprise (e.g., 'NV', 'BV')."
            },
            "address": {
              "type": "string",
              "description": "The full, official registered address of the entity."
            },
            "status": {
              "type": "string",
              "description": "The current status of the entity (e.g., 'Active', 'Struck-off')."
            },
            "start_date": {
              "type": "string",
              "format": "date",
              "description": "The date the entity was started."
            }
          },
          "required": [
            "kbo_number",
            "enterprise_name"
          ]
        },
        "functions": {
          "type": "array",
          "description": "List of individuals and their functions or roles within the entity.",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "The full name of the person."
              },
              "role": {
                "type": "string",
                "description": "The function or role held by the person (e.g., 'Director', 'Founder')."
              },
              "start_date": {
                "type": "string",
                "format": "date",
                "description": "The date the function started."
              }
            },
            "required": [
              "name",
              "role"
            ]
          }
        },
        "entrepreneurial_skills": {
          "type": "array",
          "description": "List of proven entrepreneurial skills and qualifications.",
          "items": {
            "type": "object",
            "properties": {
              "skill": {
                "type": "string",
                "description": "The name or description of the skill or qualification."
              },
              "proof": {
                "type": "string",
                "description": "The method of proof for the skill (e.g., 'Diploma', 'Experience')."
              }
            },
            "required": [
              "skill"
            ]
          }
        },
        "characteristics": {
          "type": "array",
          "description": "Specific characteristics or classifications of the entity (e.g., 'Subject to VAT').",
          "items": {
            "type": "string"
          }
        },
        "authorisations": {
          "type": "array",
          "description": "Authorisations, licenses, or permits held by the entity.",
          "items": {
            "type": "object",
            "properties": {
              "authorisation_type": {
                "type": "string",
                "description": "The type or name of the authorisation."
              },
              "issuing_authority": {
                "type": "string",
                "description": "The authority that issued the authorisation."
              },
              "valid_from": {
                "type": "string",
                "format": "date",
                "description": "Start date of the authorisation's validity."
              }
            },
            "required": [
              "authorisation_type"
            ]
          }
        },
        "vat_activities": {
          "type": "object",
          "description": "Nacebel codes related to VAT activities.",
          "properties": {
            "nacebel_version": {
              "type": "string",
              "description": "The version of the Nacebel codes used (e.g., 'NACE-BEL 2008')."
            },
            "activities": {
              "type": "array",
              "description": "List of VAT activities.",
              "items": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "The Nacebel activity code."
                  },
                  "description": {
                    "type": "string",
                    "description": "The description of the activity."
                  }
                },
                "required": [
                  "code",
                  "description"
                ]
              }
            }
          }
        },
        "nsso_activities": {
          "type": "object",
          "description": "Nacebel codes related to NSSO (National Social Security Office) activities.",
          "properties": {
            "nacebel_version": {
              "type": "string",
              "description": "The version of the Nacebel codes used (e.g., 'NACE-BEL 2008')."
            },
            "activities": {
              "type": "array",
              "description": "List of NSSO activities.",
              "items": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "The Nacebel activity code."
                  },
                  "description": {
                    "type": "string",
                    "description": "The description of the activity."
                  }
                },
                "required": [
                  "code",
                  "description"
                ]
              }
            }
          }
        },
        "financial_information": {
          "type": "object",
          "description": "Summary of financial data, typically from annual reports.",
          "properties": {
            "last_filing_date": {
              "type": "string",
              "format": "date",
              "description": "Date of the last annual accounts filing at the National Bank of Belgium."
            }
          }
        },
        "entity_links": {
          "type": "array",
          "description": "Links and relationships to other legal entities.",
          "items": {
            "type": "object",
            "properties": {
              "linked_entity_name": {
                "type": "string",
                "description": "The name of the linked entity."
              },
              "linked_entity_kbo_number": {
                "type": "string",
                "description": "The KBO number of the linked entity."
              },
              "relationship_type": {
                "type": "string",
                "description": "The nature of the relationship (e.g., 'Parent company', 'Subsidiary', 'Establishment unit')."
              }
            },
            "required": [
              "linked_entity_name",
              "relationship_type"
            ]
          }
        },
        "external_links": {
          "type": "array",
          "description": "Relevant external web links for the entity.",
          "items": {
            "type": "object",
            "properties": {
              "link_description": {
                "type": "string",
                "description": "A description of the link (e.g., 'Official Website', 'National Bank of Belgium Record')."
              },
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The URL."
              }
            },
            "required": [
              "link_description",
              "url"
            ]
          }
        }
      },
      "required": [
        "general_information"
      ]
    }
  },
  "machine": {
    "general_information": {
      "kbo_number": "0725.609.983",
      "enterprise_name": "AVO BMW",
      "legal_form": "Private limited company",
      "address": "Rue des Cotillages 47, 4500 Huy",
      "status": "Active",
      "start_date": "2019-04-24"
    },
    "functions": [
      {
        "name": "Kostanyan, Avetik",
        "role": "Director",
        "start_date": "2023-12-08"
      }
    ],
    "entrepreneurial_skills": [],
    "characteristics": [
      "Employer National Social Security Office",
      "Subject to VAT",
      "Enterprise subject to registration"
    ],
    "authorisations": [],
    "vat_activities": {
      "nacebel_version": "2025",
      "activities": [
        {
          "code": "95.314",
          "description": "Bodywork repair (including painting)"
        },
        {
          "code": "47.811",
          "description": "Retail sale of cars and light motor vehicles (<= 3,5 tons)"
        }
      ]
    },
    "nsso_activities": {
      "nacebel_version": "2025",
      "activities": [
        {
          "code": "95.311",
          "description": "General repair and maintenance of cars and light motor vehicles (<= 3,5 tons)"
        }
      ]
    },
    "financial_information": {
      "last_filing_date": null
    },
    "entity_links": [],
    "external_links": [
      {
        "link_description": "Publications in National Gazette",
        "url": "https://www.ejustice.just.fgov.be/cgi_tsv/list.pl?language=fr&btw=0725609983&page=1&view_numac=0725609983"
      },
      {
        "link_description": "Publication of the annual accounts in the Central Balance Sheet Office",
        "url": "https://consult.cbso.nbb.be/consult-enterprise/0725609983"
      },
      {
        "link_description": "Database of statutes and powers of representation (notarial deeds)",
        "url": "https://statuts.notaire.be/stapor_v1/enterprise/0725609983/statutes"
      },
      {
        "link_description": "Employers' repertory",
        "url": "https://employer-identification-consult.socialsecurity.be/employer/enterprise/0725609983"
      },
      {
        "link_description": "Check withholding obligation",
        "url": "https://www.checkobligationderetenue.be"
      },
      {
        "link_description": "Central Register of Director Disqualifications - log in",
        "url": "https://justban.just.fgov.be/en"
      }
    ]
  }
}
```

> Genuine output from a live run — AVO BMW, with one director, three characteristics,
> VAT & NSSO NACE-BEL codes and six official external links resolved.

### Pricing

Pay per event — **$0.005 per run**, plus **$0.005 per company** ($5 per 1,000) returned to the dataset. **A miss costs only the $0.005 lookup fee — you are never charged the per-result price for a row you did not get.**

| Event | Price |
|---|---|
| Lookup (per run) | **$0.005** |
| Company returned (per dataset row) | **$0.005** |

Enterprise numbers that can't be resolved are **not charged the per-result price** — only the $0.005 lookup fee applies. Pricing is on top of your
Apify platform usage.

#### Free plan limits

Users on any **paid Apify plan** are not affected by anything in this section.

On the **Apify Free plan** all Neuralverge Actors share one budget, per user and per calendar month:
**15 runs in total, at most 5 of them on this Actor, and 35 returned rows.** A run that finds nothing
still counts, because the lookup is performed either way. LinkedIn People Search is metered
differently — one run there uses 25 of the 35 rows, because a full page of 25 profiles is bought
upstream whether or not all of them are returned. When a limit is reached the Actor stops gracefully
with a status message naming it; everything resets on the 1st of every month, and any paid Apify
plan removes all of it.

### Integrations & API

Results are stored in a standard Apify dataset — export as CSV, JSON, XML or Excel,
or fetch on demand through the [Apify API](https://docs.apify.com/api). The Actor
also plugs into Apify's integrations (Make, Zapier, n8n, webhooks) and can be called
from any [MCP](https://mcp.apify.com/) client.

### FAQ

**Do I need an account or API key?** No. Extraction runs on the Neuralverge backend.

**What identifier do I use?** The Belgian enterprise number (ondernemingsnummer), e.g.
`725609983` — with or without dots. You can also pass a full KBO public-search URL.

**Am I charged if a company isn't found?** No. You're billed only for rows returned to
the dataset.

***

**Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed
by, or sponsored by the Belgian FPS Economy or KBO/BCE. Data originates from the public
Crossroads Bank for Enterprises (kbopub.economie.fgov.be).

# Actor input Schema

## `companyNumber` (type: `string`):

The Belgian enterprise number (ondernemingsnummer) to look up, e.g. 725609983 (with or without dots). Apify Free plan: all Neuralverge Actors share one monthly budget per user — 15 runs in total, at most 5 of them on this Actor, and 35 returned rows; a run that finds nothing counts too. Any paid Apify plan removes the limit.

## `companyUrl` (type: `string`):

Optional. A full KBO public-search URL to use instead of the enterprise number.

## Actor input object example

```json
{
  "companyNumber": "725609983"
}
```

# Actor output Schema

## `results` (type: `string`):

Structured KBO/BCE company data (identity, functions, characteristics, NACE codes, external links), one row per matched company.

# 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 = {
    "companyNumber": "725609983"
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuralverge/neuralverge-kbo-company").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 = { "companyNumber": "725609983" }

# Run the Actor and wait for it to finish
run = client.actor("neuralverge/neuralverge-kbo-company").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 '{
  "companyNumber": "725609983"
}' |
apify call neuralverge/neuralverge-kbo-company --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Oa0E9IGKZk5AfiimP/builds/qfuXxS6ncVdv9P634/openapi.json
