Tools
search_company
billable
Resolve a company name to its Belgian enterprise (KBO/BCE) number, or list the names registered for a number.
Returns.
Candidates best match first: kbo_number, every registered name with its type and language (a name of one of its establishment units carries that unit's establishment_number), and match_score (1.0 for a direct number hit). Plus warnings[], which explains an empty result or a failed mod-97 check digit.
get_annual_accounts
billable
Fetch the annual accounts a company filed with the NBB: balance sheet, income statement, appropriation of results, social balance sheet and notes, each line with its official rubric code and a translated label.
Returns.
The accounts in the same call: status "completed" with the parsed filing in result (or, with detail kpis, the key figures, ratios and flags in kpis), plus cached: true when it was served from cache. A request that cannot be served returns status "failed" with a stable error {code, message}.
check_xbrl_availability
billable
List every annual account a company filed with the NBB and whether each is machine-readable (XBRL) or a PDF-only image — the years get_annual_accounts can serve.
Returns.
Filings newest first, each with fiscal_year, reference_number, model_type, deposit_type, deposit_date and xbrl_available. xbrl_available true means get_annual_accounts serves it as structured data; false means the NBB holds only a PDF.
get_company_activities
billable
List every NACE activity a company has registered at enterprise level: code, nomenclature version, classification and a readable description.
Returns.
Every registered activity: code, nomenclature version (2003, 2008 or 2025), classification (main, secondary or ancillary) and a description. Activities registered on an establishment are not included, only ones at enterprise level. Plus warnings[], which explains an empty result or a language fallback.
get_registered_office
billable
Fetch a company's registered office (registered seat) address as structured fields.
Returns.
Street, house number, box, zipcode, municipality, country and extra info. Country is null for Belgian addresses. A struck-off seat is still returned, flagged in warnings[].
list_establishments
billable
List a company's currently operating establishments, each with its establishment number, start date and structured address.
Returns.
Every currently operating establishment, with its establishment number, start date and structured address. Establishments whose address has been struck off are excluded. Plus warnings[], which explains an empty result or a language fallback.
list_nace_codes
not billable
Browse the NACEBEL activity classification one level at a time, to find the code that describes an activity such as "bakery". Free: the only tool that does not count against your quota.
Returns.
nace_version, parent_code (the code drilled into, absent at the top), level (what codes[] contains: division, group, class, subclass or detail) and codes[] with code, level and description. Plus warnings[], which explains a fallback or an empty result.
find_companies_by_activity
billable
Find companies by NACE activity code, postal code or municipality — the reverse of the per-company tools. At least one of nace_code, zipcode or municipality is required; given several, they are ANDed, and a company matches if any of its addresses (registered office or an establishment) falls in the area. Only companies currently active in the register are returned.
Returns.
filters (echoing nace_code, nace_version, zipcodes[] — the postal codes actually searched, which is how a municipality name is reported back — municipality, activity_role, entity_type and location_match), page, page_size, has_more and companies[]: kbo_number, name, entity_type, legal_form, start_date, main_activities[], matched_activity_role, match_source (enterprise or establishment), seat_zipcode and matched_zipcode. No total count: counting every match costs a second pass and tells a caller reading one page nothing useful. Plus warnings[].
How long a call takes
get_annual_accounts answers in the call itself: fetching a filing means calling the National Bank, downloading the deposit and parsing XBRL, and all of that happens while your client waits.
A fresh filing usually takes a few seconds, occasionally up to a minute when the National Bank is slow. Wait for the answer rather than retrying — a retry is a second billable call for the same work.
A filing that has been fetched before comes back instantly with status: "completed" and cached: true. Results are cached per deposit and never expire, because a filed annual account is immutable — a correction is a new deposit with its own reference, and that is what the server picks up.
Languages
language accepts nl, fr, de and en, and defaults to nl. Labels come from the National Bank's own taxonomy label linkbases, not from a translation engine, so they match the wording on the official forms.
If a label is missing in the language you asked for, the response falls back in order: requested language → the language the filing was submitted in → nl → fr → en. The figures never change with the language, and meta.response_language tells you what you actually got.
The website itself is published in Dutch, French and English. It follows your browser's language preference; the switcher in the navigation overrides it for the page you are on, and nothing about that choice is stored.