# Norway Company Register — Enhetsregisteret Lookup (`sourcerow/norway-company-register`) Actor

Look up any of 1.17 million Norwegian companies by name or organisation number — legal form, industry, employees, bankruptcy and liquidation status, addresses, and optionally the board.

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

## Pricing

$4.00 / 1,000 company resolveds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Look up any of Norway's 1.17 million registered companies by name or
organisation number. Legal form, industry, employees, bankruptcy and liquidation
status, addresses, and optionally the board. Straight from the state register.

### What it does

Enhetsregisteret is Norway's central register of legal entities, run by
Brønnøysundregistrene. It is open data with no key, account or fee. What it
lacks is a usable shape: the field names are Norwegian, the status flags are
scattered across the record, and officers require a second request.

This Actor returns one row per query with 46 fields, the flags collected into
booleans and the officers fetched only when asked for.

### What you get

46 fields per row, including `organisation_number`, `name`, `legal_form_name`,
`nace_description`, `employees`, `business_city`, `bankrupt`, `in_liquidation`,
`vat_registered`, `founded_on`, `total_matches`, `name_match_score` and
`matched_by`.

The table view shows 13 of them; all 46 are in the JSON, CSV and Excel
downloads.

### Input

| Field | Meaning |
|---|---|
| `organisationNumbers` | Norwegian organisation numbers, exact lookups. |
| `names` | Company names to search. |
| `queriesText` | A pasted list of either, one per line. |
| `includeRoles` | Fetch board members and officers. Off by default. |
| `maxCompanies` | Stop after this many. `0` removes the cap. |

```json
{
  "organisationNumbers": ["923609016", "974760673"],
  "includeRoles": false,
  "maxCompanies": 100
}
```

### Sample output

One complete record:

```json
{
  "query": "923609016",
  "matched_by": "number",
  "organisation_number": "923609016",
  "name": "EQUINOR ASA",
  "legal_form_name": "Allmennaksjeselskap",
  "nace_description": "Utvinning av råolje",
  "employees": 21239,
  "business_city": "STAVANGER",
  "bankrupt": false,
  "in_liquidation": false,
  "vat_registered": true,
  "founded_on": "1972-09-18",
  "issues": ""
}
```

### Pricing

| Event | Per 1,000 | Notes |
|---|---|---|
| Company resolved | $4.00 | Queries that find nothing are not charged |

There is no start fee and no per-row dataset fee.

### What it does not do

**`legal_form_name` and `nace_description` are in Norwegian.** The register
publishes them that way and they are passed through unchanged rather than
translated. `Allmennaksjeselskap` is a public limited company, `Aksjeselskap` a
private one. The numeric codes are also returned for machine use.

**No financials.** Annual accounts are filed with a different Brønnøysund
register and are not part of this data.

**Officers are off by default.** `includeRoles` adds a second request per
company and most use cases do not need it.

**Being absent from the business register is normal.** `not_in_business_register`
appears on sole traders and public bodies, which are in the central register
without being commercial companies. It is not an error.

### Notes

Send organisation numbers where available. They are exact and no match score is
needed.

Sort by `name_match_score` and check the bottom of the list first. That is where
wrong matches are.

`bankrupt` and `in_liquidation` are the two fields worth screening a supplier
list against. Both are booleans, so a filter is enough.

Officers' names retrieved with `includeRoles` can be screened against sanctions
lists. That is a separate job and a separate Actor.

### Support

Open the **Issues** tab with the exact query and the `matched_by`,
`total_matches` and `issues` values from the row.

### Licence and attribution

Company data from Enhetsregisteret, the Norwegian Central Coordinating Register
for Legal Entities, operated by Brønnøysundregistrene, published as open
government data under the Norwegian Licence for Open Government Data (NLOD).
Brønnøysundregistrene does not endorse this Actor.

# Actor input Schema

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

Nine-digit Norwegian organisation numbers. Spaces and dots are cleaned up for you.

## `names` (type: `array`):

Company names to search. The best match is returned.

## `queriesText` (type: `string`):

Paste a list here instead. Mixed is fine: each line is sorted out automatically.

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

Also fetch the managing director, board and auditor. **These are personal data** — names and dates of birth of real people, published by law in a public register. You need your own legal basis to process them. One extra request per company.

## `maxCompanies` (type: `integer`):

Stop after this many. **0 removes the cap.**

## Actor input object example

```json
{
  "organisationNumbers": [
    "923609016",
    "974760673"
  ],
  "names": [],
  "includeRoles": false,
  "maxCompanies": 100
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "organisationNumbers": [
        "923609016",
        "974760673"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourcerow/norway-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 = { "organisationNumbers": [
        "923609016",
        "974760673",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sourcerow/norway-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/zfuVs0le7hnpxsuVr/builds/gV1LwL3yi0dNaDrnR/openapi.json
