# Proff Scandinavia Scraper: Norway, Sweden, Denmark & Finland (`getascraper/proff-scandinavia-scraper`) Actor

Scrape B2B company registries, contact emails, phone listings, management board roles, shareholders, and financial statements from Scandinavia's leading directories: Proff (Norway, Denmark, Finland) and Allabolag (Sweden). Extract B2B leads and financial profiles instantly.

- **URL**: https://apify.com/getascraper/proff-scandinavia-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.66 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Pull complete company profiles from **Proff** and **Allabolag**, Scandinavia's largest business registries, across **Norway, Sweden, Denmark, and Finland**. Search by keyword or paste company URLs and get registry numbers, direct phone and email, multi-year revenue and profit, shareholders, board members, and group structure in one clean dataset. Built for B2B lead lists, CRM enrichment, due diligence, and credit screening.

### 🏢 What does Proff Scandinavia Scraper do?

This Actor collects public company data from [proff.no](https://www.proff.no), [allabolag.se](https://www.allabolag.se), [proff.dk](https://www.proff.dk), and [proff.fi](https://www.proff.fi). Give it a keyword, a company name, a 9-digit organization number, or direct profile URLs, and it returns a structured record for each company: registry details, contact information, financials, owners, board, and group links. It runs on the Apify platform with API access, scheduling, integrations (Make, Zapier, Google Sheets), and run monitoring built in.

You can download the results as JSON, CSV, Excel, or HTML.

### 💡 Why use Proff Scandinavia Scraper?

- **B2B lead generation:** build targeted Nordic prospect lists with direct phone, email, and website for each company.
- **CRM enrichment:** fill in registry numbers, revenue, headcount, and addresses for accounts you already track.
- **Due diligence and credit screening:** check status, multi-year financials, owners, and group ties before signing.
- **GDPR-aware outreach:** every record carries a marketing opt-out flag so you can drop companies that declined contact.
- **Market research:** size an industry by company count, revenue, and employee figures across four countries at once.

### 🚀 How to use Proff Scandinavia Scraper

1. Open the **Input** tab.
2. Pick a mode: **Keyword Search** (enter a keyword, company name, or org number) or **Category / Profile URLs** (paste company page links).
3. For keyword search, choose the target country and an optional postcode filter.
4. Turn the enrichment options on or off (financials, shareholders, board, group structure).
5. Click **Start**. Download the dataset as JSON, CSV, Excel, or HTML, or pull it through the API.

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `scrapeMode` | enum | Yes | `searchKeyword` to search, or `providedUrls` to crawl pasted company links. |
| `searchQuery` | string | No | Keyword, company name, or 9-digit organization number to search for. |
| `startUrls` | array of URLs | No | Direct Proff or Allabolag company profile links to crawl. |
| `country` | enum | No | Target country for keyword search: `NO`, `SE`, `DK`, or `FI`. |
| `postcode` | string | No | Optional postal code to narrow keyword results. |
| `includeFinancials` | boolean | No | Add revenue, profit, and accounting figures to each record. |
| `includeShareholders` | boolean | No | Add owner names and ownership stakes. |
| `includeBoard` | boolean | No | Add executives, directors, and signatories. |
| `includeGroup` | boolean | No | Add parent company and subsidiary links. |
| `maxItems` | integer | No | Maximum number of companies to return. |
| `maxRequestsPerCrawl` | integer | No | Maximum pages to request (0 = unlimited). |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter is the default and works well. |

### 📤 Output

Each row is one company:

```json
{
  "orgnr": "912345678",
  "name": "A Strøm-Larsen AS",
  "legal_name": "A Strøm-Larsen AS",
  "company_id": "IFFJULD016D",
  "country": "NO",
  "phone": "+47 22 00 00 00",
  "email": "post@strom-larsen.no",
  "home_page": "https://www.strom-larsen.no",
  "visitor_address": "Storgata 1, 0155 Oslo",
  "category": "Produsenter",
  "nace_code": "10.130",
  "revenue": 48500000,
  "profit": 3200000,
  "currency": "NOK",
  "employees": 42,
  "foundation_year": "1885",
  "status": "Active",
  "marketing_protection": false,
  "subsidiaries": 2,
  "group_companies": 3,
  "shareholders": ["Larsen Holding AS (100%)"],
  "management": ["Ola Nordmann (CEO)"],
  "board": ["Kari Nordmann (Chair)"],
  "url": "https://www.proff.no/selskap/a-str%C3%B8m-larsen/oslo/produsenter/IFFJULD016D",
  "scraped_at": "2026-07-01T09:30:00.000Z"
}
```

### 📊 Output data fields

| Field | Type | Description |
|---|---|---|
| `orgnr` | string | Official organization number. |
| `name`, `legal_name` | string | Display name and registered legal name. |
| `company_id` | string | Internal profile identifier. |
| `country` | string | Registry country: NO, SE, DK, or FI. |
| `phone`, `email` | string | Direct contact details. |
| `home_page` | string | Company website. |
| `visitor_address` | string | Physical office address. |
| `category` | string | Business category. |
| `nace_code` | string | Industry activity code. |
| `revenue`, `profit` | number | Latest reported revenue and profit. |
| `currency` | string | Currency of the financial figures. |
| `employees` | integer | Reported headcount. |
| `foundation_year` | string | Year the company was founded. |
| `status` | string | Registry status, such as active or dissolved. |
| `marketing_protection` | boolean | True if the company opted out of marketing contact. |
| `subsidiaries`, `group_companies` | integer | Counts of linked companies in the group. |
| `shareholders` | array | Owner names with stakes. |
| `management`, `board` | array | Executives and board members. |
| `url` | string | Source profile link. |
| `scraped_at` | string | Time the record was collected. |

### 💰 How much does it cost to scrape Proff and Allabolag?

This Actor uses pay-per-result pricing: you pay only for the company records you receive. Empty runs cost nothing, and there are no monthly subscriptions or rental fees. Use `maxItems` to keep any single run within budget.

### ⭐ Enjoying Proff Scandinavia Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#E7ECF7;border:1px solid #E7ECF7;border-left:5px solid #003893;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this Actor filled your CRM with clean Nordic company data faster than manual lookups, leave a quick review.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other B2B sales and credit-screening teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#003893;border:1px solid #E7ECF7;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/proff-scandinavia-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- Search by a 9-digit organization number to pull one exact company instead of a list.
- Turn off enrichment options you do not need to keep records lean and runs fast.
- Filter your export on `marketing_protection: false` before any cold outreach to stay GDPR-aware.
- Use the `country` field to run the same keyword across Norway, Sweden, Denmark, and Finland.

### ❓ FAQ, disclaimers, and support

**Is scraping Proff and Allabolag legal?** This Actor collects publicly available company registry data. You are responsible for complying with each site's Terms of Service and applicable laws, including GDPR, in how you use the data.

**Can I use the data for cold outreach?** Many users do, for B2B prospecting. Always respect the `marketing_protection` flag and local marketing rules before contacting any company.

**Which countries are covered?** Norway (proff.no), Sweden (allabolag.se), Denmark (proff.dk), and Finland (proff.fi), from one Actor.

**Why are some fields empty?** Not every company publishes financials, contacts, or owners. Missing values are left empty rather than filled with placeholders, so your dataset stays accurate.

**Found a bug or need a field added?** Open an issue on the Actor's **Issues** tab. Custom solutions are available on request.

### 🔗 Other actors

- [Japan Company Scraper: 4.5M+ gBizINFO Records](https://apify.com/getascraper/gbizinfo-japan-company-scraper) ↗ - pulls company registry records from Japan's public gBizINFO database.
- [Zauba India Import Export Trade Data Scraper](https://apify.com/getascraper/zauba-scraper) ↗ - extracts India import/export trade and shipment records.
- [BusinessesForSale scraper](https://apify.com/getascraper/businessesforsale-scraper) ↗ - collects business resale and franchise listings with broker contacts.
- [CA State Bar Attorney Scraper](https://apify.com/getascraper/ca-state-bar-attorney-scraper) ↗ - searches the California State Bar public attorney directory by name or bar number.

# Actor input Schema

## `scrapeMode` (type: `string`):

Choose whether to search by company keywords, or paste direct company registry detail URLs.

## `searchQuery` (type: `string`):

The search keyword, company name, or 9-digit organization registration number to query.

## `startUrls` (type: `array`):

Paste direct Proff or Allabolag company profile URLs to crawl directly.

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

The default target country for keyword searches. Note that direct URL mode auto-resolves country.

## `postcode` (type: `string`):

Optional postal code filter to narrow keyword searches.

## `includeFinancials` (type: `boolean`):

Extract full historical accounting figures, balance sheets, and revenue logs.

## `includeShareholders` (type: `boolean`):

Extract corporate shareholder names, stakes, and ownership percentages.

## `includeBoard` (type: `boolean`):

Extract C-level executives, CEOs, board of directors, and signatories.

## `includeGroup` (type: `boolean`):

Extract corporate relationships, parent organizations, and subsidiary lists.

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

Maximum number of companies to extract.

## `maxRequestsPerCrawl` (type: `integer`):

Maximum number of page requests/paginations that can be made by this crawler (0 = unlimited).

## `proxyConfiguration` (type: `object`):

Datacenter proxies (the default) are fast, cheap, and fully sufficient for Proff/Allabolag. The Next.js pages are server-rendered with no WAF gating, so there is no need for residential IPs. Switch to Residential only if a very large run hits rate limits.

## Actor input object example

```json
{
  "scrapeMode": "searchKeyword",
  "searchQuery": "Strøm-Larsen",
  "startUrls": [
    {
      "url": "https://www.proff.no/selskap/a-str%C3%B8m-larsen/oslo/produsenter/IFFJULD016D"
    }
  ],
  "country": "NO",
  "postcode": "",
  "includeFinancials": true,
  "includeShareholders": true,
  "includeBoard": true,
  "includeGroup": true,
  "maxItems": 100,
  "maxRequestsPerCrawl": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "scrapeMode": "searchKeyword",
    "searchQuery": "Strøm-Larsen",
    "startUrls": [
        {
            "url": "https://www.proff.no/selskap/a-str%C3%B8m-larsen/oslo/produsenter/IFFJULD016D"
        }
    ],
    "country": "NO",
    "postcode": "",
    "includeFinancials": true,
    "includeShareholders": true,
    "includeBoard": true,
    "includeGroup": true,
    "maxItems": 100,
    "maxRequestsPerCrawl": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/proff-scandinavia-scraper").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 = {
    "scrapeMode": "searchKeyword",
    "searchQuery": "Strøm-Larsen",
    "startUrls": [{ "url": "https://www.proff.no/selskap/a-str%C3%B8m-larsen/oslo/produsenter/IFFJULD016D" }],
    "country": "NO",
    "postcode": "",
    "includeFinancials": True,
    "includeShareholders": True,
    "includeBoard": True,
    "includeGroup": True,
    "maxItems": 100,
    "maxRequestsPerCrawl": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/proff-scandinavia-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "scrapeMode": "searchKeyword",
  "searchQuery": "Strøm-Larsen",
  "startUrls": [
    {
      "url": "https://www.proff.no/selskap/a-str%C3%B8m-larsen/oslo/produsenter/IFFJULD016D"
    }
  ],
  "country": "NO",
  "postcode": "",
  "includeFinancials": true,
  "includeShareholders": true,
  "includeBoard": true,
  "includeGroup": true,
  "maxItems": 100,
  "maxRequestsPerCrawl": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/proff-scandinavia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/proff-scandinavia-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xCfqduzRZJAtalebc/builds/vm8dhmZiM42h4JKH5/openapi.json
