Germany (DE)
Overview of German company data coverage, registers, and legal forms
Overview
Germany has one of the most comprehensive and well-digitized commercial register systems in Europe. The Handelsregister (Commercial Register) is maintained by local courts across all 16 federal states, providing authoritative information on companies, partnerships, and other legal entities.
Registers
Handelsregister
The primary commercial register: company filings, structured data, official documents, and the notary-verified shareholder graph
Unternehmensregister
Annual financial statements (Jahresabschluss) and published company filings
Transparenzregister
Ultimate beneficial ownership (UBO) data — requires a delegated-access setup
Insolvenzbekanntmachungen
Official §9 InsO insolvency publications, consumed as a monitoring feed
Handelsregister
The commercial register, maintained by the local courts (Amtsgerichte) across all 16 federal states. It is the authoritative source for company data, official documents and — because German shareholder lists are checked by notaries at filing — the notary-verified shareholder graph.
| Field | Value |
|---|---|
| Name | Handelsregister |
| Managing authority | Local courts (Amtsgerichte) / state justice ministries |
Unternehmensregister
Germany's central portal for company publications: annual financial statements, corporate announcements and other mandatory filings. Companies are referenced by their Handelsregister identifiers.
| Type | Description |
|---|---|
| Jahresabschlüsse | Annual financial statements |
| Konzernabschlüsse | Consolidated financial statements |
| Bekanntmachungen | Corporate announcements |
| Kapitalmarktinformationen | Capital market information |
Transparenzregister
Germany's beneficial ownership register. Since August 2021 it operates as a full register rather than a catch-all for entities not covered elsewhere. Its entries are self-declarations by the companies themselves, and access is legally restricted — see Beneficial ownership below for the delegated-access setup.
Insolvenzbekanntmachungen
The official insolvency publication portal required by § 9 InsO, run by the North Rhine-Westphalia Ministry of Justice on behalf of all federal states. Every German insolvency court publishes here, so it is the authoritative record that proceedings have been opened, dismissed, or closed.
| Field | Value |
|---|---|
| Name | Insolvenzbekanntmachungen (§ 9 InsO) |
| Managing authority | Ministry of Justice of North Rhine-Westphalia, for all states |
Unlike the three registers above, this one is not a search or report source: it is a publication feed consumed by company monitoring. Subscribe a company to the de_insolvenzbekanntmachungen.feed source and a publication naming it raises an event within the polling window, resolved to the company through its Handelsregister coordinates and cross-checked on the debtor name.
The portal's nine publication types map onto generic event codes, so the same handler works across jurisdictions:
| Publication type (German) | eventCode |
|---|---|
| Eröffnungen | INSOLVENCY_OPENED |
| Abweisungen mangels Masse | INSOLVENCY_DISMISSED_FOR_LACK_OF_ASSETS |
| Sicherungsmaßnahmen | INSOLVENCY_PROTECTIVE_MEASURES |
| Entscheidungen im Verfahren | INSOLVENCY_DECISION |
| Entscheidungen nach Aufhebung des Verfahrens | INSOLVENCY_LIFTED |
| Verteilungsverzeichnisse (§ 188 InsO) | INSOLVENCY_DISTRIBUTION_PUBLISHED |
| Entscheidungen im Restschuldbefreiungsverfahren | INSOLVENCY_DISCHARGE_DECISION |
| Überwachte Insolvenzpläne | INSOLVENCY_PLAN_SUPERVISED |
| Sonstiges | INSOLVENCY_OTHER |
A company's Handelsregister status also moves when proceedings open, but the register entry follows the court filing rather than the publication. The feed is the earlier signal, which is why monitoring reads it directly instead of waiting for a status change on the company report.
Identifiers
German companies are identified by a combination of court, register type, and register number:
| Field | Description | Example |
|---|---|---|
court_id | 5-character court code | D2601 |
register_type | Register type code | HRB |
register_number | Register number | 253035 |
register_suffix | Optional suffix | B |
The normalized display format is Amtsgericht München HRB 253035; the compact normalized id, used by the Unternehmensregister and Transparenzregister paths, joins the court code and the register number as R3101_HRB 75787.
Register Types
German companies are registered in different registers depending on their legal form:
| Register | Code | Description | Example Entities |
|---|---|---|---|
| Handelsregister A | HRA | Partnerships | OHG, KG, GmbH & Co. KG |
| Handelsregister B | HRB | Corporations | GmbH, AG, UG, SE |
| Genossenschaftsregister | GnR | Cooperatives | eG |
| Partnerschaftsregister | PR | Professional partnerships | PartG, PartG mbB |
| Vereinsregister | VR | Associations | e.V. |
| Gesellschaftsregister | GsR | Civil law partnerships | eGbR (since 2024) |
Legal Forms
Corporations (HRB)
| Legal Form | Full Name | Description |
|---|---|---|
| GmbH | Gesellschaft mit beschränkter Haftung | Limited liability company (most common) |
| UG | Unternehmergesellschaft (haftungsbeschränkt) | Mini-GmbH with reduced capital requirements |
| AG | Aktiengesellschaft | Stock corporation |
| SE | Societas Europaea | European company |
| KGaA | Kommanditgesellschaft auf Aktien | Partnership limited by shares |
Partnerships (HRA)
| Legal Form | Full Name | Description |
|---|---|---|
| OHG | Offene Handelsgesellschaft | General partnership |
| KG | Kommanditgesellschaft | Limited partnership |
| GmbH & Co. KG | - | Limited partnership with GmbH as general partner |
Available Documents
The register's own shortcut is the documentType you order by, and each document bills its own SKU:
| Document type | Shortcut | SKU | Description | Format | Availability |
|---|---|---|---|---|---|
| Aktueller Abdruck | AD | DEHRAD | Current register extract | All companies | |
| Chronologischer Abdruck | CD | DEHRCD | Historical extract with all changes | All companies | |
| Historischer Abdruck | HD | DEHRHD | Pre-digitisation historical extract | Where digitised | |
| Strukturierter Registerinhalt | SI | DEHRSI | Machine-readable structured data | XML | All companies |
| Gesellschafterliste | DK | DEHRSL | Shareholder list | GmbH, UG only | |
| Satzung / Gesellschaftsvertrag | DK | DEHRAA | Articles of association | When filed | |
| Musterprotokoll | DK | DEHRMP | Model protocol (simplified formation) | When used |
AD, CD, HD and SI are the four top-level register documents — ordering one is a single call. Everything under DK (Dokumentenansicht) is a filing in the company's document tree, so it is discovered through List Documents and ordered by the documentId that listing returns, rather than by shortcut.
Ownership, control, and UBO data
Germany exposes ownership through two complementary sources, which answer different questions — for KYB the registry-backed signal is usually the stronger one:
| Source | What it gives you | Nature |
|---|---|---|
| Handelsregister shareholder graph | Direct and indirect shareholders, recursively, with ownership % | Notary-verified (checked at filing) |
| Transparenzregister | Declared ultimate beneficial owners with control type | Self-declared by the company |
- Shareholder graph (Handelsregister) — direct and indirect shareholders with ownership percentages, reconstructed recursively. Shareholder lists are verified by notaries at filing, making this a strong ownership signal. No special credentials required. See Real-time Search and the Shareholder Graph API.
- Beneficial owners (Transparenzregister) — declared ultimate beneficial owners and control type. These are self-declarations, and access is legally restricted to German obliged entities, so it uses a delegated-access setup (the client's credentials are deployed into Kausate). See Beneficial ownership.
Fetching UBOs for a German company without configured Transparenzregister credentials returns a clear "credentials not configured" error. This is a legal access restriction — see Beneficial ownership for the delegated-access setup.
Real-time Search
Our real-time search API allows you to search for companies directly from the German Handelsregister portal. This is useful when you need the most up-to-date search results or when searching for companies not yet in our index.
Advanced Query
For more precise searches, use the advancedQuery parameter instead of a simple name search. This allows you to combine multiple search criteria for better results.
{
"advancedQuery": {
"name": "Chocoladefabriken Lindt & Sprüngli GmbH",
"registerNumber": "HRB 3452",
"jurisdiction": "de"
}
}Available Fields (Germany)
| Field | Description | Example |
|---|---|---|
name | Company name | "BMW AG" |
courtId | Court ID | "D2803" |
courtCity | Court city (fuzzy-matched) | "München" |
registerType | Register type | "HRB", "HRA", "GNR" |
registerNumber | Register number (can include prefix) | "10364", "HRB 275800" |
registerSuffix | Register suffix | "B" |
jurisdiction | Always "de" for Germany | "de" |
You cannot use both courtId and courtCity in the same query - use one or
the other. The courtCity field supports fuzzy matching, so minor spelling
variations are handled automatically.
Example Queries
Search by name and register number:
{
"advancedQuery": {
"name": "Lindt",
"registerNumber": "HRB 3452",
"jurisdiction": "de"
}
}Search by court city and register details:
{
"advancedQuery": {
"courtCity": "München",
"registerType": "HRB",
"registerNumber": "10364B",
"jurisdiction": "de"
}
}Search by register number with embedded type:
{
"advancedQuery": {
"courtCity": "Berlin",
"registerNumber": "HR B 275800",
"jurisdiction": "de"
}
}The registerNumber field automatically parses embedded register types (like HRB, HR B, HRA, etc.) and suffixes, so you can pass the full register number as it appears in official documents.
Real-time Document Retrieval
Our real-time document retrieval service allows you to fetch official documents directly from the German Handelsregister on demand. This ensures you always have access to the most current versions of company documents.
Supported Document Types
- Shareholder Lists (Gesellschafterliste)
- Articles of Association (Satzung / Gesellschaftsvertrag)
- Current Extract (Aktuelle Auszug)
- Structured Information (Strukturierte Information)
How It Works
- The API establishes a connection to the official Handelsregister
- Documents are retrieved in real-time
- Retrieved documents are automatically processed and made available via a secure URL
- Documents are cached to improve performance for subsequent requests
For detailed implementation instructions, refer to our API Reference.
Beneficial ownership (Transparenzregister)
Data available
| Field | Description |
|---|---|
| Beneficial Owners | Natural persons with >25% ownership or control |
| Ownership Percentage | Percentage of shares or voting rights |
| Control Type | Direct, indirect, or other form of control |
Access: delegated credentials required
Beneficial ownership data from the German Transparenzregister is not openly accessible. Access is governed by § 23 GwG (Geldwäschegesetz, the German Money Laundering Act): since the ECJ struck down open public access in C-37/20, inspection is limited to authorities, obliged entities performing customer due diligence, and anyone who can demonstrate a legitimate interest. Retrieving it therefore requires credentials issued to a Verpflichteter — the obliged entities listed in § 2 GwG: banks, notaries, regulated financial and professional service firms. That permission is granted only to German obliged entities, so the register cannot be opened to an arbitrary account.
If you are a German obliged entity, or you serve a German client that is one, you reach the Transparenzregister through a delegated access setup: the obliged entity's credentials are deployed into Kausate's encrypted secret store and used to authenticate the calls on their behalf. Attempting a UBO request without configured credentials returns a clear "credentials not configured" error rather than data.
How delegated access works
1. Store the credentials
The German obliged entity's Transparenzregister login is passed into Kausate's encrypted secret store via the Integrations API. Credential values are write-only — they are used for calls but never returned by the API.
2. Separate customers with customerId
When you act for more than one obliged entity, a customerId keeps each
client's credentials isolated, both in storage and at call time.
3. Fetch UBO / ownership data
UBO requests for German companies authenticate with the stored credentials that match the request, returning beneficial owners, ownership percentages, and control type.
Step 1 — Pass the credentials into the secret store
Use the Create Integration endpoint with the de-transparenzregister datasource. The credential pair is the email and password the obliged entity uses to sign in to the Transparenzregister:
curl -X POST "https://api.kausate.com/v2/integrations" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datasourceSlug": "de-transparenzregister",
"secretValues": {
"email": "obliged-entity@example.de",
"password": "the-account-password"
}
}'The response confirms the stored datasource and its timestamps; it never echoes the values back:
{
"datasourceSlug": "de-transparenzregister",
"datasourceName": "Transparenzregister",
"createdAt": "2026-06-06T10:00:00Z",
"updatedAt": "2026-06-06T10:00:00Z"
}Manage credentials over their lifetime with the companion endpoints — List (to see which datasources are configured, without exposing values), Update (to rotate the password), and Delete.
Step 2 — Separate multiple customers with customerId
If you provide UBO access to several German clients, each supplies their own obliged-entity credentials. The customerId flag keeps those credential sets separate: pass it when storing the credentials, and the same identifier later selects which set is used for a call.
# Store one client's credentials under their customerId
curl -X POST "https://api.kausate.com/v2/integrations?customerId=acme-bank" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datasourceSlug": "de-transparenzregister",
"secretValues": { "email": "kyb@acme-bank.de", "password": "..." }
}'customerId must be URL-safe (letters, numbers, dashes, underscores) and at
most 150 characters. Omit it to store a single set of credentials at the
organization level — that single set is then used for every German UBO call.
Step 3 — Retrieve beneficial owners
Place a UBO order with the Extract Ultimate Beneficial Owners endpoint. To use a specific customer's stored credentials, send their identifier in the X-Customer-Id header — it selects the matching credential set and scopes the resulting order to that customer:
curl -X POST "https://api.kausate.com/v2/companies/ubo" \
-H "X-API-Key: $API_KEY" \
-H "X-Customer-Id: acme-bank" \
-H "Content-Type: application/json" \
-d '{ "kausateId": "co_de_4JFFrsbQ99t1nmRw2JgzmG" }'This returns an order you can poll at GET /v2/companies/ubo/{orderId} or receive via webhook. For a blocking call that returns the completed report directly, use Extract UBOs (sync). Pass the same X-Customer-Id to the poll endpoint to read back a customer-scoped order.
Omit X-Customer-Id to use the organization-level credentials configured in
Step 1. Send it (matching a customerId used at storage time) to use that end
customer's credentials.
Other data sources
Company data in every jurisdiction is also spread across sources outside the commercial register — the central bank, the official gazette, the financial supervisor's authorisation registers, the statistical office and the tax authority among them. Kausate draws only on the sources described on this page; when you need something the API does not carry, those are where to look.
Coverage
- All 16 federal states covered
- 150+ local courts (Amtsgerichte)
- All register types (HRA, HRB, GnR, PR, VR, GsR)
- Historical data available where digitized (typically from 2007 onwards)
FAQ
Last updated on