Skip to content

How do I look up a Norwegian organisasjonsnummer?

By , founder of Apier

Send the nine digit number to a company lookup endpoint and read the answer: one call returns the registered name, the entity form, the derived status and the municipality, straight from Enhetsregisteret data. Before you spend that call, validate the number locally. The ninth digit is a MOD-11 control digit, so a mistyped number almost always fails the checksum, and the right response to a failing checksum is to correct the number, not to retry it. If you hold a company name instead of a number, a name search resolves it to candidate numbers first. What a lookup does not answer is whether the company is in good standing: registered is not the same as active, and that verdict is a separate, purpose-built call.

Four steps in a row: the nine digit number as received; the local MOD-11 checksum gate; the Enhetsregisteret lookup; and the answer with name, entity form and status. Dashed callouts below mark where each failure surfaces: a failing checksum at the gate, which means a typo to correct, and an unknown well-formed number at the lookup, which returns 404.Number9 digits, as receivedChecksum gateMOD-11, local, freeEnhetsregisteretone lookup callAnswername, form, statuschecksum fails: a typo, correct itunknown number: 404
A typo bounces at the checksum gate before any call is spent. Only a well-formed number reaches the registry, so a 404 there is a real answer about existence, never a formatting problem.

What is an organisasjonsnummer?

A nine digit identifier that Enhetsregisteret assigns when an entity is registered, one number per entity, public by design. It follows the entity for life: the same number appears on invoices and contracts, in procurement portals, and as the key every Norwegian government API expects when you ask about a company. If you integrate with anything Norwegian, this number is the primary key you will pass around. The register behind it is run by Brønnøysundregistrene, and the registry facts a lookup returns are open data.

The number is not nine arbitrary digits. The first eight carry the identity; the ninth is a control digit computed from the others, which is what makes local validation possible. That design decision matters in practice: a large share of failed lookups are not missing companies but transposed digits, and the checksum catches those before any request leaves your machine.

How do I find the company behind a number?

With one call keyed on the number. A company lookup returns the facts the register holds about the entity: its registered name, its entity form (AS, ENK and the other forms), its status, and address level facts such as the municipality. The status is derived honestly from the registry signals: a deletion date wins over everything and reports as deleted, bankruptcy reports as bankrupt, forced liquidation and voluntary liquidation each report as themselves, and only a record clean of all those flags reports as active. When the register does not answer, the field says unknown rather than guessing.

Often you start from the other end: a name on an invoice and no number. For that direction there is a name search, which takes a free text name and returns at most ten candidates, each carrying just five fields (name, org number, entity form, municipality and status) so you can disambiguate quickly and continue with the number. A zero hit search answers 404 with a hint to broaden the name instead of an empty list. The register access guide walks the wider API surface these calls belong to.

How do I validate the checksum before calling?

The algorithm is MOD-11. Multiply the first eight digits by the weights 3, 2, 7, 6, 5, 4, 3, 2 in order and sum the products. The control digit is 11 minus the sum modulo 11, taken modulo 11 again, and it must equal the ninth digit. One edge exists: when the arithmetic yields 10, no valid number ends in that position, so the value is invalid outright. Anything that is not exactly nine digits fails before the arithmetic starts.

The operational rule matters more than the formula: a failing checksum means a typo, not a missing company. Correct the number rather than retrying it, because no amount of retries turns an impossible number into an issued one. And keep the limit of the check in mind. The checksum is an input shape gate, not an existence check: a number can pass the arithmetic and still belong to no registered entity, in which case the lookup itself answers 404 and that answer is the truth.

What does a lookup not tell you?

A successful lookup proves the number resolves to a registered entity, and that is all it proves. Registered is not active: a company under liquidation or bankruptcy still resolves, with its name and form intact, and only the status field carries the warning. When the question is whether you should rely on the company, reduce the signals to a verdict instead of eyeballing fields: the verification guide owns that call, which answers pass, warn, fail or unknown in one round-trip.

A lookup also says nothing about money flows. Whether the entity is MVA registered is a separate flag on the company surface, and whether an invoice from the company is safe to pay involves checks beyond the register entry; the supplier check guide covers that workflow end to end. Treat the lookup as step one of those flows: cheap, fast, and deliberately narrow.

Make the first call

The sandbox call shows the company summary shape on simulated data, with no key and no signup. The TypeScript sample runs the live lookup against the same shape: entity form, the tri-state MVA flag, obligations and deadlines in one round-trip, each response carrying its data freshness in the _meta block.

# Zero-auth sandbox: a company summary on simulated data, no key.
curl -s https://www.apier.no/api/v1/sandbox/public/company/999999999/summary
// Live lookup: orient on the company behind a number in one call.
const org = "999999999";
const res = await fetch(
  `https://www.apier.no/api/v1/company/${org}/summary`,
  {
    headers: {
      Authorization: `Bearer ${process.env.APIER_API_KEY}`,
    },
  },
);

if (!res.ok) {
  // Every non-2xx answers the same structured envelope.
  const { error_code, explanation } = await res.json();
  throw new Error(`${error_code}: ${explanation.summary}`);
}

const { data, _meta } = await res.json();
// Entity form, the tri-state MVA flag (true / false / null = unknown),
// obligations and the deadline calendar, in a single round-trip.
console.log(data.entity_type, data.mva_registered);
console.log(data.obligations.length, "obligations");
console.log(_meta.rulebook_version, _meta.data_freshness);

Frequently asked questions

Is looking up an org number free?
The underlying data is open: Enhetsregisteret is a public register, and the facts a lookup returns are public registry facts. On Apier the company endpoints sit in the keyed category, so a lookup call needs an API key even on the free tier, because company responses can carry personal-adjacent facts such as board roles. For experiments there is a keyless path: the public sandbox mirrors the company endpoints on simulated data, with no key and no signup, so you can see the exact response shape before you register anything.
What should I do when the checksum fails?
Correct the number instead of retrying it. The ninth digit is a MOD-11 control digit computed from the first eight, so a transposed or mistyped digit almost always breaks the arithmetic. A failing checksum therefore means the number you hold is not a number the registry could ever have issued: no retry, backoff or different endpoint will change that. Go back to the source of the number, an invoice, a contract or an email, and re-read it before spending another call.
Can I search by company name instead?
Yes. When you hold a name rather than a number, the name search endpoint resolves it: GET /api/v1/company/search?name= returns at most ten candidates, each with five fields (name, org number, entity form, municipality, status), so you can pick the right entity and continue with its number. A search with zero hits answers 404 with a hint to broaden the name, rather than an empty list a script might silently loop on. The candidate list is deliberately small: it is a resolver, not a data export.
Is the org number the same as the VAT number?
No. The organisasjonsnummer identifies the entity; whether that entity is registered for MVA is a separate registry fact. Apier surfaces it as a tri-state flag: true when the registration is confirmed, false when it is confirmed absent, and null when the answer is not yet known, never a silent default. So a successful lookup tells you who owns the number, and the MVA flag on the same response tells you separately whether the company is in the VAT register. Treat the two as independent questions.
What does a 404 mean, compared with an invalid number?
They are different failures at different steps. An invalid number never reaches the registry: it fails the shape or checksum check locally, which almost always means a typo, and the fix is to correct the number. A 404 means the number passed those checks, the lookup ran, and no registered entity holds that number. A passing checksum is only an arithmetic property, not proof of existence, so well-formed numbers that were never issued still end as 404s. Read the two signals separately and you will debug the right problem.