# Norway Company Check — Brønnøysund Register & Accounts (`us0r/norway-company-check`) Actor

Check Norwegian companies by organisation number, VAT number or name against the official Brønnøysund registers. One row per company: status, bankruptcy, liquidation and forced-dissolution flags with reason, board and auditor, last three annual accounts. No proxy, no scraping.

- **URL**: https://apify.com/us0r/norway-company-check.md
- **Developed by:** [us0r](https://apify.com/us0r) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 company checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Norway Company Check — Brønnøysund Register & Accounts

Give this Actor a list of Norwegian companies — by **organisation number, VAT
number (`NO … MVA`) or name** — and it returns **one row per entry**, including
the ones that were not found. Every row is built from the official open APIs
of the **Brønnøysund Register Centre** (Brønnøysundregistrene):

- the **Central Coordinating Register for Legal Entities** (Enhetsregisteret):
  status, bankruptcy, liquidation and **forced dissolution with its reason**,
  address, industry code, employees, share capital, VAT registration — and the
  **roles**: general manager, chair, board, auditor, accountant, and the
  court-appointed **trustee with address** for bankrupt companies;
- the **Register of Company Accounts** (Regnskapsregisteret): revenue,
  operating result, net result, equity, assets and debt from the **last three
  annual accounts**, the latest group accounts, and a link to the filed
  accounts as PDF.

No scraping, no proxy, no browser. A list of 300 companies takes about a
minute.

Built for supplier and customer onboarding (KYB), credit and collections
teams who need to know whether a counterparty is still trading, and periodic
re-checks of a customer or supplier book.

### What you get per entry

| Field | Example (EQUINOR ASA) |
|---|---|
| `query`, `queryType` | `NO 923 609 016 MVA`, `orgnr` |
| `found`, `status` | `true`, `active` · `bankruptcy` · `forced_dissolution` · `in_liquidation` · `deleted` · `not_found` |
| `riskFlags`, `riskDetails` | `["bankruptcy", "negative_equity"]`, with dates, reasons and the trustee |
| `orgNumber`, `vatNumber`, `name` | `923609016`, `NO923609016MVA`, `EQUINOR ASA` |
| `legalForm` | `{"code": "ASA", "description": "Allmennaksjeselskap"}` |
| `address`, `postalAddress` | street, postal code, city, municipality, one-line form |
| `email`, `phone`, `mobile`, `website` | as registered |
| `industry`, `otherIndustries` | NACE code and description, e.g. `06.100` |
| `employees` | `21272` |
| `shareCapital` | `{"amount": 5976872600.0, "currency": "NOK", "shares": 2390749040}` |
| `foundedOn`, `registeredOn` | `1972-09-18`, `1995-03-12` |
| `vatRegistered`, `inBusinessRegister`, `partOfGroup`, `auditOptOut` | booleans |
| `roles` | `generalManager`, `chair`, `boardMembers`, `deputyBoardMembers`, `auditor`, `accountant`, `owner`, `partners`, `bankruptcyTrustee` |
| `financials` | latest year: `revenue`, `operatingResult`, `profitBeforeTax`, `netResult`, `equity`, `totalAssets`, `totalDebt`, `cash`, `currency`, `audited` |
| `financialHistory`, `groupFinancials` | all three years; the latest consolidated accounts |
| `lastAccountsYear`, `annualAccountsOverdue`, `annualReportPdf` | `2025`, `false`, link to the filed accounts |
| `formerNames`, `registryNotes` | `STATOIL ASA`, … |
| `subunit` | when you passed the number of a branch or premises |
| `nameMatch`, `matchRank` | for name queries: `exact` · `exact_without_legal_form` · `all_words` |
| `note`, `warnings`, `checkedAt`, `error` | plain-language explanations; error text for rows that could not be checked |

#### Status and risk flags

| Flag | Meaning |
|---|---|
| `bankruptcy` | bankruptcy opened (`since`), with the trustee's name and address |
| `forced_dissolution` | compulsory liquidation or dissolution ordered, with the reason: `missing_annual_accounts`, `missing_auditor`, `deficient_board`, `missing_general_manager`, `not_deleted_after_dissolution` |
| `in_liquidation` | voluntary liquidation resolved (`since`) |
| `deleted` | struck off the register (`on`) |
| `negative_equity` | equity below zero in the latest annual accounts |
| `annual_accounts_overdue` | an AS or ASA that has not filed the accounts due by now (see Limits) |
| `registered_last_12_months` | entered in the register less than a year ago |

`status` is the most serious of these, in the order deleted → bankruptcy →
forced dissolution → in liquidation → active.

### Input

```json
{
  "companies": [
    "923609016",
    "NO 982 463 718 MVA",
    "Norsk Hydro ASA",
    "973152351"
  ],
  "maxMatchesPerName": 1,
  "includeRoles": true,
  "includeFinancials": true
}
```

| Option | Default | Meaning |
|---|---|---|
| `companies` | — | Organisation numbers, VAT numbers or names; also `{"orgNumber": …}` or `{"name": …}` |
| `maxMatchesPerName` | `1` | Rows per name query, best match first (1–10) |
| `includeRoles` | `true` | General manager, board, auditor, accountant, trustee |
| `includeFinancials` | `true` | Key figures from the last three annual accounts |
| `includeRawRecord` | `false` | The untouched register record under `raw`, in Norwegian |
| `pauseSeconds` | `0.05` | Delay before each request |

`923609016`, `923 609 016`, `923.609.016` and `NO 923 609 016 MVA` all work.
**Check digits are validated before querying** — a mistyped number comes back
as a row with `error`, not as a false "not found". The number of a branch or
business premises (`underenhet`) is resolved to the company it belongs to,
with the branch in `subunit`. Duplicates in your list are checked once.

**Name queries are matched strictly.** The register's own name search is
fuzzy — "Norsk Hydro" returns NORSK HYDROGENBILFORENING before Norsk Hydro ASA.
This Actor only accepts a company whose registered name contains every word
of your query, ranks exact matches first and says how it matched in
`nameMatch`. If nothing qualifies, the row is `not_found` and `note` lists the
closest names the register suggested.

### Speed

Measured 12 October 2026: **302 entries in 64 seconds**, 572 requests,
including roles and annual accounts. Organisation numbers are looked up 100
per request; roles and accounts are fetched in parallel.

### Limits, honestly

- **Deleted companies are found by number only.** The register's name search
  covers existing entities.
- **Annual accounts come from the register's open API**, which returns
  three years at most. For some financial institutions (banks) the API does not
  deliver figures; the row then carries a warning and still links the filed
  PDF.
- **Sole proprietorships (ENK) and most partnerships do not file accounts.**
  `financials` stays empty; `roles.owner` names the proprietor.
- **`annual_accounts_overdue` is a heuristic**: an AS or ASA founded before
  1 July of the year in question that has not filed that year's accounts by
  1 September of the following year (the legal deadline is 31 July). It is
  `null` where it does not apply.
- **Roles carry names only.** The register publishes birth dates as well; this
  Actor leaves them out.
- **This is not a credit report.** It states what the official registers say
  on the day you ask.

### Personal data

Names of general managers, board members, proprietors and trustees are
published by the Brønnøysund Register Centre as open data. If you store them,
you are the controller for that copy — keep only what your purpose needs.

### Pricing

Pay per event:

| Event | What it covers |
|---|---|
| `actor-start` | once per run |
| `company-check` | one company row — including "not found" |

**Rows with an `error` are free**: a wrong check digit or a source that did not
answer is never billed. Roles and annual accounts are included in the company
price. A spending limit you set on the run is respected — the run stops
cleanly when it is reached.

### På norsk

**Sjekk norske selskaper mot Brønnøysundregistrene.** Lim inn en liste med
organisasjonsnumre, MVA-numre eller firmanavn. Actoren kontrollerer
kontrollsifferet og returnerer én rad per oppføring, også når selskapet ikke
finnes:

- **status** — aktiv, konkurs, under avvikling, tvangsavvikling eller
  tvangsoppløsning (med årsak), slettet;
- **bostyrer** med navn og adresse ved konkurs og tvangsavvikling;
- **roller** — daglig leder, styreleder, styremedlemmer, revisor og
  regnskapsfører (uten fødselsdato);
- **regnskapstall** fra de tre siste årsregnskapene: driftsinntekter,
  driftsresultat, årsresultat, egenkapital, eiendeler og gjeld, med lenke til
  innsendt årsregnskap (PDF);
- adresse, næringskode, antall ansatte, aksjekapital og MVA-registrering.

Dataene hentes kun fra de åpne API-ene til Brønnøysundregistrene — uten proxy
og uten scraping. Rader med feil kontrollsiffer er gratis.

### Source and licence

Contains data under the Norwegian licence for Open Government data (NLOD)
distributed by the Brønnøysund Register Centre. / Inneholder data under Norsk
lisens for offentlige data (NLOD) tilgjengeliggjort av Brønnøysundregistrene.

### Related Actors

- **[Finland Company Check](https://apify.com/us0r/finland-company-check)** — the
  same list check for Finnish companies: PRH/YTJ status, registered loss of
  share capital, tax registers and digital financial statements.
- **[UK Company Check](https://apify.com/us0r/uk-company-check)** — the
  same list check for UK companies: Companies House status, strike-off notices,
  insolvency cases, charges, directors, PSCs and balance sheet figures.
- **[Poland Company Check](https://apify.com/us0r/poland-company-check)** — the
  same list check for Polish companies: KRS court register and VAT white list,
  with bank account verification.
- **[German Insolvency & Bankruptcy Check](https://apify.com/us0r/insolvenz-check-de)**
  — a list of names against the official German insolvency register, one row
  per name, found or not.
- **[German Insolvency Announcements](https://apify.com/us0r/insolvenzbekanntmachungen-de)**
  — the whole German insolvency stream as it is published, with parsed fields.

***

Keywords: Brønnøysundregistrene, brreg, brreg API, Enhetsregisteret,
Foretaksregisteret, Regnskapsregisteret, organisasjonsnummer, orgnr,
MVA-nummer, Norwegian VAT number, Norway company check, Norwegian company
register, Norway business registry, Norway company search, Norway KYB, KYC
Norway, due diligence Norway, supplier verification Norway, counterparty check,
konkurs, konkursbo, bostyrer, avvikling, tvangsavvikling, tvangsoppløsning,
slettet, årsregnskap, regnskapstall, nøkkeltall, daglig leder, styreleder,
styremedlem, revisor, regnskapsfører, aksjekapital, antall ansatte,
næringskode, sjekk selskap, firmasjekk, Norwegian bankruptcy check, Norwegian
company financials, annual accounts Norway, company verification API.

# Actor input Schema

## `companies` (type: `array`):

One entry per company: a 9-digit organisation number ("923609016", "923 609 016"), a Norwegian VAT number ("NO 923 609 016 MVA") or a company name ("Norsk Hydro ASA"). Numbers are validated by check digit before querying. Names are matched only if every word of your name appears in the registered name.

## `maxMatchesPerName` (type: `integer`):

For entries given as a name: how many matching companies to return, best match first. Exact name matches rank first. Every returned company is one row. Organisation numbers always return exactly one row.

## `includeRoles` (type: `boolean`):

General manager, chair, board members, auditor, accountant and — for bankrupt companies — the court-appointed trustee with address.

## `includeFinancials` (type: `boolean`):

Revenue, operating result, net result, equity, assets and debt from the last three annual accounts filed with the Register of Company Accounts, plus the latest group accounts.

## `includeRawRecord` (type: `boolean`):

Adds the untouched JSON record from the Central Coordinating Register under 'raw' — every field, in Norwegian.

## `pauseSeconds` (type: `number`):

Politeness delay towards the register APIs.

## Actor input object example

```json
{
  "companies": [
    "923609016",
    "NO 982 463 718 MVA",
    "Norsk Hydro ASA"
  ],
  "maxMatchesPerName": 1,
  "includeRoles": true,
  "includeFinancials": true,
  "includeRawRecord": false,
  "pauseSeconds": 0.05
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per entry checked, including the ones not found or rejected for a wrong check digit.

## `risk` (type: `string`):

Status, risk flags, filing status, equity and the bankruptcy trustee.

## `financials` (type: `string`):

Key figures of the latest annual accounts with a link to the filed PDF.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companies": [
        "923609016",
        "NO 982 463 718 MVA",
        "Norsk Hydro ASA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("us0r/norway-company-check").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "companies": [
        "923609016",
        "NO 982 463 718 MVA",
        "Norsk Hydro ASA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("us0r/norway-company-check").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companies": [
    "923609016",
    "NO 982 463 718 MVA",
    "Norsk Hydro ASA"
  ]
}' |
apify call us0r/norway-company-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,us0r/norway-company-check"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2yMzN9ebCKaSra2Y6/builds/raePpbW9d0ng3kKgq/openapi.json
