# Norway Company Register (Brreg) & Updates (`cliqtomedia/norway-brreg-company-register`) Actor

Look up Norwegian companies by organisation number, search Brreg Enhetsregisteret by municipality, NACE, form and status, list subentities, and track register changes with a cursor. Official open data (NLOD).

- **URL**: https://apify.com/cliqtomedia/norway-brreg-company-register.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (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 $1.50 / 1,000 company records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Register (Brreg) & Updates reads the official Brønnøysund Register Centre (Brreg) data for Norwegian companies. Add organisation numbers for an exact lookup, search Enhetsregisteret by name, municipality, NACE code, form and status, or fetch the latest register changes with a cursor. You get one clean row per company, with form, industry, employees, addresses, dates and a clear status: active, bankrupt, deleted or not found.

It is made for KYB checks, CRM cleaning, B2B prospect lists and change monitoring in Norway. No login and no API key are needed. A run with three organisation numbers finishes in a few seconds and costs about $0.0064.

![Norway Company Register and Updates: organisation numbers in, official Brreg company record and register change events out, with active, bankrupt or deleted status](https://api.apify.com/v2/key-value-stores/GKeuFaxWPvd4U5c9q/records/README-BANNER-20261012.png)

### Contents

- [What it does](#what-it-does)
- [Quick start](#quick-start)
- [Input](#input)
- [Output](#output)
- [Pricing](#pricing)
- [Use cases](#use-cases)
- [Monitoring register changes](#monitoring-register-changes)
- [API and integrations](#api-and-integrations)
- [Limits](#limits)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Data source and licence](#data-source-and-licence)
- [Support](#support)

### What it does

The Actor reads the open [Enhetsregisteret API](https://data.brreg.no/enhetsregisteret/api/dokumentasjon/en/index.html) of the Brønnøysund Register Centre. Each run uses one of three modes:

- **Lookup.** Each organisation number (organisasjonsnummer) is an exact match. The Actor checks the MOD11 check digit first. It finds both legal units (entities, *hovedenheter*) and their establishments (subentities, *underenheter*). An unknown number gives a `not_found` row, so no input is lost.
- **Search.** Filter the register by name words, municipality, NACE code, organisation form, bankruptcy, liquidation, VAT registration, employee count and registration date. Up to 500 rows per run.
- **Updates.** Read the official change feed: new units, changes, deletions and removals. Start from a date, then continue from `nextUpdateId` of the previous run without gaps or duplicates.

In lookup and search mode you can also add the **subentities** of each company (branches, shops, workplaces) as separate rows.

#### Good fit

- Check that a Norwegian supplier or customer exists, is active and is not bankrupt (KYB, onboarding).
- Fill CRM records with the official name, form, NACE code, address and VAT status.
- Build a list of companies in a municipality or with a NACE code.
- Watch the register every day for new, changed or deleted companies.

#### Not a fit

- Board members, CEOs, owners or other people. The Actor does not output roles or personal data.
- Street addresses and contacts of sole proprietorships (ENK). They belong to private persons, so the Actor hides them (see [Personal data](#personal-data)).
- Annual accounts, credit scores or official certificates (*firmaattest*).
- A full copy of the register. Brreg offers free bulk downloads for that.

### Quick start

1. Open the **Input** tab. The form already has three organisation numbers: the Brønnøysund Register Centre, Equinor and one subentity.
2. Click **Start**.
3. Open the **Companies** view in the Output tab. Check `name`, `registryStatus`, `orgForm` and `industryCode`.
4. Replace the numbers with your own list (up to 100), or switch **Mode** to search or updates.

Expected result: three `complete` rows in a few seconds.

### Input

Choose the mode with `mode`. Fields of other modes are ignored.

| Field | Type | Default | Allowed values | What it does |
| --- | --- | --- | --- | --- |
| `mode` | string | `lookup` | `lookup`, `search`, `updates` | Selects the mode. |
| `orgNumbers` | array of strings | none (form example: 3 numbers) | up to 100; 9 digits | Lookup mode. Spaces and the VAT form `NO 923 609 016 MVA` are accepted. A wrong check digit gives a free `error` row without a request. Duplicates are looked up once. |
| `includeSubentities` | boolean | `false` | | Lookup and search: adds subentity rows for each entity found. One extra request per entity. |
| `maxSubentitiesPerEntity` | integer | 20 | 1–100 | Maximum subentity rows per entity. `subentitiesTotal` shows how many exist. |
| `searchTarget` | string | `entities` | `entities`, `subentities` | Search legal units or establishments. |
| `name` | string | none | | Search: words in the registered name, e.g. `rørlegger`. |
| `municipalityNumbers` | array of strings | empty | 4 digits, e.g. `0301` Oslo, `4601` Bergen | Search: business address (entities) or location (subentities). |
| `naceCodes` | array of strings | empty | NACE SN2025 codes or prefixes: `62`, `62.1`, `62.100` | Search: industry filter. |
| `orgForms` | array of strings | empty | `AS`, `ASA`, `ENK`, `NUF`, `DA`, `SA`, `STI`, `BEDR`, … | Search: organisation form. |
| `bankrupt` | string | `any` | `any`, `yes`, `no` | Search, entities only. |
| `underLiquidation` | string | `any` | `any`, `yes`, `no` | Search, entities only. |
| `vatRegistered` | string | `any` | `any`, `yes`, `no` | Search: VAT register status. |
| `minEmployees`, `maxEmployees` | integer | none | min: 0, 1 or 5+; max: 0 or 4+ | Search: registered employees. The register only accepts these values. |
| `registeredFrom`, `registeredTo` | string | none | `YYYY-MM-DD` | Search, entities only: registration date range. |
| `maxResults` | integer | 50 | 1–500 | Search: maximum rows. `RUN_SUMMARY` shows the total number of matches. |
| `updatesTarget` | string | `entities` | `entities`, `subentities` | Updates: change feed of entities or subentities. |
| `updatesSince` | string | none | date or ISO date-time with zone, not in the future | Updates: start point of the first run. |
| `updatesFromId` | integer | none | ≥1 | Updates: `nextUpdateId` from the previous run. Takes priority over `updatesSince`. |
| `maxUpdates` | integer | 100 | 1–500 | Updates: maximum events per run. |
| `includeRecordDetails` | boolean | `true` | | Updates: adds the current record (name, form, address, status) to each event. |
| `includeContactDetails` | boolean | `false` | | Adds e-mail, phone and mobile of companies. Never for sole proprietorships. |

#### Input examples

Lookup with subentities:

```json
{
  "mode": "lookup",
  "orgNumbers": ["923609016", "NO 974 760 673 MVA"],
  "includeSubentities": true,
  "maxSubentitiesPerEntity": 10
}
```

Search for active IT companies in Oslo with 5 or more employees:

```json
{
  "mode": "search",
  "municipalityNumbers": ["0301"],
  "naceCodes": ["62"],
  "bankrupt": "no",
  "minEmployees": 5,
  "maxResults": 200
}
```

First run of a change monitor:

```json
{
  "mode": "updates",
  "updatesSince": "2026-10-11",
  "maxUpdates": 500
}
```

### Output

Each Dataset row has `rowType`: `entity`, `subentity` or `update`. Use the **Companies**, **Updates** and **Row status** views, or export all fields. The key-value store has a `RUN_SUMMARY` record with the run status, counts and, in updates mode, the cursor.

#### Row status

| `status` | Meaning | Charged |
| --- | --- | --- |
| `complete` | The record was found. A **deleted company is `complete`** with `isDeleted: true` and `registryStatus: "deleted"`. | yes |
| `partial` | The company was found, but its subentities could not be listed. Read `statusReason`. | yes |
| `not_found` | The number is not in the register, or Brreg removed it from open data (`registryStatus: "removed_from_open_data"`). | not-found price |
| `error` | Wrong number (`INVALID_ORG_NUMBER`) or a source failure (`RATE_LIMITED`, `SOURCE_UNAVAILABLE`, …). | no |

On a `complete` entity row, `statusReason` notes when `maxSubentitiesPerEntity` limited the subentity rows.

#### Output example

A trimmed entity row:

```json
{
  "rowType": "entity",
  "status": "complete",
  "input": "923609016",
  "orgNumber": "923609016",
  "registryStatus": "active",
  "name": "EQUINOR ASA",
  "orgForm": "ASA",
  "industryCode": "06.100",
  "industryText": "Utvinning av råolje",
  "employees": 21272,
  "address": "Forusbeen 50",
  "postalCode": "4035",
  "city": "STAVANGER",
  "municipalityCode": "1103",
  "registeredDate": "1995-03-12",
  "vatRegistered": true,
  "vatRegistrationDate": "1989-07-01",
  "isBankrupt": false,
  "isDeleted": false,
  "historicalNames": [{ "name": "STATOIL ASA", "from": "2009-11-02", "to": "2018-05-16" }],
  "subentitiesTotal": 35,
  "url": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
  "provider": "Brønnøysundregistrene — Enhetsregisteret",
  "licence": "NLOD 2.0"
}
```

`null` means the register has no value. It never means zero.

#### Fields

| Field | Type | Meaning | Example |
| --- | --- | --- | --- |
| `rowType` | string | `entity`, `subentity` or `update` | `"entity"` |
| `status`, `statusReason`, `errorCode` | string | Row result, see above | `"complete"` |
| `input`, `checksumValid` | string, boolean | Your value and its MOD11 check (lookup only) | `"923609016"`, `true` |
| `orgNumber` | string | Organisation number, 9 digits | `"923609016"` |
| `registryStatus` | string | `active`, `bankrupt`, `under_liquidation`, `under_forced_liquidation`, `closed`, `deleted`, `removed_from_open_data` | `"active"` |
| `name` | string | Registered name | `"EQUINOR ASA"` |
| `orgForm`, `orgFormText` | string | Organisation form | `"ASA"`, `"Allmennaksjeselskap"` |
| `isSoleProprietorship`, `personalDataMinimized` | boolean | ENK flag, and whether personal data was hidden | `false` |
| `parentOrgNumber` | string or null | Parent entity (for subentities) or parent organisation | `null` |
| `industryCode` … `industryText3` | string or null | Up to three NACE codes (SN2025) with Norwegian text | `"06.100"`, `"Utvinning av råolje"` |
| `sectorCode`, `sectorText` | string or null | Institutional sector | `"1120"` |
| `employees`, `hasRegisteredEmployees`, `employeesRegisteredDate` | integer, boolean, string | Registered employees. `null` means not registered, never zero. | `21272`, `true` |
| `address`, `postalCode`, `city`, `municipality`, `municipalityCode`, `countryCode` | string or null | Business address (entities) or location (subentities) | `"Forusbeen 50"`, `"4035"`, `"STAVANGER"` |
| `postalAddress`, `postalPostalCode`, `postalCity` | string or null | Postal address | `"Postboks 8500"` |
| `website`, `email`, `phone`, `mobile` | string or null | Website; contacts only with `includeContactDetails` | `"www.equinor.com"` |
| `foundedDate`, `registeredDate`, `startDate`, `closedDate` | string or null | Dates `YYYY-MM-DD`; start and closed dates are for subentities | `"1972-09-18"`, `"1995-03-12"` |
| `vatRegistered`, `vatRegistrationDate` | boolean, string | VAT register (Merverdiavgiftsregisteret) | `true`, `"1989-07-01"` |
| `inBusinessRegister`, `inNonProfitRegister`, `inFoundationRegister`, `inPartyRegister`, `inGroup` | boolean or null | Other registers and group flag (entities) | `true` |
| `isBankrupt`, `bankruptcyDate` | boolean, string | Bankruptcy (konkurs) | `false`, `null` |
| `underLiquidation`, `underLiquidationDate`, `underForcedLiquidation`, `forcedLiquidationDate` | boolean, string | Liquidation flags | `false` |
| `isDeleted`, `deletedDate` | boolean, string | Deleted from the register | `false` |
| `lastAnnualAccountsYear` | string or null | Last submitted annual accounts | `"2025"` |
| `activityDescription` | string or null | Registered activity text; `null` on minimized rows | `"Selv, eller gjennom deltakelse …"` |
| `historicalNames` | array | Earlier names: `{name, from, to}` | `[{"name": "STATOIL ASA", …}]` |
| `subentitiesTotal`, `subentitiesReturned` | integer or null | Subentities in the register and rows written | `35`, `10` |
| `updateId`, `updateType`, `updateDate`, `changedFields` | | Update rows: event ID, `Ny`/`Endring`/`Sletting`/`Fjernet`, time, changed field names | `"Endring"` |
| `searchRank` | integer or null | Position in search results | `1` |
| `url`, `sourceUrl` | string | Public register page and the API URL read | |
| `fetchedAt`, `provider`, `licence` | string | Read time, source and licence | `"NLOD 2.0"` |

#### Personal data

A sole proprietorship (ENK) is a private person's business. For ENK rows and their subentities the Actor sets `personalDataMinimized: true` and hides the street address, postal address, e-mail, phone, mobile and activity text. Name, form, industry, municipality and postal code stay, as the public minimum. The same applies to a subentity whose parent form cannot be read. The Actor never outputs roles (board members, CEO, owners).

#### Run summary

`RUN_SUMMARY.status` is one of `COMPLETE`, `PARTIAL`, `NOT_FOUND`, `NO_RESULTS`, `CAPPED` (stopped at your cost limit), `ERROR`, `INVALID_INPUT` or `CANCELLED`. `counts` shows rows by status and charged rows. In search mode, `search.total` is the number of matches. In updates mode, `updates` has `nextUpdateId` and `hasMore`.

### Pricing

Pay per event. Platform usage is included.

| Event | Price | When |
| --- | ---: | --- |
| Actor start | $0.001 | Once per run (per GB of memory; the default 256 MB counts once) |
| Company record | $0.0018 | Each `complete` or `partial` entity or subentity row. Lower on higher Apify plans: $0.0017 Bronze, $0.0016 Silver, $0.0015 Gold. |
| Not-found lookup | $0.0005 | Each `not_found` row |
| Update event | $0.0005 | Each row in updates mode |

`error` rows are free. An empty search costs only the start.

| Run | Example cost (Free plan) |
| --- | ---: |
| 3 organisation numbers (form example) | $0.0064 |
| 10 organisation numbers | $0.019 |
| 100 organisation numbers | $0.181 |
| Search, 500 rows | $0.901 |
| 500 update events | $0.251 |
| 100 unknown numbers | $0.051 |

Subentities add up fast: 100 large employers with up to 100 subentities each gave 5,840 rows in our test. Set **Maximum cost per run** in the run options to cap your spend. The Actor stops before a paid row that does not fit and reports `CAPPED`.

### Use cases

| Buyer job | Mode and input | Key output fields |
| --- | --- | --- |
| Verify a company (KYB) | lookup, `orgNumbers` | `status`, `registryStatus`, `isBankrupt`, `underLiquidation`, `isDeleted`, `vatRegistered` |
| Clean CRM records | lookup, `orgNumbers` | `name`, `orgForm`, `industryCode`, `address`, `postalCode`, `city`, `website` |
| Map branches of a company | lookup + `includeSubentities` | subentity rows: `orgNumber`, `parentOrgNumber`, `address`, `employees`, `closedDate` |
| Prospect list by area and industry | search, `municipalityNumbers` + `naceCodes` | `name`, `employees`, `industryText`, `registeredDate`, `searchRank` |
| Daily change monitor | updates, `updatesSince`, then `updatesFromId` | `updateType`, `updateDate`, `changedFields`, `registryStatus` |
| New companies in a region | search, `registeredFrom` + `municipalityNumbers` | `name`, `orgForm`, `registeredDate`, `industryCode` |

### Monitoring register changes

1. Run updates mode once with `updatesSince` (for example yesterday).
2. Read `RUN_SUMMARY.updates.nextUpdateId`.
3. Next time, start with `updatesFromId` set to that value. You get the events after the last one, with no gaps or duplicates.
4. If `hasMore` is `true`, more events are waiting: run again with the new `nextUpdateId`.

Event types: `Ny` (new), `Endring` (change), `Sletting` (deleted) and `Fjernet` (removed from open data; the Actor does not keep or show the old record). Brreg publishes a few thousand entity events on a normal weekday.

To run this every day, save the input as an Apify task and add a schedule. A schedule cannot change `updatesFromId` by itself, so for a gap-free monitor read `nextUpdateId` from each run through the API.

### API and integrations

Start a run through the Apify API (`POST /v2/acts/cliqtomedia~norway-brreg-company-register/runs`) with the same JSON input, then read the Dataset. Export to CSV, Excel or JSON, or connect the run to other tools with Apify integrations. Join rows on `orgNumber`; subentities link to their parent through `parentOrgNumber`.

Coming from another Brreg tool? Common field names here: `postalCode` (zip), `postalAddress` / `postalPostalCode` / `postalCity` (post address), `countryCode`, `isBankrupt`, `registeredDate` (registration date in Enhetsregisteret), `inNonProfitRegister` (Frivillighetsregisteret), `underForcedLiquidation`. Missing values are `null`, not empty strings.

#### Use with AI agents (MCP)

AI agents can call this Actor through the Apify MCP server: add `https://mcp.apify.com?tools=cliqtomedia/norway-brreg-company-register` to your MCP client (Claude, Cursor, VS Code and others). The MCP server needs your Apify account (OAuth sign-in or an Apify API token); Brreg itself needs no key. The smallest useful input:

```json
{ "orgNumbers": ["923609016"] }
```

Key output fields for an agent: `status`, `name`, `registryStatus`, `orgForm`, `industryCode`, `employees`, `isBankrupt`, `isDeleted`. A lookup of 10 numbers takes a few seconds and costs about $0.019. A lookup of 100 numbers with many subentities can take about a minute, so the agent may need to poll the run. Search results match on name words, so an agent should confirm a company by `orgNumber`.

### Limits

- Lookup: up to 100 organisation numbers per run. Search: up to 500 rows. Updates: up to 500 events.
- Up to 100 subentities per entity.
- The Actor sends about 3 requests per second and stops source work after 240 seconds. Our largest test (100 numbers, 5,840 rows) took 55 seconds.
- Search uses the register's own filters. Employee filters accept only the values the register supports (see Input).
- NACE codes follow SN2025 (for example `62.100`). Old SN2007 codes like `62.010` find nothing.
- Data is read live. Brreg updates the open data during the day; there is no separate source timestamp per record.

### Troubleshooting

| Symptom | Check | Action |
| --- | --- | --- |
| `error` row with `INVALID_ORG_NUMBER` | `checksumValid` | The number has a typo. Check the 9 digits. |
| `not_found` for a real company | `registryStatus` | `removed_from_open_data` means Brreg removed it. Otherwise check the number. |
| A deleted company | `isDeleted`, `deletedDate` | This is correct register data, not an error. |
| Address or contacts are `null` | `personalDataMinimized` | Sole proprietorships are minimized on purpose. Contacts need `includeContactDetails`. |
| Search returns `NO_RESULTS` | NACE codes, employee values | Use SN2025 codes and allowed employee values. |
| Fewer subentity rows than `subentitiesTotal` | `statusReason`, `maxSubentitiesPerEntity` | Raise the limit (up to 100). |
| `CAPPED` | Run options | Raise **Maximum cost per run** or send fewer numbers. |
| `INVALID_INPUT` | `RUN_SUMMARY.message` | Common causes: no valid number in lookup mode, a date in the future, updates mode without `updatesSince` or `updatesFromId`. |
| `RATE_LIMITED` or `SOURCE_UNAVAILABLE` rows | `RUN_SUMMARY.http` | Run the failed numbers again later. |

### FAQ

#### Do I need an API key or a Norwegian account?

No. Brreg's open API is free and needs no key. You only need your Apify account.

#### What is the difference between an entity and a subentity?

An entity (hovedenhet) is the legal unit, for example an AS. A subentity (underenhet) is an establishment of that unit, such as a shop or an office, with its own organisation number. Lookup finds both kinds.

#### Why are board members and owners not included?

They are personal data. This Actor gives company data only.

#### How fresh is the data?

Each run reads Brreg live. `fetchedAt` is the time of reading. The updates mode shows each change with its event time.

#### Can I use the data commercially?

Yes. Enhetsregisteret data is published under the Norwegian Licence for Open Government Data (NLOD 2.0), which allows commercial reuse with attribution. Personal data is outside that licence; contact data must be used within GDPR and Norwegian marketing law.

### Data source and licence

Data: [Enhetsregisteret](https://www.brreg.no/en/) of the Brønnøysund Register Centre (Brønnøysundregistrene), through its [open API](https://data.brreg.no/enhetsregisteret/api/dokumentasjon/en/index.html), under the [Norwegian Licence for Open Government Data (NLOD 2.0)](https://data.norge.no/nlod/en/2.0). When you reuse the data, name the source. This Actor is independent and not endorsed by the Brønnøysund Register Centre.

### Support

Use the **Issues** tab of this Actor. Add the run ID, the mode and the `statusReason` or `errorCode` you saw. Do not send API tokens or private data.

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/norway-brreg-company-register/changelog.md

# Actor input Schema

## `mode` (type: `string`):

lookup: exact lookup of organisation numbers (entities and subentities). search: filter the register by name, municipality, NACE code, organisation form, status, employees or registration date. updates: change events of the register (new, changed, deleted, removed units) since a date or since the nextUpdateId of a previous run.

## `orgNumbers` (type: `array`):

Lookup mode: up to 100 Norwegian organisation numbers (organisasjonsnummer, 9 digits), e.g. 923609016. Spaces and NO … MVA are accepted (NO 923 609 016 MVA). Each number is looked up as an entity (hovedenhet) and, if not found, as a subentity (underenhet). Numbers with a wrong MOD11 check digit return a free error row without a request. Duplicates are looked up once.

## `includeSubentities` (type: `boolean`):

Lookup and search mode: for each entity found, also output its subentities (underenheter, e.g. branches and workplaces) as separate rows, up to maxSubentitiesPerEntity. Each subentity row is a paid record. One extra request per entity.

## `maxSubentitiesPerEntity` (type: `integer`):

Upper limit of subentity rows per entity when includeSubentities is on. subentitiesTotal in the entity row shows how many exist.

## `searchTarget` (type: `string`):

Search mode: search legal units (entities) or establishments (subentities). Subentity search supports name, municipality, NACE, organisation form, VAT and employee filters only.

## `name` (type: `string`):

Search mode: words in the registered name, e.g. equinor or rørlegger. Leave empty to filter only by the other fields.

## `municipalityNumbers` (type: `array`):

Search mode: 4-digit municipality (kommune) numbers, e.g. 0301 (Oslo), 4601 (Bergen), 5001 (Trondheim). Matches the business address (entities) or location address (subentities).

## `naceCodes` (type: `array`):

Search mode: NACE codes (SN2025) or prefixes, e.g. 62 (all IT services), 62.1 or 62.100.

## `orgForms` (type: `array`):

Search mode: organisation form codes, e.g. AS (limited company), ASA, ENK (sole proprietorship), NUF (foreign branch), DA, SA, STI (foundation), BEDR (subentity).

## `bankrupt` (type: `string`):

Search mode, entities only: any, only bankrupt (yes) or only not bankrupt (no).

## `underLiquidation` (type: `string`):

Search mode, entities only: any, only under liquidation (yes) or none (no).

## `vatRegistered` (type: `string`):

Search mode: any, only VAT-registered (yes) or not VAT-registered (no).

## `minEmployees` (type: `integer`):

Search mode: minimum registered employees. The register accepts 0, 1 or 5 and above.

## `maxEmployees` (type: `integer`):

Search mode: maximum registered employees. The register accepts 0 or 4 and above.

## `registeredFrom` (type: `string`):

Search mode, entities only: registered in Enhetsregisteret on or after this date (YYYY-MM-DD).

## `registeredTo` (type: `string`):

Search mode, entities only: registered on or before this date (YYYY-MM-DD).

## `maxResults` (type: `integer`):

Search mode: maximum rows returned (1–500). RUN_SUMMARY shows the total number of matches.

## `updatesTarget` (type: `string`):

Updates mode: change feed of entities or of subentities.

## `updatesSince` (type: `string`):

Updates mode: first run of a monitor: a date (2026-10-11, midnight UTC) or an ISO date-time with a time zone (2026-10-11T08:00:00Z). Not in the future.

## `updatesFromId` (type: `integer`):

Updates mode: the nextUpdateId from the previous run’s RUN_SUMMARY. Continues exactly after the last delivered event, with no gaps or duplicates. Takes priority over updatesSince.

## `maxUpdates` (type: `integer`):

Updates mode: maximum events per run (1–500). If more are waiting, RUN_SUMMARY has hasMore=true; continue with nextUpdateId.

## `includeRecordDetails` (type: `boolean`):

Updates mode: add the current register record (name, form, address, status…) to each event. Off: only event ID, type, date, org number and changed field names.

## `includeContactDetails` (type: `boolean`):

Add registered e-mail, phone and mobile of entities. Never output for sole proprietorships (ENK) and their subentities, to protect natural persons. Use contact data only within the law (GDPR, Norwegian marketing law).

## Actor input object example

```json
{
  "mode": "lookup",
  "orgNumbers": [
    "974760673",
    "923609016",
    "994667084"
  ],
  "includeSubentities": false,
  "maxSubentitiesPerEntity": 20,
  "searchTarget": "entities",
  "bankrupt": "any",
  "underLiquidation": "any",
  "vatRegistered": "any",
  "maxResults": 50,
  "updatesTarget": "entities",
  "maxUpdates": 100,
  "includeRecordDetails": true,
  "includeContactDetails": false
}
```

# Actor output Schema

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

Every row with the key columns.

## `updates` (type: `string`):

Update cursor and change columns (updates mode).

## `issues` (type: `string`):

Status and reason for every row, including not found and errors.

## `runSummary` (type: `string`):

Status, counts, nextUpdateId cursor, source attribution and request statistics.

# 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 = {
    "mode": "lookup",
    "orgNumbers": [
        "974760673",
        "923609016",
        "994667084"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/norway-brreg-company-register").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 = {
    "mode": "lookup",
    "orgNumbers": [
        "974760673",
        "923609016",
        "994667084",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/norway-brreg-company-register").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 '{
  "mode": "lookup",
  "orgNumbers": [
    "974760673",
    "923609016",
    "994667084"
  ]
}' |
apify call cliqtomedia/norway-brreg-company-register --silent --output-dataset

```

## MCP server setup

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

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/IACanRyeFUI11Zzk2/builds/whM4bmNsogMOC4axi/openapi.json
