A Munich company might carry the identifier HRB 12345 in the German commercial register. The pattern repeats across the country, though each number belongs to a specific local court. Those two letters already narrow things down. HRB marks a capital company such as a GmbH or AG. HRA points to a partnership entry. When you trace ownership across borders, that small prefix saves time and avoids the classic mistake of mixing different legal forms.
Anyone researching German entities soon touches several databases. The Handelsregister is the statutory record kept by the courts. Basic corporate facts live there. Ownership hints often sit somewhere else. The Transparenzregister holds beneficial ownership disclosures. Official notices and some filings appear in the Bundesanzeiger.
Late 2022 changed how open that ecosystem is. The Court of Justice of the European Union ruled in case C‑601/20 that unrestricted access to beneficial ownership registers breached privacy rights. Germany adjusted quickly. The Handelsregister stayed public. The Transparenzregister moved behind an anti‑money‑laundering access check.
That decision created a practical divide. Some data remains open. The ownership layer usually does not.
What appears in a Handelsregister record
Most Handelsregister extracts look familiar once you have seen a few. Courts record entries in a consistent format, which means the same fields surface again and again. Even the free index exposes identifiers that reappear in filings and public announcements.
Common fields include:
- register_number: the HRB or HRA identifier
- register_court: the local Registergericht, for instance Amtsgericht München
- legal_form: GmbH, AG, UG (haftungsbeschränkt), KG, other German legal forms
- company_name: the official registered name
- registered_seat: the city named as the legal seat
- status: active, liquidation, or removed from the register
A full excerpt adds the management layer. A GmbH entry normally lists Geschäftsführer as managing directors. In an AG the board appears under Vorstand. Each amendment receives a dated line tied to the court file.
Germany’s register system still revolves around local courts. Berlin‑Charlottenburg maintains its own ledger. Munich does the same. Hamburg again runs a separate one. The search interface on the web looks centralised, though the underlying records remain court‑owned.
That court field matters more than it first appears. It identifies the authority that created the entry. Groups that scatter subsidiaries across several Länder often leave a trail of different register courts. Look at those courts beside the incorporation dates and you sometimes see the expansion pattern of the business.
Gaps in the public record
The most obvious gap is beneficial ownership.
Germany introduced mandatory UBO disclosure through the Transparenzregister. Before the CJEU judgment, journalists could query that database with modest friction. The new model requires a request showing “legitimate interest”. Many newsrooms now rely on older data snapshots, leaks, or foreign registries that still publish shareholder information.
Document access adds another wrinkle. Searching the Handelsregister index costs nothing. Pulling the underlying filings usually involves a small payment through the official portal. A standard Handelsregisterauszug tends to cost only a few euros. Some incorporation notices or capital changes appear instead in the Bundesanzeiger.
So the picture comes together piece by piece. One source rarely tells the whole story. When a structure links Germany with Spain or the Netherlands, each jurisdiction brings its own identifiers and document rules.
Querying registries from code
Developers building research tooling rarely enjoy scraping court websites. HTML changes. CAPTCHA pages appear. Structured responses are far easier to process.
The MCP server used by OpenRegistry exposes registry lookups as tool calls. Assistants or scripts can request company data directly rather than parsing a portal.
Germany is not active on the OpenRegistry server right now. The coverage list reflects that. If support arrives, a typical workflow would begin with a search by company name or register number.
search_companies({
"jurisdiction": "DE",
"query": "Wirecard"
})
Once the register number is known, the next step retrieves the company profile.
get_company_profile({
"jurisdiction": "DE",
"company_number": "HRB 195317"
})
A Handelsregister integration would likely return the structured fields mentioned earlier plus a jurisdiction_data object. That section carries the raw labels used by the upstream registry. Nothing disappears during normalisation.
Filings usually come next.
list_filings({
"jurisdiction": "DE",
"company_number": "HRB 195317"
})
Those records mirror amendments recorded by the register court. Director appointments appear there. Capital increases as well. Liquidation notices often surface in the same stream.
Why the structure matters
German subsidiaries appear inside many European corporate groups. A holding vehicle might sit in Luxembourg or the Netherlands while the German company employs staff and signs contracts. When sanctions exposure or procurement scandals surface, investigators often start with the Handelsregister entry for that operating entity.
The register number becomes the anchor. Bundesanzeiger notices repeat it. Court filings reference it again. Some banking datasets include the HRB number as well.
Consistency helps once the trail crosses borders. A Polish KRS filing might name a German parent together with its HRB identifier. Match that number with the correct register court and the entity becomes clear.
The missing UBO layer means the Handelsregister is rarely the final stop. Reporters reconstruct control through shareholder filings, foreign registers, leaked archives. Large cross‑border investigations published by OCCRP or ICIJ often follow that route when German entities appear.
Developers run into the same friction. Manual searches through court portals slow research down, especially once CAPTCHA pages interrupt the workflow. Programmatic access to statutory registries removes much of that overhead. Germany is not yet active on the OpenRegistry MCP server, though several neighbouring registers already are. The current coverage list sits at https://openregistry.sophymarine.com.
Top comments (0)