DEV Community

Cover image for Germany’s Handelsregister via API: what the record actually shows
OpenRegistry
OpenRegistry

Posted on

Germany’s Handelsregister via API: what the record actually shows

Every German company receives a court file number. A Berlin GmbH may appear as HRB 123456 B. Those letters indicate the register type and the local court, the Registergericht, that keeps the file. Germany has no single nationwide companies database. Each regional court maintains its own section of the Handelsregister and republishes notices through federal portals.

This layout shapes investigative work. A shell chain touching Hamburg and Bavaria means reading entries written by different courts, each with its own formatting habits. The legal framework stays standard. The presentation does not.

OpenRegistry queries the register endpoints used by those courts and returns the raw entry they publish. No aggregation layer sits in between. The response carries a jurisdiction_data block that reflects the court output line for line.

What the Handelsregister record actually contains

The core company profile exposes fields reporters often rely on when tracing control or mapping a corporate chain.

register_number — the HRB or HRA number issued by the court. HRB denotes corporations such as GmbH or AG. HRA denotes partnerships such as KG.

register_court — the court responsible for the entry, for instance Amtsgericht München.

company_name — the legal name exactly as filed.

legal_form — GmbH, AG, UG (haftungsbeschränkt), KG, along with other legal forms recognised by German company law.

registered_address and city — the statutory seat, known as the Sitz.

Within jurisdiction_data you often see the original German labels carried over from the register. Sitz marks the legal seat. Gegenstand des Unternehmens describes the declared business activity. Vertretungsbefugnis explains how directors may represent the company in legal acts. Some entries specify that two managing directors must act together. That detail matters when verifying contracts or signatures.

Officer data comes from the same court record. A get_officers query usually returns managing directors for a GmbH or the Vorstand for an AG. The raw strings often include role titles such as Geschäftsführer or Vorstand. Anyone who needs structured role categories can extract them from those fragments in code.

Filings surface through the publication stream attached to the register entry. These notices include amendments to articles of association, director appointments, or changes to share capital. Many reference supporting documents such as the Gesellschafterliste. That shareholder list is often the only direct signal of ownership inside the Handelsregister itself.

What the registry does not give you

Corporate transparency in Germany sits across several registries rather than one system. The Handelsregister records formal corporate facts. Beneficial ownership belongs to the Transparenzregister. Access changed after the Court of Justice of the European Union ruling in case C‑601/20. Public access closed in 2022. Journalists can still request extracts in certain cases, though the process now requires identity checks and a declared interest.

Because of that split, the Handelsregister does not expose UBO data in its public entries. A dataset similar to get_persons_with_significant_control does not exist in this register.

Another limitation involves shareholder structure. The Gesellschafterliste normally arrives as a PDF attached to the filing record. The court logs that the document was submitted. It does not convert each shareholder row into machine‑readable fields. Anyone who needs ownership percentages has to retrieve the document and read it directly or run their own parser.

Historical coverage also differs between courts. Some began digitising older files early. Others only publish modern filings through their online interfaces. Activity before 2007 often appears as scanned paperwork rather than structured entries.

Querying the German register through MCP

An assistant connected to the OpenRegistry MCP server can query the German register directly. Start with a company search.

Example tool call:

search_companies({
  "jurisdiction": "DE",
  "query": "Wirecard AG"
})
Enter fullscreen mode Exit fullscreen mode

The result returns candidate matches with their HR numbers and the relevant court. Once you have the register number, request the full profile.

get_company_profile({
  "jurisdiction": "DE",
  "company_number": "HRB 195317"
})
Enter fullscreen mode Exit fullscreen mode

Officer data comes from the same file.

get_officers({
  "jurisdiction": "DE",
  "company_number": "HRB 195317"
})
Enter fullscreen mode Exit fullscreen mode

Corporate changes appear through the filing history.

list_filings({
  "jurisdiction": "DE",
  "company_number": "HRB 195317"
})
Enter fullscreen mode Exit fullscreen mode

If a filing references a document such as a Gesellschafterliste, fetch it with fetch_document using the identifier returned in the filings list.

Field notes from the German system

German corporate records reward slow reading. A director resignation may appear as a dense block of legal prose instead of a clean event record. Courts often publish the change notice in the register first. The same wording later shows up in the Unternehmensregister announcement feed.

This pattern matters in cross‑border reporting. Investigations touching Austria, Liechtenstein, or Cyprus often rely on German entries for the local picture. The Handelsregister typically lists the managing directors and the statutory seat. Ownership sometimes sits one jurisdiction higher.

Another detail involves timing around the shareholder list. A GmbH must submit a revised Gesellschafterliste when ownership changes. Delays still happen. During the Wirecard collapse, reporters compared several versions of those lists to see which investors appeared shortly before insolvency.

Why reporters still query it directly

A sanctions or corruption investigation often produces a large corporate graph. Editors and lawyers will ask where each fact originated. A court register entry answers that question. Anyone reviewing the work can repeat the same lookup and reach the same record.

OpenRegistry exposes Handelsregister entries through MCP using the same fields published by the court. The audit trail stays intact and the usual CAPTCHA loops on public portals disappear. Documentation and access details sit at https://openregistry.sophymarine.com.

Top comments (0)