# Nordic New Companies Feed: Norway & Finland (`moment-data/nordic-new-companies-feed`) Actor

Daily feed of new company registrations, bankruptcies and liquidations in Norway (Brreg) and Finland (PRH) in one clean schema: org number, legal form, NACE code, municipality, postal code, status. Filter by legal form, NACE, municipality. Companies only, no sole traders.

- **URL**: https://apify.com/moment-data/nordic-new-companies-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Nordic New Companies Feed: Norway & Finland (official registries, no key)

Get **every new company registered in Norway and Finland**, plus **bankruptcies and liquidations**, from the **official business registries**: the Norwegian **Brønnøysund Register Centre (Brreg, Enhetsregisteret)** and the Finnish **Patent and Registration Office (PRH, YTJ open data)**. Both countries come out in **one clean, normalized schema**: organisation number, company name, legal form (code, local and English name), registration date, **NACE industry code**, municipality, city, postal code, employees (Norway), status and bankruptcy / liquidation flags, with registry links.

Filter by **country, legal form (AS, ASA, NUF, OY, OYJ...), NACE prefix (62 = IT, 41 = construction...) and municipality (Oslo, Bergen, Helsinki, Espoo...)**. Companies and other legal entities only: **sole proprietorships are always excluded** and no person names, roles or street addresses are included.

### Who it's for

- **B2B sales and agencies:** a daily list of brand-new Nordic companies that need accounting, banking, insurance, software, office space, recruitment, websites and marketing.
- **Accountants, auditors, lawyers and banks:** new AS / OY companies in your municipality the day they register.
- **Credit, risk and collections teams:** daily bankruptcies, voluntary liquidations and forced dissolutions (Norway: missing auditor, accounts, board or general manager).
- **Investors, analysts and data teams:** new-business formation by industry and region, in one schema for both countries.

### Why this Actor

- **Two countries, one schema:** Norwegian and Finnish records normalized to the same fields; NACE codes harmonised to the `62.10` format (Norway SN2025 / NACE Rev. 2.1, Finland TOL 2008 / NACE Rev. 2).
- **Three event types:** `newRegistrations` (default), `bankruptcies`, `dissolutions`.
- **Never empty on weekends:** the default window walks back over weekends and holidays to the latest registry day with data.
- **Entities only:** Norwegian ENK (enkeltpersonforetak) and Finnish toiminimi / private traders are always dropped (no option to include). Street lines and c/o fields are never output, only municipality, city and postal code.
- **Official, open, polite:** Brreg API (NLOD 2.0) and PRH YTJ API v3 (CC BY 4.0), no key, a handful of requests per run.
- **Fast and cheap:** the default run returns 40 records in about 10 seconds at 512 MB.

### Quick start

1. Click **Start** with the default input `{}`: the latest new registrations, 20 from Norway and 20 from Finland.
2. New Oslo and Bergen IT companies this week: `{"countries": ["NO"], "legalForms": ["AS"], "naceCodes": ["62"], "municipalities": ["Oslo", "Bergen"], "daysBack": 7, "maxItems": 200}`
3. New Finnish limited companies in Helsinki and Espoo: `{"countries": ["FI"], "legalForms": ["OY"], "municipalities": ["Helsinki", "Espoo"], "daysBack": 3, "maxItems": 200}`
4. Bankruptcies in both countries, last 7 days: `{"eventTypes": ["bankruptcies"], "daysBack": 7, "maxItems": 500}`
5. Liquidations and forced dissolutions in Norway: `{"eventTypes": ["dissolutions"], "countries": ["NO"], "daysBack": 7, "maxItems": 500}`

#### Schedule tip (daily feed)

Create an Apify **Schedule** for every weekday morning (e.g. 07:00 Europe/Oslo) with `"daysBack": 1` and your filters, then connect it to Slack, email, Google Sheets, HubSpot, Make, Zapier, n8n or a webhook. The Actor is stateless: each run returns the latest registry day(s) in the window; set `"autoExtend": false` if you want exactly `daysBack` days and nothing more.

### Input

| Field | Meaning |
|---|---|
| `eventTypes` | `newRegistrations` (default), `bankruptcies`, `dissolutions`; several allowed, `maxItems` is split between them |
| `countries` | `NO`, `FI` (default both) |
| `legalForms` | Codes or names: `AS`, `ASA`, `NUF`, `ANS`, `DA`, `SA`, `STI`, `FLI`; `OY`, `OYJ`, `OK`, `KY`, `AY`, `AOY`, `KOY`; `Aksjeselskap`, `Osakeyhtiö`, `Limited company`. Sole proprietorships are not available. Bankruptcy estates (`KBO`) appear in new registrations only when listed |
| `naceCodes` | Industry code prefixes: `62`, `62.01`, `70.2`, `41` |
| `municipalities` | Names (`Oslo`, `Helsinki`) or codes (`0301`, `091`) |
| `daysBack` | Registry days ending today (local date), default 1 |
| `maxItems` | Cap per run (also caps your spend), default 40 |
| `autoExtend` | Walk back over weekends / holidays when the window is short (default on) |

### Output

One record per event: `eventType` (`newRegistration`, `bankruptcy`, `dissolution`), `eventDate`, `dissolutionType` (NO `voluntaryLiquidation` / `forcedDissolution`, FI `liquidation` / `deregistered`), `country`, `countryName`, `orgNumber` (NO organisasjonsnummer / FI Y-tunnus), `name`, `legalFormCode`, `legalFormName`, `legalFormNameEn`, `registrationDate`, `tradeRegisterRegistrationDate`, `foundedDate`, `naceCode`, `industryCode`, `industryDescription`, `industryClassification`, `municipality`, `municipalityCode`, `city`, `postalCode`, `addressCountry`, `addressType`, `employees` (Norway, when registered), `status` (`active`, `pending`, `bankrupt`, `inLiquidation`, `forcedDissolution`, `inReorganisation`, `deregistered`, `deleted`), `bankrupt`, `bankruptcyDate`, `inLiquidation`, `liquidationDate`, `forcedDissolution`, `forcedDissolutionDate`, `forcedDissolutionReason`, `inReorganisation`, `reorganisationDate`, `deregisteredDate`, `vatRegistered`, `inTradeRegister`, `partOfGroup`, `website`, `sourceUrl` (API record), `registryUrl` (public registry page), `source`, `license`, `firstSeenAt`.

Example (real records):

````json
[
  {
    "eventType": "newRegistration",
    "eventDate": "2026-10-30",
    "dissolutionType": null,
    "country": "NO",
    "countryName": "Norway",
    "orgNumber": "938789886",
    "name": "SALVIADE AS",
    "legalFormCode": "AS",
    "legalFormName": "Aksjeselskap",
    "legalFormNameEn": "Private limited company",
    "registrationDate": "2026-10-30",
    "tradeRegisterRegistrationDate": "2026-10-30",
    "foundedDate": "2026-10-01",
    "naceCode": null,
    "industryCode": null,
    "industryDescription": null,
    "industryClassification": null,
    "municipality": "OSLO",
    "municipalityCode": "0301",
    "city": "OSLO",
    "postalCode": "0581",
    "addressCountry": "NO",
    "addressType": "business",
    "employees": null,
    "status": "active",
    "bankrupt": false,
    "bankruptcyDate": null,
    "inLiquidation": false,
    "liquidationDate": null,
    "forcedDissolution": false,
    "forcedDissolutionDate": null,
    "forcedDissolutionReason": null,
    "inReorganisation": false,
    "reorganisationDate": null,
    "deregisteredDate": null,
    "vatRegistered": false,
    "inTradeRegister": true,
    "partOfGroup": false,
    "website": null,
    "sourceUrl": "https://data.brreg.no/enhetsregisteret/api/enheter/938789886",
    "registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/938789886",
    "source": "Brønnøysundregistrene - Enhetsregisteret (data.brreg.no)",
    "license": "NLOD 2.0",
    "firstSeenAt": "2026-10-31T07:27:04.102Z"
  },
  {
    "eventType": "newRegistration",
    "eventDate": "2026-10-29",
    "dissolutionType": null,
    "country": "FI",
    "countryName": "Finland",
    "orgNumber": "3665350-5",
    "name": "Aaltonen Creative Oy",
    "legalFormCode": "OY",
    "legalFormName": "Osakeyhtiö",
    "legalFormNameEn": "Limited company",
    "registrationDate": "2026-10-29",
    "tradeRegisterRegistrationDate": "2026-10-29",
    "foundedDate": "2026-10-25",
    "naceCode": "59.11",
    "industryCode": "59110",
    "industryDescription": "Motion picture, video and television programme production activities",
    "industryClassification": "TOL 2008 (NACE Rev. 2)",
    "municipality": "Porvoo",
    "municipalityCode": "638",
    "city": "PORVOO",
    "postalCode": "06100",
    "addressCountry": "FI",
    "addressType": "street",
    "employees": null,
    "status": "active",
    "bankrupt": false,
    "bankruptcyDate": null,
    "inLiquidation": false,
    "liquidationDate": null,
    "forcedDissolution": null,
    "forcedDissolutionDate": null,
    "forcedDissolutionReason": null,
    "inReorganisation": false,
    "reorganisationDate": null,
    "deregisteredDate": null,
    "vatRegistered": false,
    "inTradeRegister": true,
    "partOfGroup": null,
    "website": null,
    "sourceUrl": "https://avoindata.prh.fi/opendata-ytj-api/v3/companies?businessId=3665350-5",
    "registryUrl": "https://tietopalvelu.ytj.fi/yritys/3665350-5",
    "source": "Finnish Patent and Registration Office (PRH) - YTJ open data",
    "license": "CC BY 4.0",
    "firstSeenAt": "2026-10-31T07:27:04.102Z"
  }
]```
The run summary (key-value store record `OUTPUT`) lists the windows covered per country and event, records available vs delivered, skipped sole proprietorships and why the run stopped.

### How it works
1. **New registrations:** Brreg `enheter?fraRegistreringsdatoEnhetsregisteret=` and PRH `companies?registrationDateStart=` per registry day, newest day first.
2. **Bankruptcies / dissolutions:** Brreg `konkurs`, `underAvvikling` and `underTvangsavviklingEllerTvangsopplosning` lists filtered by their dates; for Finland, PRH's daily bulk file (`all_companies`, about 100 MB) is streamed and only companies with a bankruptcy, liquidation or end date in the window are kept (PRH's API has no filter for these).
3. Drops sole proprietorships, applies your filters, splits `maxItems` fairly across countries and event types and delivers.

### Notes and limits
- Brand-new Norwegian companies often get their industry code a few days after registration; `naceCode` is `null` until then.
- Industry descriptions are in Norwegian for Norway (from Brreg) and English for Finland.
- PRH's bulk file is refreshed once a day (early morning Finnish time), so Finnish bankruptcies / liquidations can lag by a day. Runs that include Finnish bankruptcies or dissolutions take roughly 1-3 minutes (the 100 MB download from PRH is the bottleneck); new registrations alone take about 10 seconds.
- Finnish open data has no employee counts.
- Company names are the registered legal names of entities; some include a founder's name (e.g. "Hansen Consulting AS"). No person fields (board members, owners, contact persons, c/o lines) are ever output.
- Data: Brønnøysundregistrene (NLOD 2.0), Finnish Patent and Registration Office PRH (CC BY 4.0). Not affiliated with either registry.

### Pricing
Pay per event: a small start fee per run plus a fee per delivered company record. `maxItems` and Apify's max-charge setting cap your spend.



# Actor input Schema

## `eventTypes` (type: `array`):

newRegistrations (default) = companies newly registered in the Norwegian Central Coordinating Register / Finnish Trade Register. bankruptcies = bankruptcy opened (NO konkursdato, FI KONK). dissolutions = voluntary liquidation and forced dissolution (NO underAvvikling / tvangsavvikling) and liquidation or deregistration (FI). Several allowed; Max records is split between them. Finnish bankruptcies/dissolutions come from PRH's daily bulk file (about 100 MB download, adds roughly 1-3 minutes, limited by PRH download speed).
## `countries` (type: `array`):

NO (Norway) and/or FI (Finland). Empty = both.
## `legalForms` (type: `array`):

Codes or names. Norway: AS, ASA, NUF, ANS, DA, SA, STI, FLI, BRL... Finland: OY, OYJ, OK (co-operative), KY, AY, AOY, KOY, SÄÄ... or names like Aksjeselskap, Osakeyhtiö, Limited company. Sole proprietorships (ENK, toiminimi) are never available. Bankruptcy estates (KBO) appear in new registrations only when listed here. Empty = all.
## `naceCodes` (type: `array`):

Prefixes of the industry code, with or without dots: 62 (IT), 62.01, 70.2, 41, 56.1. Norway uses SN2025 (NACE Rev. 2.1), Finland TOL 2008 (NACE Rev. 2); the 2-4 digit levels mostly match. Note: many brand-new Norwegian companies have no industry code yet, so a NACE filter drops them. Empty = all.
## `municipalities` (type: `array`):

Municipality or city names (Oslo, Bergen, Helsinki, Espoo, Tampere) or official municipality codes (NO 4 digits like 0301, FI 3 digits like 091). Matched against the business address (postal address if none). Empty = all.
## `daysBack` (type: `integer`):

Window of registry days ending today (Norwegian / Finnish local date). With Widen window on, a short window walks back over weekends and holidays (new registrations up to 14 days, bankruptcies / dissolutions up to 30) until there are enough records.
## `maxItems` (type: `integer`):

Hard cap on delivered records (also caps your spend), split fairly across countries and event types. Roughly 250-450 new non-sole-proprietor entities are registered per working day in Norway and 100-300 in Finland.
## `autoExtend` (type: `boolean`):

Walk back over weekends / holidays when the Days back window holds fewer than about 25 records (or Max records if lower). Turn off to get exactly the Days back window.

## Actor input object example

```json
{
  "eventTypes": [
    "newRegistrations"
  ],
  "countries": [
    "NO",
    "FI"
  ],
  "daysBack": 1,
  "maxItems": 40,
  "autoExtend": true
}
````

# Actor output Schema

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

One record per company event (new registration, bankruptcy or dissolution).

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

Windows covered, filters, counts per country and event, why the run stopped.

# 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 = {
    "eventTypes": [
        "newRegistrations"
    ],
    "countries": [
        "NO",
        "FI"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("moment-data/nordic-new-companies-feed").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 = {
    "eventTypes": ["newRegistrations"],
    "countries": [
        "NO",
        "FI",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("moment-data/nordic-new-companies-feed").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 '{
  "eventTypes": [
    "newRegistrations"
  ],
  "countries": [
    "NO",
    "FI"
  ]
}' |
apify call moment-data/nordic-new-companies-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moment-data/nordic-new-companies-feed"
        }
    }
}
```

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/L5RsVbCwlI9lzp2DY/builds/eKzySUd1nq9YDwgy3/openapi.json
