# Norway Company Registry API: Enhetsregisteret (Unofficial) (`graylabs/norway-companies`) Actor

Search Norwegian companies in Enhetsregisteret, the Norway company register, by NACE code, municipality, postcode or legal form, or look up organisasjonsnummer (org number): status, employees, address. NLOD open data, no API key. No contact data or roles. Not affiliated with Brønnøysundregistrene.

- **URL**: https://apify.com/graylabs/norway-companies.md
- **Developed by:** [Gray Labs](https://apify.com/graylabs) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 companies

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 Registry API: Enhetsregisteret (Unofficial)

Search **Norwegian companies and other organisations** and download them as JSON, CSV or Excel, or read them through the Apify API. No account or API key is needed.

- **Search by** industry code (næringskode, based on NACE), municipality, postcode, organisation form (AS, ASA, NUF, SA, STI...), name, registration or foundation date, number of employees or VAT registration.
- **Look up by organisation number:** up to 2,000 org numbers per run.
- **Follow new companies:** set `registeredFrom` and sort by newest.
- **Per row:** org number, name, legal form, main and secondary NACE codes, sector, employees, status (active, bankrupt, winding up), founded and registered dates, VAT and other register flags, share capital, last filed annual accounts year, registered purpose and business address.

The data comes from **Enhetsregisteret**, the Central Coordinating Register for Legal Entities kept by Brønnøysundregistrene (The Brønnøysund Register Centre), through its keyless open data API at data.brreg.no.

**Company data only.** No email addresses, phone numbers, websites, roles (board members, CEOs, owners) or other person data. Sole proprietorships (ENK) and other single-person units are withheld entirely.

### What data can you extract?

| Field                                                                                                                                                           | Meaning                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `organisationNumber`, `name`                                                                                                                                    | Organisasjonsnummer (9 digits) and registered name                                                         |
| `organisationForm`, `organisationFormDescription`                                                                                                               | Organisasjonsform code (AS, ASA, NUF, SA, STI...) and its Norwegian name                                   |
| `naceCode`, `naceDescription`, `secondaryNaceCodes`                                                                                                             | Main industry code (næringskode 1, SN 2025 based on NACE) and description, plus næringskode 2 and 3        |
| `sectorCode`, `sectorDescription`                                                                                                                               | Institutional sector code                                                                                  |
| `employees`                                                                                                                                                     | Registered number of employees (null when not registered)                                                  |
| `status`, `bankrupt`, `windingUp`, `compulsoryDissolution`, `deletedDate`                                                                                       | Active, bankrupt, being wound up, under compulsory dissolution or deleted                                  |
| `foundedDate`, `registeredDate`, `businessRegisterDate`                                                                                                         | Foundation date, registration in Enhetsregisteret and in Foretaksregisteret                                |
| `inBusinessRegister`, `vatRegistered`, `vatRegisteredDate`, `inFoundationRegister`, `inVoluntaryRegister`                                                       | Registrations in the other registers                                                                       |
| `partOfGroup`, `parentOrganisationNumber`                                                                                                                       | Part of a group of companies; parent unit (public sector)                                                  |
| `shareCapital`, `shareCapitalCurrency`, `lastFiledAnnualAccounts`                                                                                               | Registered capital and the year of the latest annual accounts submitted                                    |
| `purpose`                                                                                                                                                       | Registered activity or statutory purpose (Norwegian), with emails, web addresses and phone numbers removed |
| `businessAddressStreet`, `businessPostcode`, `businessPostTown`, `businessMunicipalityNumber`, `businessMunicipality`, `businessCountryCode`, `businessCountry` | Business address (forretningsadresse); see Privacy for when the street is left out                         |
| `nameResemblesIndividual`                                                                                                                                       | True when the name looks like a person's name (the street address is then left out)                        |
| `registryPage`, `source`, `attribution`, `notice`, `retrievedAt`                                                                                                | Public page on virksomhet.brreg.no, source, NLOD attribution, a non-affiliation line, fetch time           |

### How to use it

1. Click **Try for free** and keep the prefilled input (the 10 newest software companies, code 62.100, in Oslo), or set your own filters.
2. Run it. Rows appear in the **Output** tab.
3. Give at least one criterion: organisation numbers, a name, organisation forms, industry codes, municipalities, postcodes, a date range or a minimum number of employees.

### Input examples

New software companies registered in Oslo this month:

```json
{
    "naceCodes": ["62.100"],
    "municipalityNumbers": ["0301"],
    "registeredFrom": "2026-10-01",
    "sort": "newest",
    "maxResults": 200
}
```

The largest construction companies in Bergen and Trondheim:

```json
{
    "naceCodes": ["41", "42", "43"],
    "municipalityNumbers": ["4601", "5001"],
    "organisationForms": ["AS", "ASA"],
    "minEmployees": 50,
    "sort": "employees",
    "maxResults": 500
}
```

Look up organisations by number:

```json
{
    "organisationNumbers": ["923609016", "974760673"],
    "status": "any"
}
```

### Output example

```json
{
    "organisationNumber": "923609016",
    "name": "EQUINOR ASA",
    "nameResemblesIndividual": false,
    "organisationForm": "ASA",
    "organisationFormDescription": "Allmennaksjeselskap",
    "naceCode": "06.100",
    "naceDescription": "Utvinning av råolje",
    "secondaryNaceCodes": ["06.200", "19.200"],
    "sectorCode": "1120",
    "sectorDescription": "Statlig eide aksjeselskaper mv.",
    "employees": 21231,
    "status": "active",
    "bankrupt": false,
    "windingUp": false,
    "compulsoryDissolution": false,
    "deletedDate": null,
    "foundedDate": "1972-09-18",
    "registeredDate": "1995-03-12",
    "businessRegisterDate": "1988-04-28",
    "inBusinessRegister": true,
    "vatRegistered": true,
    "vatRegisteredDate": "1989-07-01",
    "inFoundationRegister": false,
    "inVoluntaryRegister": false,
    "partOfGroup": true,
    "parentOrganisationNumber": null,
    "shareCapital": 5976872600,
    "shareCapitalCurrency": "NOK",
    "lastFiledAnnualAccounts": "2025",
    "purpose": "Selv, eller gjennom deltakelse i eller sammen med andre selskaper å utvikle, produsere og markedsføre ulike former for energi, avledede produkter og tjenester, samt annen virksomhet. Utleie av bygg og anlegg.",
    "businessAddressStreet": "Forusbeen 50",
    "businessPostcode": "4035",
    "businessPostTown": "STAVANGER",
    "businessMunicipalityNumber": "1103",
    "businessMunicipality": "STAVANGER",
    "businessCountryCode": "NO",
    "businessCountry": "Norge",
    "registryPage": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
    "source": "data.brreg.no/enhetsregisteret",
    "attribution": "Contains data under the Norwegian licence for Open Government data (NLOD 2.0) distributed by Brønnøysundregistrene (The Brønnøysund Register Centre). Licence: https://data.norge.no/nlod/en/2.0. Source: https://data.brreg.no/enhetsregisteret/api/dokumentasjon/en/index.html. Changed by this Actor: fields selected, renamed and translated; contact details and person-linked units removed.",
    "notice": "Unofficial. Not affiliated with or endorsed by Brønnøysundregistrene (The Brønnøysund Register Centre).",
    "retrievedAt": "2026-10-25T16:23:53.085Z"
}
```

### How much does it cost?

- **$0.01 per run start** plus **$3 per 1,000 companies saved** ($0.003 each, the `company` event). Example: 1,000 companies = $0.01 + $3 = $3.01.
- You pay only for rows that are saved. Withheld, filtered and duplicate units are free.
- Set **Maximum cost per run** when you start a run; the Actor stops cleanly when it reaches your cap.

### Privacy: company data only

- **No contact details.** The source publishes email addresses, phone and mobile numbers and websites for many units, including sole proprietorships. The Actor drops those fields from every response before reading it, and removes emails, web addresses and phone numbers from the free-text purpose.
- **No roles or people.** The roles endpoint (board members, CEO, owners, auditors) is never called.
- **No sole proprietorships or single-person units.** ENK (enkeltpersonforetak), PERS (other individuals), BO (estates, such as a deceased person's estate), KBO (bankruptcy estates), TVAM (units force-registered for VAT, often individuals) and IKJP (other non-legal persons) are never output and cannot be requested. Unknown or new organisation forms are withheld too.
- **No street address where it may be a home.** Partnerships and similar forms (ANS, DA, KS, PRE), foreign branches (NUF, often one person), co-ownerships and owner-section condominiums (SAM, ESEK) and office shares (KTRF) are output with postcode, town and municipality only. So are companies whose name looks like a person's name (e.g. "OLA NORDMANN AS"), which you can also leave out with `personNamedCompanies` = `exclude`, and any address with a care-of (c/o) line.
- **No postal address, historical names or registry annotations.** Postal addresses often carry a person's name (c/o).
- **Name searches** match the organisation's own registered name only.

### Limits

- **Up to 50,000 companies per run** (`maxResults` maximum). For more, split the work into several runs, for example by municipality.
- The source returns at most **10,000 units per search**. When you list several municipalities, each is searched separately, so the limit applies per municipality. The run summary says when a search hit the limit.
- **Industry codes use the registry's current standard (SN 2025).** Older SN 2007 codes such as 62.010 match nothing; use e.g. 62.100, or a prefix such as 62. A code filter matches the main or a secondary industry, and also the code of a company's auxiliary unit, which is not in the output (see FAQ).
- Only main units (hovedenheter) are returned, not sub-units (underenheter, i.e. local establishments).
- Descriptions (organisation form, industry, sector) are in Norwegian, as published.
- Requests are paced at about 2 per second, and each returns up to 100 units.

### FAQ

**Do I need an API key?** No. The Enhetsregisteret open data API is keyless.

**Can I reuse the data?** Brønnøysundregistrene publishes these open data under the Norwegian Licence for Open Government Data (NLOD 2.0), which allows reuse, including commercial, provided you attribute the source and the licence. Every row carries the attribution: "Contains data under the Norwegian licence for Open Government data (NLOD) distributed by Brønnøysundregistrene". The licence does not cover personal data; this Actor removes contact details and person-linked units. This is not legal advice.

**How fresh is it?** The search API serves the register in real time; each row shows when it was fetched.

**Can I get email addresses, phone numbers or board members?** No. This Actor outputs company data only. Contact fields are dropped and the roles data is never requested.

**Why is a company missing?** Sole proprietorships and other single-person units are never output. Units that are bankrupt or winding up are left out unless you set `status` to `any`. Only main units are returned, not local sub-units.

**Why does my industry code return nothing?** The register uses SN 2025 codes. Older SN 2007 codes such as `62.010` match nothing; use `62.100` or a prefix such as `62`.

**How many companies can I get?** Up to 50,000 per run. Each search returns at most 10,000, so list several municipalities to go beyond that.

**What does it cost?** $0.01 per run plus $0.003 per saved company ($3 per 1,000). Withheld, filtered and duplicate units are free.

**How do I get a list of companies by industry and region?** Put NACE-based industry codes (SN 2025) in `naceCodes`, e.g. `62` for all IT and software, and municipality numbers in `municipalityNumbers`, e.g. 0301 Oslo, 4601 Bergen, 5001 Trondheim. Add `organisationForms: ["AS"]` for private limited companies only.

**Why does a company appear under an industry code that isn't its main one?** The register matches your code against the main code, the secondary codes and the auxiliary-unit code. The auxiliary-unit code isn't included in the output, so a row can match on a code you don't see. Check `naceCode` and `secondaryNaceCodes` in each row if you need main-industry matches only.

**Can I look up an organisasjonsnummer?** Yes. Put up to 2,000 9-digit organisation numbers in `organisationNumbers`. Numbers that aren't found are listed in the run summary.

### Data source and licence

Contains data under the Norwegian licence for Open Government data (NLOD) 2.0 distributed by Brønnøysundregistrene. Licence: https://data.norge.no/nlod/en/2.0. Source: https://data.brreg.no/enhetsregisteret/api/dokumentasjon/en/index.html. The data have been changed by this Actor (fields selected, renamed and translated; contact details and person-linked units removed).

Unofficial. Not affiliated with Brønnøysundregistrene (The Brønnøysund Register Centre), and not endorsed by it.

# Changelog

This Actor's version history is a separate document: https://apify.com/graylabs/norway-companies/changelog.md

# Actor input Schema

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

Optional. Næringskode prefixes in the registry's current standard (SN 2025, based on NACE), e.g. 62.100 (computer programming), 62 (all of division 62) or 56.1. Matches main or secondary industry.

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

Optional. 4-digit municipality numbers of the business address, e.g. 0301 (Oslo), 4601 (Bergen), 5001 (Trondheim). Each municipality is searched separately (the source returns at most 10,000 units per search).

## `postcodes` (type: `array`):

Optional. 4-digit postcodes of the business address, e.g. 0150.

## `organisationForms` (type: `array`):

Optional. Organisasjonsform codes such as AS (private limited company), ASA, NUF (foreign branch), SA (cooperative), STI (foundation), FLI (association). Default: every form except sole proprietorships and other single-person forms (ENK, PERS, BO, KBO, TVAM, IKJP), which are never available.

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

Optional. Words in the registered name, e.g. 'eiendom'. Only the organisation's own name is searched.

## `organisationNumbers` (type: `array`):

Optional. Look up specific organisations by 9-digit organisasjonsnummer (up to 2,000). Other filters are ignored in this mode, except status.

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

Optional. Earliest registration date in Enhetsregisteret (YYYY-MM-DD). Use it with sort = newest to follow new companies.

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

Optional. Latest registration date in Enhetsregisteret (YYYY-MM-DD).

## `foundedFrom` (type: `string`):

Optional. Earliest foundation date (stiftelsesdato, YYYY-MM-DD).

## `foundedTo` (type: `string`):

Optional. Latest foundation date (YYYY-MM-DD).

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

Optional. Registered number of employees, at least this many. The registry accepts 0, 1 or a number above 4.

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

Filter on registration in the VAT register (Merverdiavgiftsregisteret).

## `status` (type: `string`):

Active (default): leave out units that are bankrupt, being wound up or under compulsory dissolution. Any: include them.

## `sort` (type: `string`):

Newest registrations first (default), by organisation number, or by number of employees (largest first).

## `addressDetail` (type: `string`):

Full (default): business street address for companies and other legal persons. Municipality: postcode, town and municipality only, for every row.

## `personNamedCompanies` (type: `string`):

Some companies are named after a person (e.g. 'OLA NORDMANN AS'). Flag (default): keep them with nameResemblesIndividual = true and without street address. Exclude: leave them out.

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

Stop after saving this many companies (each saved company is one charged result).

## `maxRequests` (type: `integer`):

Safety cap on requests to the source (each returns up to 100 units).

## Actor input object example

```json
{
  "naceCodes": [
    "62.100"
  ],
  "municipalityNumbers": [
    "0301"
  ],
  "postcodes": [],
  "organisationForms": [],
  "organisationNumbers": [],
  "vatRegistered": "any",
  "status": "active",
  "sort": "newest",
  "addressDetail": "full",
  "personNamedCompanies": "flag",
  "maxResults": 10,
  "maxRequests": 1000
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "naceCodes": [
        "62.100"
    ],
    "municipalityNumbers": [
        "0301"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("graylabs/norway-companies").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 = {
    "naceCodes": ["62.100"],
    "municipalityNumbers": ["0301"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("graylabs/norway-companies").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 '{
  "naceCodes": [
    "62.100"
  ],
  "municipalityNumbers": [
    "0301"
  ],
  "maxResults": 10
}' |
apify call graylabs/norway-companies --silent --output-dataset

```

## MCP server setup

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

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/yPZb75cN1Ne1AB7Xf/builds/mUMWjtv4wDE6OMWNc/openapi.json
