KBO: Belgium VAT register
kboBelgium publishes KBO Open Data, a free bulk export of the Crossroads Bank for Enterprises covering every legal person on the register, VAT activities included. Avatcado mirrors it rather than querying it live, and only for companies: a check against VIES showed the register cannot be trusted for sole traders in the same way.
KBO is run by the FPS Economy, Crossroads Bank for Enterprises, and its data is published at kbopub.economie.fgov.be. It is one of the 10 national registers Avatcado consults on the Pro and Business plans when VIES cannot answer for Belgium, and it never replaces a VIES answer that does arrive. The national registry fallback guide covers the full precedence order.
What KBO publishes
- A full export of every person on the Crossroads Bank for Enterprises, natural and legal, split into tables for the enterprise itself, its denominations, its addresses, its establishments, its contact details and its branches; Avatcado's mirror keeps only the legal persons
- A code list of activities in which group 001, VAT activities, marks an enterprise as VAT registered, alongside its ordinary business activity codes
- The enterprise's names in up to four languages, Dutch, French, German and English, not all of them necessarily filled in for every enterprise
- The registered office as separate fields for street, house number, box, postcode and municipality, rather than as a single formatted line
How Avatcado uses it
The full KBO Open Data export is loaded once by an operator, then a scheduled job applies the daily update files, each one a delete and insert per changed entity, so the mirror stays current without ever reprocessing the whole export. A Belgian fallback looks up the enterprise number inside the VAT number in that snapshot and answers only when the enterprise carries the VAT activities code among its registered activities, serving the result with source kbo, its preferred name and its assembled address. Sole traders are left out of the mirror entirely, so a sole trader's VAT number is simply never in the snapshot and falls through to the cache, the same as a country with no register at all.
KBO publishes a bulk file rather than a per-number service, so Avatcado mirrors it instead of calling it on your request. Snapshot refreshed 09:00 and 21:00 UTC, and each run replaces the stored snapshot. A snapshot is only trusted while it is demonstrably fresh: it has to be less than 3 days old, and the source file itself has to have changed within the last 14 days. A snapshot that fails either gate is not served at all, because a stale file is worse than no fallback.
The rule that matters most is that a register can only ever confirm a registration. A miss, whether KBO says not registered or simply has no record, is never turned into valid: false: the request falls through to the stored result instead. An answer that does come from here carries source: "kbo" and source_status: "fallback", and no consultation_number field at all, because only VIES issues those.
What a KBO answer contains
| Field | KBO |
|---|---|
| Company name | Yes |
| Company address | Yes |
| Consultation number | No, VIES only |
Data quirks worth knowing
- Companies only: sole traders are never answered from the snapshot and fall through to the cache
- VAT status is read from the register's VAT activities; the open data carries no VAT registration date
- Loaded once in full, then kept current from the daily update files
- The open data carries no VAT registration date, only the current list of activity codes, so a Belgian fallback answer can confirm VAT status but never say when it started
- Names are published in several languages at once, and the mirror keeps one name per enterprise by preference, Dutch first, then French, then German, then English
- Sole traders are excluded from the mirror by design: a check of 80 companies against VIES matched all 80, while the same check for VAT-registered sole traders found around 4 percent, mostly businesses trading under the small-enterprise exemption scheme, that VIES did not confirm
- Each update file replaces a changed entity wholesale, deleting and reinserting every one of its rows, rather than patching the fields that actually changed
Try it
Validating a Belgium VAT number takes the same call whichever source answers it. This one uses BE 0417.497.106, a real registered number:
curl "https://api.avatcado.com/v1/validate?vat_number=BE0417497106" \
-H "Authorization: Bearer avat_live_your_api_key"import Avatcado from "@avatcado/node";
const avatcado = new Avatcado("avat_live_your_api_key");
const { data, error } = await avatcado.vat.validate({
vatNumber: "BE0417497106",
});
if (data?.meta.source === "kbo") {
// VIES was unavailable; KBO confirmed the registration.
console.log(data.meta.source_status); // "fallback"
}On an ordinary day that answer comes from VIES, with source_status: "live". Only when VIES cannot answer for Belgium does KBO step in, and then meta.source_status reads "fallback" and meta.source reads "kbo". The register fallback is included in the Pro and Business plans; the free tier covers 500 validations per month from VIES and the cache. Get an API key or read the API documentation.
Frequently asked questions
Which Belgian businesses can a KBO fallback answer for?
Only companies. KBO Open Data holds every legal person on the Crossroads Bank for Enterprises, around 1.19 million active companies of which about 714 thousand carry the VAT activities code, and Avatcado mirrors that population in full. Sole traders are a different case. A check of 80 companies against VIES confirmed all 80 of them, but the same exercise for VAT-registered sole traders found that around 4 percent, mostly businesses trading under the small-enterprise exemption scheme, were not confirmed by VIES at all. Rather than risk a fallback answer VIES would contradict, Avatcado leaves sole traders out of the mirror completely. A sole trader's Belgian VAT number is therefore never in the snapshot, and the request falls through to the cache exactly as it would for a country with no register.
How current is the Belgian KBO snapshot?
Avatcado loaded the full KBO Open Data export once, and since then applies only the daily update files. FPS Economy publishes a new full file and a new update file every morning, and Avatcado applies the update at 09:00 and 21:00 UTC. Each update file works as a delete and insert per entity: a changed enterprise is removed and reinserted with its new rows rather than patched field by field, so the mirror stays a faithful copy of what the authority publishes instead of an approximation built from partial edits. Two freshness gates decide whether the snapshot may be served at all, the same as for the other mirrored registers: the snapshot itself has to be recent, and the source file it was built from has to have changed recently, so a sync that has quietly stopped is not served as though it were current. When either gate fails, Belgium falls through to the cache exactly as if it had no register.
Keep reading
Sources
- KBO Open Data FPS Economy (Crossroads Bank for Enterprises), accessed September 4, 2026
- Crossroads Bank for Enterprises FPS Economy, accessed September 4, 2026
- KBO Public Search FPS Economy (Crossroads Bank for Enterprises), accessed September 4, 2026