Belgium KBO lookups: what audit teams actually need
DEV Community

Belgium KBO lookups: what audit teams actually need

Belgiumโ€™s KBO/CBE uses a single enterprise number across incorporation, VAT, and establishment records. The neatness stops there. Matching onboarding documents against multilingual filings or older trade names gets messy fast.

KYB teams usually trust the KBO because it stays close to the register of record instead of reshaping data into a commercial dataset. You can rerun the same lookup later, inspect the filing source yourself, and avoid the stale โ€œcached extractโ€ issue that still turns up in onboarding stacks.

OpenRegistry serves Belgium live through its MCP endpoint. Responses preserve upstream jurisdiction_data fields from the KBO/CBE rather than squeezing everything into a guessed common schema. That matters when a reviewer needs to compare the exact registry value against a submitted incorporation extract.

Fields that matter in Belgian KYB

Belgian company searches usually begin with either an enterprise number or a multilingual name search. KBO records may contain Dutch, French, or German variants depending on the filing history attached to the entity.

A get_company_profile call for Belgium often returns:

  • Enterprise number
  • Legal form
  • Registered address
  • Company status
  • Start date
  • NACE activity codes
  • VAT status references
  • Establishment unit data inside jurisdiction_data

The upstream payload is often more practical than a heavily normalised abstraction. Belgian entities regularly operate under shortened names or translated variants, which can trigger false mismatches during onboarding review.

We saw this in a payments onboarding flow. The merchant submitted a French-language extract, while the existing customer record stored the Dutch variant from an earlier filing. A matching layer that stripped accents and legal suffixes treated them as separate entities, so the case went straight to manual review.

Officer data and representation powers

Officer data creates similar problems. Belgian filings can distinguish statutory directors from delegated management roles, and those distinctions affect signing authority. A get_officers call returns the register representation directly.

Typical fields include:

  • Officer name
  • Appointment date
  • Function title
  • Representation powers
  • Active or ceased mandate status

Representation powers are easy to miss. Some Belgian entities require joint signatures under their articles. If your onboarding logic assumes any listed director can bind the company alone, you add operational risk for no reason.

list_filings becomes useful when tracing governance changes or status updates. Belgian filings often include publication references tied to the Belgian Official Gazette process. Compliance teams use those references to confirm whether a liquidation, merger, or amendment was formally registered before approving higher-risk activity.

What the registry does not provide

Belgium does not sidestep EU AML restrictions around beneficial ownership access. After CJEU C-601/20, broad public access to beneficial ownership registers across the EU became legally constrained. Older AMLD 5 assumptions about unrestricted public UBO access no longer apply. OpenRegistry does not bypass those restrictions. If beneficial ownership data is blocked upstream, it stays unavailable here.

The KBO is also not a sanctions list, credit bureau, or adverse media source. Separate OFAC, UK, and EU sanctions screening is still required against the resolved ownership structure.

Historical snapshots cause confusion too. Every OpenRegistry request queries the live register directly. There is no internal archive of Belgian records. That tradeoff cuts both ways. You get current registry-of-record data instead of stale cache exports, though you also inherit upstream instability when the register slows down or changes payload formats.

Querying Belgium through the MCP server

Belgium is active on the current OpenRegistry server matrix. A basic company search starts with search_companies:

{
  "jurisdiction": "BE",
  "query": "Colruyt Group"
}

If the enterprise number already appears in onboarding documents, direct retrieval is cleaner:

{
  "jurisdiction": "BE",
  "company_number": "0400378185"
}

That request uses get_company_profile. Governance review often follows during enhanced due diligence:

{
  "jurisdiction": "BE",
  "company_number": "0400378185"
}

That request uses get_officers.

One operational detail matters. OpenRegistry does not reinterpret Belgian registry payloads before returning them. Your MCP client receives the upstream structure plus unified wrapper fields. For compliance engineering teams, that removes a recurring audit headache: proving field provenance. When a regulator asks why a merchant was approved, you can point to the exact registry response returned during onboarding rather than relying on a vendor-normalised derivative.

Belgian quirks that trigger false positives

Belgian onboarding failures are often structural, not fraudulent. Three patterns appear repeatedly:

  • Multilingual company names
  • Enterprise units versus establishment units
  • Legal form abbreviations changing over time

A supplier may submit โ€œSRLโ€ while older records still reference โ€œSPRLโ€ after reforms under the Belgian Companies and Associations Code. Systems that treat those as unrelated legal forms reduce match confidence without adding any useful signal.

Address handling creates similar trouble. Dutch and French municipality variants can appear across separate filings for the same entity. Raw upstream fields help because analysts can inspect the original KBO representation directly instead of trying to reverse-engineer a matching score from the legacy paid databases.

Belgian filings also expose detailed NACE activity codes. Those codes help with risk segmentation, though they should not be treated as proof of current activity. We use them as one signal during onboarding review, especially for marketplaces and payments flows where merchant category drift shows up regularly.

Most KYB failures come down to provenance rather than missing enrichment data. Internal audit teams want to know which register was queried, when the lookup happened, and whether the returned data can be reproduced later. Belgian KBO checks fit that workflow well because the enterprise number stays stable across operational and filing records.

OpenRegistry exposes the Belgian KBO/CBE through MCP with live registry queries and preserved upstream fields. Current jurisdiction coverage is listed at https://openregistry.sophymarine.com.

Comments

No comments yet. Start the discussion.