# Finder.fi Scraper (`solidcode/finder-fi-scraper`) Actor

\[💰 $1.00 / 1K] Extract Finnish business data from Finder.fi — company names, business IDs (Y-tunnus), phone, email, website, addresses, geo coordinates and industries, plus opening hours and social profiles where companies publish them. Search by keyword and city, or paste Finder.fi search URLs.

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

## Pricing

from $1.00 / 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?

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

## Finder.fi Scraper

Pull Finnish business listings from Finder.fi at scale — names, official business IDs (Y-tunnus), phone, email, website, full postal address, company status and map coordinates, plus opening hours, logos and social profiles on the businesses that publish them, one clean row per business location. A company that operates several outlets returns one row per outlet, each with its own street address and — on the 85% of locations where Finder publishes one — its own phone number, so you capture each contactable location, not just the head office. Search by keyword and city, or paste a Finder.fi search link to run its exact search words, page and sort order. You get companies only unless you ask for more: Finder also files named individuals — estate agents, lawyers, managing directors — alongside businesses, and those stay out of your export (and off your bill) until you switch them on. Built for B2B sales teams, lead-generation agencies, and market researchers who need verified Finnish company contacts without clicking through the directory profile by profile.

### Why This Scraper?

- **Canonical Finnish business IDs (Y-tunnus)** — every company comes with its hyphenated official ID (e.g. `2467766-5`), the key that joins straight to PRH, VAT, and Finnish accounting systems.
- **One row per business location, not just the head office** — a chain or multi-branch company returns a separate record for each outlet, each with its own street address, phone and post office, so a 6-restaurant group gives you 6 contactable leads instead of one. Group by `businessId` afterward if you ever want a single row per legal entity.
- **Map-ready geo coordinates on ~88% of records** — latitude and longitude straight from Finder: 60-98% of a result set depending on the vertical, and 100% of premium listings. All 2,067 coordinates we measured fall inside Finland's borders, so you can plot results, run radius searches, or feed a territory map without geocoding first.
- **Direct contact fields, ready for a dialer** — the published phone number, email address and website as three discrete columns instead of one contact blob, with phone landing on 51-98% of rows depending on the vertical. Finder also exposes a `mobile` field, but it repeats the same published number, so `phone` is the one line to call.
- **Logo, images and social profiles — with a column that tells you which rows have them** — company logo (2-76% of a result set), up to 20 profile and cover images (2-86%) and normalized Facebook/Instagram URLs (2-42%, expanded from the bare handles Finder returns) all ride on Finder's premium listings, and the `hasPaidPackage` column marks exactly those rows so you can filter before you build on them.
- **7-day opening hours plus a live open-now flag** — every business that publishes hours gives you all seven weekdays, never a partial week (true of all 880 schedules we measured), each day carrying its own open/closed status and its opening intervals so a split lunch-break day survives intact, plus a boolean saying whether it is open at extraction time. Expect 11-77% of a result set to carry hours, highest on restaurants and car dealers.
- **Company form and active/inactive status** — the legal form spelled out the way the Finnish trade register does, never abbreviated: `Osakeyhtiö` (81% of rows), `Yksityinen elinkeinonharjoittaja` — the sole-trader form (14%), `Kommandiittiyhtiö`, `Avoin yhtiö`, `Osuuskunta` and 6 rarer forms, alongside a normalized status (Active, Dissolved, Bankruptcy) so you can filter out dead entities before they hit your CRM.
- **Finnish postal address as five discrete columns — street, postal code and post office on 99% of branches, city and region (maakunta) on 100%** — never one mashed-together string, and every value describes the outlet in that row, so a Tampere branch of a Helsinki chain is filed under Pirkanmaa, not Uusimaa. Only 23 of the 2,350 locations we measured publish no street address at all, and even the thinnest vertical we tested still filled 93.6%.
- **Keyword + city search, or paste the link from a search you already ran** — run Finnish industry terms across all of Finland or narrow them to one city, and pick up any finder.fi search link exactly as it stands: its search words, its page number and its sort order (relevance or A-Z). Finder.fi files businesses by search words rather than by a category or city parameter, so `?what=hotelli+Helsinki` is how a link is scoped to one market — and anything a link carries that Finder cannot search by is named in the run log instead of being dropped without a word.

### Use Cases

**Lead Generation**

- Build targeted Finnish B2B contact lists with phone, email, and website in one pass
- Pull every restaurant, contractor, or clinic in a city for cold outreach
- Capture published Facebook and Instagram handles for social-selling campaigns
- Assemble territory lists keyed by region and post office, with every branch filed where it actually trades

**Sales Prospecting**

- Enrich prospects with their official Y-tunnus for clean record matching
- Filter to Active companies and skip dissolved or bankrupt entities
- Prioritize businesses by company form — `Osakeyhtiö` limited companies vs. `Yksityinen elinkeinonharjoittaja` sole traders — to match your ICP
- Map prospects by latitude and longitude to plan field-sales routes

**Market Research**

- Size a Finnish industry by counting companies per keyword and city
- Compare business density across provinces and cities
- Track which companies maintain active websites and social profiles
- Snapshot opening-hours coverage across a category or region

**CRM Enrichment**

- Append missing phone, email, and website fields to existing Finnish accounts
- Standardize addresses into discrete street, postal code, and city fields
- Refresh company status to flag entities that have gone inactive
- Add map coordinates to records for geospatial dashboards

**Local & Competitive Analysis**

- List every competitor in a niche within a single city
- Compare opening hours and contact channels across rivals
- Audit which competitors publish logos, images, and descriptions
- Monitor a category by re-running the same keyword on a schedule

### Getting Started

#### Simple Keyword Search

Search one Finnish industry term across all of Finland:

```json
{
    "keywords": ["ravintola"],
    "maxResults": 50
}
```

#### Keyword + City

Narrow a crowded category to a single city:

```json
{
    "keywords": ["autokorjaamo"],
    "location": "Tampere",
    "maxResults": 200
}
```

#### Paste a Finder.fi Search URL

Run the exact search you built on the site:

```json
{
    "searchUrls": ["https://www.finder.fi/search?what=hotelli+Helsinki"],
    "maxResults": 100
}
```

#### Named People as Well as Companies

Collect the individual estate agents Finder lists alongside the agencies, each with their job title, direct line and employer:

```json
{
    "keywords": ["kiinteistönvälittäjä"],
    "location": "Espoo",
    "includePeople": true,
    "maxResults": 100
}
```

#### Multi-Keyword Run

Sweep several industries in one go:

```json
{
    "keywords": ["ravintola", "kahvila", "baari"],
    "location": "Turku",
    "maxResults": 500
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchUrls` | string\[] | `[]` | Paste Finder.fi search-result URLs. The link's search words, page number and sort order are reused exactly. Finder.fi has no category or location setting in its links, so any other parameter is named in the run log and final message rather than quietly ignored. Leave empty if you'd rather build a search using the fields below. |
| `keywords` | string\[] | `["ravintola"]` | One or more business or industry terms to search for (e.g. "ravintola", "hotelli", "autokorjaamo"). Each keyword is searched in turn. Leave empty if you're using Search URLs above. |

#### Search Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `location` | string | `""` | Limit the keyword search to a Finnish city or area (e.g. "Helsinki", "Tampere", "Turku"). Leave blank to search all of Finland. Only applies to the keywords — for a Search URL, put the city in the URL's own search words. |

#### Extra Records

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includePeople` | boolean | `false` | Finder's results mix companies with named individuals who work at them (estate agents, lawyers, managing directors). They are left out by default, so you only pay for business records. Switch this on to collect them too — each arrives with the person's name, job title, direct phone and email, and the employer they work for, marked `person` in `recordType`. Leave it off and the run still reports how many people it left out, so a thin result set is never a mystery. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum number of business locations to return across all keywords and URLs (a company with several outlets counts as one row per outlet). Set to 0 for unlimited (up to 100,000 per run). Start with 10-50 to test, then increase. |

### Output

Each business location is one flat record — a company with several outlets returns one record per outlet, each with its own address, phone and, where Finder holds them, its own coordinates. Here's a representative result:

```json
{
    "recordType": "company",
    "listingId": "2701900",
    "name": "Ravintola Ragu",
    "tradingName": "Restaurant Ragu",
    "businessId": "2482235-9",
    "companyForm": "Osakeyhtiö",
    "status": "Active",
    "category": "Ravintola",
    "mainLineOfBusiness": "Ravintola",
    "phone": "09 596 659",
    "mobile": "09 596 659",
    "email": "reservations@ragu.fi",
    "website": "https://www.ragu.fi/",
    "facebookUrl": "https://www.facebook.com/ravintolaragu",
    "instagramUrl": "https://instagram.com/ravintolaragu",
    "streetAddress": "Ludviginkatu 3-5",
    "postalCode": "00130",
    "postOffice": "HELSINKI",
    "city": "Helsinki",
    "province": "Uusimaa",
    "latitude": 60.1658746,
    "longitude": 24.9451207,
    "openingHours": {
        "monday":    { "status": "open",   "times": [{ "start": "17:00", "end": "23:00" }] },
        "tuesday":   { "status": "open",   "times": [{ "start": "17:00", "end": "23:00" }] },
        "wednesday": { "status": "open",   "times": [{ "start": "17:00", "end": "23:00" }] },
        "thursday":  { "status": "open",   "times": [{ "start": "17:00", "end": "23:00" }] },
        "friday":    { "status": "open",   "times": [{ "start": "17:00", "end": "23:59" }] },
        "saturday":  { "status": "open",   "times": [{ "start": "17:00", "end": "23:59" }] },
        "sunday":    { "status": "closed", "times": [] }
    },
    "openNow": false,
    "logo": "https://ucarecdn.com/4c9f41b2-9029-4969-8f75-06c851fb79bf/-/preview/580x377/",
    "images": [
        "https://ucarecdn.com/335acf07-de9c-4ec3-8479-37617cbbfd55/-/preview/600x338/",
        "https://ucarecdn.com/c7697ba8-454d-4433-90e3-51f5a73bcc1e/-/preview/600x338/"
    ],
    "description": "Inspiroidumme skandinaavisen keittiön puhtaudesta ja kekseliäisyydestä. Intohimonamme ovat Italian ruokaperinteet, viinit ja upeat raaka-aineet. …",
    "hasPaidPackage": true,
    "jobTitle": null,
    "employerName": null,
    "searchKeyword": "ravintola Helsinki",
    "url": "https://www.finder.fi/Ravintola/Ravintola+Ragu/Helsinki/yhteystiedot/2701900"
}
```

The example above is a premium Finder listing. A logo, images, a description and Facebook/Instagram links are premium-only — they are empty on every free listing, and the `hasPaidPackage` column tells you which kind of row you are looking at. **Opening hours are the exception**: they are commonest on premium rows (69% carry them) but 21% of free listings publish them too, and free rows supply 37% of all the schedules in a typical export — so filter on `openingHours` itself, never on `hasPaidPackage`, when hours are what you need.

A few things to note before you map the fields into your own system. `openingHours` is an **object keyed by weekday**, each day holding a `status` (`open` or `closed`) and a `times` list of `{start, end}` intervals — a day with a lunch break returns two intervals, a closed day returns an empty list. **Every optional field arrives as `null` when Finder holds no value for it** — including `openingHours` and `openNow`, which are `null` on the 63% of locations that publish no hours, so check for `null` before you index into the object. The single exception is `images`, which comes back as an empty list `[]`. `category` and `mainLineOfBusiness` overlap by design: the full list always contains the headline category, and on 87% of rows the company lists only one line of business, so the two columns read identically — pick `mainLineOfBusiness` if you want just one industry column. `postOffice` comes through in capitals (`HELSINKI`), the Finnish Posti convention, while `city` is title-cased. And `phone` is the number exactly as the company publishes it, which in Finland means the national format (`09 596 659`, `044 402 1660`) rather than `+358` — normalize it yourself if your dialer needs E.164.

Turning on `includePeople` adds a second kind of row. A `person` record names an individual rather than a business, so `name` is a personal name, `jobTitle` and `employerName` are filled in, and `companyForm`, `status`, `openingHours`, `images` and `description` are `null` — those are registry and premium-listing fields a person does not have. The `businessId`, `streetAddress` and `website` on a person row belong to their employer, whose own company row normally appears in the same export, so group on `recordType` before you count companies. Leave the option off and every row is a business, exactly as in the example above.

#### Identity

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | `company` on every business record, `person` on the named individuals you get when `includePeople` is on. Filter on it if you ever mix the two in one run. |
| `listingId` | string | Unique ID for this specific business location. Two outlets of the same company share a `businessId` but have different `listingId`s — use it to deduplicate locations. |
| `name` | string | Registered company or location name |
| `tradingName` | string | Trading name or alias, when the company uses one |
| `businessId` | string | Official Finnish business ID (Y-tunnus), hyphenated (e.g. `2467766-5`). Shared by every location of the same company. |
| `companyForm` | string | Legal form, written out in full as the Finnish trade register spells it — never the `Oy`/`Tmi` abbreviations. Observed values: `Osakeyhtiö` (81.4% of rows), `Yksityinen elinkeinonharjoittaja` — the sole-trader form (13.8%), `Kommandiittiyhtiö` (3.2%), `Avoin yhtiö` (0.9%), plus `Osuuskunta`, `Kiinteistöosakeyhtiö`, `Julkinen osakeyhtiö`, `Aatteellinen yhdistys` and a few rarer forms. |
| `status` | string | Company status: Active, Dissolved, or Bankruptcy |
| `category` | string | The headline line of business Finder files this profile under — the same one that appears in the profile `url`. |
| `mainLineOfBusiness` | string | Every line of business Finder lists for the company, comma-separated. It always contains `category`; on 87% of rows the company lists only that one line, so the two columns are byte-identical, and on the other 13% this is the longer of the two. If you want a single industry column, use this one. |

#### Contact

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Published phone number for this location, in Finnish national format (`09 596 659`) rather than `+358` |
| `mobile` | string | Finder's mobile field. In practice it repeats the same number as `phone` rather than adding a second line. |
| `email` | string | Company email address |
| `website` | string | Company website URL |
| `facebookUrl` | string | Facebook profile URL, when the company publishes one |
| `instagramUrl` | string | Instagram profile URL, normalized from Finder's bare handle, when published |

#### Address & Geo

| Field | Type | Description |
|-------|------|-------------|
| `streetAddress` | string | Street address |
| `postalCode` | string | Postal code |
| `postOffice` | string | Post office (post town) name, in capitals as Finnish Posti writes it — `HELSINKI` |
| `city` | string | City this location is in |
| `province` | string | Region (maakunta) this location is in, derived from its own postal address — not the parent company's registered region |
| `latitude` | number | Latitude for mapping, when Finder holds coordinates for this location |
| `longitude` | number | Longitude for mapping, present on the same rows as `latitude` |

#### Hours & Media

| Field | Type | Description |
|-------|------|-------------|
| `openingHours` | object | null | Weekly opening hours keyed by weekday (`monday` … `sunday`). Each day is an object: `status` (`open` or `closed`) plus `times`, a list of `{"start": "17:00", "end": "23:00"}` intervals — two entries for a day with a midday break, an empty list when closed. All seven weekdays for businesses that publish hours; **`null`** — not an empty object — for the 63% that don't, so test for `null` before you index into it. |
| `openNow` | boolean | null | Whether the business is open at extraction time; present on exactly the same rows as `openingHours`, and `null` on the rest |
| `logo` | string | Company logo URL, served from Finder's image CDN (premium Finder listings) |
| `images` | string\[] | Gallery of up to 20 profile and cover image URLs on Finder's image CDN (premium Finder listings) |
| `description` | string | Company description text, when the company publishes one |

#### Meta

| Field | Type | Description |
|-------|------|-------------|
| `hasPaidPackage` | boolean | Whether the company runs a premium Finder.fi listing |
| `jobTitle` | string | The person's role as Finder publishes it (`myyntijohtaja, kiinteistönvälittäjä LKV, kaupanvahvistaja`). Only on `person` rows; `null` on company rows. |
| `employerName` | string | The company the person works for. Only on `person` rows; `null` on company rows. |
| `searchKeyword` | string | The search term that surfaced this company — your keyword with `location` appended when you set one (`ravintola Helsinki`), or the term read out of a pasted search URL |
| `url` | string | Direct link to this location's Finder.fi profile page, in the form `finder.fi/{category}/{name}/{post town}/yhteystiedot/{listingId}` |

### Tips for Best Results

- **Use Finnish keywords** — Finnish terms like "ravintola" (restaurant), "hotelli" (hotel), or "autokorjaamo" (auto repair) return far more matches than their English equivalents, since the directory is Finnish-first.
- **Paste a search URL so you don't rebuild the search** — run the search on Finder.fi first, then paste that link into `searchUrls`; the search words, page number and sort order carry over exactly. Finder.fi has no category or location setting in a link, so if you clicked anything else on the site the run tells you it couldn't be applied instead of handing you an unfiltered set.
- **Scope a pasted URL to a city by putting the city in `what`** — Finder.fi folds the location into the search term, so write `?what=hotelli+Helsinki` (not a separate location parameter) to keep a pasted search limited to one city.
- **Combine keyword + city to narrow a crowded category** — broad terms like "ravintola" return thousands of hits nationwide; add a `location` such as "Helsinki" to focus on one market.
- **Start small, then scale** — set `maxResults` to 10-50 on your first run to confirm the data fits your needs, then raise the cap.
- **Filter on `status` after the run** — keep only `Active` companies to drop dissolved and bankrupt entities before importing into your CRM.
- **Each location is its own lead** — a company with several outlets returns one row per location, each with its own street address and, wherever Finder publishes one, its own phone number (85% of rows overall, 51-98% by vertical), so you reach every branch. If you instead want a single row per legal entity, group your results by `businessId` after the run and keep the first row in each group.
- **Let `hasPaidPackage` tell you which rows will be rich — but not for opening hours** — logos, images, descriptions and social links come only from businesses that pay Finder for a premium listing, so filter on that column when a workflow depends on those four. Hours behave differently: 21% of free listings publish them too, and free rows account for 37% of every schedule in a typical export, so filtering hours on `hasPaidPackage` throws away more than a third of them — filter on `openingHours` itself instead. Premium rows carry coordinates 100% of the time; 97% of the locations that arrive without coordinates still ship a full street-level postal address you can geocode yourself.
- **Search the industry, not the job title** — Finnish job titles like `kiinteistönvälittäjä` (estate agent), `asianajaja` (lawyer) or `toimitusjohtaja` (managing director) make Finder return mostly named individuals, so a company-only run comes back thin or empty. Search the industry noun instead — `kiinteistönvälitys`, `asianajotoimisto` — or turn on `includePeople` when the named contact is what you actually want. Either way the run states how many people it set aside, so you always know whether a thin result set means "no such businesses" or "they were all people".
- **Match records by Y-tunnus** — the hyphenated `businessId` is the most reliable join key for matching a location back to its parent company in existing Finnish company data; `listingId` uniquely identifies each individual location.
- **Run multiple keywords in one job** — list several related industry terms in `keywords` to sweep a whole sector in a single run instead of one job per term. The same location matching more than one of your keywords is returned only once, so you never pay twice for the identical listing in a single run.

### Pricing

**From $1.00 per 1,000 results** — among the most affordable ways to extract structured Finnish company data. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.12 | $0.115 | $0.105 | $0.10 |
| 1,000 | $1.20 | $1.15 | $1.05 | $1.00 |
| 10,000 | $12.00 | $11.50 | $10.50 | $10.00 |
| 100,000 | $120.00 | $115.00 | $105.00 | $100.00 |

No compute or time-based charges — you pay per result, plus a small fixed per-run start fee. A "result" is any business-location row in the output dataset.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate B2B research, market analysis, and lead generation using publicly listed Finnish business information. You are responsible for complying with applicable laws — including the GDPR and Finnish data-protection rules — and with Finder.fi's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data lawfully and respectfully.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste Finder.fi search-result URLs. The link's search words, page number and sort order are reused exactly. Finder.fi has no category or location setting in its links, so any other parameter in the URL cannot be applied — the run names each one in the log and in its final message rather than quietly ignoring it. To scope a link to one city, put the city in the search words (?what=hotelli+Helsinki). Leave empty if you'd rather build a search using the fields below.

## `keywords` (type: `array`):

One or more business or industry terms to search for (e.g. 'ravintola', 'hotelli', 'autokorjaamo'). Each keyword is searched in turn. Leave empty if you're using Search URLs above.

## `location` (type: `string`):

Limit the keyword search to a Finnish city or area (e.g. 'Helsinki', 'Tampere', 'Turku'). Leave blank to search all of Finland. Only applies to the keywords above — for a Search URL, put the city in the URL's own search words (?what=hotelli+Helsinki).

## `includePeople` (type: `boolean`):

Finder also lists named individuals (estate agents, lawyers, managing directors) alongside companies. They're left out by default, so you only pay for business records. Turn this on to also collect them — each comes with the person's name, job title, direct phone/email and the employer they work for, and is marked 'person' in the Record Type column. Leave it off and the run still tells you how many people it left out, so a thin result set is never a mystery.

## `maxResults` (type: `integer`):

Maximum number of business locations to return across all keywords and URLs (a company with several outlets counts as one row per outlet). Set to 0 for unlimited (up to 100,000 results per run). Tip: start with 10-50 to test, then increase.

## Actor input object example

```json
{
  "searchUrls": [],
  "keywords": [
    "ravintola"
  ],
  "includePeople": false,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of extracted business locations with key fields. A company with several outlets appears as one row per location.

# 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 = {
    "searchUrls": [],
    "keywords": [
        "ravintola"
    ],
    "location": "",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/finder-fi-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 = {
    "searchUrls": [],
    "keywords": ["ravintola"],
    "location": "",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/finder-fi-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 '{
  "searchUrls": [],
  "keywords": [
    "ravintola"
  ],
  "location": "",
  "maxResults": 100
}' |
apify call solidcode/finder-fi-scraper --silent --output-dataset

```

## MCP server setup

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