Fgov APIkbopub.economie.fgov.be ↗
Access Belgian KBO/BCE public registry data: company names, legal forms, directors, NACE activity codes, and capacities via a single API endpoint.
What is the Fgov API?
The KBO/BCE API exposes 10 structured fields from Belgium's Crossroads Bank for Enterprises public registry through a single get_company endpoint. Given any Belgian enterprise number, it returns the entity's official name, registered address, legal form, status, contact details, a list of function holders (directors and officers), NACE activity codes, and registered capacities — covering every public-facing field the registry makes available for a given entity.
curl -X GET 'https://api.parse.bot/scraper/7d834100-e7dc-47ab-a072-36d9f5e579b3/get_company?enterprise_number=0417497106' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kbopub-economie-fgov-be-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: KBO SDK — bounded, re-runnable; every call capped."""
from parse_apis.KBO_Public_Search_API import KBO, CompanyNotFound
client = KBO()
# Fetch a company by enterprise number (Anheuser-Busch InBev)
try:
company = client.companies.get(enterprise_number="0417497106")
print(company.name, company.status, company.legal_form)
print("Address:", company.address)
except CompanyNotFound as e:
print(f"not found: {e.enterprise_number}")
# Inspect function holders — first_name/last_name for persons, entity_name for enterprises
for holder in company.functions[:3]:
print(holder.role, holder.last_name, holder.first_name, holder.since, holder.end_date)
# Check activities
for activity in company.activities[:2]:
print(activity.nace_code, activity.description)
print("exercised: companies.get")
Retrieve full public details of a Belgian registered entity by its enterprise number. Returns general information (name, status, legal form, address), the list of function holders (directors, officers) with their roles, NACE activity codes, and registered capacities. A single round-trip; no pagination.
| Param | Type | Description |
|---|---|---|
| enterprise_numberrequired | string | Belgian enterprise number (KBO/BCE). Accepts 9 or 10 digits, with or without dots (e.g. '0417497106' or '0417.497.106'). Leading zeros preserved. |
{
"type": "object",
"fields": {
"name": "string — official company name",
"email": "string or null — email address",
"phone": "string or null — phone number",
"status": "string — entity status (e.g. Actief)",
"address": "string or null — registered office address",
"website": "string or null — website URL",
"functions": "array of function holders with role, first_name (null for enterprise holders), last_name (null for enterprise holders), entity_name (enterprise number when held by an enterprise, null for persons), since date, and end_date (null if still active)",
"activities": "array of NACE activity codes with type, code, description, and since date",
"capacities": "array of registered capacities with name and since date",
"legal_form": "string — legal form (e.g. Naamloze vennootschap)",
"start_date": "string — registration start date",
"entity_type": "string — type of entity (e.g. Rechtspersoon)",
"abbreviation": "string or null — official abbreviation",
"legal_situation": "string — legal situation (e.g. Normale toestand)",
"enterprise_number": "string — formatted as 0000.000.000"
},
"sample": {
"name": "Anheuser-Busch InBev",
"email": null,
"phone": null,
"status": "Actief",
"address": "Grote Markt 1 1000 Brussel",
"website": null,
"functions": [
{
"name": "Biggar , Lynne",
"role": "Bestuurder",
"since": "26 april 2023"
},
{
"name": "Van de Put , Dirk",
"role": "Bestuurder",
"since": "26 april 2023"
}
],
"activities": [
{
"type": "BTW",
"since": "1 januari 2025",
"nace_code": "70.100",
"description": "Activiteiten van hoofdkantoren"
}
],
"capacities": [
{
"name": "Werkgever RSZ",
"since": "30 april 1988"
}
],
"legal_form": "Naamloze vennootschap",
"start_date": "2 augustus 1977",
"entity_type": "Rechtspersoon",
"abbreviation": "AB Inbev",
"legal_situation": "Normale toestand",
"enterprise_number": "0417.497.106"
}
}About the Fgov API
What the API covers
The get_company endpoint accepts a Belgian enterprise number — 9 or 10 digits, with or without dots (e.g. 0417497106 or 0417.497.106) — and returns the full public record for that entity from the KBO/BCE registry. The response includes the official company name, legal_form (e.g. Naamloze vennootschap), current status (e.g. Actief), address, and any available email, phone, or website contact details.
Functions, activities, and capacities
Beyond the basic identity fields, the endpoint returns three arrays that describe the entity's people and operations. The functions array lists each function holder with their role (e.g. director, statutory auditor), name, and the date the role started. The activities array provides NACE codes with a type classifier, the numeric code, a human-readable description, and a since date — useful for industry classification and due-diligence checks. The capacities array lists any registered operational capacities and their effective dates.
Input format and lookups
The sole required parameter for get_company is enterprise_number. The endpoint normalizes common formats, so you can pass the number with or without dot separators. The registry covers all legal forms registered with the Belgian KBO/BCE, including corporations, partnerships, non-profits (VZW/ASBL), and sole traders. If the entity is not found or the number is invalid, the endpoint returns a structured error rather than an empty record.
The Fgov API is a managed, monitored endpoint for kbopub.economie.fgov.be — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kbopub.economie.fgov.be changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kbopub.economie.fgov.be API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Verify the legal status and registered address of a Belgian supplier before onboarding.
- Extract NACE activity codes from the
activitiesarray to classify Belgian companies by industry. - Build a director cross-reference tool using the
functionsarray to map individuals across multiple entities. - Automate KYC checks by retrieving legal form and status for Belgian counterparties.
- Enrich a CRM with official contact fields (
email,phone,website) sourced directly from the public registry. - Monitor changes in registered capacities or function holders by periodically polling
get_companyfor key enterprise numbers. - Validate enterprise numbers submitted by customers by checking they resolve to an active KBO/BCE record.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the KBO/BCE have an official developer API?+
What does the `functions` field contain, and how is it structured?+
functions array returns one object per function holder. Each object includes the person or entity's name, their role title (e.g. Zaakvoerder, Commissaris), and a since date indicating when they took on that role. Ended mandates that the registry no longer shows as active are not included in the response.Does the API return historical changes — for example, previous addresses or former directors?+
get_company endpoint returns the current public record only: active status, current address, active function holders, and current activities. Historical changes such as past addresses or previous directors are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting historical registry entries if the source makes them available.Can I search for companies by name or activity code rather than by enterprise number?+
enterprise_number as input; there is no search-by-name or filter-by-NACE-code endpoint. You can fork this API on Parse and revise it to add a name-search or activity-based lookup endpoint.Are non-profit organizations (VZW/ASBL) and sole traders covered, or only corporations?+
get_company, and the legal_form field in the response identifies the entity type.