Guide · Belgium · Lookup and validation
Belgium company data API: look up and validate an enterprise number
A customer types an enterprise number, a Belgian VAT number or the first letters of a name; your form fills in the legal name, legal form, status and registered address from the Crossroads Bank for Enterprises (KBO/BCE). One key, and the same response shape as every other country the API covers.
Belgium at a glance
Register: Crossroads Bank for Enterprises (KBO/BCE)
Identifiers Enterprise number
- Company recordsYes
- OfficersNo
- Insolvency noticesIn the status only
- Corporate eventsRegister changes
- MonitoringYes
- Financial statementsListed companies
- VAT numberFrom the register, if VAT-registered
- NACE classYes
- UpdatedEvery working day
The guide below states the limits of every row. Financial statements are on the Scale plan and above; the other plans and the free trial get 10 calls a month.
Price From EUR 9.99 a month (Starter plan)
In other languagesNederlandsFrançais
Sign upTry Belgium live
Look up a company in Belgium with the shared demo key. No sign-up.
The demo key is shared and capped per page view; your own key has the limits of your plan.
What you get, and what you do not
Company records from the Crossroads Bank for Enterprises (KBO/BCE): legal name, legal form, status, registered address, activity code and dates; with register-change events and monitoring, but no officers, no registry-compliance signal and no insolvency notices (a bankruptcy shows in the company status and in the register-change events), and enterprises of natural persons (eenmanszaak / entreprise individuelle) are never served.
That is the record of a Belgian company as an onboarding form, an invoice or a CRM row needs it. If you need board members, financial statements of companies that are not listed, or insolvency notices for Belgium, this is not the API for it. If you want to know what the register itself is, start with What is the KBO? (also in het Nederlands and en français).
What the Belgian record gives your product
- Exact match on the enterprise number.
company_number=0417.497.106withcountry=BE. The dots and spaces are optional. The mod-97 check digits are verified server-side, and a number that fails them, or has the wrong length, is a 400 validation error, so a typo never looks like a missing company. - The VAT number as an alias.
vat=BE0417497106reaches the same company. The Belgian VAT number isBEplus the ten digits of the enterprise number. - Autocomplete by name.
?name=is a normalised, partial match ranked by a match score. Call it on every keystroke; each call is one request. - The fields a form needs. Legal name, in Dutch, French or German as registered; the KBO legal-form code with its label; status; registered address, postal code and city; the main activity in NACE-BEL 2025 where the register publishes one; and the start date.
- The register's own state. A company in dissolution, liquidation, restructuring or bankruptcy carries that in
statusand is not served as plain active. - One schema for every country. The same response shape as
country=ES|FR|GB|IE|PL|NO|FI|SE|BE|HR|DK|EE|SK|CH|LV|CY|RO|US|LT|CA|AU|JP|IL|SG|CO|TW|BR|CZ|DE|AR|UA|RS|SI|EC|NL|CL|NL|MX.
| Field | What it holds for Belgium |
|---|---|
company_number | The enterprise number, written 0NNN.NNN.NNN: 0417.497.106. |
company_name | The official name, in Dutch, French or German as registered. |
legal_form, local_legal_form, local_legal_form_name | The standard abbreviation in legal_form (null when the form is not mapped), the KBO legal-form code in local_legal_form (such as 014 for the NV/SA, 610 for the BV/SRL or 017 for the VZW/ASBL) and its label in local_legal_form_name. |
local_status, status, stage | The register's own value in local_status: one of active, in_dissolution, in_liquidation, in_restructuring, bankrupt, merged or deregistered. status carries the standard reading and stage the lifecycle stage, null where the value is not recognised. |
address, postal_code, city | The registered seat where the register holds one. |
activity_code | The main activity in NACE-BEL 2025, which corresponds to NACE Rev. 2.1. Served where the register publishes one. |
founding_date | The start date of the entity. |
Validate before you call
An enterprise number is ten digits starting with 0 or 1, and its last two digits are 97 minus the first eight digits modulo 97. That makes it one of the identifiers you can reject offline, in your own code, before it costs a call. The identifier validator runs the same arithmetic in the browser; this is the version to paste into a form handler:
// Belgian enterprise number: 10 digits starting 0 or 1; the last two are 97 - (first eight mod 97)
export function checkEnterpriseNumber(input) {
const digits = String(input).replace(/[\s.]/g, '')
if (!/^[01]\d{9}$/.test(digits)) return null
const check = 97 - (Number(digits.slice(0, 8)) % 97)
if (check !== Number(digits.slice(8))) return null
return digits.slice(0, 4) + '.' + digits.slice(4, 7) + '.' + digits.slice(7)
}
checkEnterpriseNumber('0417.497.106') // '0417.497.106' (Anheuser-Busch InBev)
checkEnterpriseNumber('0417 497 107') // null: the check digits should be 06A passing check says the number is well-formed, never that the company exists or is still registered. That is what the lookup is for.
Three calls
# 1. By enterprise number curl -H "Authorization: Bearer rk_live_..." \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?company_number=0417.497.106&country=BE" # 2. By the VAT number curl -H "Authorization: Bearer rk_live_..." \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?vat=BE0417497106&country=BE" # 3. By name, for a type-ahead field curl -H "Authorization: Bearer rk_live_..." \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?name=proximus&country=BE&limit=5"
To resolve a list, POST /companies/lookup takes up to 100 items in one call, each one counted as one request:
curl -X POST "https://api.prometiam.com/functions/v1/risk-api/companies/lookup" \
-H "Authorization: Bearer rk_live_..." \
-H "Content-Type: application/json" \
-d '{"items":[{"country":"BE","company_number":"0417.497.106"},{"country":"BE","vat":"BE0403227515"},{"country":"BE","name":"Proximus"}]}'The search returns the record's id; pass it to GET /companies/{id} for the detail.
An autocomplete endpoint in Node
Your server keeps the key and proxies the search; the form calls your server. A well-formed enterprise number goes to the company_number filter, anything else is a name, and a malformed number is rejected before it costs a call:
// server: /api/be-company?q=... (keep the key out of the browser)
app.get('/api/be-company', async (req, res) => {
const q = String(req.query.q || '').trim()
const looksLikeId = /^[\d\s.]+$/.test(q)
const enterprise = looksLikeId ? checkEnterpriseNumber(q) : null
if (looksLikeId && !enterprise) return res.status(422).json({ error: 'That is not a valid enterprise number' })
const params = new URLSearchParams({ country: 'BE', limit: '6', ...(enterprise ? { company_number: enterprise } : { name: q }) })
const r = await fetch('https://api.prometiam.com/functions/v1/risk-api/companies/search?' + params,
{ headers: { Authorization: 'Bearer ' + process.env.PROMETIAM_API_KEY } })
const { data } = await r.json()
res.json(data.map(c => ({ id: c.id, name: c.company_name, number: c.company_number, form: c.local_legal_form_name || c.legal_form,
status: c.status, city: c.city, postal_code: c.postal_code, address: c.address })))
})What Belgium does not carry
- Officers and board members. Not part of the Belgian record.
- Gazette notices. The register-change events are not gazette notices: they show a change to the name, status, legal form or registered address dated when it first appears in the register data, and none is dated before 2026-09-30. Monitoring is available for every live country except France and Chile.
- A registry-compliance signal. Not served for Belgium.
- Insolvency notices. Belgium is not one of the sixteen insolvency markets (FR, DE, GB, AT, CH, NO, FI, US, NL, DK, HR, SE, ES, LV, EE, SG). The register's bankruptcy, liquidation and restructuring states are in the company's
statusand in the register-change events. - Financial statements. Listed companies only, from the Scale plan: their ESEF annual financial reports (IFRS, mostly consolidated). Not every listed company's report is held. Other Belgian companies have none.
- Beneficial owners. Not served for Belgium.
- Enterprises of natural persons. An eenmanszaak (entreprise individuelle) is never served, so a lookup of one returns nothing even though the business exists.
Pricing
Belgium is included in every tier at no upcharge. Starter begins with a 14-day trial: 500 credits in total, 10 requests/minute, card required, nothing charged for 14 days. Subscribing keeps the same key working. Then Starter at €9.99/month (1,000 credits, 60 requests/minute), Professional at €29.99/month (10,000 credits, 120 requests/minute) and Scale at €99.99/month (50,000 credits, 300 requests/minute), monthly or annual; annual is ten months' price for twelve. A company record costs 1 credit, an autocomplete keystroke costs 1 credit, and error responses cost nothing, so a product onboarding a few hundred Belgian customers a month stays inside Starter.
FAQ
How do I look up a Belgian company by enterprise number from an API?
Call GET /companies/search?company_number=0417.497.106&country=BE. The dots and spaces are optional and the check digits are verified server-side; a malformed number is a 400 validation error rather than an empty list.
Can I look up a Belgian company by VAT number?
Yes: vat=BE0417497106 with country=BE resolves to the same company as the enterprise number.
Does the Belgian record include officers, company events or insolvency notices?
Partly. Belgium is company-level: legal name, legal form, status, registered address, activity code and dates. There are no officers, no registry-compliance signal and no insolvency notices, because Belgium is not one of the sixteen insolvency markets. Its bankruptcy, liquidation and restructuring states are in the company's status and in the register-change events (name, status, legal form and registered address, dated when the change first appears in the register data, none before 2026-09-30), and monitoring is available.
Does it cover Belgian sole traders?
No. Enterprises of natural persons are never served, so a lookup of one returns nothing even though the business exists.
Can I call the API from the browser?
You can, but a key in the browser is public. Proxy the search through your server, as in the sample above. Rate limits are per key.
Is there a way to try it before signing up?
Yes: the free enterprise number lookup runs the same call with a shared key, and a Dutch-language KBO number search is there for Dutch-speaking users.
Everything about Belgium
Free tools
Comparisons
In other languages
Nederlands 10
More countries: Western Europe
SpainFranceUnited KingdomIrelandSwitzerlandGermanyNetherlandsAll data by country and type
Contains data from the Crossroads Bank for Enterprises (KBO/BCE), FPS Economy; see data_as_of for the date of the update