# Nordic Company Registry (Norway, Finland) (`fuze/nordic-company-registry`) Actor

Official company-registry data from Norway (Brønnøysund) and Finland (PRH) in one normalised English schema. Actively maintained. · More no-code data tools → datatools-hub.vercel.app

- **URL**: https://apify.com/fuze/nordic-company-registry.md
- **Developed by:** [Fredrik Hansson](https://apify.com/fuze) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.60 / 1,000 company results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Nordic Company Registry (Norway, Finland)

**Official company-registry data from Norway and Finland in one normalised, English schema.**

Look up companies by organisation number or name, or pull every company registered in a date range — straight from the official government registers, no scraping:

| Country | Register | API | Auth |
|---|---|---|---|
| 🇳🇴 Norway | Brønnøysund — Enhetsregisteret | `data.brreg.no` | none (open) |
| 🇫🇮 Finland | PRH / YTJ — Business Information System | `avoindata.prh.fi` | none (open) |

Every company comes out in the same shape, with industry (NACE) descriptions translated to English, so the data is immediately usable across borders — by humans and by AI agents.

![Nordic Company Registry (Norway, Finland) — input and sample output](https://datatools-hub.vercel.app/actor-shots/nordic-company-registry.png)

### Quick start

1. **Fill in the input** — set the fields in the input tab (prefilled with a working example).
2. **Click Start** — the Actor runs and writes one record per item to the dataset.
3. **Get your data** — export to **JSON, CSV or Excel**, or pull it via the API.

***

### Use cases

- **KYC / onboarding** — verify a counterparty's legal name, organisation number, company form, status (active / bankrupt / in liquidation), and registered address against the official source.
- **Sales prospecting** — pull newly registered companies in a country and date range, filter by industry, and build a fresh lead list.
- **Enrichment for AI agents** — give an agent a clean, English, flat company profile to reason over. Callable as a tool via the Apify MCP server (see below).

***

### Modes

#### `lookup`

Input a list of organisation numbers (NO org.nr / FI Y-tunnus) or company names → one profile per query. Org numbers are routed to the right country automatically; names are searched in every selected country.

```json
{
  "mode": "lookup",
  "queries": ["923609016", "0112038-9", "Nokia"],
  "countries": ["NO", "FI"],
  "translateIndustry": true
}
```

#### `newRegistrations`

Input countries and a date range → every company registered in that window.

```json
{
  "mode": "newRegistrations",
  "countries": ["NO", "FI"],
  "registeredFrom": "2026-09-01",
  "registeredTo": "2026-09-30",
  "maxResults": 500
}
```

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | `string` | `lookup` | `lookup` or `newRegistrations`. |
| `queries` | `string[]` | — | lookup mode: org numbers or company names. |
| `countries` | `string[]` | `["NO","FI"]` | `NO` (Brønnøysund), `FI` (PRH). |
| `registeredFrom` | `string` (ISO date) | 7 days ago | newRegistrations: start of range. |
| `registeredTo` | `string` (ISO date) | today | newRegistrations: end of range. |
| `maxResults` | `integer` | `100` | Max profiles delivered (one charge each). |
| `translateIndustry` | `boolean` | `true` | Translate industry descriptions to English with OpenAI (cached per NACE code). Finnish records already include English. |

***

### Output

One dataset item per company:

| Field | Type | Description |
|---|---|---|
| `country` | `string` | `NO` or `FI`. |
| `orgNumber` | `string` | Organisation number (NO) / Business ID / Y-tunnus (FI). |
| `name` | `string` | Registered company name. |
| `companyType` | `string \| null` | Company/legal form (e.g. "Allmennaksjeselskap", "Public limited company"). |
| `registrationDate` | `string \| null` | ISO date. |
| `status` | `string \| null` | Active / Bankrupt / In liquidation / Deregistered, etc. |
| `address` | `string \| null` | Business address (single line). |
| `municipality` | `string \| null` | Municipality name. |
| `industryCode` | `string \| null` | NACE-based industry code. |
| `industryDescriptionOriginal` | `string \| null` | Industry description in the registry's language. |
| `industryDescriptionEn` | `string \| null` | English industry description. |
| `employeesRange` | `string \| null` | Employee count (Norway only — exact count; PRH/Finland does not publish headcount). |
| `source` | `string` | `brreg` or `prh`. |
| `sourceUrl` | `string \| null` | Canonical public URL for the entity. |

#### Example output items

```json
{
  "country": "NO",
  "orgNumber": "923609016",
  "name": "EQUINOR ASA",
  "companyType": "Allmennaksjeselskap",
  "registrationDate": "1995-03-12",
  "status": "Active",
  "address": "Forusbeen 50, 4035 STAVANGER",
  "municipality": "STAVANGER",
  "industryCode": "06.100",
  "industryDescriptionOriginal": "Utvinning av råolje",
  "industryDescriptionEn": "Extraction of crude petroleum",
  "employeesRange": "21272",
  "source": "brreg",
  "sourceUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016"
}
```

```json
{
  "country": "FI",
  "orgNumber": "0112038-9",
  "name": "Nokia Oyj",
  "companyType": "Public limited company",
  "registrationDate": "1896-12-19",
  "status": "Active",
  "address": "Karakaari 7, 02610 ESPOO",
  "municipality": "ESPOO",
  "industryCode": "70100",
  "industryDescriptionOriginal": "Pääkonttorien toiminta",
  "industryDescriptionEn": "Activities of head offices",
  "employeesRange": null,
  "source": "prh",
  "sourceUrl": "https://tietopalvelu.ytj.fi/en/yritys/01120389"
}
```

***

### Privacy

This Actor returns **only company-level data that the registries themselves publish about the entity**. It never requests or returns personal identifiers of individuals (e.g. a sole trader's or board member's national ID number) — the authenticated role/person endpoints that expose such data are deliberately not used. Business contact details that the open datasets exclude (e.g. private traders' personal data) are likewise not present.

***

### Pricing

Pay-per-event: one **`company-result`** event per delivered company profile.

***

### Environment variables

| Variable | Required | Purpose |
|---|---|---|
| `OPENAI_API_KEY` | For NO industry translation | Translates Norwegian industry descriptions to English with OpenAI (cached). Finnish records already carry English, so Finland needs no key. If unset, `industryDescriptionEn` is null for Norwegian records. |
| `OPENAI_MODEL` | No | Override the model (default `gpt-4o-mini`). |

Neither registry API needs a key.

***

### Use it as an AI-agent tool (Apify MCP)

Once published, this Actor is callable through the **Apify MCP server** (`https://mcp.apify.com`). An AI agent can be told *"verify this Norwegian org number and tell me the company's status and industry"* or *"list IT companies registered in Finland last week"* and call this Actor directly — the flat, English output is designed for LLM consumption.

***

### Coming next: Sweden & Denmark

- **🇸🇪 Sweden** — **already built** against Bolagsverket's free **"API för värdefulla datamängder"** (Valuable Datasets API, open under the EU Open Data Directive), and activates as soon as credentials are supplied. The API is free but access is granted via an application process (not instant self-service), and it requires OAuth2 client credentials (`BOLAGSVERKET_CLIENT_ID` / `BOLAGSVERKET_CLIENT_SECRET`). Swedish support is **lookup by organisation number only** — the API has no name search and no registration-date listing, so the `newRegistrations` mode does not cover Sweden.
- **🇩🇰 Denmark** — planned via the official CVR (Det Centrale Virksomhedsregister) open data.

***

### Attribution & licensing

This Actor redistributes official open government data. When you reuse the output, preserve attribution:

- **Norway:** *Contains data under the Norwegian Licence for Open Government Data (NLOD) 2.0, made available by the Brønnøysund Register Centre (Enhetsregisteret).*
- **Finland:** *Contains data from the Finnish Patent and Registration Office (PRH) via the YTJ/BIS Open Data API (avoindata.prh.fi), licensed under CC BY 4.0.*

The data must not be presented as official or endorsed by the registries.

***

### Run it locally

```bash
npm install
export OPENAI_API_KEY=...   # optional — only for Norwegian industry translation

## Put your input in storage/key_value_stores/default/INPUT.json, then:
apify run
## or: npm run build && node dist/main.js
```

### License

ISC.

### Related actors

- [Nordic Public Tenders (Norway, Finland, Sweden)](https://apify.com/fuze/nordic-public-tenders) — Collects public procurement notices from Norway (Doffin), Finland (Hilma) and Sweden
- [Nordic Tender Matcher (AI)](https://apify.com/fuze/nordic-tender-matcher) — AI agent that scores Norwegian, Finnish and Swedish public tenders against your company
- [AI Company Enrichment](https://apify.com/fuze/ai-company-enrichment) — Turn a list of domains into structured company profiles — firmographics, contacts

# Actor input Schema

## `mode` (type: `string`):

lookup: resolve a list of org numbers / names. newRegistrations: list companies registered in a date range.

## `queries` (type: `array`):

Org numbers (NO org.nr / FI Y-tunnus) or company names. One profile is returned per query.

## `countries` (type: `array`):

Which registries to use.

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

ISO date (YYYY-MM-DD). Defaults to 7 days ago.

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

ISO date (YYYY-MM-DD). Defaults to today.

## `maxResults` (type: `integer`):

Maximum number of company profiles delivered. One pay-per-event charge per delivered profile.

## `translateIndustry` (type: `boolean`):

Translate the industry (NACE) description to English with OpenAI, cached per code (requires OPENAI_API_KEY). Finnish records already include English directly.

## Actor input object example

```json
{
  "mode": "lookup",
  "queries": [
    "923609016"
  ],
  "countries": [
    "NO",
    "FI"
  ],
  "maxResults": 100,
  "translateIndustry": true
}
```

# Actor output Schema

## `companies` (type: `string`):

All delivered company profiles in the default dataset.

# 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 = {
    "mode": "lookup",
    "queries": [
        "923609016"
    ],
    "countries": [
        "NO",
        "FI"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fuze/nordic-company-registry").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 = {
    "mode": "lookup",
    "queries": ["923609016"],
    "countries": [
        "NO",
        "FI",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("fuze/nordic-company-registry").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 '{
  "mode": "lookup",
  "queries": [
    "923609016"
  ],
  "countries": [
    "NO",
    "FI"
  ]
}' |
apify call fuze/nordic-company-registry --silent --output-dataset

```

## MCP server setup

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

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/aPoX0hlK7YBurmXqb/builds/9Rgxhvx6eHXcXYbig/openapi.json
