Irmu
Free tool

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.

0/0 valid
One number per line
Results

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.

How it works

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.

Categorisation

What the register section tells you

HRASole trader (e.K.), OHG, KG
HRBGmbH, UG (haftungsbeschränkt), AG, KGaA
DE + 9 digitsVAT ID issued by the Bundeszentralamt für Steuern
Code examples

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"))  # True
With Irmu

Collect 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.

collect_ids.py
# 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"])
FAQ

Questions

Build a verified company database

Fetch legal pages at scale with one API. 200 free credits every month, no card required.