Handelsregister API - German Company Register Scraper avatar

Handelsregister API - German Company Register Scraper

Pricing

from $4.00 / 1,000 company records

Go to Apify Store
Handelsregister API - German Company Register Scraper

Handelsregister API - German Company Register Scraper

Handelsregister API for German company register records from handelsregister.de: register court and number, legal form, seat, status, former names, address, share capital, purpose and officers from the structured register content. Search by name, city or register number.

Pricing

from $4.00 / 1,000 company records

Rating

0.0

(0)

Developer

Kamer Ozkan

Kamer Ozkan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

The Handelsregister API for German company data: look up companies on handelsregister.de, the official joint register portal of the German states, by name, by register number (HRB, HRA, GnR, PR, VR, GsR) or by court, city, legal form and state, and get clean JSON with register court and number, legal form, seat, status, former names and, from the official structured register content (SI), business address, share capital, business purpose, founding date, representation rule, managing directors, board members, authorised signatories, branches and EUID. No login, no API key, no browser.

What does Handelsregister API do?

The actor fills in the portal's advanced search the way a person would, reads every hit (register court, register type and number, company name, seat, state, current or deleted, former names and seats) and, if you keep Structured register content on, downloads the official SI document of each company, an XJustiz XML file the register courts publish, and turns it into flat fields.

Typical lookups:

  • By company name: "Trade Republic Bank", "Siemens Energy", "Bäckerei" with city Leipzig.
  • By register number (KYC and onboarding): "HRB 252581 München", "Berlin (Charlottenburg) HRB 244347 B".
  • By filters: all GmbHs at one register court, all cooperatives in a state, companies with a postal code.
  • New companies monitor: schedule a search daily and get (and pay for) only the companies that were not delivered before.

Who is it for?

  • KYC, AML and compliance teams: verify a German counterparty's register entry, legal form, address, capital and who may represent it.
  • B2B sales and lead generation: lists of GmbHs, AGs or cooperatives by city or court with business address and managing directors.
  • M&A, investors and credit analysts: share capital, founding date, last register entry and former names in bulk.
  • CRM and data teams: enrich company records with register court, register number and EUID.

What data can you get?

FieldExample
name, officialNameTrade Republic Bank GmbH
registerCourt, registerType, registerNumber, registerIdAmtsgericht Berlin (Charlottenburg), HRB, 244347 B
euidDEF1103R.HRB244347B (European Unique Identifier)
legalForm, legalFormCode, legalFormSourceGesellschaft mit beschränkter Haftung, 221110, register
state, seat, status, statusRawBerlin, Berlin, active, aktuell
street, houseNumber, postalCode, cityBrunnenstraße, 19-21, 10119, Berlin
shareCapital, shareCapitalCurrency101677200, EUR
businessPurposeDas Betreiben von Bankgeschäften gemäß ...
representationRuleIst ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein ...
officersname and role: Geschäftsführer, Vorstand, Vorsitzender des Vorstands, Prokurist, Persönlich haftender Gesellschafter, Liquidator, Inhaber, Partner
branchesname, seat and EUID of each registered branch (10 EU branches for Trade Republic)
foundingDate, statuteDate, lastStatuteChange2016-08-03, 2026-05-20, 2026-05-20
lastRegisterEntry, numberOfRegisterEntries2026-08-28, 18
formerNamesearlier company names with their seat
availableDocumentsAD, CD, HD, DK, UT, VÖ, SI (documents the portal offers for the company)
detailsErrorwhy the structured content is missing for a row, otherwise empty

Officers are company officers as published in the public register: only name and role are returned. Birth dates and home towns that the register file also contains are dropped on purpose.

How much does it cost?

You pay per company: $5.00 per 1,000 companies ($0.005 per company) on the Free plan, with Store discounts on paid Apify plans: Bronze $4.50, Silver $4.25, Gold and above $4.00 per 1,000 companies. Platform usage is included.

Worked examples:

  • KYC check of 200 counterparties by register number: 200 x $0.005 = $1.00.
  • 100 GmbHs in one city with address, capital and managing directors: 100 x $0.005 = $0.50.
  • A daily new-companies monitor that finds about 15 new entries a day: 15 x $0.005 = $0.075 per day; companies already delivered are not charged.

Set Max companies or a maximum cost per run to cap spending.

How to use it

  1. Click Try for free.
  2. Enter Company names or keywords, or Register numbers such as HRB 252581 München.
  3. Optional filters: Register court (by its city), Register type, Legal form, Federal states, City, Postal code, Include deleted companies.
  4. Keep Structured register content on for address, capital, purpose and officers (turn it off for a fast list of register numbers).
  5. Choose Max companies per search (the portal stops at 100 hits per search) and Max companies.
  6. Click Start and download the table as CSV, Excel, JSON or through the API.

Input example

{
"registerNumbers": ["HRB 252581 München", "Berlin (Charlottenburg) HRB 244347 B"],
"includeDetails": true,
"maxItems": 10
}

Output example

A row from a live run (business purpose shortened, 4 officers and 10 branches in the full row):

{
"searchQuery": "Trade Republic Bank",
"name": "Trade Republic Bank GmbH",
"registerCourt": "Amtsgericht Berlin (Charlottenburg)",
"registerType": "HRB",
"registerNumber": "244347",
"registerId": "Amtsgericht Berlin (Charlottenburg) HRB 244347",
"state": "Berlin",
"seat": "Berlin",
"status": "active",
"formerNames": [],
"availableDocuments": ["AD", "CD", "HD", "DK", "UT", "VÖ", "SI"],
"legalForm": "Gesellschaft mit beschränkter Haftung",
"legalFormSource": "register",
"officialName": "Trade Republic Bank GmbH",
"euid": "DEF1103R.HRB244347B",
"legalFormCode": "221110",
"street": "Brunnenstraße",
"houseNumber": "19-21",
"postalCode": "10119",
"city": "Berlin",
"shareCapital": 101677200.0,
"shareCapitalCurrency": "EUR",
"businessPurpose": "Das Betreiben von Bankgeschäften gemäß (a) § 1 Abs. 1 Satz 2 Nr. 1 Kreditwesengesetz (KWG) (Einlagengeschäft) ...",
"representationRule": "Ist ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, wird die Gesellschaft gemeinschaftlich durch zwei Geschäftsführer oder durch einen Geschäftsführer in Gemeinschaft mit einem Prokuristen vertreten.",
"foundingDate": "2016-08-03",
"statuteDate": "2026-05-20",
"lastStatuteChange": "2026-05-20",
"lastRegisterEntry": "2026-08-28",
"numberOfRegisterEntries": 18,
"officers": [{"name": "Gernot Mittendorfer", "role": "Geschäftsführer", "type": "person"}],
"branches": [{"name": "Trade Republic Bank GmbH, Branch Austria", "seat": "Wien", "euid": "ATBRA.630983-001"}],
"detailsError": null,
"scrapedAt": "2026-10-22T16:45:10+00:00"
}

Integrations and API

Run it from your code with the Apify API or the apify-client package, schedule it in Apify, or connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook.

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kamerozkan/handelsregister-api").call(run_input={
"registerNumbers": ["HRB 252581 München", "Berlin (Charlottenburg) HRB 244347 B"],
"includeDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["registerId"], item["name"], item["legalForm"], item["postalCode"], item["city"], item["shareCapital"])

FAQ

Where does the data come from? From handelsregister.de, the official register portal run by the German states (the search hits and the "SI" structured register content the register courts publish there). The actor never logs in.

Why at most 100 companies per search? The portal itself stops at 100 hits and asks to narrow the search. Add a register court, city, postal code, legal form or state, or split one broad keyword into several searches. The run log says when a search hit the limit.

How fast is it? About 5 to 10 seconds per company with structured content, because the actor pauses between requests to keep the load on the public portal low; without structured content a search of up to 100 companies takes a few seconds.

Why is detailsError filled for some rows? Now and then a register court's system does not deliver the SI document ("Der Abruf für dieses Dokument ist zur Zeit nicht möglich"). The actor retries it once at the end of the search; if it still fails, the row keeps all search fields and detailsError says why. Keep Apify Proxy on: the portal often refuses documents to shared cloud IPs.

Which register court name do I enter? The court's city as the portal lists it, for example München, Hamburg, Frankfurt am Main, Köln, Düsseldorf or Berlin (Charlottenburg). Some courts keep the register for a whole region, so a company in Karlsruhe is registered in Mannheim.

How does the new companies monitor work? With Only companies not seen before on, the actor remembers every delivered register number in a named key-value store in your account and skips it in later runs. The first run delivers every match as the baseline. Use one Monitor name per search.

Is it legal to collect this data? The register is public by law and the actor reads it without logins. Officers are returned with name and role only. You are responsible for how you use the data, including data protection rules for the people named in it.

Something is not working? Open an issue on the Issues tab with your run link and we will fix it fast.

Support

Questions, a field you need (for example shareholder lists, register announcements or the current printout as PDF) or a court that does not resolve? Open an issue on the Issues tab of this actor with your run link. Issues are read every working day and fixes ship within a few days; feature requests that other users share get built.