KVK-data voor KYC: hoe je zakelijke klanten snel verifieert
Hoe gebruik je KVK-data in je KYC-proces? Van bedrijfsidentificatie tot UBO-verificatie en Wwft-compliance. Inclusief API-voorbeelden.
Bedrijven die zakelijke klanten aannemen, zijn in veel gevallen wettelijk verplicht die klanten te identificeren en te verifiëren. De Wet ter voorkoming van witwassen en financieren van terrorisme, kortweg Wwft, geldt voor accountants, notarissen, makelaars, financiële instellingen en steeds vaker ook voor SaaS-platforms en marktplaatsen. De kernvraag bij elk zakelijk onboarding-traject is: is dit bedrijf wie het zegt dat het is?
KVK-data is daarvoor het vertrekpunt. Het Handelsregister is de officiële bron voor bedrijfsidentificatie in Nederland. In dit artikel leggen we uit welke KVK-gegevens relevant zijn voor KYC, hoe je ze efficiënt ophaalt via de API, en wat je nog meer nodig hebt voor een volledig verificatieproces.
Waarom KVK-data het fundament is van zakelijke KYC
Bij particulieren gebruik je een paspoort of rijbewijs. Bij bedrijven is dat het KVK-uittreksel. Het bevat de geregistreerde naam, het rechtsgeldige adres, de rechtsvorm, de oprichtingsdatum en de status van de onderneming. Dat zijn precies de gegevens die je nodig hebt om een bedrijf te identificeren.
Het voordeel van API-toegang boven het handmatig opvragen van uittreksels is snelheid en schaalbaarheid. In plaats van medewerkers die uittreksels downloaden en handmatig controleren, kun je verificatie automatiseren als onderdeel van je onboarding-flow.
{
"kvkNumber": "12345678",
"name": "Voorbeeld BV",
"legalForm": "BV",
"registeredAt": "2019-04-15",
"status": "active",
"addresses": [
{
"type": "bezoekadres",
"street": "Hoofdstraat",
"houseNumber": "10",
"postalCode": "1234 AB",
"city": "Amsterdam"
}
]
}
Met de KVKBase API haal je deze gegevens op in één API-aanroep. Je hebt geen uittreksel nodig, geen handmatige invoer.
De vijf KYC-checks die je kunt automatiseren met KVK-data
1. Bedrijfsidentificatie
De meest basale stap: bestaat dit bedrijf en klopt de naam met het KVK-nummer? Dit is een eenvoudige lookup op KVK-nummer.
import requests
def verifieer_bedrijf(kvk_nummer):
response = requests.get(
f"https://api.kvkbase.nl/v1/company/{kvk_nummer}",
headers={"Authorization": f"Bearer {API_KEY}"}
)
data = response.json()
return {
"bestaat": response.status_code == 200,
"naam": data.get("name"),
"rechtsvorm": data.get("legalForm"),
"status": data.get("status"), # 'active', 'dissolved', etc.
}
Als de status niet active is, of als het KVK-nummer niet bestaat, is dat direct een rode vlag.
2. Statuscontrole: is het bedrijf actief?
Een bedrijf kan formeel zijn ingeschreven maar ook opgeheven, failliet of in surseance van betaling zijn. Voor KYC wil je weten of de onderneming daadwerkelijk actief is.
De KVKBase bedrijfsstatusmonitor biedt ook webhooks voor statuswijzigingen, zodat je geautomatiseerd een seintje krijgt als een klant-BV wordt opgeheven. Dat is nuttig voor doorlopende KYC-monitoring, niet alleen bij onboarding.
3. Adresverificatie
Klopt het adres dat de klant heeft opgegeven met het geregistreerde vestigingsadres in het Handelsregister? Een discrepantie is niet per se fraude, maar wel iets om te onderzoeken. Bedrijven met een postbusadres als enig adres zijn ook een aandachtspunt in KYC-processen.
def controleer_adres(kvk_nummer, opgegeven_postcode, opgegeven_stad):
data = haal_bedrijfsdata(kvk_nummer)
geregistreerd_adres = next(
(a for a in data["addresses"] if a["type"] == "bezoekadres"),
None
)
if not geregistreerd_adres:
return {"match": False, "reden": "geen bezoekadres geregistreerd"}
postcode_match = geregistreerd_adres["postalCode"].replace(" ", "") == opgegeven_postcode.replace(" ", "")
stad_match = geregistreerd_adres["city"].lower() == opgegeven_stad.lower()
return {
"match": postcode_match and stad_match,
"geregistreerde_postcode": geregistreerd_adres["postalCode"],
"geregistreerde_stad": geregistreerd_adres["city"]
}
4. Rechtsvorm en UBO-verplichting
De rechtsvorm bepaalt mede welke KYC-verplichtingen gelden. Een eenmanszaak heeft geen UBO-register-vermelding nodig, want de eigenaar is altijd de ondernemer zelf. Een BV, NV of stichting wel. Het KVK-register geeft je de rechtsvorm, zodat je kunt bepalen welke vervolgstappen nodig zijn.
| Rechtsvorm | UBO-register verplicht | Bestuurder inzichtelijk via KVK |
|---|---|---|
| Eenmanszaak | Nee | Ja (eigenaar) |
| VOF | Nee | Ja (vennoten) |
| BV | Ja | Deels (bestuurders) |
| NV | Ja | Deels (bestuurders) |
| Stichting | Ja | Deels (bestuurders) |
| Coöperatie | Ja | Deels |
Voor BV’s en NV’s bevat het KVK-register de bestuurders en gemachtigden. Dat is een eerste stap, maar de uiteindelijk begunstigden (UBO’s) staan in het afzonderlijke UBO-register. KVK-data en UBO-register vullen elkaar aan.
5. BTW-nummer validatie
Voor B2B-onboarding in de EU wil je ook het BTW-nummer valideren. KVKBase biedt geïntegreerde VIES-validatie: je kunt in één aanroep het BTW-nummer controleren en bevestigen dat het actief is in het EU VIES-systeem. Dat is een verplichte stap voor correcte factuurverwerking en soms ook voor compliance-doeleinden.
Meer detail over BTW-validatie staat in ons artikel over BTW-nummer valideren via VIES.
Een praktisch KYC-verificatieformulier met autofill
De meest gebruikersvriendelijke aanpak voor zakelijke onboarding: laat de klant zijn KVK-nummer invoeren, haal de rest automatisch op en toon een bevestigingsscherm. Zo combineert een gebruiker de gemakkelijke invoer met een geautomatiseerde eerste check.
async function onKvkInput(kvkNummer) {
if (kvkNummer.length !== 8) return;
const res = await fetch(`/api/verify-company?kvk=${kvkNummer}`);
const data = await res.json();
if (!data.exists || data.status !== 'active') {
toonFout('Bedrijf niet gevonden of niet actief in het Handelsregister.');
return;
}
// Vul formulier in
document.getElementById('company-name').value = data.name;
document.getElementById('legal-form').value = data.legalForm;
document.getElementById('address').value = `${data.street} ${data.houseNumber}`;
document.getElementById('postal-code').value = data.postalCode;
document.getElementById('city').value = data.city;
// Toon bevestigingspaneel
toonBevestiging(data);
}
Dit patroon leen je ook voor checkout-formulieren. Het vergelijkbare bedrijfsgegevens autofill voor checkout beschrijft het volledigere scenario.
Doorlopende KYC: monitoring na onboarding
KYC is geen eenmalige check. Bedrijven veranderen: ze verhuizen, wisselen van bestuurder, gaan failliet, of worden overgenomen. Doorlopende monitoring via de KVK-API geeft je een seintje bij relevante wijzigingen.
Stel een periodieke job in die voor je klantenlijst de status controleert:
from datetime import datetime
def periodieke_kyc_check(klantenlijst):
afwijkingen = []
for klant in klantenlijst:
actuele_data = haal_bedrijfsdata(klant["kvk_nummer"])
checks = [
("status", klant["geregistreerde_status"], actuele_data["status"]),
("naam", klant["geregistreerde_naam"], actuele_data["name"]),
("adres", klant["geregistreerd_adres"], actuele_data["addresses"][0]["postalCode"])
]
for veld, oud, nieuw in checks:
if oud != nieuw:
afwijkingen.append({
"klant_id": klant["id"],
"kvk_nummer": klant["kvk_nummer"],
"veld": veld,
"oud": oud,
"nieuw": nieuw,
"gedetecteerd_op": datetime.now().isoformat()
})
return afwijkingen
Afwijkingen kun je loggen voor compliancerapportage of doorsturen naar een compliance officer voor handmatige review.
Wat KVK-data niet dekt
KVK-data is een sterk fundament, maar geen volledig KYC-systeem. Voor Wwft-compliance heb je doorgaans ook:
- UBO-verificatie: wie zijn de uiteindelijke begunstigden? Dat staat in het UBO-register, niet in het Handelsregister.
- PEP-screening: is een bestuurder een politiek prominente persoon? Dat vereist externe lijsten.
- Sanctiescreening: staat het bedrijf of een bestuurder op een sanctielijst (EU, VN, OFAC)? Dat vereist aparte databronnen.
- Documentverificatie: voor hogere risicoprofielen wil je mogelijk aanvullende documenten.
Voor de meeste toepassingen is KVK-data de eerste laag: snel, betrouwbaar, en geautomatiseerd. De aanvullende checks zijn een tweede laag die je op risicobasis inzet.
Aan de slag
De KVKBase API biedt een gratis tier om je integratie te testen. Je kunt direct aan de slag met de API-documentatie en je eigen verificatieflow bouwen. Voor doorlopende monitoring biedt KVKBase webhook-notificaties zodat je niet continu hoeft te pollen.
Vragen over je specifieke use case? Stuur een bericht via kvkbase.nl/contact.