Brønnøysund Register Centre logo

Leads & companies · Live on Apify

Brreg company search and Norway register updates

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.

About $1.80 for 1,000 companies$0.0018 per company + $0.001 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

rowTypeentity
orgNumber923609016
registryStatusactive

How to use it: 3 steps

  1. Make a free Apify accountApify 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 StartNo 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 resultsWhen 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.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

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.

Who uses it

KYB teams

Check that a Norwegian partner is active and not bankrupt.

Sales teams

Build lists by municipality, industry or staff size.

Data teams

Watch new, changed and deleted companies every day.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.001Charged 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.0005One valid organisation number that is not in the open Brreg register, saved as a not_found row.
Update event$0.0005One register change event (new, changed, deleted or removed unit) saved to the Dataset in updates mode.

Examples

  • 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. That is enough for about 2,700 companies.

Prices checked on 24 October 2026. See the current price on Apify.

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.

Details

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
TaskMode 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
Tips for better results
  • 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 and good to know
  • 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.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one 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. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
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)
cURL
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"]}'
LangChain · langchain-apify
# 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)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (40)
FieldTypeMeaning
rowTypestringRow type: entity (hovedenhet / legal unit), subentity (underenhet / establishment) or update (one event of the register change feed).
statusstringRow result: complete, partial, not_found or error. See statusReason and errorCode.
statusReasonstringPlain-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.
errorCodestringMachine code for error rows, e.g. INVALID_ORG_NUMBER, RATE_LIMITED, SOURCE_UNAVAILABLE; null otherwise.
inputstringThe value as you entered it (lookup mode); null for search and update rows.
orgNumberstringNorwegian organisation number (organisasjonsnummer), 9 digits. Null only when the input was not a 9-digit number.
checksumValidbooleanWhether the input passes the MOD11 check digit (lookup mode); null for search and update rows.
registryStatusstringSummary status: active, bankrupt, under_liquidation, under_forced_liquidation, closed (subentity closed), deleted (slettet) or removed_from_open_data (HTTP 410 / Fjernet).
namestringRegistered name (navn).
orgFormstringOrganisation form code, e.g. AS, ASA, ENK, NUF, BEDR.
orgFormTextstringOrganisation form description in Norwegian, e.g. Aksjeselskap.
isSoleProprietorshipbooleanTrue for ENK (enkeltpersonforetak) and for subentities of an ENK; their street address and contacts are withheld.
personalDataMinimizedbooleanTrue when street address and contact fields were withheld to protect a natural person (sole proprietorship).
parentOrgNumberstringParent unit (overordnetEnhet): the legal unit of a subentity, or the superior body of a public entity.
industryCodestringMain NACE industry code (næringskode 1, SN2025), e.g. 62.100.
industryTextstringMain industry description.
industryCode2stringSecond NACE industry code.
industryText2stringSecond industry description.
industryCode3stringThird NACE industry code.
industryText3stringThird industry description.
sectorCodestringInstitutional sector code (entities only).
sectorTextstringInstitutional sector description.
employeesintegerNumber of employees registered in the Aa-register; null when none are registered (not zero).
hasRegisteredEmployeesbooleanWhether employees are registered.
employeesRegisteredDatestringDate the employee count was last registered (YYYY-MM-DD).
addressstringStreet address lines joined with a comma (forretningsadresse, or beliggenhetsadresse for subentities). Null for sole proprietorships.
postalCodestringPostal code of the business address.
citystringPost town of the business address.
municipalitystringMunicipality (kommune) name.
municipalityCodestringMunicipality number, 4 digits, e.g. 0301 (Oslo).
countryCodestringCountry code of the business address, e.g. NO.
postalAddressstringPostal address lines (postadresse). Null for sole proprietorships.
postalPostalCodestringPostal code of the postal address.
postalCitystringPost town of the postal address.
websitestringWebsite (hjemmeside) as registered.
emailstringRegistered e-mail; only with includeContactDetails and never for sole proprietorships.
phonestringRegistered phone; only with includeContactDetails and never for sole proprietorships.
mobilestringRegistered mobile; only with includeContactDetails and never for sole proprietorships.
foundedDatestringFounding date (stiftelsesdato), YYYY-MM-DD.
registeredDatestringDate registered in Enhetsregisteret, YYYY-MM-DD.
Input settings (23)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Mode requiredmodestring"lookup"
Organisation numbersorgNumbersarray["974760673", "923609016", "994667084"]
Include subentitiesincludeSubentitiesbooleanfalse
Max subentities per entitymaxSubentitiesPerEntityinteger20
Search targetsearchTargetstring"entities"
Name containsnamestring
Municipality numbersmunicipalityNumbersarray
NACE industry codesnaceCodesarray
Organisation formsorgFormsarray
Bankruptbankruptstring"any"
Under liquidationunderLiquidationstring"any"
VAT registeredvatRegisteredstring"any"
Min employeesminEmployeesinteger
Max employeesmaxEmployeesinteger
Registered fromregisteredFromstring
Registered toregisteredTostring
Max search resultsmaxResultsinteger50
Updates ofupdatesTargetstring"entities"
Changes sinceupdatesSincestring
Continue from update IDupdatesFromIdinteger
Max update eventsmaxUpdatesinteger100
Include current record detailsincludeRecordDetailsbooleantrue
Include e-mail and phoneincludeContactDetailsbooleanfalse

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure