Norway Company Register (Brreg) & Updates avatar

Norway Company Register (Brreg) & Updates

Pricing

from $1.50 / 1,000 company records

Go to Apify Store
Norway Company Register (Brreg) & Updates

Norway Company Register (Brreg) & Updates

Look up Norwegian companies by organisation number, search Brreg Enhetsregisteret by municipality, NACE, form and status, list subentities, and track register changes with a cursor. Official open data (NLOD).

Pricing

from $1.50 / 1,000 company records

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

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.

It is made for KYB checks, CRM cleaning, B2B prospect lists and change monitoring in Norway. No login and no API key are needed. A run with three organisation numbers finishes in a few seconds and costs about $0.0064.

Norway Company Register and Updates: organisation numbers in, official Brreg company record and register change events out, with active, bankrupt or deleted status

Contents

What it does

The Actor reads the open Enhetsregisteret API of the Brønnøysund Register Centre. Each run uses one of three modes:

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

In lookup and search mode you can also add the subentities of each company (branches, shops, workplaces) as separate rows.

Good fit

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

Quick start

  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.

Expected result: three complete rows in a few seconds.

Input

Choose the mode with mode. Fields of other modes are ignored.

FieldTypeDefaultAllowed valuesWhat it does
modestringlookuplookup, search, updatesSelects the mode.
orgNumbersarray of stringsnone (form example: 3 numbers)up to 100; 9 digitsLookup mode. Spaces and the VAT form NO 923 609 016 MVA are accepted. A wrong check digit gives a free error row without a request. Duplicates are looked up once.
includeSubentitiesbooleanfalseLookup and search: adds subentity rows for each entity found. One extra request per entity.
maxSubentitiesPerEntityinteger201–100Maximum subentity rows per entity. subentitiesTotal shows how many exist.
searchTargetstringentitiesentities, subentitiesSearch legal units or establishments.
namestringnoneSearch: words in the registered name, e.g. rørlegger.
municipalityNumbersarray of stringsempty4 digits, e.g. 0301 Oslo, 4601 BergenSearch: business address (entities) or location (subentities).
naceCodesarray of stringsemptyNACE SN2025 codes or prefixes: 62, 62.1, 62.100Search: industry filter.
orgFormsarray of stringsemptyAS, ASA, ENK, NUF, DA, SA, STI, BEDR, …Search: organisation form.
bankruptstringanyany, yes, noSearch, entities only.
underLiquidationstringanyany, yes, noSearch, entities only.
vatRegisteredstringanyany, yes, noSearch: VAT register status.
minEmployees, maxEmployeesintegernonemin: 0, 1 or 5+; max: 0 or 4+Search: registered employees. The register only accepts these values.
registeredFrom, registeredTostringnoneYYYY-MM-DDSearch, entities only: registration date range.
maxResultsinteger501–500Search: maximum rows. RUN_SUMMARY shows the total number of matches.
updatesTargetstringentitiesentities, subentitiesUpdates: change feed of entities or subentities.
updatesSincestringnonedate or ISO date-time with zone, not in the futureUpdates: start point of the first run.
updatesFromIdintegernone≥1Updates: nextUpdateId from the previous run. Takes priority over updatesSince.
maxUpdatesinteger1001–500Updates: maximum events per run.
includeRecordDetailsbooleantrueUpdates: adds the current record (name, form, address, status) to each event.
includeContactDetailsbooleanfalseAdds e-mail, phone and mobile of companies. Never for sole proprietorships.

Input examples

Lookup with subentities:

{
"mode": "lookup",
"orgNumbers": ["923609016", "NO 974 760 673 MVA"],
"includeSubentities": true,
"maxSubentitiesPerEntity": 10
}

Search for active IT companies in Oslo with 5 or more employees:

{
"mode": "search",
"municipalityNumbers": ["0301"],
"naceCodes": ["62"],
"bankrupt": "no",
"minEmployees": 5,
"maxResults": 200
}

First run of a change monitor:

{
"mode": "updates",
"updatesSince": "2026-10-11",
"maxUpdates": 500
}

Output

Each Dataset row has rowType: entity, subentity or update. Use the Companies, Updates and Row status views, or export all fields. The key-value store has a RUN_SUMMARY record with the run status, counts and, in updates mode, the cursor.

Row status

statusMeaningCharged
completeThe record was found. A deleted company is complete with isDeleted: true and registryStatus: "deleted".yes
partialThe company was found, but its subentities could not be listed. Read statusReason.yes
not_foundThe number is not in the register, or Brreg removed it from open data (registryStatus: "removed_from_open_data").not-found price
errorWrong number (INVALID_ORG_NUMBER) or a source failure (RATE_LIMITED, SOURCE_UNAVAILABLE, …).no

On a complete entity row, statusReason notes when maxSubentitiesPerEntity limited the subentity rows.

Output example

A trimmed entity row:

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

null means the register has no value. It never means zero.

Fields

FieldTypeMeaningExample
rowTypestringentity, subentity or update"entity"
status, statusReason, errorCodestringRow result, see above"complete"
input, checksumValidstring, booleanYour value and its MOD11 check (lookup only)"923609016", true
orgNumberstringOrganisation number, 9 digits"923609016"
registryStatusstringactive, bankrupt, under_liquidation, under_forced_liquidation, closed, deleted, removed_from_open_data"active"
namestringRegistered name"EQUINOR ASA"
orgForm, orgFormTextstringOrganisation form"ASA", "Allmennaksjeselskap"
isSoleProprietorship, personalDataMinimizedbooleanENK flag, and whether personal data was hiddenfalse
parentOrgNumberstring or nullParent entity (for subentities) or parent organisationnull
industryCode … industryText3string or nullUp to three NACE codes (SN2025) with Norwegian text"06.100", "Utvinning av råolje"
sectorCode, sectorTextstring or nullInstitutional sector"1120"
employees, hasRegisteredEmployees, employeesRegisteredDateinteger, boolean, stringRegistered employees. null means not registered, never zero.21272, true
address, postalCode, city, municipality, municipalityCode, countryCodestring or nullBusiness address (entities) or location (subentities)"Forusbeen 50", "4035", "STAVANGER"
postalAddress, postalPostalCode, postalCitystring or nullPostal address"Postboks 8500"
website, email, phone, mobilestring or nullWebsite; contacts only with includeContactDetails"www.equinor.com"
foundedDate, registeredDate, startDate, closedDatestring or nullDates YYYY-MM-DD; start and closed dates are for subentities"1972-09-18", "1995-03-12"
vatRegistered, vatRegistrationDateboolean, stringVAT register (Merverdiavgiftsregisteret)true, "1989-07-01"
inBusinessRegister, inNonProfitRegister, inFoundationRegister, inPartyRegister, inGroupboolean or nullOther registers and group flag (entities)true
isBankrupt, bankruptcyDateboolean, stringBankruptcy (konkurs)false, null
underLiquidation, underLiquidationDate, underForcedLiquidation, forcedLiquidationDateboolean, stringLiquidation flagsfalse
isDeleted, deletedDateboolean, stringDeleted from the registerfalse
lastAnnualAccountsYearstring or nullLast submitted annual accounts"2025"
activityDescriptionstring or nullRegistered activity text; null on minimized rows"Selv, eller gjennom deltakelse …"
historicalNamesarrayEarlier names: {name, from, to}[{"name": "STATOIL ASA", …}]
subentitiesTotal, subentitiesReturnedinteger or nullSubentities in the register and rows written35, 10
updateId, updateType, updateDate, changedFieldsUpdate rows: event ID, Ny/Endring/Sletting/Fjernet, time, changed field names"Endring"
searchRankinteger or nullPosition in search results1
url, sourceUrlstringPublic register page and the API URL read
fetchedAt, provider, licencestringRead time, source and licence"NLOD 2.0"

Personal data

A sole proprietorship (ENK) is a private person's business. For ENK rows and their subentities the Actor sets personalDataMinimized: true and hides the street address, postal address, e-mail, phone, mobile and activity text. Name, form, industry, municipality and postal code stay, as the public minimum. The same applies to a subentity whose parent form cannot be read. The Actor never outputs roles (board members, CEO, owners).

Run summary

RUN_SUMMARY.status is one of COMPLETE, PARTIAL, NOT_FOUND, NO_RESULTS, CAPPED (stopped at your cost limit), ERROR, INVALID_INPUT or CANCELLED. counts shows rows by status and charged rows. In search mode, search.total is the number of matches. In updates mode, updates has nextUpdateId and hasMore.

Pricing

Pay per event. Platform usage is included.

EventPriceWhen
Actor start$0.001Once per run (per GB of memory; the default 256 MB counts once)
Company record$0.0018Each complete or partial entity or subentity row. Lower on higher Apify plans: $0.0017 Bronze, $0.0016 Silver, $0.0015 Gold.
Not-found lookup$0.0005Each not_found row
Update event$0.0005Each row in updates mode

error rows are free. An empty search costs only the start.

RunExample cost (Free plan)
3 organisation numbers (form example)$0.0064
10 organisation numbers$0.019
100 organisation numbers$0.181
Search, 500 rows$0.901
500 update events$0.251
100 unknown numbers$0.051

Subentities add up fast: 100 large employers with up to 100 subentities each gave 5,840 rows in our test. Set Maximum cost per run in the run options to cap your spend. The Actor stops before a paid row that does not fit and reports CAPPED.

Use cases

Buyer jobMode and inputKey output fields
Verify a company (KYB)lookup, orgNumbersstatus, registryStatus, isBankrupt, underLiquidation, isDeleted, vatRegistered
Clean CRM recordslookup, orgNumbersname, orgForm, industryCode, address, postalCode, city, website
Map branches of a companylookup + includeSubentitiessubentity rows: orgNumber, parentOrgNumber, address, employees, closedDate
Prospect list by area and industrysearch, municipalityNumbers + naceCodesname, employees, industryText, registeredDate, searchRank
Daily change monitorupdates, updatesSince, then updatesFromIdupdateType, updateDate, changedFields, registryStatus
New companies in a regionsearch, registeredFrom + municipalityNumbersname, orgForm, registeredDate, industryCode

Monitoring register changes

  1. Run updates mode once with updatesSince (for example yesterday).
  2. Read RUN_SUMMARY.updates.nextUpdateId.
  3. Next time, start with updatesFromId set to that value. You get the events after the last one, with no gaps or duplicates.
  4. If hasMore is true, more events are waiting: run again with the new nextUpdateId.

Event types: Ny (new), Endring (change), Sletting (deleted) and Fjernet (removed from open data; the Actor does not keep or show the old record). Brreg publishes a few thousand entity events on a normal weekday.

To run this every day, save the input as an Apify task and add a schedule. A schedule cannot change updatesFromId by itself, so for a gap-free monitor read nextUpdateId from each run through the API.

API and integrations

Start a run through the Apify API (POST /v2/acts/cliqtomedia~norway-brreg-company-register/runs) with the same JSON input, then read the Dataset. Export to CSV, Excel or JSON, or connect the run to other tools with Apify integrations. Join rows on orgNumber; subentities link to their parent through parentOrgNumber.

Coming from another Brreg tool? Common field names here: postalCode (zip), postalAddress / postalPostalCode / postalCity (post address), countryCode, isBankrupt, registeredDate (registration date in Enhetsregisteret), inNonProfitRegister (Frivillighetsregisteret), underForcedLiquidation. Missing values are null, not empty strings.

Use with AI agents (MCP)

AI agents can call this Actor through the Apify MCP server: add https://mcp.apify.com?tools=cliqtomedia/norway-brreg-company-register to your MCP client (Claude, Cursor, VS Code and others). The MCP server needs your Apify account (OAuth sign-in or an Apify API token); Brreg itself needs no key. The smallest useful input:

{ "orgNumbers": ["923609016"] }

Key output fields for an agent: status, name, registryStatus, orgForm, industryCode, employees, isBankrupt, isDeleted. A lookup of 10 numbers takes a few seconds and costs about $0.019. A lookup of 100 numbers with many subentities can take about a minute, so the agent may need to poll the run. Search results match on name words, so an agent should confirm a company by orgNumber.

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.

Troubleshooting

SymptomCheckAction
error row with INVALID_ORG_NUMBERchecksumValidThe number has a typo. Check the 9 digits.
not_found for a real companyregistryStatusremoved_from_open_data means Brreg removed it. Otherwise check the number.
A deleted companyisDeleted, deletedDateThis is correct register data, not an error.
Address or contacts are nullpersonalDataMinimizedSole proprietorships are minimized on purpose. Contacts need includeContactDetails.
Search returns NO_RESULTSNACE codes, employee valuesUse SN2025 codes and allowed employee values.
Fewer subentity rows than subentitiesTotalstatusReason, maxSubentitiesPerEntityRaise the limit (up to 100).
CAPPEDRun optionsRaise Maximum cost per run or send fewer numbers.
INVALID_INPUTRUN_SUMMARY.messageCommon causes: no valid number in lookup mode, a date in the future, updates mode without updatesSince or updatesFromId.
RATE_LIMITED or SOURCE_UNAVAILABLE rowsRUN_SUMMARY.httpRun the failed numbers again later.

FAQ

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.

Why are board members and owners not included?

They are personal data. This Actor gives company data only.

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.

Can I use the data commercially?

Yes. Enhetsregisteret data is published under the Norwegian Licence for Open Government Data (NLOD 2.0), which allows commercial reuse with attribution. Personal data is outside that licence; contact data must be used within GDPR and Norwegian marketing law.

Data source and licence

Data: Enhetsregisteret of the Brønnøysund Register Centre (Brønnøysundregistrene), through its open API, under the Norwegian Licence for Open Government Data (NLOD 2.0). When you reuse the data, name the source. This Actor is independent and not endorsed by the Brønnøysund Register Centre.

Support

Use the Issues tab of this Actor. Add the run ID, the mode and the statusReason or errorCode you saw. Do not send API tokens or private data.