# Brreg company search and Norway register updates

> Brreg company search for Norway. Look up organisation numbers, search by municipality and NACE code, list branches, and track register changes.

URL: https://cliqtomedia.com/actors/norway-brreg-company-register/

Category: Leads, companies & validation · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/norway-brreg-company-register?fpr=cliqto

Look up Norwegian companies by organisation number, or search the register with filters. You get form, industry, staff count, addresses and status. A third mode reads the daily change feed.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `974760673` in Organisation numbers. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

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.

- 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.

### Good for

- 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 good 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).
- Annual accounts, credit scores or official certificates (*firmaattest*).
- A full copy of the register. Brreg offers free bulk downloads for that.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Company record | $0.0018 (from $0.0015 on paid Apify plans) | One found Norwegian entity or subentity (complete or partial row) saved to the Dataset. |
| Not-found lookup | $0.0005 | One valid organisation number that is not in the open Brreg register, saved as a not_found row. |
| Update event | $0.0005 | One register change event (new, changed, deleted or removed unit) saved to the Dataset in updates mode. |

- One company: about $0.0028.
- 1,000 companies: about $1.80.
- Every day 100 companies, for 30 days: about $5.43 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/norway-brreg-company-register?fpr=cliqto

## Questions

### Do I need a Brreg API key?

No. The Brreg open API is free and needs no key.

### What is a subentity?

It is a branch of a company, like a shop or an office.

### Are board members or owners included?

No. They are personal data. The tool gives company data only.

### Can I use the data commercially?

Yes. It is under NLOD 2.0, which allows reuse with attribution.

### 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.

### 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.

## Data fields

- `rowType` (string): Row type: entity (hovedenhet / legal unit), subentity (underenhet / establishment) or update (one event of the register change feed).
- `status` (string): Row result: complete, partial, not_found or error. See statusReason and errorCode.
- `statusReason` (string): Plain-English reason for a partial, not_found or error row; on a complete entity row, a note when subentities were limited by maxSubentitiesPerEntity; otherwise null.
- `errorCode` (string): Machine code for error rows, e.g. INVALID_ORG_NUMBER, RATE_LIMITED, SOURCE_UNAVAILABLE; null otherwise.
- `input` (string): The value as you entered it (lookup mode); null for search and update rows.
- `orgNumber` (string): Norwegian organisation number (organisasjonsnummer), 9 digits. Null only when the input was not a 9-digit number.
- `checksumValid` (boolean): Whether the input passes the MOD11 check digit (lookup mode); null for search and update rows.
- `registryStatus` (string): Summary status: active, bankrupt, under_liquidation, under_forced_liquidation, closed (subentity closed), deleted (slettet) or removed_from_open_data (HTTP 410 / Fjernet).
- `name` (string): Registered name (navn).
- `orgForm` (string): Organisation form code, e.g. AS, ASA, ENK, NUF, BEDR.
- `orgFormText` (string): Organisation form description in Norwegian, e.g. Aksjeselskap.
- `isSoleProprietorship` (boolean): True for ENK (enkeltpersonforetak) and for subentities of an ENK; their street address and contacts are withheld.
- `personalDataMinimized` (boolean): True when street address and contact fields were withheld to protect a natural person (sole proprietorship).
- `parentOrgNumber` (string): Parent unit (overordnetEnhet): the legal unit of a subentity, or the superior body of a public entity.
- `industryCode` (string): Main NACE industry code (næringskode 1, SN2025), e.g. 62.100.
- `industryText` (string): Main industry description.
- `industryCode2` (string): Second NACE industry code.
- `industryText2` (string): Second industry description.
- `industryCode3` (string): Third NACE industry code.
- `industryText3` (string): Third industry description.
- `sectorCode` (string): Institutional sector code (entities only).
- `sectorText` (string): Institutional sector description.
- `employees` (integer): Number of employees registered in the Aa-register; null when none are registered (not zero).
- `hasRegisteredEmployees` (boolean): Whether employees are registered.
- `employeesRegisteredDate` (string): Date the employee count was last registered (YYYY-MM-DD).
- `address` (string): Street address lines joined with a comma (forretningsadresse, or beliggenhetsadresse for subentities). Null for sole proprietorships.
- `postalCode` (string): Postal code of the business address.
- `city` (string): Post town of the business address.
- `municipality` (string): Municipality (kommune) name.
- `municipalityCode` (string): Municipality number, 4 digits, e.g. 0301 (Oslo).
- `countryCode` (string): Country code of the business address, e.g. NO.
- `postalAddress` (string): Postal address lines (postadresse). Null for sole proprietorships.
- `postalPostalCode` (string): Postal code of the postal address.
- `postalCity` (string): Post town of the postal address.
- `website` (string): Website (hjemmeside) as registered.
- `email` (string): Registered e-mail; only with includeContactDetails and never for sole proprietorships.
- `phone` (string): Registered phone; only with includeContactDetails and never for sole proprietorships.
- `mobile` (string): Registered mobile; only with includeContactDetails and never for sole proprietorships.
- `foundedDate` (string): Founding date (stiftelsesdato), YYYY-MM-DD.
- `registeredDate` (string): Date registered in Enhetsregisteret, YYYY-MM-DD.

## Input settings

- `mode` (string, required): 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` (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` (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` (integer): Upper limit of subentity rows per entity when includeSubentities is on. subentitiesTotal in the entity row shows how many exist.
- `searchTarget` (string): Search mode: search legal units (entities) or establishments (subentities). Subentity search supports name, municipality, NACE, organisation form, VAT and employee filters only.
- `name` (string): Search mode: words in the registered name, e.g. equinor or rørlegger. Leave empty to filter only by the other fields.
- `municipalityNumbers` (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` (array): Search mode: NACE codes (SN2025) or prefixes, e.g. 62 (all IT services), 62.1 or 62.100.
- `orgForms` (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` (string): Search mode, entities only: any, only bankrupt (yes) or only not bankrupt (no).
- `underLiquidation` (string): Search mode, entities only: any, only under liquidation (yes) or none (no).
- `vatRegistered` (string): Search mode: any, only VAT-registered (yes) or not VAT-registered (no).
- `minEmployees` (integer): Search mode: minimum registered employees. The register accepts 0, 1 or 5 and above.
- `maxEmployees` (integer): Search mode: maximum registered employees. The register accepts 0 or 4 and above.
- `registeredFrom` (string): Search mode, entities only: registered in Enhetsregisteret on or after this date (YYYY-MM-DD).
- `registeredTo` (string): Search mode, entities only: registered on or before this date (YYYY-MM-DD).
- `maxResults` (integer): Search mode: maximum rows returned (1–500). RUN_SUMMARY shows the total number of matches.
- `updatesTarget` (string): Updates mode: change feed of entities or of subentities.
- `updatesSince` (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` (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` (integer): Updates mode: maximum events per run (1–500). If more are waiting, RUN_SUMMARY has hasMore=true; continue with nextUpdateId.
- `includeRecordDetails` (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` (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).

## Step by step on Apify

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.

## Use cases

| Task | 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` |

## Tips

- Use SN2025 NACE codes like 62.100. Old codes find nothing.
- In updates mode, start the next run from nextUpdateId.
- Turn on subentities to get shops and offices as their own rows.

## 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.

## Sample result

```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"
}
```

## Use it from code

Actor ID: `cliqtomedia/norway-brreg-company-register`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/norway-brreg-company-register").call(run_input={
    "mode": "lookup",
    "orgNumbers": [
        "974760673",
        "923609016",
        "994667084"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~norway-brreg-company-register/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "lookup", "orgNumbers": ["974760673", "923609016", "994667084"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/norway-brreg-company-register")
result = tool.invoke({"run_input": {"mode": "lookup", "orgNumbers": ["974760673", "923609016", "994667084"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send.

## Similar tools

- [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/)
- [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/)
- [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/)
- [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/)
- [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/)
- [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/)
