DEV Community

Cover image for Programmatic KYB in the Netherlands: What the KVK API actually reveals
OpenRegistry
OpenRegistry

Posted on

Programmatic KYB in the Netherlands: What the KVK API actually reveals

A Dutch company registration number (KVK nummer) contains exactly eight digits, issued by the Kamer van Koophandel. For automated merchant onboarding, this number is the single source of truth. Relying on stale database aggregators to verify Dutch BVs often leads to false negatives. The Dutch corporate registry changes daily. Legal restructurings and address changes happen constantly. Stale records will fail audits.

Retrieving live registry data directly from the official source is the only defensible verification method. When your system queries the KVK registry programmatically, you receive raw data structures that demand precise parsing.

Structuring raw Dutch registry payloads

The standard payload returned from a live KVK query contains specific administrative fields that compliance workflows must handle. Unlike other jurisdictions that abstract these values, retrieving the raw jurisdiction_data preserves the original Dutch legal taxonomy. This preservation is critical for accurate risk scoring.

The core fields returned during a lookup include:

  • kvkNummer: The definitive eight-digit identifier.
  • rsin: The Rechtspersonen en Samenwerkingsverbanden Informatie Nummer, used for tax and legal identification.
  • statutaireNaam: The formal name registered in the articles of incorporation.
  • handelsnamen: An array of trade names under which the entity operates.
  • rechtsvorm: The legal structure, such as a Besloten Vennootschap (BV).

When performing a search, your system will use the search_companies tool. A typical payload contains both the active trade names and the historical legal names. This helps compliance teams resolve discrepancies where a merchant operates under a brand different from their legal entity name.

Different legal structures in the Netherlands dictate different reporting requirements. A Besloten Vennootschap (BV) has strict registration rules. By contrast, a Vennootschap onder firma (VOF) operates under a partnership model. When parsing the rechtsvorm field, your compliance engine must route the onboarding flow down different risk paths. A partnership might not register directors in the same format as a BV, requiring you to adapt your parsing logic.

Navigating the post-CJEU UBO landscape

A European Court of Justice ruling in 2022 dismantled public access to Ultimate Beneficial Owner (UBO) registers across the European Union. In response, the KVK immediately restricted public access to the Dutch UBO register. Today, compliance teams cannot programmatically extract the complete ownership chain of a Dutch entity using public tools.

This limitation forces a trade-off. While you can verify that an entity is active and retrieve its legal representatives via the registry, resolving the exact ownership percentages of shareholders holding over 25 percent requires alternative verification steps. Compliance officers must collect self-attested corporate charts from the customer during onboarding. You then cross-reference the active directors found in the registry to confirm authorization.

The standard officer tools, such as get_officers, return the registered board members and legal representatives where the KVK public registry exposes them. This lookup confirms whether the individual signing a contract actually holds the legal authority to bind the company.

Implementing KVK lookup tools

Integrating these checks into an automated compliance flow requires standardisation. The OpenRegistry MCP server provides direct, real-time access to the KVK without intermediary parsing, delivering the raw upstream fields directly to your internal decision engines.

To initiate a search for a Dutch company by name, the assistant executes the search_companies tool with the appropriate country filter:

{
  "name": "Acme Netherlands",
  "jurisdiction": "NL"
}
Enter fullscreen mode Exit fullscreen mode

Once you identify the correct entity, you can pull the registry profile using the unique registration identifier. Call the get_company_profile tool:

{
  "company_id": "12345678",
  "jurisdiction": "NL"
}
Enter fullscreen mode Exit fullscreen mode

This call hits the live registry of record in real time. It bypasses the stale caches typical of legacy paid databases. This ensures that your compliance logs reflect the exact state of the KVK database at the millisecond of onboarding.

Ensuring an audit trail for regulators

Internal auditors and external regulators expect a clear provenance for every corporate check. Screenshots of registry web portals are no longer sufficient for automated high-volume onboarding environments. Your system must store the raw JSON payload alongside a timestamp. This proves that the company was active and registered at the time of transaction approval.

By maintaining direct lookups, compliance teams can confidently defend their Know Your Business (KYB) decisions during regulatory reviews. To integrate live Dutch registry access into your own automated compliance workflows without signing up for complex contracts, you can get started directly by using openregistry.sophymarine.com today.

Top comments (0)