# Fonecta Scraper (`normdata/fonecta-scraper`) Actor

Finnish companies from Fonecta with phone, email, website, business ID, address, 5 years of financials, credit rating and payment defaults. Filter by industry, municipality, region, radius, employees, turnover, profit, growth, credit rating, risk and contact. 1,000 full profiles in seconds.

- **URL**: https://apify.com/normdata/fonecta-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 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

![Norm Data](https://i.ibb.co/rGbhM5Y8/Chat-GPT-Image-Sep-8-2026-02-20-50-PM.png)

## 🇫🇮 Fonecta Finland Companies Scraper

Search **Fonecta**, Finland's biggest business directory, and get a clean list of Finnish companies with their phone, email, website, business ID (Y-tunnus), address, up to five years of financials, credit rating, and payment default record. No login, no account.

Built for B2B lead generation, credit screening, and market research across every industry and municipality in Finland.

### 🎯 Who uses it?

#### 📞 Sales and lead generation teams

Build a call list by industry and municipality, then narrow it to the companies that fit: headcount, turnover, growth, and only those with an email or phone.

#### 💳 Credit, risk, and collections teams

Screen prospects and customers by credit rating and registered payment defaults, or find companies with a bankruptcy or restructuring petition.

#### 💻 Web and marketing agencies

Find established, profitable local businesses that still have no website.

#### 📊 Market researchers and investors

Compare turnover, margins, and headcount across an industry or region, with up to five years of history per company.

### ✨ What it does

- **Search:** any Finnish industry word, keyword, or company name, in any of Finland's 309 municipalities, whole regions, or around a map point within a chosen distance.
- **Company filters:** company or office, legal form, and founding year.
- **Financial filters:** employees, turnover, profitability, turnover trend, and exporters or importers.
- **Credit and risk filters:** minimum credit rating, with or without payment defaults, and risk level, including bankruptcy, restructuring, or closure.
- **Contact filters:** with or without an email, phone, or website.
- **Look up:** resolve known companies directly from their business ID (Y-tunnus) or Fonecta profile link.
- **Complete results:** large searches are split automatically, so you get every match and not just the first 10,000.
- **Location check:** a misspelled municipality stops the run with suggestions instead of quietly returning all of Finland. Swedish names such as Helsingfors or Jakobstad work too.

Missing source values are returned as `null`, never invented.

### Why this scraper

- **Financials on every company that files them.** Turnover, operating profit and margin, net income, EBITDA margin, employees, and turnover per employee, for up to five fiscal years, in plain euros.
- **Credit rating and payment defaults** from each full company profile: rating from AAA to C with its meaning in English, credit score, risk class, and the count and total of registered collection cases.
- **Filters that match how B2B lists are really built:** size, turnover, profitability, growth, credit rating, and risk, not just a keyword.
- **Registry details:** business ID, legal form, founding date, trade register, employer register, and VAT registrations, plus trade names and the full office list.
- **Business data only.** Private persons, named contact people, and hidden or paywalled directory entries are left out on purpose.

### How it compares

| Capability | This actor | Keyword-only Fonecta scrapers |
|---|:--:|:--:|
| Phone, email, website, address | yes | yes |
| Business ID (Y-tunnus) | yes | yes |
| **Municipality, region, or map radius search** | **yes** | no |
| **Up to 5 years of financials** | **yes** | no |
| **Credit rating and credit score** | **yes** | no |
| **Payment defaults and risk class** | **yes** | no |
| **Filters by employees, turnover, profit, growth** | **yes** | no |
| **Filters by credit rating and risk** | **yes** | no |
| **Legal form, founding date, register entries, VAT** | **yes** | no |
| **Office list for multi-location companies** | **yes** | no |
| **Every match past 10,000 results** | **yes** | no |
| **Look up by business ID** | **yes** | no |

### 📦 What data you get

| Entity | Useful fields |
| --- | --- |
| Company | Name, official name, logo, description, company or office, business ID, legal form, status, main industry, industry code (TOL 2008), trade names, and brands. |
| Contact | Phone, mobile, email, website, Facebook, Instagram, LinkedIn, X, YouTube, and the Fonecta profile link. |
| Location | Street, postal code, post office, city, registered municipality, region, latitude, longitude, distance from your point, and the mailing address. |
| Financials | Fiscal year, turnover, turnover change, operating profit, operating margin, net income, EBITDA margin, employees, turnover per employee, exports, imports, and the same for up to five years. |
| Credit and risk | Credit rating and its meaning, credit score, risk class and description, payment defaults, and open and paid collection cases with their totals. |
| Registry | Founding date, business ID registration, trade register, employer register, prepayment register, tax register, VAT registrations, and signing rule. |
| Offices | Parent company for each office, office count, and each office's name, industry, and address. |
| Opening hours | Hours for each day of the week, where the business publishes them. |

Every record includes `scraped_at` (UTC). Download your dataset from Apify as CSV, JSON, Excel, or XML.

### 💡 Use cases

#### 📞 Every hair salon in Helsinki with an email address

```json
{ "mode": "search", "searchTerms": ["kampaamo"], "municipalities": ["Helsinki"], "email": "has" }
```

#### 💳 Creditworthy construction companies in Uusimaa with 10 or more staff

```json
{ "mode": "search", "searchTerms": ["rakennusliike"], "regions": ["Uusimaa"], "minEmployees": "10", "minCreditRating": "A", "paymentDefaults": "none" }
```

#### 📉 Transport companies with a bankruptcy or restructuring petition

```json
{ "mode": "search", "searchTerms": ["kuljetus"], "riskLevel": "restructuring" }
```

#### 💻 Profitable restaurants in Tampere without a website

```json
{ "mode": "search", "searchTerms": ["ravintola"], "municipalities": ["Tampere"], "profitability": "profitable", "website": "none" }
```

#### 📊 Growing accounting firms with over €1 million turnover

```json
{ "mode": "search", "searchTerms": ["tilitoimisto"], "minTurnover": "1000000", "turnoverTrend": "growing" }
```

#### 📍 Dentists within 5 km of central Oulu

```json
{ "mode": "search", "searchTerms": ["hammaslääkäri"], "nearPoint": "65.0121, 25.4651", "radiusKm": "5" }
```

#### 🔎 Resolve known companies

```json
{ "mode": "lookup", "businessIds": ["2467766-5", "0112038-9"] }
```

### ⚙️ How the input is organised

**Maximum results** sits at the very top, since it applies no matter what you're doing. Leave it empty to collect every match. Below it, the form is split into seven numbered sections:

| Section | What it's for |
| --- | --- |
| **1 · What to do** | Search for companies or look up known ones. |
| **2 · What and where** | Industries or keywords, municipalities, regions, or a map point and distance. |
| **3 · Company profile** | Company or office, legal form, founding year, and employees. |
| **4 · Financials** | Turnover, profitability, turnover trend, and foreign trade. |
| **5 · Credit and risk** | Credit rating, payment defaults, risk level, and whether to load the full credit profile. |
| **6 · Contact details** | With or without an email, phone, or website. |
| **7 · Look up** | Business IDs or Fonecta profile links to resolve directly. |

Finnish industry words give the best results, for example `kampaamo` (hair salon), `tilitoimisto` (accounting firm), `rakennusliike` (construction company), `hammaslääkäri` (dentist), `ravintola` (restaurant), `autokorjaamo` (car repair), or `kiinteistönvälitys` (real estate agency).

> **Apify Free plan:** every run is limited to a fixed 10-row sample. Upgrade your Apify plan to run your own settings.

### 🛡️ Limits & responsible use

This Actor reads only public Fonecta business listings and company profiles. It never signs in and never accesses anything behind a paywall.

It collects business information only. Private persons, named contact people, and directory entries whose details Fonecta hides behind a paywall are left out on purpose. Sole traders are included because they are registered businesses with their own business ID. Business contact details are still covered by the GDPR and by Fonecta's terms, so use them for relevant B2B outreach, respect opt-outs, and do not republish the content.

Financial, employee, and credit fields only exist for companies that file financial statements, so most sole traders have them empty. Filters on those fields leave out companies without the data.

Around 1,000 full company profiles with credit data load in about half a minute. Turning off the credit profile makes contact-only lists even faster.

In Look up mode, a business ID or profile that doesn't resolve is never written to the dataset, so you are never charged for it. It is listed in the run log and in the `NOT_FOUND` record of the run's key-value store, so you can check your list.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### Local development

```bash
bun install
bun test
bun run src/main.ts
```

# Changelog

This Actor's version history is a separate document: https://apify.com/normdata/fonecta-scraper/changelog.md

# Actor input Schema

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

Caps how many businesses this run writes. Leave empty to collect every match.

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

Search builds a list of Finnish businesses. Look up resolves specific known companies directly.

## `searchTerms` (type: `array`):

Finnish industry words work best, e.g. "kampaamo" (hair salon), "tilitoimisto" (accounting firm), "rakennusliike" (construction company), "hammaslääkäri" (dentist), "ravintola" (restaurant). A company name also works. Each term is searched on its own and the results are merged.

## `municipalities` (type: `array`):

One or more Finnish municipalities. Leave empty, with no region, to search all of Finland.

## `regions` (type: `array`):

Whole regions (maakunta). Combines with Municipalities.

## `nearPoint` (type: `string`):

Search around a map point instead, nearest first. Paste the coordinates exactly as Google Maps copies them, e.g. 60.1699, 24.9384 (right-click a spot in Google Maps and click the numbers).

## `radiusKm` (type: `string`):

How far from the point to search. Only used with Near a point.

## `entityType` (type: `string`):

A company is the registered legal entity. Offices are its individual branches and stores, each with its own address and phone.

## `companyForms` (type: `array`):

Only these legal forms. Leave empty for all.

## `foundedFrom` (type: `integer`):

Only businesses founded in or after this year, e.g. 2020 for young companies.

## `foundedTo` (type: `integer`):

Only businesses founded in or before this year, e.g. 2000 for established companies.

## `minEmployees` (type: `string`):

From the latest financial statement. Businesses that do not report staff (most sole traders) are left out when this is set.

## `maxEmployees` (type: `string`):

From the latest financial statement.

## `minTurnover` (type: `string`):

Revenue in the latest financial statement. Businesses without a published statement are left out when this is set.

## `maxTurnover` (type: `string`):

Revenue in the latest financial statement.

## `profitability` (type: `string`):

Based on operating profit in the latest financial statement.

## `turnoverTrend` (type: `string`):

Change in turnover against the previous financial year.

## `foreignTrade` (type: `string`):

Only businesses that report exporting or importing.

## `minCreditRating` (type: `string`):

Only businesses rated at least this. Businesses without a rating (most sole traders) are left out when this is set.

## `paymentDefaults` (type: `string`):

Collection cases registered as payment defaults. "No defaults" screens out risky customers, "Has defaults" finds businesses that may need debt, finance, or restructuring services.

## `riskLevel` (type: `string`):

The risk class the source assigns. "Bankruptcy, restructuring, or closure" finds companies with a bankruptcy or restructuring petition, in restructuring, or that have ceased trading, useful for debt collection, insolvency advisers, and asset buyers.

## `includeCreditAndRisk` (type: `boolean`):

Loads each full company profile for its credit rating and score, payment default record, and full office list. Turn off for a faster contact-only list. Always on when a credit, payment, or risk filter is set.

## `email` (type: `string`):

Filter on whether the business publishes an email address.

## `phone` (type: `string`):

Filter on whether the business publishes a phone number.

## `website` (type: `string`):

Filter on whether the business has a website. Businesses without one are often the best leads for web and marketing agencies.

## `businessIds` (type: `array`):

Finnish business IDs (Y-tunnus) like 2467766-5, or Fonecta profile URLs like https://www.fonecta.fi/profiili/kymen-seudun-osuuskauppa/161119.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "search",
  "searchTerms": [
    "kampaamo"
  ],
  "radiusKm": "10",
  "entityType": "all",
  "minEmployees": "any",
  "maxEmployees": "any",
  "minTurnover": "any",
  "maxTurnover": "any",
  "profitability": "any",
  "turnoverTrend": "any",
  "foreignTrade": "any",
  "minCreditRating": "any",
  "paymentDefaults": "any",
  "riskLevel": "any",
  "includeCreditAndRisk": true,
  "email": "any",
  "phone": "any",
  "website": "any"
}
```

# Actor output Schema

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

One dataset row per business matched by search or looked up by business ID.

# 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 = {
    "maxItems": 10,
    "mode": "search",
    "searchTerms": [
        "kampaamo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/fonecta-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 = {
    "maxItems": 10,
    "mode": "search",
    "searchTerms": ["kampaamo"],
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/fonecta-scraper").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 '{
  "maxItems": 10,
  "mode": "search",
  "searchTerms": [
    "kampaamo"
  ]
}' |
apify call normdata/fonecta-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/fonecta-scraper"
        }
    }
}
```

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/CVLIeyThCNAPT4MkP/builds/s1jkhQqfRm3TNnlDy/openapi.json
