# Nordic Company Registry API - SE, NO, FI (`teddythebuilder/nordic-company-registry`) Actor

Search and look up companies in Sweden, Norway and Finland from the official business registers. Get org number, name, legal form, status, NACE/SNI industry, address, employees and new registrations in one schema. No login, no sole traders. Export JSON/CSV/Excel or call via API.

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

## Pricing

from $2.20 / 1,000 companies

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

### What does Nordic Company Registry API do?

**Nordic Company Registry API searches and looks up companies in Sweden, Norway and Finland, straight from the three official business registers, and returns them in one clean, unified JSON schema.** You get org number, company name, legal form, status, NACE/SNI industry code, registration date, address, employees (Norway) and VAT status for every limited company, partnership, cooperative or association.

Use it to build B2B lead lists of newly registered companies, enrich a CRM with official data from an org number, size a market by industry code, or let an AI agent check a Nordic company in seconds. It works like an allabolag, proff or Brønnøysund scraper, but it reads the registries' own open data, so there is no login, no blocking and no scraping risk.

| Country | Official source | Coverage | Licence |
|---|---|---|---|
| Sweden | SCB / Bolagsverket high-value dataset (weekly register file) | ~1.2M legal entities | CC BY 4.0 |
| Norway | Brønnøysundregistrene, Enhetsregisteret API (live) | all registered entities | NLOD 2.0 |
| Finland | PRH / YTJ open data API v3 (live) | all registered companies | CC BY 4.0 |

### Why use Nordic Company Registry API?

- **One schema for three countries.** `orgNumber`, `legalFormCategory` (AB, AS and Oy all map to `limited_company`), `status`, `registrationDate`, `industryCode` (NACE format such as `62.01`) and `industryDivision` (English) are aligned across SE, NO and FI. You don't need three scrapers and three data models.
- **Official source, stable output.** Data comes from the registries' open-data services, not from scraped websites. Fields don't break when a site redesigns.
- **Swedish industry filtering.** SNI codes come from SCB's register, so you can pull every Swedish limited company in SNI 43 (specialised construction) registered since a given date. Most Swedish scrapers can't do this.
- **New-company lead feed.** Turn on monitor mode and schedule the Actor. Each run outputs only companies you haven't received before.
- **Bulk lookup.** Paste any mix of Swedish, Norwegian and Finnish org numbers. The country is detected from the number format.
- **Compliance built in.** Sole traders (enskild firma, ENK, toiminimi) and estates are never output, because their registry entry is a natural person. Swedish companies with a direct-marketing block (reklamspärr) are excluded by default. No board members or other personal data are requested.
- **Fast and cheap.** A default run finishes in seconds. Runs at 256 MB memory, no proxies and no browser.

### What data can you extract?

| Field | Example | Description |
|---|---|---|
| `country` | `SE` | ISO country code of the register |
| `orgNumber` | `556012-5790` | Organisation number (SE org.nr, NO org.nr, FI Y-tunnus) |
| `name` | `AKTIEBOLAGET VOLVO` | Registered company name |
| `legalForm` / `legalFormName` | `49` / `Aktiebolag` | National legal-form code and name |
| `legalFormCategory` | `limited_company` | Normalised category, comparable across countries |
| `status` | `active` | `active`, `inactive` or `ceased` (bankrupt, liquidated, deregistered) |
| `registrationDate` | `2026-09-28` | Date the company was registered |
| `industryCode` | `62.01` | Primary NACE / SNI / TOL code |
| `industryDivision` | `Computer programming, consultancy` | English name of the NACE division |
| `secondaryIndustryCodes` | `["06.20"]` | Additional industry codes |
| `employees` | `21272` | Number of employees (Norway) |
| `street`, `postalCode`, `city`, `municipality` | `Forusbeen 50`, `4035`, `Stavanger` | Business address |
| `website` | `www.equinor.com` | Website when registered (NO, FI) |
| `vatRegistered` | `true` | VAT register status (NO) |
| `marketingBlocked` | `false` | Swedish direct-marketing block (reklamspärr) |
| `sourceUrl`, `source`, `licence` | | Provenance of each record |
| `isNew`, `retrievedAt` | | Monitor-mode flag and retrieval timestamp |

### How to use Nordic Company Registry API (step by step)

1. Click **Try for free** (or **Start**) on this page. You need a free Apify account.
2. Pick a **Mode**. Use *Search* to find companies by filters, or *Lookup* to enrich a list of org numbers.
3. In Search mode, choose **Countries**, then add filters: **industry codes** (for example `62` for IT, `41` for construction), **registered within last N days**, **legal form** or **cities**.
4. Set **Max results per country**. Start with 20 to check the output.
5. Click **Start**. The run takes seconds to a minute.
6. Download the results as JSON, CSV, Excel or HTML, or read them through the API. To get a daily or weekly feed, turn on **Monitor mode** and add a **Schedule**.

### Input example

New IT companies in all three countries during the last 30 days, as a monitored lead feed:

```json
{
  "mode": "search",
  "countries": ["SE", "NO", "FI"],
  "industryCodes": ["62"],
  "registeredWithinDays": 30,
  "legalFormCategories": ["limited_company"],
  "onlyNew": true,
  "monitorId": "nordic-it-new",
  "maxResultsPerCountry": 500
}
```

Enrich a list of org numbers (mixed countries):

```json
{ "mode": "lookup", "orgNumbers": ["556012-5790", "923609016", "0112038-9"] }
```

Construction companies in Gothenburg and Malmö:

```json
{ "countries": ["SE"], "industryCodes": ["41", "43"], "cities": ["Göteborg", "Malmö"], "maxResultsPerCountry": 1000 }
```

### Output example

```json
[
  {
    "country": "SE",
    "orgNumber": "556012-5790",
    "name": "AKTIEBOLAGET VOLVO",
    "legalForm": "49",
    "legalFormName": "Aktiebolag",
    "legalFormCategory": "limited_company",
    "status": "active",
    "registrationDate": "1972-01-01",
    "industryCode": "70.10",
    "industryCodeRaw": "70100",
    "industryDivision": "Head offices; management consultancy",
    "secondaryIndustryCodes": [],
    "employees": null,
    "postalCode": "40508",
    "city": "Göteborg",
    "marketingBlocked": false,
    "source": "SCB/Bolagsverket high-value dataset (weekly bulk file)",
    "licence": "CC BY 4.0",
    "isNew": false
  },
  {
    "country": "NO",
    "orgNumber": "923609016",
    "name": "EQUINOR ASA",
    "legalForm": "ASA",
    "legalFormName": "Allmennaksjeselskap",
    "legalFormCategory": "public_limited_company",
    "status": "active",
    "registrationDate": "1995-03-12",
    "industryCode": "06.10",
    "industryDescription": "Utvinning av råolje",
    "industryDivision": "Extraction of crude petroleum and natural gas",
    "secondaryIndustryCodes": ["06.20", "19.20"],
    "employees": 21272,
    "street": "Forusbeen 50",
    "postalCode": "4035",
    "city": "Stavanger",
    "municipality": "Stavanger",
    "website": "www.equinor.com",
    "vatRegistered": true,
    "source": "Brønnøysundregistrene - Enhetsregisteret",
    "licence": "NLOD 2.0",
    "isNew": false
  }
]
```

Every run's dataset can be exported to CSV, Excel, JSON, XML or HTML from the Storage tab, or fetched through the dataset API.

### How much does it cost?

The Actor uses pay-per-event pricing. You pay only for companies delivered, plus a small fee per run.

| Event | Price | When |
|---|---|---|
| Actor start | $0.002 per run | Once per run (per GB of memory; the default is 256 MB, so one event). It covers streaming the Swedish register file. |
| Company | $0.004 ($4 per 1,000) | Each company record in your dataset |

Apify Store discounts apply automatically on paid Apify plans: **Bronze −15%, Silver −30%, Gold, Platinum and Diamond −45%**.

Worked examples (free-plan prices):

- **Lead list of 1,000 companies:** $0.002 + 1,000 × $0.004 ≈ **$4.00**.
- **Weekly new-IT-company feed** with monitor mode, about 150 new companies a week in the three countries: about 600 companies a month ≈ **$2.40/month**.
- **CRM enrichment of 50 org numbers:** $0.002 + 50 × $0.004 ≈ **$0.20**.

Apify's free plan includes monthly platform credit, which is enough for several thousand company records. Set **Max results per country** to cap your spend. You can also set a maximum charge per run in the run options.

### Use cases

- **Sales and lead generation.** Pull every new limited company in your target industries each week and push it to your CRM. New companies buy accounting, banking, insurance, IT, office space and recruitment services.
- **CRM enrichment and data hygiene.** Turn a list of org numbers into official names, legal forms, statuses and industry codes. Flag customers that have ceased or gone bankrupt.
- **Market sizing and research.** Count active companies per NACE/SNI code and city across Sweden, Norway and Finland. Compare the startup rate between countries.
- **KYB and onboarding.** Verify that a Nordic counterparty exists, is active and has the expected legal form before you sign a contract.
- **AI agents and automations.** Let an agent look up a company by org number, or build a market map on request, through the Apify API or MCP.
- **Public-sector sales.** Combine with our tender actor to see which buyers and suppliers are active in your sector.

### Use with AI agents, MCP and the API

Run the Actor and get the results in one HTTP call:

```bash
curl -X POST "https://api.apify.com/v2/acts/teddythebuilder~nordic-company-registry/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "lookup", "orgNumbers": ["556012-5790", "923609016"]}'
```

Python with the official `apify-client`:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("teddythebuilder/nordic-company-registry").call(run_input={
    "countries": ["SE", "NO"],
    "industryCodes": ["62"],
    "registeredWithinDays": 7,
    "maxResultsPerCountry": 100,
})
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company["country"], company["orgNumber"], company["name"], company["industryCode"])
```

**MCP:** the Actor is available to Claude, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). Ask your agent to "look up Norwegian company 923609016" or "list new Swedish IT companies registered this week". The input is small, has defaults and returns flat JSON, so agents can call it without setup.

### Integrations

- **Make, Zapier and n8n:** use the Apify app to start a run and send each new company to a sheet, CRM or Slack channel.
- **Google Sheets:** export the dataset or use an Apify integration to append new rows after each scheduled run.
- **Webhooks:** trigger your own endpoint when a run finishes, then read the dataset.
- **HubSpot, Pipedrive and Salesforce:** map `orgNumber`, `name`, `industryCode` and `city` to company fields via Make or Zapier.
- **Schedules:** run daily or weekly with monitor mode to receive only new companies.

### Data source and legality

All data comes from official open-data services of the national registers:

- **Sweden:** SCB / Bolagsverket high-value dataset of the business register, CC BY 4.0. Contains data from Statistics Sweden (SCB) and Bolagsverket. The file is updated weekly, and new registrations appear with about a two-week lag.
- **Norway:** Brønnøysundregistrene, Enhetsregisteret, under the Norwegian Licence for Open Government Data (NLOD 2.0).
- **Finland:** Finnish Patent and Registration Office (PRH), YTJ open data API v3, CC BY 4.0.

The Actor outputs company-level data only. Sole traders and estates are filtered out because their registry entry identifies a natural person. Board members, owners and contact persons are never requested. Swedish companies that registered a direct-marketing block are excluded by default; keep this setting on for sales prospecting. You are responsible for using the data in line with GDPR and local marketing rules.

### FAQ

#### How fresh is the data?

Norway and Finland are queried live on every run. Sweden comes from the weekly register file, so new Swedish registrations appear about two weeks after registration.

#### Why are sole traders missing?

A sole trader's registry entry is a person. To keep the output free of personal data, enskild firma (SE), ENK (NO) and toiminimi (FI) are never included.

#### Does it include Denmark?

Not yet. The Danish CVR register requires a registered system-to-system account. Denmark will be added if that access becomes available.

#### Can I get revenue and profit?

Not in this Actor. Financial statements come from a different data source; check our related actors.

#### How do I get only new companies every week?

Turn on **Monitor mode**, give the search a **Monitor ID**, and add a weekly schedule. The first run outputs everything that matches and stores a baseline. Later runs output only companies that weren't in earlier runs.

#### Why did a run return fewer results than I expected?

Filters combine with AND. Check the legal-form filter (default: limited and public limited companies), the "only active" switch and the Swedish marketing-block filter. Norway's API caps one search at 10,000 results; split large searches by industry code or city.

#### Does it work on the Apify free plan?

Yes. The free plan's monthly credit covers several thousand records. Keep **Max results per country** low while testing.

#### Something is wrong or missing. What should I do?

Open an issue on the Issues tab. We reply within 24 hours. If the Actor saves you time, a rating on the Store page helps others find it.

### Related actors

- [Nordic Tenders Scraper - TED API](https://apify.com/teddythebuilder/nordic-public-tenders-monitor): public procurement tenders and contract awards from Swedish, Norwegian, Danish and Finnish buyers via the EU TED API.
- [Swedish Jobs Scraper - Platsbanken API](https://apify.com/teddythebuilder/swedish-jobs-monitor): all Swedish job ads from Arbetsförmedlingen's JobTech API, plus "companies hiring now" lists with org numbers.
- [Tech Stack Detector](https://apify.com/teddythebuilder/tech-stack-detector): bulk-detect the CMS, e-commerce platform, analytics, CDN and email provider behind any list of company domains.
- [Career Site Jobs API](https://apify.com/teddythebuilder/career-site-jobs-api): jobs straight from company career sites on Greenhouse, Lever, Ashby, Workable, Recruitee and Teamtailor in one schema, with new/removed-job tracking.

### Changelog and support

- **1.1 (2026-10-04):** the Swedish register is now streamed, so default runs finish in seconds. Default results lowered to 20 per country for quick tests. Expanded documentation.
- **1.0 (2026-10-04):** first release: search, lookup and monitor mode for SE, NO and FI.

Questions or feature requests? Open an issue on the Issues tab. We reply within 24 hours.

# Actor input Schema

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

search = find companies matching filters (lead lists, market maps, new-company monitor). lookup = enrich a list of org numbers.

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

Registries to query (search mode). In lookup mode the country is detected from each number's format.

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

Swedish org.nr (556012-5790), Norwegian org.nr (923609016), Finnish Y-tunnus (0112038-9). A 'SE'/'NO'/'FI' prefix is allowed.

## `industryCodes` (type: `array`):

Match by code prefix, e.g. 62 (IT), 41 (construction of buildings), 70.22 (management consultancy), 56.1 (restaurants). Works across all three national variants of NACE.

## `registeredWithinDays` (type: `integer`):

Only companies registered in the last N days (new-company leads). Ignored if 'Registered after' is set.

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

Only companies registered on or after this date.

## `nameContains` (type: `string`):

Case-insensitive substring of the company name.

## `cities` (type: `array`):

Exact postal town or municipality, e.g. Stockholm, Oslo, Helsinki, Göteborg.

## `legalFormCategories` (type: `array`):

Normalised legal-form categories (AB/AS/Oy = limited_company). Empty = all except sole traders, which are never included.

## `onlyActive` (type: `boolean`):

Skip ceased, bankrupt and liquidating companies.

## `excludeMarketingBlocked` (type: `boolean`):

Swedish companies can register a block against direct-marketing (reklamspärr). Keep this ON for sales prospecting.

## `onlyNew` (type: `boolean`):

Schedule daily/weekly to receive only newly appearing companies for this search.

## `monitorId` (type: `string`):

Name of this saved search for monitor mode.

## `maxResultsPerCountry` (type: `integer`):

Cap per country; each company is one billable result. Example: 20 for a quick test, 10000 for a full lead list.

## Actor input object example

```json
{
  "mode": "search",
  "countries": [
    "SE",
    "NO",
    "FI"
  ],
  "industryCodes": [
    "62"
  ],
  "registeredWithinDays": 30,
  "legalFormCategories": [
    "limited_company",
    "public_limited_company"
  ],
  "onlyActive": true,
  "excludeMarketingBlocked": true,
  "onlyNew": false,
  "monitorId": "default",
  "maxResultsPerCountry": 20
}
```

# Actor output Schema

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

No description

# 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 = {
    "countries": [
        "SE",
        "NO",
        "FI"
    ],
    "industryCodes": [
        "62"
    ],
    "registeredWithinDays": 30,
    "maxResultsPerCountry": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("teddythebuilder/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 = {
    "countries": [
        "SE",
        "NO",
        "FI",
    ],
    "industryCodes": ["62"],
    "registeredWithinDays": 30,
    "maxResultsPerCountry": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("teddythebuilder/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 '{
  "countries": [
    "SE",
    "NO",
    "FI"
  ],
  "industryCodes": [
    "62"
  ],
  "registeredWithinDays": 30,
  "maxResultsPerCountry": 20
}' |
apify call teddythebuilder/nordic-company-registry --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,teddythebuilder/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/uhygxRM9LKrC3pMQw/builds/mSuYejdSPp0xZLzah/openapi.json
