German Handelsregister API — Company Data & KYB avatar

German Handelsregister API — Company Data & KYB

Pricing

from $0.005 / actor start

Go to Apify Store
German Handelsregister API — Company Data & KYB

German Handelsregister API — Company Data & KYB

German company data & KYB API. Look up firms across all 5 German registers via handelsregister.de: Handelsregister (HRB/HRA), Genossenschaft (eG), Gesellschaftsregister (eGbR), Partnerschaft & Verein. Returns JSON — registration number, court, legal form, status, address. Firmendaten. Unofficial.

Pricing

from $0.005 / actor start

Rating

0.0

(0)

Developer

Patrick Lierse

Patrick Lierse

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 hours ago

Last modified

Share

German Handelsregister Lookup — all five public registers

Look up German entities in the official register portal (handelsregister.de) and get clean, structured JSON back: registration number, court, legal form, status and more.

One portal, five registers — all covered:

RegisterSectionTypical entities
HandelsregisterHRB / HRAGmbH, AG, SE, UG, KG, OHG, e.K.
GenossenschaftsregisterGnReG — Volksbanken, Raiffeisen, housing & energy co-ops
Gesellschaftsregister (new since 2024)GsReGbR — registered civil-law partnerships (property-holding GbRs)
PartnerschaftsregisterPRPartG / PartG mbB — law, tax & audit firms
VereinsregisterVRe.V. — registered associations

The same search handles every section — pass a name, or a register number with its prefix (HRB 50000, GnR 23, GsR 4711, PR 512, VR 642). The Gesellschaftsregister (eGbR) is a 2024 register that no other Apify actor covers — useful for verifying the registered GbRs that now appear in land and beneficial-ownership records.

Unofficial tool. This actor is not affiliated with or endorsed by the Bundesministerium der Justiz or any German authority. It retrieves the same publicly available register data any person can view free of charge on the official portal — register publicity is statutory (§ 9 HGB for the commercial register; equivalent provisions govern the cooperative, partnership, association and company registers, all free and login-free via the common portal since DiRUG, Aug 2022). It does so politely: hard rate limit, caching, no personal data by default.

Example

Input

{
"companyName": "Allianz SE",
"maxResults": 1
}

Output (one dataset item per company match, trimmed)

{
"companyName": "Allianz SE",
"registrationNumber": "HRB 164232",
"registrationCourt": "München",
"legalForm": "SE",
"registeredAddress": "München",
"status": "aktuell"
}

(Full records also include registrationDate, persons, sourceUrl, cachedAt and dataSource — see the field notes below.)

Beyond the commercial register — the same actor resolves cooperatives, partnerships, associations and the new eGbR register. Real results from a live QA run (2026-06-13):

{ "companyName": "Berliner Volksbank eG", "registrationNumber": "GnR 23", "registrationCourt": "Berlin (Charlottenburg)", "legalForm": "eG", "status": "aktuell" }
{ "companyName": "eGbR Lützowgärten KH", "registrationNumber": "GsR 4711", "registrationCourt": "Berlin (Charlottenburg)", "legalForm": "eGbR", "status": "aktuell" }
{ "companyName": "Noerr Partnerschaftsgesellschaft mbB …", "registrationNumber": "PR 512", "registrationCourt": "München", "legalForm": "PartG mbB","status": "aktuell" }

Associations (VR) carry no legal-form suffix, so legalForm is null for them by design — the register type is always available from the registrationNumber prefix.

What it does

You give it a company name and/or a registration number (e.g. HRB 50000), optionally a registration court (Amtsgericht). It searches the official register portal and returns up to maxResults structured records. Successful lookups are cached for 72 hours — registry data changes slowly, and cache hits cost zero requests against the portal.

Rate limits — read this before bulk use

The portal's terms of use cap automated retrieval at 60 queries per hour. This actor enforces that limit internally with a sliding-window limiter (strictly at most 60 requests in any rolling hour, budget persisted across runs) — it is a feature, not a bug, and it cannot be disabled:

  • When the budget is exhausted, the actor waits (it does not fail, does not rotate proxies, does not evade). A run that needs more requests than the hourly budget simply takes longer.
  • The internal queue accepts at most 200 pending lookups. Beyond that the run fails fast with a clear error rather than accepting work it cannot politely complete.
  • Repeat lookups within 72 hours are served from cache instantly and consume no quota.

If you need thousands of fresh records per hour, this is the wrong tool — and under the portal's terms, so is every other tool.

Input

FieldTypeDefaultNotes
companyNamestringName or keywords. Required if no registrationNumber.
registrationNumberstringWith section prefix: HRB/HRA, GnR, GsR, PR, VR (e.g. GnR 23). Required if no companyName.
registrationCourtstringAmtsgericht name, narrows the search.
includePersonsbooleanfalseGDPR safety default. Reserved for deep-record retrieval of directors/officers — not yet functional; persons stays empty and nothing extra is charged.
maxResultsinteger101–100.

Example input

{
"companyName": "Allianz SE",
"maxResults": 2,
"includePersons": false
}

Example output (real result from a live QA run, 2026-06-11)

{
"companyName": "AREVA GmbH",
"registrationNumber": "HRB 7817",
"registrationCourt": "Fürth",
"federalState": "Bayern",
"legalForm": "GmbH",
"registeredAddress": "Erlangen",
"registrationDate": null,
"status": "aktuell",
"formerNames": ["Siemens Nuclear Power GmbH", "Framatome ANP GmbH", "AREVA NP GmbH"],
"formerSeats": ["Erlangen"],
"persons": [],
"sourceUrl": "https://www.handelsregister.de/rp_web/erweitertesuche/welcome.xhtml",
"cachedAt": "2026-06-11T21:28:00.000Z",
"dataSource": "handelsregister.de/erweitertesuche"
}

The search result grid reliably provides name, court, register number, federal state (Bundesland), seat, status, and company historyformerNames and formerSeats (the register's renaming/relocation trail; null when none). These are all company data (no personal-data dimension).

Field availability honesty: registrationDate and persons — plus deeper fields some competitors show (business purpose/Gegenstand, capital, representatives/Prokuristen) — live only in the full filing document (a deep record, the SI/AD/CD extracts). The portal serves those only through JavaScript command-link postbacks that this plain-HTTP actor deliberately does not replicate (no headless browser, no anti-bot workarounds). Consequently persons is currently always empty (even with includePersons: true, which logs a notice instead) and registrationDate is always null. The deep-record event is never charged, and we do not fabricate these fields.

Searching by name: know this limitation

The register matches your keywords against registered legal names, not brands. "Allianz SE" and "Siemens AG" resolve fine; "BMW AG" does not — the registered name is "Bayerische Motoren Werke Aktiengesellschaft", which contains neither "BMW" nor "AG". For brand-only names, search by registrationNumber (e.g. HRB 42243) and add registrationCourt (e.g. München) to disambiguate — register numbers repeat across courts and the court filter is applied locally by the actor. Results are relevance-ranked before maxResults is applied, because the portal itself returns up to 100 alphabetically sorted fuzzy matches.

Pricing (pay per event)

EventPriceWhen charged
Actor start$0.005once per run
Structured result$0.004per record returned ($4 per 1,000)
Deep record$0.04per full filing document actually retrieved — feature not yet live, this event is currently never charged

Examples: 1,000 basic company lookups ≈ $4.01–$4.05 depending on how many runs you batch them into. Deep records will be charged only on successful retrieval once the feature ships — today it never fires.

GDPR note

Company register data is public by statutory design (§ 9 HGB). Personal data (names of directors/officers) is off by default and retrieved only when you explicitly enable includePersons — at that point you are choosing to process personal data and need your own lawful basis. See COMPLIANCE.md in the repository for the operator's Legitimate Interest Assessment.

Every HTTP request the actor makes is timestamped and saved to the run's key-value store under AUDIT_LOG.

Troubleshooting

  • "results grid not found" — the portal changed its markup (it has before). The raw HTML is saved to the run's KV store under PARSE_FAILURE_HTML; please report it. No fabricated data is ever emitted.
  • Slow run — that's the 60/hour limit working as designed; see above.
  • The portal itself warns that its search can be flaky. Precise queries (exact name, or register number + court) work best.

Contact

Support: patrick.lierse@googlemail.com