check_xbrl_availability
ChatGPTList every annual account a Belgian company has filed with the National Bank, and whether each is machine-readable (XBRL) or a PDF-only image. Use it to answer "which years can I get?" before calling get_annual_accounts, or after a 'pdf_fallback_required' failure to find the nearest year that does work. Returns filings newest first, each with fiscal_year, reference_number, deposit_type and xbrl_available. xbrl_available true means get_annual_accounts will serve it as structured data; false means the NBB holds only a PDF, which this server cannot read yet. Needs the enterprise number, not the name: call search_company first.
get_annual_accounts
ChatGPTFetch the annual accounts a Belgian company filed with the National Bank of Belgium (NBB/BNB, the CBSO register): balance sheet, income statement, appropriation of results, social balance sheet and the notes, with every line's official rubric code (for example '20/28') and its label translated into the requested language. The answer comes back in this call, in 'result'. A repeat request for the same filing is served from cache instantly; a fresh one fetches from the National Bank, which usually takes a few seconds and occasionally up to a minute — wait for it rather than retrying. Needs the enterprise number, not the name: call search_company first if the user gave you a name. To compare companies or rank them, pass detail 'kpis': a compact set of the key figures (total assets, equity, cash, current assets and liabilities, long-term debt, gross margin, operating and net profit, dividends, FTE) with this year's and last year's value, the equity ratio, current ratio and net profit to gross margin computed for you, and flags for negative equity and losses. It is enough for most questions and a fraction of the size. Filings exist from roughly 1978 onwards, but only standardised ones are machine-readable — check_xbrl_availability lists what a company has and which years this tool can serve. When the filing exists only as a PDF the call returns status 'failed' with error code 'pdf_fallback_required': reading PDF filings with an LLM is in progress and not available yet. Other stable error codes: 'no_accounts_found' (the message lists the years that do exist), 'nbb_unavailable' (the National Bank is down; retrying later is worth it), 'nbb_error', 'deposit_unreadable'. Report the error message to the user rather than retrying silently.
get_company_activities
ChatGPTFind out what a Belgian company actually does: every activity it registered in the KBO/BCE, as a NACEBEL code with a readable description in the requested language. Returns all of them, not only the primary one, each labelled main, secondary or ancillary, and each carrying the nomenclature version its code belongs to (2003, 2008 or 2025). The version matters: the same digits mean different activities in different nomenclatures, so never compare or interpret a code without it. A company that has not been reclassified yet may carry only 2008 codes. Only activities registered on the enterprise itself are returned. A company can also register activities per location; list_establishments shows its locations. Needs the enterprise number, not the name: call search_company first.
get_registered_office
ChatGPTWhere a Belgian company is officially established: the address of its registered office (maatschappelijke zetel / siège social) as registered in the KBO/BCE, in structured fields — street, house number, box, postal code, municipality. This is the company's legal seat, which is not necessarily where it trades: use list_establishments for the locations it actually operates from. Country is only filled in when the seat is abroad, so an empty country means Belgium. An enterprise registered as a natural person has no seat of its own and returns none, with a warning saying so. A seat that has been struck off is still returned, flagged in warnings, because it remains the last address on file. Needs the enterprise number, not the name: call search_company first.
list_establishments
ChatGPTEvery place a Belgian company currently operates from: its establishment units (vestigingseenheden / unités d'établissement) as registered in the KBO/BCE, each with its establishment number, the date it started and its address in structured fields. These are the shops, offices, branches and sites the company runs, as distinct from its legal seat, which get_registered_office returns. Only currently operating establishments are listed; ones that have been struck off are left out. An empty list means none are on file, which is usually a company working from its registered office only. An establishment number identifies a location rather than a company and is not accepted by the tools that take an enterprise number. Needs the enterprise number, not the name: call search_company first.
list_nace_codes
ChatGPTBrowse the Belgian NACEBEL activity classification one level at a time, to find the code that describes an activity. Call it without a code to get the 87 two-digit divisions, then call it again with one of those to go a level deeper. The hierarchy is division (2 digits) to group (3) to class (4) to subclass (5) to detail (7) — note that the last step adds two digits, not one, and that a code is always the prefix of its children. Codes have no dots: pass 4711, not 47.11. Use this to turn "bakery" or "software consultancy" into a code, then pass that code to find_companies_by_activity to find the companies that registered it. To read the codes a known company registered, use get_company_activities instead. Descriptions exist in Dutch and French only. This tool is free: it does not count against your quota.
search_company
ChatGPTFind the Belgian enterprise (KBO/BCE) number of a company by name, or look up which names belong to a number. This is the first step before get_annual_accounts, which needs the number rather than the name. The search is typo-tolerant and language-agnostic: it matches every registered denomination (legal name, abbreviation, commercial name) in every language, so 'colryut', 'Colruyt Group' and 'ETN FR COLRUYT' all find the same company. If the query looks like an enterprise number in any notation ('0403.170.701', 'BE 0403170701', '403170701') it is looked up directly instead, and a wrong mod-97 check digit produces a warning rather than a refusal. kbo_number is always an enterprise number, the one every other tool takes. A shop or office registered as an establishment unit is found by its own name too, but comes back as the enterprise that owns it, with that unit's name tagged by establishment_number. Given an establishment unit number (2.xxx.xxx.xxx), the answer is the enterprise it belongs to, with a warning saying so: that is how to get from a unit to its company. Returns candidates ordered best match first, each with kbo_number, all its names, and match_score (1.0 for a direct number hit). Read the warnings array out loud to the user: it explains an empty result or a suspicious number. Several companies can share a name — if more than one candidate looks plausible, ask the user which one instead of guessing.