# Norway & Finland Company Data – Brreg & PRH Registry Lookup (`laki-as/nordic-company-data`) Actor

Get organisation-level company data from the official Norwegian (Brreg) and Finnish (PRH) registries for $0.003 per company (500 companies cost about $1.50). Search by name, industry code, municipality or registration date, or look up org numbers. No personal data.

- **URL**: https://apify.com/laki-as/nordic-company-data.md
- **Developed by:** [LAKI AS](https://apify.com/laki-as) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 company rows

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

## Norway & Finland Company Data – Brreg & PRH Registry Lookup

Look up Norwegian and Finnish companies by organisation number, or search one country by name, industry code, municipality or registration date. The data comes from the official open registries, the Norwegian Brønnøysund Register Centre (Enhetsregisteret) and the Finnish Patent and Registration Office (PRH, YTJ). You pay $0.003 per company row, so 500 companies cost about $1.50. Invalid or unknown numbers are reported and not charged.

This Actor delivers **organisation-level data only**. It never returns personal names, birth dates, e-mail addresses or phone numbers, it never reads the registries' role (board/owner) data, and it leaves out sole proprietorships.

### Use cases

- **Enrich a CRM** with legal name, legal form, industry, address and status from org numbers.
- **Build lead lists** of companies in an industry and municipality, for example all retailers registered in Oslo since 2024.
- **Check status** of suppliers or customers: active, dissolving, bankrupt or deregistered.
- **Market research** on new registrations per industry and region.
- Optionally **inspect company websites** for WordPress version, theme and plugins in the same run.

### Output example

```json
{
  "country": "NO",
  "orgNumber": "923609016",
  "name": "EQUINOR ASA",
  "orgForm": "ASA",
  "industryCode": "06.100",
  "industryText": "Utvinning av råolje",
  "municipality": "STAVANGER",
  "region": null,
  "postalAddress": { "street": "Forusbeen 50", "postalCode": "4035", "city": "STAVANGER", "country": "NO" },
  "registeredDate": "1995-03-12",
  "status": "active",
  "website": "www.equinor.com",
  "employees": 21231,
  "source": "Brønnøysundregistrene (Enhetsregisteret)",
  "license": "NLOD 2.0, Brønnøysundregistrene",
  "fetchedAt": "2026-10-18T17:30:00Z",
  "error": null
}
```

Finnish rows have the same fields. `orgForm` uses the PRH abbreviations (for example `OY`, `OYJ`), `industryCode` is TOL 2008, and `employees` is null because the source doesn't provide it. An unknown or invalid number gives a row with `error` set (`INVALID_CHECKSUM`, `NOT_FOUND`, `DEREGISTERED`, `SOURCE_UNAVAILABLE`, `RATE_LIMITED`) and is not charged.

### Configuration

| Field | Description |
|---|---|
| `orgNumbers` | Norwegian org numbers or Finnish Business IDs. Prefix with `NO:` or `FI:` to mix countries. Check digits are verified before any lookup. |
| `country` | `NO` or `FI`. Used by the search fields and for numbers without a prefix. |
| `query` | Company name contains. |
| `industryCode` | Industry code prefix, for example `47` or `47.11` (NO) or `4711` (FI). |
| `municipality` | Norway: 4-digit municipality number (`0301` = Oslo). Finland: city name. |
| `registeredAfter` | Registered on or after this date. |
| `maxItems` | Maximum companies from a search (default 100, maximum 10,000). |
| `inspectWebsites` | Also inspect each company's website ($0.01 per inspected website, public pages only). |

### Data sources and licences

- Norway: Enhetsregisteret, Brønnøysundregistrene, under the Norwegian Licence for Open Government Data (NLOD) 2.0. A search is capped at 10,000 results by the source.
- Finland: YTJ open data, Finnish Patent and Registration Office (PRH), under Creative Commons Attribution 4.0. Name the source when you publish the data.

Every row carries `source` and `license`.

### Limitations

- Organisation-level data only. Contact fields (e-mail, phone, mobile), c/o address lines, earlier names and roles are left out on purpose.
- Sole proprietorships are left out. The number left out is shown in the run's status message.
- Sweden and Denmark are not covered yet.
- Free plan: up to 25 companies and 10 website inspections per run. The developer set this limit, not Apify.

### FAQ

**Why are some companies missing from a search?** Sole proprietorships are left out, and Brreg returns at most 10,000 results per search. Narrow the search with industry code or municipality.

**Are failed lookups charged?** No. Only rows with `error: null` are charged.

**How fresh is the data?** Every run reads the registries live, and `fetchedAt` shows when.

**How do I report a problem?** Use the Issues tab on this Actor's page.

# Actor input Schema

## `orgNumbers` (type: `array`):

Norwegian org numbers (9 digits) or Finnish Business IDs (1234567-8). Prefix with NO: or FI: to mix countries in one run, for example NO:923609016 and FI:0112038-9. Without a prefix, Country is used. Maximum 10,000.

## `country` (type: `string`):

Country for the search fields and for numbers without a prefix.

## `query` (type: `string`):

Search by company name in the selected country.

## `industryCode` (type: `string`):

Industry code prefix, for example 47 or 47.11 (Norway SN2025) or 4711 (Finland TOL 2008). Dots are optional.

## `municipality` (type: `string`):

Norway: 4-digit municipality number, for example 0301 for Oslo. Finland: municipality or city name, for example Helsinki.

## `registeredAfter` (type: `string`):

Only companies registered on or after this date (YYYY-MM-DD).

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

Maximum number of companies to return from a search. Free plan: 25.

## `inspectWebsites` (type: `boolean`):

Also check each company website for WordPress version, theme and plugins (public pages only, $0.01 per inspected website).

## Actor input object example

```json
{
  "orgNumbers": [
    "NO:923609016",
    "FI:0112038-9"
  ],
  "country": "NO",
  "maxItems": 100,
  "inspectWebsites": false
}
```

# Actor output Schema

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

One row per company (organisation-level data only), plus error rows for invalid or unknown numbers.

## `summary` (type: `string`):

Counts per country, left-out sole proprietorships and errors.

# 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 = {
    "orgNumbers": [
        "NO:923609016",
        "FI:0112038-9"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("laki-as/nordic-company-data").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 = { "orgNumbers": [
        "NO:923609016",
        "FI:0112038-9",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("laki-as/nordic-company-data").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 '{
  "orgNumbers": [
    "NO:923609016",
    "FI:0112038-9"
  ]
}' |
apify call laki-as/nordic-company-data --silent --output-dataset

```

## MCP server setup

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

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/HvIprVzDT5lEWbHYL/builds/HYnC9RDsGuSDexjdo/openapi.json
