German USt-IdNr. & Handelsregister checker
German sites must publish an Impressum, which usually lists the USt-IdNr. and the commercial register entry. Paste one in and get both checked and classified.
Nothing yet. Paste numbers or a page on the left, or load the sample.
Runs entirely in your browser. A passing check means the number is well-formed, not that it is registered or active. Categories are inferred from the number format.
What gets checked
- USt-IdNr.: DE followed by 9 digits; the last digit is an ISO 7064 MOD 11,10 check digit.
- Handelsregister: HRA entries are sole traders and partnerships, HRB entries are corporations.
- HRA/HRB numbers are only unique together with the local court (Amtsgericht), so the tool reports format only.
- Extraction looks for labels such as USt-IdNr., Umsatzsteuer-ID, Handelsregister and Amtsgericht.
To confirm a number is registered and active, use BZSt. The BZSt eVatR service confirms a USt-IdNr.; the Handelsregister portal confirms register entries.
What the register section tells you
| HRA | Sole trader (e.K.), OHG, KG |
| HRB | GmbH, UG (haftungsbeschränkt), AG, KGaA |
| DE + 9 digits | VAT ID issued by the Bundeszentralamt für Steuern |
Run the same checks in your own code
import re
def ust_idnr_ok(v: str) -> bool:
v = re.sub(r"\s", "", v.upper())
if not re.fullmatch(r"DE[1-9]\d{8}", v):
return False
product = 10
for d in v[2:10]:
s = (int(d) + product) % 10 or 10
product = (2 * s) % 11
return (11 - product) % 10 == int(v[10])
print(ust_idnr_ok("DE 136 695 976")) # TrueCollect the numbers from company websites
A browser can't fetch other sites for you. Irmu fetches the page, handles rendering and blocking, and ai_query (+5 credits) returns the fields you ask for.
# Fetch a company's legal page with Irmu and let ai_query pull the IDs out,
# then validate them locally with the functions above.
import os, requests
resp = requests.get(
"https://app.irmu.com/api/crawl",
headers={"Authorization": f"Bearer {os.environ['IRMU_API_KEY']}"},
params={
"url": "https://example.com/legal",
"js": "true",
"ai_query": "Read the Impressum on this page. Return JSON: {name, legal_form, ust_idnr, register_court, register_number, managing_directors}.",
},
timeout=120,
)
resp.raise_for_status()
print(resp.json()["data"])Build a verified company database
Fetch legal pages at scale with one API. 200 free credits every month, no card required.