# Norway Company Search: Brreg Org Number Lookup & NACE (`itayozer9/norway-brreg-companies`) Actor

Look up Norwegian companies by org number or search Brønnøysund's Enhetsregisteret by name, NACE code, municipality, employees or registration date. Status, address, NACE, staff band, VAT. No people or contact details.

- **URL**: https://apify.com/itayozer9/norway-brreg-companies.md
- **Developed by:** [Itay Ozer](https://apify.com/itayozer9) (community)
- **Categories:** Business, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 company returneds

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 Search: Brreg Org Number Lookup & NACE

Look up Norwegian companies by organisation number (organisasjonsnummer), or search the whole Norwegian business register by name, NACE industry code, municipality (kommune), postal code, organisation form, number of employees or registration date. You get one clean row per company: name, form, status, business address, NACE codes, employee band, VAT number and key dates.

The data comes straight from the official open API of Brønnøysundregistrene (the Brønnøysund Register Centre), the public body that runs Enhetsregisteret, Norway's Central Coordinating Register for Legal Entities. It is free open data under the Norwegian licence for Open Government data (NLOD), so there are no blocked pages, captchas, proxies or API keys involved.

Good for: KYB and supplier checks, cleaning a CRM or ERP list of Norwegian customers, B2B lead lists by industry and town, and new-company feeds.

### What you get

For every company:

- Org number, registered name (withheld for sole proprietorships, see the FAQ), organisation form (AS, ASA, ENK, NUF, ...) and its Norwegian name
- Status: `ACTIVE`, `BANKRUPT`, `UNDER_LIQUIDATION`, `FORCED_DISSOLUTION` or `DELETED` (with the deletion date), plus the three flags behind it
- Main NACE code and description, and up to two more NACE codes
- Employees: the registered number from 5 up, and a band (`0`, `1-4`, `5-9`, `10-19`, ... `1000+`)
- Business address (street, postcode, town), municipality name and number, country, and the postal address in one line
- Website and registered business activity text
- Founding date, registration dates in Enhetsregisteret and Foretaksregisteret, VAT registration date and the VAT number (`NO923609016MVA`)
- Institutional sector, group membership, public-sector parent, share capital and currency, last annual accounts year
- A link to the company's official page on virksomhet.brreg.no

Fields the register does not have are `null`, never guessed.

### Input

Use **one** of the two modes.

**1. Look up org numbers**

| Field | Example | Notes |
|---|---|---|
| `orgNumbers` | `["923609016", "NO 984 851 006 MVA"]` | Up to 10,000 per run. Spaces, dots and the VAT form are fine. Duplicates are looked up once |

```json
{
    "orgNumbers": ["923609016", "984 851 006", "NO 937921268 MVA"]
}
```

**2. Search the register** (leave `orgNumbers` empty)

| Field | Example | Notes |
|---|---|---|
| `name` | `"bakeri"` | Words in the company name. Sole proprietorships that match come back with their name withheld |
| `naceCodes` | `["62", "41.2"]` | A short code covers everything under it. A company matches if any of its NACE codes fits |
| `municipalities` | `["Oslo", "Bærum", "4601"]` | Business address municipality, by name or 4-digit number. Spelling without æ, ø, å works too (`Tromso`) |
| `postalCodes` | `["0150"]` | Business address postcodes |
| `orgForms` | `["AS", "ASA"]` | Empty means all forms |
| `minEmployees`, `maxEmployees` | `5`, `49` | Brreg hides exact counts of 1 to 4 employees, so min can be 0, 1 or 5 and up, max can be 0, 4 or 5 and up |
| `registeredFrom`, `registeredTo` | `"2026-10-01"` | Registration date in Enhetsregisteret |
| `includeInactive` | `false` | Off by default: bankrupt and liquidating companies are left out |
| `sortBy` | `"newest"` | `default`, `newest` (newest registrations first) or `mostEmployees` |
| `maxItems` | `100` | 1 to 10,000 (the most Brreg returns for one query) |

New IT companies in Oslo, newest first:

```json
{
    "naceCodes": ["62"],
    "municipalities": ["Oslo"],
    "registeredFrom": "2026-10-01",
    "sortBy": "newest",
    "maxItems": 500
}
```

### Output example

```json
{
    "input": "923609016",
    "found": true,
    "error": null,
    "orgNumber": "923609016",
    "name": "EQUINOR ASA",
    "orgForm": "ASA",
    "orgFormDescription": "Allmennaksjeselskap",
    "soleProprietorship": false,
    "status": "ACTIVE",
    "bankrupt": false,
    "underLiquidation": false,
    "underForcedDissolution": false,
    "deletedDate": null,
    "naceCode": "06.100",
    "naceDescription": "Utvinning av råolje",
    "secondaryNace": [
        { "code": "06.200", "description": "Utvinning av naturgass" },
        { "code": "19.200", "description": "Produksjon av raffinerte petroleumsprodukter og fossile brenselsprodukter" }
    ],
    "employees": 21231,
    "employeesBand": "1000+",
    "businessAddress": "Forusbeen 50",
    "businessPostalCode": "4035",
    "businessCity": "STAVANGER",
    "municipality": "STAVANGER",
    "municipalityNumber": "1103",
    "countryCode": "NO",
    "postalAddress": "Postboks 8500, 4035 STAVANGER",
    "website": "www.equinor.com",
    "activity": "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.",
    "foundedDate": "1972-09-18",
    "registeredDate": "1995-03-12",
    "businessRegisterDate": "1988-04-28",
    "inBusinessRegister": true,
    "vatRegistered": true,
    "vatRegisteredDate": "1989-07-01",
    "vatNumber": "NO923609016MVA",
    "sectorCode": "1120",
    "sectorDescription": "Statlig eide aksjeselskaper mv.",
    "partOfGroup": true,
    "parentOrgNumber": null,
    "shareCapital": 5976872600,
    "shareCapitalCurrency": "NOK",
    "lastAnnualAccountsYear": "2025",
    "brregUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
    "source": "Brønnøysundregistrene (Enhetsregisteret), NLOD",
    "checkedAt": "2026-10-31T18:50:00.000Z"
}
```

In lookup mode, org numbers that are not valid, not registered or removed by Brreg come after the companies as free rows with `found: false` and a short `error`. Every row has the same columns, so CSV and Excel exports line up.

### Pricing

Pay per company. Nothing is charged for org numbers that are invalid, not found or removed, or for a search that matches nothing. Sole proprietorship rows (name and address withheld) are charged like other companies; to leave them out of a search, set `orgForms`, for example `["AS", "ASA"]`.

| Event | Price | When |
|---|---|---|
| Company | $0.0008 | Every company row in your dataset, sole proprietorships included (a deleted company you looked up counts, since you get its status and deletion date) |
| Actor start | $0.00005 | Once per run |

Example: 1,000 companies cost $0.80.

The actor reads your run's maximum charge before it calls Brreg and fetches only as many companies as that covers, so a run never goes over the limit you set.

### Limits

- Lookups: up to 10,000 org numbers per run. About 1,000 numbers take well under a minute.
- Search: up to 10,000 companies per query (a Brreg limit). For more, split by municipality, NACE code or registration date.
- Sub-unit numbers (underenheter, the local branches of a company) are not covered: they come back as not found, free.
- Deleted companies only show up when you look them up by org number, never in search results.
- Data is live: every run reads Brreg at that moment.
- Texts from the register (NACE descriptions, organisation forms, activity) are in Norwegian, as Brreg publishes them.

### FAQ

**Where does the data come from?**
From Brønnøysundregistrene's open Enhetsregisteret API (data.brreg.no). Contains data under the Norwegian licence for Open Government data (NLOD) distributed by Brønnøysundregistrene. Field names are translated to English and some fields are left out (see the next answer); the values are as Brreg publishes them.

**Is there personal data in the results?**
The actor is built to keep it out:

- It never reads role holders (board members, CEOs, owners) and never copies phone numbers, mobile numbers or email addresses, for any company.
- Sole proprietorships (ENK, and any unit in sector 8200 "personal business") are one person: by Norwegian law their name contains the owner's surname, and their address is usually a home. So their **name**, street address, postcode, postal address, website and activity text are withheld (`null`), and `soleProprietorship` is `true`. You still get org number, form, status, NACE codes, employee band, municipality, town, VAT status and dates, and the `brregUrl` link to the official page.
- Care-of lines in addresses ("c/o Kari Hansen") are removed.

You are responsible for using the data in line with GDPR and Norwegian law.

**Why did I get fewer companies than `maxItems`?**
Either fewer companies matched, or your run's maximum charge covered fewer.

**Why can't I filter on 2 or 3 employees?**
Brreg hides exact counts of 1 to 4 employees for privacy and refuses filters that would reveal them. Use `minEmployees: 1` with `maxEmployees: 4` to get that whole band.

**Can I schedule it or call it from an AI agent?**
Yes. It runs with limited permissions, so it needs no access to your other Apify data, and it works from schedules, the API and MCP clients. Lookups by org number are a good fit for agents: small input, one clean row back.

**Something broke or a field is missing. What do I do?**
Open an issue on the Issues tab with your run link.

# Actor input Schema

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

Norwegian organisation numbers (organisasjonsnummer), one per line. Any format works: 923609016, 923 609 016 or the VAT form NO 923609016 MVA. Duplicates are looked up once. Up to 10,000 per run. Leave empty to search with the filters below instead.

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

Words in the company name, for example "bakeri" or "Equinor".

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

Norwegian NACE codes (SN2025). A short code covers everything under it: 62 is all IT services, 62.1 is programming, 62.100 is one exact code. A company matches if any of its NACE codes fits.

## `municipalities` (type: `array`):

Municipality of the business address, by name (Oslo, Bergen, Bærum, Tromso) or 4-digit number (0301). Herøy and Våler exist twice in Norway: both are searched.

## `postalCodes` (type: `array`):

4-digit postal codes of the business address, for example 0150.

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

Codes such as AS (private limited), ASA (public limited), ENK (sole proprietorship), NUF (foreign branch), ANS, DA, SA, STI (foundation), FLI (association). Empty means all.

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

0, 1, or 5 and up. Brreg hides exact counts of 1 to 4 employees for privacy, so 2 to 4 are not allowed.

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

0, 4, or 5 and up (1 to 3 are not allowed, for the same reason).

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

Registration date in Enhetsregisteret, YYYY-MM-DD. Use it with "Newest first" for new-company leads.

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

Registration date in Enhetsregisteret, YYYY-MM-DD.

## `includeInactive` (type: `boolean`):

Off: only companies that are not bankrupt, not under liquidation and not under forced dissolution. Deleted companies never show up in searches (look them up by org number).

## `sortBy` (type: `string`):

Order of the results.

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

Most companies to return from a search (1 to 10,000, the most Brreg allows per query). You pay only for companies returned.

## Actor input object example

```json
{
  "naceCodes": [
    "62.100"
  ],
  "municipalities": [
    "Oslo"
  ],
  "includeInactive": false,
  "sortBy": "default",
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

One item per company found, then free rows for org numbers that were not found or not valid.

# 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"
    ],
    "municipalities": [
        "Oslo"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("itayozer9/norway-brreg-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"],
    "municipalities": ["Oslo"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("itayozer9/norway-brreg-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"
  ],
  "municipalities": [
    "Oslo"
  ],
  "maxItems": 20
}' |
apify call itayozer9/norway-brreg-companies --silent --output-dataset

```

## MCP server setup

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