# Norway Company Registry Lookup (`thesjostrandproject/no-company-lookup`) Actor

Look up Norwegian companies by name, organisation number, municipality, industry code or organisation form through the public open company-register API. Clean, typed records for legal entities only: no sole traders, no people, no contact details. No login, no scraping. Pay per record.

- **URL**: https://apify.com/thesjostrandproject/no-company-lookup.md
- **Developed by:** [The Sjöstrand Project](https://apify.com/thesjostrandproject) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 company records

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 Registry Lookup

### What this Actor returns

Look up Norwegian companies by name, organisation number, municipality, industry code or organisation form, and get one clean, typed record per company. Every record has the same 14 fields, and a value the register does not have is `null`, never a missing key.

- `org_number`, `org_title`, `org_form_code`: the organisation number, the registered name and the organisation form (`AS`, `ASA`, `FLI` and so on)
- `registration_date`, `source_updated_at`: when the entity was registered, and the most recent registration date stamped on the record
- `industry_code`, `employee_count`: the main industry code (NACE) and the number of employees the register holds
- `vat_registered`, `bankrupt`, `under_liquidation`: three status flags
- `municipality_code`, `postcode`, `city`, `website`: the business address area and the website the entity has given

The Actor reads Norway's public open company-register API and nothing else. It does not scrape any website, and there is no login.

### Who it helps

- **Analysts and sales teams** who want a tidy list of companies in one municipality, industry or organisation form, ready for a spreadsheet or a database.
- **Developers** who want to check or enrich an organisation number inside their own workflow, through the Apify API, without writing their own client for the register.

### Quick start

1. Open the Input tab and leave the defaults as they are. They look up one company by its organisation number, so a first run returns a single record.
2. Press Start. Try it on one record first; it costs a fraction of a cent.
3. Open the Output tab, check the record, then widen the search with a name, a municipality, an industry code or an organisation form.

### Input

| Field | What it does | Default |
|---|---|---|
| Organisation number | One or more 9-digit organisation numbers, separated by commas. Leave empty to search by name or filters. | `921707134` |
| Company name | Words from the company name, up to 180 characters. | empty |
| Municipality number | The 4-digit municipality number of the business address, like `0301`. Separate several with commas. | empty |
| Industry code (NACE) | The main industry code, like `62.010`, or `62` for a whole group. Separate several with commas. | empty |
| Organisation form | The form code, like `AS` or `ASA`. Separate several with commas. Sole traders (`ENK`) and persons (`PERS`) cannot be asked for. | empty |
| Maximum records | How many records to return at most, from 1 to 1000. | 10 |

Filters combine: a record has to match all of the ones you fill in.

### Output

One record per company. The record below is what the default input returned on 12 October 2026, unchanged.

```json
{
  "org_number": "921707134",
  "org_title": "AGDER FYLKESKOMMUNE",
  "org_form_code": "FYLK",
  "registration_date": "2018-11-12",
  "industry_code": "84.110",
  "employee_count": 3878,
  "vat_registered": true,
  "bankrupt": false,
  "under_liquidation": false,
  "municipality_code": "4204",
  "postcode": "4612",
  "city": "KRISTIANSAND S",
  "website": null,
  "source_updated_at": "2026-09-14"
}
```

### What it costs

You pay for one event, **Company record**, at $0.003 per record returned. Apify also adds its standard run-start event, $0.00005 per GB of memory, so a run of up to 1 GB adds at most $0.00005; it is the platform's own event, not ours. Records the Actor leaves out (see below) are never charged.

The default run returns one record, so it costs $0.00305. A search that returns 200 companies costs $0.60 plus the same start event. If your Apify plan includes monthly credit, a small run draws on that credit.

If the register cannot be reached or keeps answering with errors, the run stops with a clear status message, and only the records already returned are charged.

### Limits and honest notes

- **Legal entities only.** Sole proprietorships (`ENK`) and persons (`PERS`) are left out, because they are registered under a natural person. An entity with no organisation form is left out too, because nothing shows it is not one of those. A record without a name, an organisation number, a form or a registration date is left out as well.
- **No people, roles or contact details.** The Actor never asks the register for roles or role holders, and it copies only the 14 fields above. If a website field holds an email address or a phone number, the whole record is left out.
- **Names can still be personal.** One limit no filter can fix: a company's registered name can itself contain a person's name.
- **At most 10,000 results per search.** The register caps one search at 10,000 entities, so very broad searches should be narrowed with a filter. The run's final message does not say when a search reached it, so if a broad search returns fewer records than you expect, narrow the filters. This Actor returns at most 1000 records per run.
- **Business address.** The municipality, postcode and city are those of the business address, not the postal address.
- **Dates.** The register has no field for the date of the last change. `source_updated_at` is the most recent registration date on the record in any of the registers the entity is listed in (the Central Coordinating Register, and the Business, Foundation or Voluntary registers where it is in them), so it is a lower bound on how recently the record changed.
- **Pace.** The register's documentation names no request limit. The Actor sends at most 5 requests per second and when the source is busy it waits as asked, up to about a minute per request, and then stops with a clear message. A large search can take a little while.

### Questions

**Why did my run return fewer records than I asked for?**
Either fewer companies matched, or some matches were left out because they are sole traders or persons, or lacked a core field. You were not charged for those.

**What does the run say when something is wrong?**
It says what it found and what to try. "Give a search" means the input was empty: add a name, a number or one filter. "Is not valid" names the entry to fix, like a municipality number that is not 4 digits. "Could not be reached" or "kept answering with errors" means the register is busy; wait a few minutes and run again. A rejected search usually means a code is mistyped.

**Can I search for a company that has gone bankrupt?**
Yes. Look at `bankrupt` and `under_liquidation` on each record.

**Does it return sole traders?**
No. They are left out, and asking for the `ENK` form is refused with a message.

**Does it return the people behind a company?**
No. Roles and role holders are not requested or output.

**Can I run it on a schedule?**
Yes, with the Apify scheduler or the API. Each run is independent and charged per record returned.

### Data source and AI note

Data source: the open data of the Norwegian Central Coordinating Register for Legal Entities, reused under the Norwegian Licence for Open Government Data (NLOD) 2.0 (https://data.norge.no/nlod/en/2.0). Contains data under the Norwegian licence for Open Government data (NLOD) distributed by Brønnøysundregistrene. Each record's source_updated_at is the most recent registration date on the record.

This tool is not affiliated with, endorsed by or sponsored by Brønnøysundregistrene or the Norwegian authorities.

This tool was built with the help of AI coding assistants.

### Help

Questions, a record that looks wrong, or an idea for a field: please open an issue on the Issues tab. Thank you for the report; every one is read.

# Actor input Schema

## `orgNumber` (type: `string`):

One or more 9-digit organisation numbers, separated by commas; spaces inside a number are fine. The default, 921707134, is an example organisation number that returns one record; replace it with your own. Leave empty to search by the name and filters below.

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

Words from the company name, up to 180 characters. Leave empty to search by number or filters alone.

## `municipalityCode` (type: `string`):

Only companies whose business address is in this municipality: the 4-digit municipality number, like 0301 for Oslo. Several numbers can be separated by commas. Leave empty for anywhere.

## `naceCode` (type: `string`):

Only companies whose main industry has this code, like 62.010 or 62 for a whole group. Several codes can be separated by commas. Leave empty for any industry.

## `orgFormCode` (type: `string`):

Only companies with this organisation form code, like AS for a private limited company or ASA for a public one. Several codes can be separated by commas. Sole traders (ENK) and persons (PERS) are never returned. Leave empty for any form.

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

How many company records to return at most (1 to 1000). You pay only for records returned, so a first run stays cheap.

## Actor input object example

```json
{
  "orgNumber": "974760673,912660680",
  "name": "Nordic Software",
  "municipalityCode": "0301,4601",
  "naceCode": "62.010,62.200",
  "orgFormCode": "AS,ASA",
  "maxItems": 10
}
```

# Actor output Schema

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

The company records of this run, one per company, with the 14 fields described in the dataset schema (number, name, form, registration date, industry, employees, status flags, business address, website).

# 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 = {
    "orgNumber": "921707134",
    "name": "",
    "municipalityCode": "",
    "naceCode": "",
    "orgFormCode": "",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("thesjostrandproject/no-company-lookup").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 = {
    "orgNumber": "921707134",
    "name": "",
    "municipalityCode": "",
    "naceCode": "",
    "orgFormCode": "",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("thesjostrandproject/no-company-lookup").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 '{
  "orgNumber": "921707134",
  "name": "",
  "municipalityCode": "",
  "naceCode": "",
  "orgFormCode": "",
  "maxItems": 10
}' |
apify call thesjostrandproject/no-company-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thesjostrandproject/no-company-lookup"
        }
    }
}
```

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/ccSma3SAFXpEHCIc1/builds/Vg4b6yoS7sA1CrLNx/openapi.json
