# 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)
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 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://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.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.

> 👉 **Try it now:** press **Start**. The ready-made input gives you 10 results in a few seconds.<br>
> 💰 **$0.015 per result** on the Free plan (10 results per run), from $0.0135 on paid plans. [See pricing](#-pricing)

### ✨ Why this scraper?

> - **Financials on every company that files them**<br>
>   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**<br>
>   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**<br>
>   Size, turnover, profitability, growth, credit rating, and risk, not just a keyword.
>
> - **Registry details**<br>
>   Business ID, legal form, founding date, trade register, employer register, and VAT registrations, plus trade names and the full office list.
>
> - **Business data only**<br>
>   Private persons, named contact people, and hidden or paywalled directory entries are left out on purpose.
>
> - **Search**<br>
>   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.
>
> - **Apify platform**<br>
>   Schedule runs, get only new results, export to Excel or CSV, use the API, or connect Google Sheets, Zapier and Make.

### ⚖️ 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 |

### 🚀 How to scrape Fonecta Finland Companies

1. Create a free Apify account.
2. Pick the filters you need, or keep the ready-made input.
3. Click **Start**.
4. Download the results as Excel, CSV or JSON from the **Output** tab.

### 💰 Pricing

#### How much does it cost to scrape Fonecta Finland Companies?

You pay a one-time **$0.003** per run, plus a price for each result saved:

| Charged for | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| **result**: Single result in the default dataset. | 0.015 | 0.0135 | 0.012 | 0.0105 |

Example: 1,000 results cost about **$13.5** on Bronze. No proxy or compute costs on top.

### 📦 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.

### ⚙️ Input

**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.

#### Input examples

#### 📞 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"] }
```

### ❓ FAQ and troubleshooting

#### Is there a Fonecta Finland Companies API? Do I need an API key?

> Fonecta Finland Companies has no public data API for this. This Actor works as a Fonecta Finland Companies API alternative: it reads the public pages and gives you clean JSON, CSV or Excel, with no API key, no login and no code to maintain. You can also call it from your own code with the Apify API, or from an AI agent through MCP:
> `claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/fonecta-scraper"`

#### Why do I get only 10 results?

> On the Apify free plan each run saves up to 10 results, so you can try it before paying. Any paid plan removes the limit.

#### The run stopped with "municipality not found"

> The place name didn't match a Finnish municipality. The log lists suggestions; Swedish names like Helsingfors also work.

#### Turnover, employees or credit rating are empty

> Those only exist for companies that file financial statements, most sole traders don't. Filters on those fields leave such companies out.

#### Is this an official Fonecta Finland Companies tool?

> No. It is independent and not affiliated with Fonecta Finland Companies. It reads only data Fonecta Finland Companies publishes on its public pages, at a moderate pace. Use the data in line with Fonecta Finland Companies's terms and the laws that apply to you.

### 📧 Contact

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

# 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"
    ],
    "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"
};

// 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"],
    "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",
}

# 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"
  ],
  "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"
}' |
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/RENyJsKBpLaipSCFY/openapi.json
