# Nordic Marketplace Scraper API - Blocket, FINN, DBA, Tori (`vonsensey/blocket-finn-nordic-marketplace-scraper-api`) Actor

Blocket (SE), FINN (NO), DBA (DK) and Tori (FI) in one run and one schema: classifieds, cars and jobs across all four Nordic countries, with real currencies, coordinates and private-vs-dealer normalised. Paste a saved-search URL. Car rows carry plate, VIN and real km. Failures are free.

- **URL**: https://apify.com/vonsensey/blocket-finn-nordic-marketplace-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listings

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

## Nordic Marketplace Scraper API — Blocket, FINN, DBA & Tori

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Nordic Marketplaces Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 8 Actors, one codebase, one listing billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">Nordic Marketplace Scraper API</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/blocket-se-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Blocket Scraper API</a><br><span style="color:#6B7280;font-size:11px">Sweden Classifieds &amp; Cars</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/finn-no-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">FINN.no Scraper API</a><br><span style="color:#6B7280;font-size:11px">Norway Ads, Cars &amp; Jobs</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/nordic-cars-blocket-finn-dba-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Nordic Car Scraper API</a><br><span style="color:#6B7280;font-size:11px">Plate, VIN &amp; Mileage</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/nordic-company-registry-brreg-ytj-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Nordic Company Registry API</a><br><span style="color:#6B7280;font-size:11px">Norway &amp; Finland</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/nordic-jobs-platsbanken-finn-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Nordic Jobs Scraper API</a><br><span style="color:#6B7280;font-size:11px">Platsbanken &amp; FINN</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/dba-dk-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">DBA.dk Scraper API</a><br><span style="color:#6B7280;font-size:11px">Denmark Classifieds &amp; Cars</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/tori-fi-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Tori.fi Scraper API</a><br><span style="color:#6B7280;font-size:11px">Finland Classifieds Marketplace</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Polymarket Order Book](https://apify.com/vonsensey/polymarket-orderbook-clob-prices-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [LinkedIn Public Data Suite](https://apify.com/vonsensey/linkedin-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [Google Maps Suite](https://apify.com/vonsensey/google-maps-reviews-scraper-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

**Sweden, Norway, Denmark and Finland in one run and one schema.** Blocket, FINN.no, DBA.dk and Tori.fi — classifieds, cars and job adverts — returned as rows you can put straight into one table and compare, with real currencies, real coordinates and private-versus-dealer already worked out.

**A run that finds nothing costs nothing.** There is no run-start fee, error and coverage rows are free, and on a schedule an ad is billed only when it has actually changed.

***

### ⭐ Why this one

Every other Nordic scraper on the Store does **one site**. Stitching four of them together means four listings, four schemas, four invoices, four sets of field names — and then a normalisation job you have to write and maintain yourself. This is one run.

| | Single-site scrapers | This Actor |
|---|---|---|
| Countries per run | 1 | **4** |
| Currency | whatever the ad says, as text | **SEK / NOK / DKK / EUR**, as a number plus an ISO code |
| Private vs dealer | localised text: *Privat*, *Yksityinen*, *Forhandler* | **one normalised field** |
| Car mileage | the raw number — which is *mil*, not km, on two of the sites | **real kilometres** |
| Saved searches | rebuild your filters by hand | **paste the URL** |
| Re-running on a schedule | pay again for every unchanged ad | **pay only for what moved** |
| A run that finds nothing | usually still billed | **free** |

#### The mileage trap, because it will cost you money

Blocket and FINN publish car mileage in **Scandinavian *mil*** — and one *mil* is **ten kilometres**. A car listed at `1978` has done **19,780 km**, not 1,978. Any tool that copies the number through understates every Swedish and Norwegian car by a factor of ten. This Actor returns `mileageKm` converted, and keeps the raw value and its unit beside it so you can check the arithmetic.

***

### 🚀 Run it

Press **Start**. The defaults search all four countries and return 100 ads.

#### The fastest way to get exactly what you want

Build the search **on the site** — region, category, price band, condition, mileage, whatever it offers — then copy the address bar into `startUrls`. The URL is used exactly as you gave it, so every filter the site applies, you get.

```json
{
  "startUrls": [
    "https://www.blocket.se/mobility/search/car?price_to=60000&fuel=2",
    "https://www.finn.no/recommerce/forsale/search?q=iphone"
  ],
  "maxItems": 500
}
```

#### Named recipes

**Watch a competitor's stock every morning, and pay only for what changed**

```json
{ "startUrls": ["https://www.blocket.se/mobility/search/car?dealer_segment=2"],
  "monitorChangesOnly": true, "watchFields": ["price"], "maxItems": 2000 }
```

**One product across all four countries, private sellers only**

```json
{ "query": "iphone 15", "sellerType": "private", "maxItems": 400 }
```

**Nordic used-car stock with plate, VIN and mileage**

```json
{ "vertical": "car", "query": "volvo", "sources": ["blocket", "finn", "dba"], "maxItems": 500 }
```

**Norwegian and Finnish companies, excluding the ones winding up**

```json
{ "vertical": "company", "municipality": "0301", "onlyActiveCompanies": true, "maxItems": 1000 }
```

**Swedish and Norwegian job adverts, posted this week**

```json
{ "vertical": "job", "query": "developer", "publishedWithinDays": 7, "maxItems": 300 }
```

***

### 🗺️ What each source carries

Published as a matrix rather than as a coverage claim, because not every site has every section. Anything you ask for that does not exist comes back as a **free** row telling you so, never as a silent gap.

| Source | Country | Classifieds | Cars | Jobs | Companies |
|---|---|---|---|---|---|
| **Blocket** | 🇸🇪 Sweden | ✅ | ✅ | — | — |
| **FINN** | 🇳🇴 Norway | ✅ | ✅ | ✅ | — |
| **DBA** | 🇩🇰 Denmark | ✅ | ✅ | — | — |
| **Tori** | 🇫🇮 Finland | ✅ | — | — | — |
| **Platsbanken** | 🇸🇪 Sweden | — | — | ✅ | — |
| **Brønnøysundregistrene** | 🇳🇴 Norway | — | — | — | ✅ |
| **PRH / YTJ** | 🇫🇮 Finland | — | — | — | ✅ |

**What this Actor does not do, stated plainly:** Swedish property portals (Hemnet, Booli) refuse automated access outright, so there is no Swedish real-estate data here and none is promised. Swedish and Danish company registers are not free to redistribute, so the company vertical is Norway and Finland only.

***

### 📦 What a row looks like

Every row has the same shape whichever country it came from — that is the whole point.

```json
{
  "type": "listing",
  "source": "blocket",
  "country": "SE",
  "vertical": "marketplace",
  "id": "26095115",
  "key": "blocket:26095115",
  "url": "https://www.blocket.se/recommerce/forsale/item/26095115",
  "title": "DBS damcykel 28 tum",
  "price": { "amount": 1800, "currency": "SEK" },
  "location": "Uppsala",
  "geo": { "lat": 59.86394, "lon": 17.64738 },
  "publishedAt": "2026-08-28T09:03:48.000Z",
  "images": ["https://images.blocketcdn.se/..."],
  "sellerType": "private",
  "tradeType": "Säljes",
  "attributes": { "brand": ["DBS"] },
  "scrapedAt": "2026-08-28T10:18:13.692Z"
}
```

A **car** row adds a `vehicle` block — make, model, series, trim, year, `mileageKm`, fuel, transmission, registration plate and VIN where the marketplace publishes them, dealer name and trade-body memberships. A **job** row adds `job` — employer, deadline, vacancy count, work locations. A **company** row adds `company` — organisation number, legal form, industry code, registered address, and the `bankrupt` / `inLiquidation` flags.

Car and job rows also carry what dealer-stock buyers and recruiters compare on. Each is null when the ad does not state it:

| Field | Rows | What it is |
|---|---|---|
| `vehicle.dealerOrgId`, `vehicle.dealerGroupId` | cars | the marketplace's own id for the dealer and for its chain; null on private ads |
| `vehicle.warrantyMonths` | cars | the warranty, in months, as the ad states it |
| `vehicle.serviceDocuments` | cars | the documents the seller lists, verbatim, e.g. `Service`, `Tilstandsrapport` |
| `vehicle.rangeKm` | cars | electric range in km, on electric and plug-in cars |
| `vehicle.engineCc` | cars | engine size in cm³ |
| `vehicle.rightToExchange` | cars | the ad carries the site's exchange right (*Bytesrätt*, *Bytterett*) |
| `job.salaryMin`, `job.salaryMax`, `job.salaryTypeId` | FINN jobs | the salary range the advert states, and FINN's own code for its type |

***

### 💵 Pricing

| Event | GOLD per 1,000 |
|---|---|
| **listing** — one classified ad | **$2.00** |
| **vehicle** — one car with plate, VIN and specs | $6.00 |
| **company** — one official register record | $3.00 |
| **job** — one job advert | $3.00 |

**Never billed:** a run that returns nothing, an ad that could not be read, a coverage row and the run summary. With `monitorChangesOnly` on, an ad that has not moved since the last run is not billed as a listing: it costs one **listing-check**, a tenth of the listing price. **There is no run-start fee.**

Set `maxCostUsd` to cap what a single run may spend. It stops cleanly at the limit and tells you so in the free summary row.

***

### ❓ FAQ

#### Do I need a proxy, an account or an API key?

No. Everything is handled for you and there is nothing to buy on top.

#### Can I use my saved search from Blocket or FINN?

Yes — that is the recommended way to use this. Build the search on the site, copy the address bar into `startUrls`, and the filters come through exactly as the site applies them.

#### I asked for 100 ads and got 25 from each country. Why?

Deliberately. The limit is shared evenly between the sources you selected, so a small budget still gives you a Nordic dataset rather than 100 Swedish ads and nothing else.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly` to `true`. Only ads that are new, or whose watched fields moved, are billed in full; everything else comes back as a free `unchanged` row and is billed a tenth of the ad price as an ad checked. Choose what counts as a change with `watchFields`.

#### Why do I get fewer ads than the site says exist?

Because of `maxItems` or `maxPages`, and the free **coverage** row tells you exactly which: it carries the total the site reports, how many pages exist, how many were read, how many rows you got, and whether the walk genuinely reached the end.

#### Does it cover Hemnet, Booli or Bilbasen?

No, and it never claims to. Those sites block automated access, and a listing that promised them would be lying to you.

#### What currency are prices in?

Each ad's own — SEK, NOK, DKK or EUR — as a number plus its ISO code, never as a formatted string. Nothing is converted, so no invented exchange rate ever enters your data.

#### Is the car mileage in kilometres?

Yes, always, in `mileageKm`. The raw value and its unit are kept beside it so you can verify the conversion.

#### Can I run this on a schedule?

Yes, and it is built for it. Turn on `monitorChangesOnly` first, and an hourly or daily cron costs a fraction of the first run.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/blocket-finn-nordic-marketplace-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/blocket-finn-nordic-marketplace-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/blocket-finn-nordic-marketplace-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/blocket-finn-nordic-marketplace-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~blocket-finn-nordic-marketplace-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/blocket-finn-nordic-marketplace-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/blocket-finn-nordic-marketplace-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/blocket-finn-nordic-marketplace-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Scrape Blocket, FINN, DBA and Tori in one run](https://apify.com/vonsensey/blocket-finn-nordic-marketplace-scraper-api/examples/nordic-classifieds-in-one-run), a ready-made example you can start as-is or copy.

### Use cases

- **Watch competitor stock across borders.** Put a saved search from Blocket, FINN, DBA or Tori on a cron and pay only for the ads whose price or title actually moved — everything unchanged comes back as a free row.
- **Price one product in four markets at once.** The same search runs in Sweden, Norway, Denmark and Finland and returns rows with real SEK, NOK, DKK and EUR amounts, so a price comparison needs no currency guesswork.
- **Build a Nordic used-car dataset.** Make, model, year, mileage in real kilometres, fuel, transmission, and the registration plate and VIN where the marketplace publishes them, across three countries in one schema.
- **Generate B2B leads from official registers.** Norwegian and Finnish company records with organisation number, industry code, registered address and the bankrupt / in-liquidation flags, so a lead list excludes companies that are winding up.
- **Track Nordic hiring.** Swedish Platsbanken and Norwegian FINN job adverts in one schema with employer, organisation number, deadline and vacancy count — billed only for adverts that are new or changed.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per listing delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

### FAQ

#### Do I need a proxy or an account?

No. Everything is handled for you and there is nothing to buy on top.

#### Can I use the saved search I already built on the site?

Yes — paste it into `startUrls`. The URL is used exactly as given, so every filter the site applies, you get.

#### What currency are prices in?

Each ad's own — SEK, NOK, DKK or EUR — as a number plus its ISO code. Nothing is converted, so no invented exchange rate enters your data.

#### Is car mileage in kilometres?

Yes, always. Blocket and FINN publish Scandinavian mil, where one mil is ten kilometres; `mileageKm` is converted and the raw value is kept beside it.

#### Why did I get an even split across countries instead of all my rows from one?

Deliberate: the row limit is shared between the sources you selected, so a small budget still gives you a Nordic dataset rather than one country.

#### Does this cover Hemnet, Booli or Bilbasen?

No, and it never claims to — those sites block automated access, and a listing that promised them would be lying.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly`. Only ads that are new or that actually moved are billed; the rest are free rows.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `query` (type: `string`):

What to search for, in any language the site accepts. Runs against every selected source, so one word gives you the same search in all four countries. Defaults to a sample term so an empty run does something cheap and sensible rather than sweeping every category.

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

Paste search URLs straight from blocket.se, finn.no, dba.dk or tori.fi. Build the filters you want on the site — region, category, price band, condition, mileage — copy the address bar, and they are honoured exactly. This is the fastest way to get precisely the ads you want.

## `sources` (type: `array`):

Which sites to search. Leave empty and the right sources for your chosen vertical are picked for you: all four marketplaces for classifieds, Blocket/FINN/DBA for cars, Platsbanken and FINN for jobs, the Norwegian and Finnish registers for companies.

## `vertical` (type: `string`):

Classifieds, cars, jobs or companies. Not every site carries every vertical - Tori has no car section and neither Blocket nor DBA has a jobs section, and any source that cannot serve your choice is skipped with a free row telling you so.

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

Stop after this many billable rows across all sources together. The budget is split evenly between sources, so a small number still gives you every country rather than only the first one.

## `maxPages` (type: `integer`):

How deep to walk each source. The sites cap their own result sets at 50 pages of roughly 50 ads, so 50 is the deepest any tool can go - narrow the search instead of raising this.

## `sellerType` (type: `string`):

Keep only private sellers, only professional dealers, or both. Normalised across all four countries, so you do not have to know the local wording.

## `minPrice` (type: `integer`):

In the ad's own currency - SEK on Blocket, NOK on FINN, DKK on DBA, EUR on Tori. Ads with no price at all are excluded when this is set.

## `maxPrice` (type: `integer`):

In the ad's own currency. Ads with no price at all are excluded when this is set.

## `publishedWithinDays` (type: `integer`):

Keep only ads published or bumped in the last N days. Ideal for a daily run that should see only what is new.

## `companyName` (type: `string`):

Only for the company vertical: search the Norwegian and Finnish registers by name.

## `municipality` (type: `string`):

Norwegian kommunenummer (0301 is Oslo) or a Finnish city name. Narrows a register search to one area.

## `industryCode` (type: `string`):

Norwegian næringskode or Finnish business-line code, e.g. 62.010 for computer programming.

## `onlyActiveCompanies` (type: `boolean`):

On by default, because a lead list should not contain companies that are winding up. Turn it off to study distress instead - both registers publish the flags.

## `monitorChangesOnly` (type: `boolean`):

For scheduled runs. The Actor remembers what it saw last time and bills only the ads that are new or that actually moved; everything unchanged comes back as a free row. This is what makes an hourly cron affordable.

## `watchFields` (type: `array`):

Which fields make an ad 'changed' when monitoring. Price and title by default.

## `maxCostUsd` (type: `number`):

A hard ceiling on what one run may spend, in USD. The run stops cleanly at the limit and says so in the free summary row. Accepts cents (0.25 is valid). Leave empty for no ceiling.

## Actor input object example

```json
{
  "query": "cykel",
  "startUrls": [],
  "sources": [
    "blocket",
    "finn",
    "dba",
    "tori"
  ],
  "vertical": "marketplace",
  "maxItems": 100,
  "maxPages": 5,
  "sellerType": "any",
  "onlyActiveCompanies": true,
  "monitorChangesOnly": false,
  "watchFields": [
    "price",
    "title"
  ]
}
```

# Actor output Schema

## `dataset` (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 = {
    "query": "cykel",
    "sources": [
        "blocket",
        "finn",
        "dba",
        "tori"
    ],
    "maxItems": 100,
    "maxPages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/blocket-finn-nordic-marketplace-scraper-api").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 = {
    "query": "cykel",
    "sources": [
        "blocket",
        "finn",
        "dba",
        "tori",
    ],
    "maxItems": 100,
    "maxPages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/blocket-finn-nordic-marketplace-scraper-api").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 '{
  "query": "cykel",
  "sources": [
    "blocket",
    "finn",
    "dba",
    "tori"
  ],
  "maxItems": 100,
  "maxPages": 5
}' |
apify call vonsensey/blocket-finn-nordic-marketplace-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/blocket-finn-nordic-marketplace-scraper-api"
        }
    }
}
```

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/ZbcAOd5la7WbfJFCC/builds/3xevhMGRLBThQrGVT/openapi.json
