# Norway Company Data API: Enhetsregisteret Register (`smoked_drift/norway-company-data`) Actor

1.17M Norwegian companies from the official Enhetsregisteret open API. Filter by name, industry code, municipality, legal form, VAT registration or bankruptcy. Returns org number, address, NACE codes, employees and status. NLOD licensed.

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

## Pricing

$1.00 / 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.

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 Data API: Enhetsregisteret Register

Search 1.17 million Norwegian companies from the official **Enhetsregisteret** open API, published by the Brønnøysund Register Centre (Brreg). Filter by name, industry code, municipality, legal form, VAT registration, bankruptcy or liquidation — and get organisation number, address, NACE codes, headcount and status as clean JSON.

**No scraping, no API key.** The source is a documented public API under the NLOD licence, which permits commercial reuse.

***

### What you get

One dataset item per entity:

| Group | Fields |
| --- | --- |
| **Identity** | organisation number, name, legal form, previous names with dates, website |
| **Addresses** | business address and postal address, each with postcode, city, municipality and country |
| **Industry** | up to three NACE industry codes, each with code and description |
| **Size** | reported headcount, institutional sector |
| **Dates** | founding date, register registration date, VAT registration date |
| **Status** | VAT registered, bankrupt (with date), under liquidation (with date), compulsory dissolution |
| **Provenance** | source, licence and attribution on every row |

***

### Sample output

Real row, trimmed:

```json
{
  "orgNumber": "923609016",
  "name": "EQUINOR ASA",
  "orgForm": { "code": "ASA", "description": "Allmennaksjeselskap" },
  "website": "http://www.equinor.com",
  "businessAddress": {
    "address": ["Forusbeen 50"],
    "postalCode": "4035",
    "city": "STAVANGER",
    "municipality": "Stavanger",
    "municipalityNumber": "1103",
    "country": "Norge",
    "countryCode": "NO"
  },
  "industryCode1": { "code": "06.100", "description": "Utvinning av råolje" },
  "industryCode2": { "code": "06.200", "description": "Utvinning av naturgass" },
  "employees": 21272,
  "registeredDate": "1995-02-24",
  "vatRegistered": true,
  "bankrupt": false,
  "underLiquidation": false,
  "source": {
    "provider": "Brønnøysund Register Centre (Brreg) — Enhetsregisteret",
    "licence": "NLOD — Norwegian Licence for Open Government Data"
  }
}
```

***

### Usage

#### Everything traded under one name

```json
{ "name": "Equinor", "maxItems": 500 }
```

#### Businesses in a municipality, by industry

```json
{
  "naceCode": "46.710",
  "municipality": "0301",
  "maxItems": 2000
}
```

#### Newly registered limited companies

```json
{
  "orgForm": "AS",
  "registeredAfter": "2026-08-01",
  "maxItems": 5000
}
```

New registrations are the classic B2B prospecting list: a company that registered last month needs an accountant, insurance, banking and software.

#### Risk screen: bankrupt and liquidating companies

```json
{ "bankrupt": true, "maxItems": 5000 }
```

There are around 3,200 bankrupt entities in the register at any time. Separately, `underLiquidation` and `compulsoryDissolution` cover the other distress states.

***

### Filters

| Field | Notes |
| --- | --- |
| `name` | Full or partial company name |
| `orgNumber` | 9-digit organisation number |
| `naceCode` | NACE code in `NN.NNN` format — **the dots matter** |
| `municipality` | Municipality code, e.g. 0301 Oslo |
| `orgForm` | `AS` limited, `ASA` public limited, `ENK` sole trader… |
| `registeredAfter` / `registeredBefore` | ISO dates |
| `vatRegistered` | VAT register — a good proxy for real trading activity |
| `bankrupt` | Declared bankrupt |
| `underLiquidation` | Being wound up |
| `compulsoryDissolution` | Compulsory dissolution proceedings |
| `sort` | Organisation number, name, or registration date |
| `maxItems` | Hard cap on returned entities |

***

### Pricing

| Event | Charged | Covers |
| --- | --- | --- |
| `company-record` | once per entity returned | the normalised record |

No scan surcharge — the API returns up to **10,000 entities per request**, so a run that collects 10,000 companies costs the same in requests as a run that collects one. You pay only for the rows you keep.

***

### Reliability

- A **documented public API**, not a web page. No browser, no proxy, no selectors.
- The API is unusually generous: 10,000 rows per request, which keeps even large extractions cheap.
- Requests are retried, capped at four in flight, and errors are logged rather than silently dropped.
- Duplicate organisation numbers across pages are removed before pushing.

***

### Notes and limits

- **NACE codes need the exact format.** `46.710` works, `46710` is rejected and `46.71` matches nothing. The register uses the Norwegian NACE variant, which does not always align one-to-one with the EU codes.
- **Headcount is often absent.** Many entities have never reported one, so `employees` is null rather than zero. Filter on `vatRegistered` if you want entities that are actually trading.
- **Entities are not only companies.** The Enhetsregisteret also holds associations, foundations, public bodies and sole traders. Use `orgForm` to narrow to companies.
- **Attribution is required** by NLOD and is included on every row.

***

### Data source

The [Enhetsregisteret](https://data.brreg.no/enhetsregisteret/api/dokumentasjon/no/index.html) is published by the Brønnøysund Register Centre. The API is free, requires no key, and its documentation states the licence as **NLOD** (Norsk lisens for offentlige data), which permits commercial reuse provided the source is acknowledged.

***

### Related Actors

From the same publisher:

- [Companies House Data API](https://apify.com/smoked_drift/uk-companies-house-data) — 5M+ UK companies, Open Government Licence v3.0
- [French Company Data API](https://apify.com/smoked_drift/french-company-data) — 26M French companies, SIRENE and RNE, Licence Ouverte 2.0
- [Football Data API](https://apify.com/smoked_drift/european-football-results-odds) — European football results, statistics and closing odds

***

### Support

Missing a filter, or a register field this Actor does not surface? Open an issue on the **Issues** tab.

# Actor input Schema

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

Full or partial company name, e.g. 'Equinor' or 'Bygg'.

## `orgNumber` (type: `string`):

Norwegian organisation number, 9 digits, e.g. 923609016.

## `naceCode` (type: `string`):

Norwegian NACE industry code in NN.NNN format, e.g. '46.710' for wholesale of solid fuels, '06.100' for crude oil extraction. The code must match exactly, dots included.

## `municipality` (type: `string`):

Municipality code, e.g. 0301 for Oslo, 4601 for Bergen.

## `orgForm` (type: `string`):

Organisation form, e.g. AS for a limited company, ASA for a public limited company, ENK for a sole trader.

## `registeredAfter` (type: `string`):

ISO date, e.g. 2026-01-01. Useful for finding newly registered companies.

## `registeredBefore` (type: `string`):

ISO date, e.g. 2026-09-01.

## `vatRegistered` (type: `boolean`):

Only companies registered in the VAT register. A useful proxy for real trading activity.

## `bankrupt` (type: `boolean`):

Only companies declared bankrupt. Useful for risk screening.

## `underLiquidation` (type: `boolean`):

Only companies currently being wound up.

## `compulsoryDissolution` (type: `boolean`):

Only companies under compulsory dissolution proceedings.

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

Order of the results.

## `pageSize` (type: `integer`):

Rows per API request, maximum 10000. Leave at the maximum unless you are debugging.

## `maxItems` (type: `integer`):

Hard cap on returned companies. The register holds 1.17 million entities, so keep this explicit.

## Actor input object example

```json
{
  "pageSize": 10000,
  "maxItems": 1000
}
```

# Actor output Schema

## `companies` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("smoked_drift/norway-company-data").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("smoked_drift/norway-company-data").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 '{}' |
apify call smoked_drift/norway-company-data --silent --output-dataset

```

## MCP server setup

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

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/qs6zrtvVfYsXz5Vnb/builds/611sxklVEiYa6QMcX/openapi.json
