Nederlandse Bedrijfsregistratie: Wat Developers Moeten Weten
Compleet overzicht van het Nederlandse Handelsregister voor developers. KVK-nummers, rechtsvormen, SBI-codes en vestigingsnummers uitgelegd.
Nederlandse Bedrijfsregistratie: Wat Developers Moeten Weten
Als developer die werkt met Nederlandse bedrijfsdata kom je al snel termen tegen als KVK-nummer, vestigingsnummer, SBI-code en rechtsvorm. Het kan overweldigend lijken, maar het systeem is logischer dan het op het eerste gezicht lijkt.
In dit artikel leggen we het Nederlandse handelsregistersysteem uit vanuit een developer-perspectief: welke data is er, wat betekent het en hoe gebruik je het effectief in je applicatie.
Wat is de KVK?
De Kamer van Koophandel (KVK) beheert het Handelsregister: de centrale database van alle ondernemingen en rechtspersonen in Nederland. Elke ondernemer en elk bedrijf in Nederland is verplicht zich hier in te schrijven.
Het Handelsregister bevat informatie over:
- De naam en het adres van het bedrijf
- De rechtsvorm (BV, NV, eenmanszaak, etc.)
- De activiteiten van het bedrijf (SBI-codes)
- De bestuurders en gemachtigden
- De vestigingen
Deze data is grotendeels openbaar en kan worden opgezocht en gebruikt in applicaties.
Het KVK-nummer
Het KVK-nummer (ook wel dossiernummer) is de primaire identifier van een onderneming of rechtspersoon in het Handelsregister.
Technische specificaties:
- Lengte: exact 8 cijfers
- Type: numeriek, maar altijd opslaan als string (vanwege voorloopnullen)
- Uniciteit: uniek per rechtspersoon
- Levensduur: wordt toegekend bij inschrijving en verandert nooit
- Voorbeeld:
12345678,01234567
// Validatie
const isValidKvk = (nr) => /^\d{8}$/.test(nr);
// Opslag in database
// SQL: kvk_number CHAR(8) NOT NULL
// MongoDB: kvkNumber: { type: String, match: /^\d{8}$/ }
Het vestigingsnummer
Naast het KVK-nummer kent elk bedrijf een of meer vestigingsnummers. Een vestiging is een fysieke locatie waar het bedrijf activiteiten uitvoert.
Technische specificaties:
- Lengte: exact 12 cijfers
- Relatie: een bedrijf (1 KVK-nummer) kan meerdere vestigingen (meerdere vestigingsnummers) hebben
- Voorbeeld:
000012345678
De relatie is als volgt:
Bedrijf (KVK: 12345678)
|
+-- Hoofdvestiging (Vestiging: 000012345678)
+-- Filiaal Amsterdam (Vestiging: 000012345679)
+-- Filiaal Rotterdam (Vestiging: 000012345680)
In de meeste toepassingen werk je met het KVK-nummer. Het vestigingsnummer is relevant als je specifieke locaties moet identificeren, bijvoorbeeld bij logistiek of locatiegebonden dienstverlening.
Rechtsvormen: de soorten bedrijven
Nederland kent diverse rechtsvormen. Elke rechtsvorm heeft andere juridische eigenschappen die relevant kunnen zijn voor je applicatie.
Rechtsvormen met rechtspersoonlijkheid
Deze rechtsvormen zijn zelfstandige juridische entiteiten, los van de eigenaren:
BV (Besloten Vennootschap)
- Meest voorkomende rechtsvorm voor middelgrote bedrijven
- Aandeelhouders zijn niet persoonlijk aansprakelijk
- Minimaal startkapitaal: 0,01 euro
- Herkenbaar aan “B.V.” achter de naam
NV (Naamloze Vennootschap)
- Voor grote, vaak beursgenoteerde bedrijven
- Aandelen zijn vrij overdraagbaar
- Minimaal startkapitaal: 45.000 euro
- Herkenbaar aan “N.V.” achter de naam
Stichting
- Geen leden of aandeelhouders
- Mag geen winst uitkeren
- Wordt gebruikt voor ideele doelen, maar ook voor holdings
Vereniging
- Heeft leden
- Twee varianten: met en zonder volledige rechtsbevoegdheid
- Denk aan sportclubs, brancheverenigingen
Rechtsvormen zonder rechtspersoonlijkheid
Bij deze rechtsvormen is er geen scheiding tussen het bedrijf en de eigenaar:
Eenmanszaak
- Eén eigenaar, die volledig persoonlijk aansprakelijk is
- Geen minimaal kapitaal
- De meest eenvoudige rechtsvorm
- Let op: bij eenmanszaken kan de bedrijfsnaam de persoonsnaam bevatten (GDPR-relevant)
VOF (Vennootschap Onder Firma)
- Twee of meer vennoten
- Alle vennoten zijn hoofdelijk aansprakelijk
- Veel gebruikt bij samenwerkende professionals
Maatschap
- Vergelijkbaar met VOF, maar elke maat is alleen aansprakelijk voor zijn eigen deel
- Veel gebruikt door artsen, advocaten, accountants
CV (Commanditaire Vennootschap)
- Combinatie van beherende vennoten (aansprakelijk) en stille vennoten (beperkt aansprakelijk)
Impact op je applicatie
De rechtsvorm beinvloedt hoe je met de data omgaat:
function getCompanyContext(legalForm) {
switch (legalForm) {
case 'Eenmanszaak':
return {
hasPersonalData: true, // Naam kan persoonsnaam zijn
addressMayBeHome: true, // Adres kan woonadres zijn
gdprSensitive: true // Extra voorzichtigheid geboden
};
case 'BV':
case 'NV':
return {
hasPersonalData: false,
addressMayBeHome: false,
gdprSensitive: false
};
case 'VOF':
case 'Maatschap':
return {
hasPersonalData: true, // Vennoten zijn identificeerbaar
addressMayBeHome: true, // Kan een woonadres zijn
gdprSensitive: true
};
default:
return {
hasPersonalData: false,
addressMayBeHome: false,
gdprSensitive: false
};
}
}
SBI-codes: bedrijfsactiviteiten
SBI staat voor Standaard Bedrijfsindeling. Het is een classificatiesysteem dat aangeeft welke activiteiten een bedrijf uitvoert. Elk bedrijf in het Handelsregister heeft een of meer SBI-codes.
Structuur
SBI-codes zijn hiërarchisch opgebouwd:
Sectie: J - Informatie en communicatie
Afdeling: 62 - Informatietechnologie
Groep: 620 - Informatietechnologie
Klasse: 6201 - Ontwikkelen en produceren van software
6202 - Advisering op het gebied van IT
6203 - Beheer van computerfaciliteiten
De codes zijn 4 of 5 cijfers lang. Een bedrijf kan meerdere SBI-codes hebben als het meerdere activiteiten uitvoert.
Gebruik in je applicatie
SBI-codes zijn nuttig voor:
- Marktsegmentatie: filter klanten op branche
- Risicobeoordeling: bepaalde branches hebben een hoger risicoprofiel
- Compliance: sommige activiteiten vereisen vergunningen
- Statistiek: analyseer je klantenbestand per sector
// Zoek alle IT-bedrijven in je klantenbestand
const itCompanies = companies.filter(c =>
c.sbiCodes.some(sbi => sbi.code.startsWith('62'))
);
// Categoriseer op hoofdsector
function getSector(sbiCode) {
const section = {
'A': 'Landbouw',
'B': 'Winning van delfstoffen',
'C': 'Industrie',
'F': 'Bouwnijverheid',
'G': 'Handel',
'J': 'Informatie en communicatie',
'K': 'Financiele dienstverlening',
'M': 'Specialistische zakelijke diensten',
// ... etc
};
// Eerste twee cijfers bepalen de afdeling,
// die past binnen een sectie (letter)
const division = parseInt(sbiCode.substring(0, 2));
if (division >= 1 && division <= 3) return section['A'];
if (division >= 10 && division <= 33) return section['C'];
if (division >= 41 && division <= 43) return section['F'];
if (division >= 45 && division <= 47) return section['G'];
if (division >= 58 && division <= 63) return section['J'];
if (division >= 64 && division <= 66) return section['K'];
if (division >= 69 && division <= 75) return section['M'];
return 'Overig';
}
Andere relevante identificatienummers
Naast het KVK-nummer en vestigingsnummer kom je in de praktijk nog andere nummers tegen:
BTW-nummer (omzetbelastingnummer)
- Format:
NL+ 9 cijfers +B+ 2 cijfers - Voorbeeld:
NL123456789B01 - Uitgegeven door de Belastingdienst, niet door de KVK
- Niet altijd beschikbaar via de KVK API
RSIN (Rechtspersonen en Samenwerkingsverbanden Informatienummer)
- 9 cijfers
- Identificeert een rechtspersoon voor overheidssystemen
- Wordt onder andere gebruikt voor de Basisregistratie Personen
BSN (Burgerservicenummer)
- 9 cijfers
- Persoonlijk identificatienummer voor natuurlijke personen
- Nooit beschikbaar via openbare APIs
- Alleen relevant bij eenmanszaken en dan alleen voor de eigenaar
Data effectief gebruiken
Databaseontwerp
Een goed databaseschema voor Nederlandse bedrijfsdata:
CREATE TABLE companies (
id UUID PRIMARY KEY,
kvk_number CHAR(8) UNIQUE NOT NULL,
trade_name VARCHAR(255) NOT NULL,
legal_form VARCHAR(100),
is_active BOOLEAN DEFAULT true,
vat_number VARCHAR(14),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
verified_at TIMESTAMPTZ
);
CREATE TABLE company_addresses (
id UUID PRIMARY KEY,
company_id UUID REFERENCES companies(id),
vestiging_number CHAR(12),
address_type VARCHAR(20), -- 'bezoek' of 'post'
street VARCHAR(255),
house_number VARCHAR(10),
postal_code CHAR(6),
city VARCHAR(100),
country CHAR(2) DEFAULT 'NL'
);
CREATE TABLE company_sbi_codes (
company_id UUID REFERENCES companies(id),
sbi_code VARCHAR(5),
description VARCHAR(255),
is_primary BOOLEAN DEFAULT false,
PRIMARY KEY (company_id, sbi_code)
);
Zoekfunctionaliteit
Bij het bouwen van een zoekfunctie voor bedrijven, overweeg meerdere zoekvelden:
async function searchCompanies(query) {
// Is het een KVK-nummer?
if (/^\d{8}$/.test(query)) {
return kvkbase.lookup(query);
}
// Is het een BTW-nummer?
if (/^NL\d{9}B\d{2}$/.test(query.replace(/[\s.]/g, ''))) {
return kvkbase.searchByVat(query);
}
// Is het een postcode?
if (/^\d{4}[A-Z]{2}$/.test(query.replace(/\s/g, ''))) {
return kvkbase.searchByPostalCode(query);
}
// Zoek op bedrijfsnaam
return kvkbase.search(query);
}
Conclusie
Het Nederlandse Handelsregister is een rijke bron van bedrijfsdata met een logische structuur. Als developer heb je te maken met een beperkt aantal kernconcepten:
- KVK-nummer (8 cijfers): identificeert het bedrijf
- Vestigingsnummer (12 cijfers): identificeert de locatie
- Rechtsvorm: bepaalt het juridische karakter
- SBI-codes: beschrijven de activiteiten
Door deze concepten te begrijpen en correct in je datamodel op te nemen, bouw je een solide basis voor elke applicatie die werkt met Nederlandse bedrijven.
Met KVKBase kun je al deze data opvragen via een enkele, goed gedocumenteerde API — van basale lookups tot uitgebreide zoekfuncties. Dat scheelt het navigeren van complexe overheidsdocumentatie en laat je focussen op wat ertoe doet: een goed product bouwen.