Ondernemingsnummer opzoeken: zo vind en controleer je het nummer van een Belgisch bedrijf
Ondernemingsnummer opzoeken: waar je het vindt, hoe je het controleert met het controlegetal en hoe je het automatiseert met een API. Met voorbeelden.
Elke onderneming in België heeft een ondernemingsnummer. Het is de sleutel waarmee je een bedrijf ondubbelzinnig identificeert, ook als er tien bedrijven met dezelfde naam bestaan. Wie een factuur moet boeken, een leverancier wil nakijken of een klantenbestand wil opschonen, begint dus meestal met het ondernemingsnummer opzoeken. In deze gids lees je wat het nummer precies is, waar je het vindt, hoe je controleert of het klopt en hoe je dat alles automatiseert.
Wat is een ondernemingsnummer?
Het ondernemingsnummer (ook KBO-nummer genoemd) is een uniek nummer van 10 cijfers, geschreven als 0xxx.xxx.xxx. Het eerste cijfer is 0 of 1. Het nummer verandert niet wanneer een bedrijf verhuist of van naam verandert.
De laatste twee cijfers vormen een controlegetal. Je berekent het zo: neem de eerste acht cijfers, deel ze door 97 en trek de rest af van 97. Het resultaat moet gelijk zijn aan de laatste twee cijfers. Een typfout in een enkel cijfer wordt daardoor bijna altijd opgemerkt.
Het nummer hoort bij een onderneming: een rechtspersoon (zoals een BV of NV) of een natuurlijke persoon (zoals een eenmanszaak). Een vestigingseenheid, bijvoorbeeld een winkel of kantoor van die onderneming, heeft een eigen nummer dat met 2 begint (formaat 2.xxx.xxx.xxx). Meer over de verschillende nummers lees je in Ondernemingsnummer, KBO-nummer en btw-nummer: het verschil.
Waar vind je het ondernemingsnummer van een bedrijf?
Bedrijven zijn verplicht hun nummer te vermelden op hun communicatie. Kijk op:
- de footer of het colofon van de website
- facturen, creditnota’s en offertes
- de algemene voorwaarden en de e-mailhandtekening
- bestelbonnen en contracten
Vind je daar niets, dan zoek je op naam. Met de gratis tool om een ondernemingsnummer op te zoeken controleer je een nummer meteen en kom je bij de bedrijfspagina. Zoek je op naam, geef dan altijd een postcode mee: bedrijfsnamen komen vaak meermaals voor.
Ook de bedrijvenindex is een ingang als je wilt bladeren in plaats van gericht te zoeken.
Zoeken op naam en postcode via de API
De search-endpoint vraagt minstens twee tekens in q. De postcode (4 cijfers) is optioneel maar sterk aanbevolen. Je krijgt maximaal 25 resultaten per pagina, met voor elke hit het ondernemingsnummer, de naam, het entiteitstype, de rechtsvorm, de postcode en de gemeente.
curl -s "https://api.kvkbase.nl/v1/be/search?q=bakkerij&postalCode=9000" \
-H "Authorization: Bearer YOUR_API_KEY"
Elke hit bevat onder meer cbeNumber (zonder punten) en cbeNumberFormatted (met punten). Een zoekopdracht kost 1 token.
Alle gegevens ophalen met het nummer
Heb je het nummer, dan haal je het volledige profiel op. De endpoint accepteert elk gangbaar formaat: 0821.015.819, 0821015819 en BE0821015819.
curl -s "https://api.kvkbase.nl/v1/be/lookup/0821.015.819?lang=nl" \
-H "Authorization: Bearer YOUR_API_KEY"
Met lang kies je de taal van de labels (nl, fr, de of en, standaard nl). In het antwoord vind je onder andere de naam, handelsnamen, rechtsvorm, adres, status, activiteiten met NACE-code, vestigingseenheden en websites. Het btw-blok geeft aan of er een geldig btw-nummer aan hangt. Een volledig overzicht staat in de API-referentie. De gegevens zijn officiële Belgische bedrijfsgegevens, bewaard in een kopie zodat herhaalde opzoekingen snel zijn. Ga er niet van uit dat ze realtime zijn.
Controleren of een nummer geldig is
Je hoeft niet te wachten op een API-aanroep om een slecht nummer te herkennen. Een eigen controle van lengte en controlegetal vangt de meeste fouten op:
function isValidEnterpriseNumber(input) {
let digits = String(input).toUpperCase().replace(/^BE/, "").replace(/\D/g, "");
if (digits.length === 9) digits = "0" + digits; // restore the leading zero
if (!/^[01]\d{9}$/.test(digits)) return false;
const base = Number(digits.slice(0, 8));
const check = Number(digits.slice(8));
return 97 - (base % 97) === check;
}
console.log(isValidEnterpriseNumber("0821.015.819")); // true (example number)
console.log(isValidEnterpriseNumber("0821.015.818")); // false
Een nummer dat het controlegetal haalt, bestaat daarom nog niet. Het is alleen wiskundig correct. Pas de opzoeking bevestigt dat er echt een onderneming achter zit. De API weigert een misvormd nummer overigens al vooraf met INVALID_CBE_NUMBER (HTTP 400), en dat kost niets.
Automatiseren in JavaScript
Combineer beide stappen: valideer lokaal, bevraag pas daarna de API en vang de foutcodes op.
const API_KEY = process.env.KVKBASE_API_KEY;
async function lookupCompany(number) {
if (!isValidEnterpriseNumber(number)) {
throw new Error("Not a valid enterprise number");
}
const res = await fetch(
`https://api.kvkbase.nl/v1/be/lookup/${encodeURIComponent(number)}?lang=nl`,
{ headers: { Authorization: `Bearer ${API_KEY}` } }
);
if (res.status === 404) return null; // number is well formed but unknown
if (!res.ok) throw new Error(`Lookup failed with status ${res.status}`);
return res.json();
}
const company = await lookupCompany("0821015819");
if (company) {
console.log(company.name, company.legalFormShort, company.isActive);
}
Heb je een lijst, gebruik dan POST /v1/be/lookup/batch met {"cbeNumbers": [...], "lang": "nl"}. Je mag 25 nummers per aanroep meesturen en elk nummer kost 1 token. Het antwoord geeft per nummer success en data of error, zodat een nummer dat niet gevonden wordt de rest niet blokkeert. Een ongeldig formaat of controlegetal weigert wel de hele batch, controleer nummers dus vooraf.
| Status | Foutcode | Wat doe je |
|---|---|---|
| 400 | INVALID_CBE_NUMBER | Nummer corrigeren, niet opnieuw proberen |
| 404 | NOT_FOUND | Nummer bestaat niet in de gegevens |
| 429 | QUOTA_EXCEEDED of rate limit | Wachten of je plan verhogen |
| 502 | UPSTREAM_ERROR | Later opnieuw proberen |
| 503 | UPSTREAM_BUDGET | Later opnieuw proberen |
Veelgemaakte fouten
De voorloopnul vergeten. Spreadsheets maken van 0821015819 het getal 821015819. Bewaar het nummer altijd als tekst, of vul aan tot 10 cijfers.
Btw-nummer en ondernemingsnummer door elkaar halen. Het btw-nummer is BE plus de 10 cijfers. Niet elke onderneming heeft een actief btw-nummer. Controleer dat apart met de btw-nummer-tool of lees hoe je een btw-nummer controleert via VIES.
Een vestiging aanzien voor de onderneming. Een nummer dat met 2 begint, hoort bij een vestigingseenheid. Gebruik voor facturatie en identificatie het ondernemingsnummer, niet het vestigingsnummer.
Afgaan op de naam alleen. Twee bedrijven met dezelfde naam in verschillende gemeenten zijn twee ondernemingen. Vraag het nummer op of zoek met naam plus postcode en vergelijk het adres.
Een actief nummer veronderstellen. Kijk naar isActive en juridicalSituation in het antwoord. Een bedrijf in ontbinding of faillissement heeft nog altijd een nummer.
Aan de slag
Een gratis account geeft je 50 tokens per maand, zonder kredietkaart. Genoeg om de voorbeelden hierboven uit te proberen. Voor grotere volumes bekijk je de prijzen. Een overzicht van wat er mogelijk is voor Belgische bedrijven vind je op de België-pagina. Wil je een klant of leverancier grondiger natrekken, lees dan hoe je een Belgische klant of leverancier controleert.