registercheckby openlaw group
Guides

Find a company

Turning a name your user typed into a company id you can rely on.

Almost every integration starts here: you have a string, and you need the right company. There are three ways in, and they are not interchangeable.

If you have a register number

This is the only exact route. Give the number and the court:

curl -G "https://api.registercheck.de/v1/search/companies" \
  --data-urlencode "register_number=13557" \
  --data-urlencode "register_court=Amtsgericht Memmingen" \
  -H "Authorization: Bearer $REGISTERCHECK_API_KEY"

Register numbers repeat across courts — HRB 670 exists at most of them — so a number without a court will match many unrelated companies.

If a human is typing

Use /search/suggestions. It is built for autocomplete: one call per keystroke-ish, cheap, and ranked.

const res = await fetch(
  `${BASE}/search/suggestions?search_term=${encodeURIComponent(term)}&limit=8`,
  { headers: { Authorization: `Bearer ${key}` } },
);
const { profiles } = await res.json();

Each profile carries register_id, status and is_active — show those next to the name. Two companies in the same town with nearly the same name are common, and the register line is how your user tells them apart.

Debounce to ~250 ms. At 1 credit a call, a busy search box is the one place this API can quietly get expensive.

If you are matching a list

Use /search/companies with as many fields as you have. Every parameter is optional and they combine:

ParameterMatching
namepartial, case-insensitive
register_number, register_court, register_prefixexact
city, addresspartial
is_activeexact
has_financialsexact

Unknown parameters are ignored, not rejected

There is no query parameter. Sending ?query=Siemens returns an unfiltered page of companies with a 200, because the unrecognised parameter is dropped and no filter remains. If a result set looks suspiciously large or unrelated, check your parameter spelling first.

Matching well

  • Strip the legal form before comparing. Compare against raw_name, not name.
  • Use the city. name plus city resolves most ambiguity in one call.
  • Expect branches. A name that matches several entries at different courts is usually one business with registered branches, not a bad match.
  • Score, do not guess. total_count of 1 is a match; total_count of 40 means you need another field.

Then store the id

{ "id": "c359aa06-1ac0-4dab-9c60-d5c69a06ff2c" }

Store that id. Names change, companies are renamed and re-registered, and register numbers are reused across courts. The id is the only stable handle.

On this page