# FINN.no Scraper — Marketplace, Cars, Homes & Jobs, No Phones (`highbrow_fame/finn-listings`) Actor

Norwegian listings from FINN.no — Torget, cars, boats, homes for sale and rent, commercial property and jobs: price, place, seller type and company, details on request. No phones.

- **URL**: https://apify.com/highbrow_fame/finn-listings.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** E-commerce, Real estate, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 listing delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## FINN.no Scraper — Marketplace, Cars, Homes & Jobs, No Phones

Get listings from FINN.no, Norway's largest marketplace: Torget (furniture, electronics, bikes, clothes, kids' things — everything that is not a vehicle or a home), cars, motorcycles, mopeds, ATVs, snowmobiles, boats, caravans, motorhomes, trucks and farm machines, homes for sale, new homes, rentals, holiday homes, plots, homes abroad, commercial property — and jobs. Title, price, place, seller type and company, when it was published and pictures — plus make, model, year, mileage, fuel and gearbox for vehicles; asking price, total price, size, bedrooms, property type and viewings for property; employer, deadline and positions for jobs. Tick one option for the full description, category, condition and postcode of Torget listings, and the sector, extent, occupations, skills and workplace postcode of job ads. Paste your FINN search links — or just type a keyword.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on finn.no and paste the link — Torget, cars, boats, property or jobs. Or type keywords here — "sofa", "volvo v70", "sjøutsikt", "sykepleier" — and choose the section, a category, a county or municipality (Oslo, Vestland, Bergen, Trondheim…), a price range, the condition, private sellers or businesses, and the order.
- ⚡ **Fast.** The ready-made search delivers its 30 listings in about 5 seconds. A live test run read four searches — rentals in Bergen, boats up to 200,000 kr, new homes in Oslo and "volvo pv444" on Torget — and delivered 1,676 listings in 27 seconds. A bigger one — homes for sale in Oslo, dealers' Volvos up to 300,000 kr, nurse jobs (from an old finn.no/job/fulltime link) and privately sold bikes in Vestland — delivered 9,301 listings in 7 minutes, 4,524 of them opened for their details.
- 📚 **More than FINN's 50 pages.** FINN stops every search after 50 pages (2,500 listings, 2,650 on Torget). The Actor reads on district by district, municipality by municipality and in price bands: in that run it delivered 3,000 of the 3,512 homes for sale in Oslo and 3,000 of the 3,161 private bike ads in Vestland, with no duplicates.
- 📝 **Details when you need them.** Tick **Open every Torget listing and job ad for its details** for the ad text, the category path, the condition, the postcode and the item details of Torget listings — and the sector, extent, duration, occupations, industries, skills, workplace postcode and FINN's summary of qualifications and benefits for job ads. In the run above all 3,000 opened bike ads came with their description, category and postcode (2,680 with a condition), and all 1,524 job ads with their occupations and extent (1,462 with the sector, 1,496 with the workplace postcode). Property and vehicles carry their data in the search results.
- 🔒 **No phone numbers, no seller names.** Dealers, shops, estate agencies and employers are named by their company; private sellers by nothing — only their town, no street and no map point ("Rosendalsveien 32, Oslo" becomes "Oslo"), and no registration number or VIN of their car. Phone numbers, e-mail addresses and names after "ring", "kontakt" or "mvh" are taken out of titles and descriptions — including Norwegian 8-digit numbers written as "412 34 567", "41 23 45 67" or "4123 4567" — while prices, years, postcodes and sizes stay. In the 7-minute run above, 67 of the 3,000 bike ads had a phone number in the text. Job ads are read without their contact persons.
- 💸 **You pay only for listings delivered.** A link that is not a FINN search, a place FINN does not know, or a search with no listings comes back as a free record with the reason.

### What you get

For every listing:

| Field | What it is |
|---|---|
| `title`, `price`, `currency` | the ad title and the asking price (NOK) |
| `section` | marketplace, cars, motorcycles, mopeds, atvs, snowmobiles, boats, caravans, motorhomes, trucks, buses, construction-machines, tractors, farm-tools, homes-for-sale, new-homes, rentals, holiday-homes, plots, holiday-plots, homes-abroad, commercial-for-sale, commercial-for-rent, jobs |
| `location`, `latitude`, `longitude` | the place; the street and the map point only for businesses (a shop, a dealer, a property an agency sells) |
| `sellerType`, `seller` | private or business, and the company name (none for private sellers) |
| `published`, `isPromoted` | when the ad was published or renewed, and whether it is a paid placement |
| `image`, `imageCount`, `url`, `listingId` | the listing |
| `tradeType`, `brand`, `canShip`, `buyNow`, `isSold`, `matchedBy` | Torget: for sale / give away / wanted, the brand, shipping and "buy now", sold, and whether the ad has your words (`keyword`) or FINN added it as similar (`semantic`) |
| `make`, `model`, `version`, `year`, `mileageKm`, `fuel`, `transmission`, `vehicleClass` | vehicles |
| `saleForm`, `priceIsMonthly`, `engineCc`, `serviceHistory`, `regNo`, `vin` | vehicles: used / new / leasing / auction (leasing prices are per month); the plate and the VIN for dealers' vehicles only |
| `boatClass`, `lengthFt`, `engineType`, `engineFuel`, `engineHp`, `maxSpeedKnots` | boats |
| `price`, `priceMax`, `totalPrice`, `sharedCostMonthly`, `priceIsMonthly` | property: the asking price (the lowest and highest for a new-homes project), the total price with costs, the monthly shared costs; rentals give the monthly rent |
| `areaM2`, `areaM2Max`, `plotAreaM2`, `bedrooms`, `propertyType`, `ownershipType`, `furnished`, `localArea`, `viewings`, `isProject` | property |
| `jobTitle`, `seller`, `places`, `deadline`, `positions`, `easyApply`, `logo` | jobs: the title, the employer, the places, the application deadline, the number of positions and FINN's easy apply |
| `input`, `region`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

With **Open every Torget listing and job ad for its details** also — Torget: `description`, `category` (e.g. "Sport og friluftsliv > Sykkelsport > Sykler"), `condition` (e.g. "Pent brukt - I god stand"), `postcode`, `postalTown`, `details` (FINN's item details, such as brand, size or type), `edited`, `isWebshop`. Jobs: `sector` (Privat / Offentlig), `extent`, `duration`, `occupations`, `industries`, `keywords`, `skills`, `workingLanguages`, `remote`, `workplaceAddress`, `postcode`, `postalTown`, `deadlineText`, `orgNumber`, `applyUrl`, `qualifications`, `whatWeOffer`, `edited`.

#### Example

A real record from a live run with **Open every Torget listing and job ad for its details** ticked — an e-bike from a shop, 25 September 2026:

```json
{
  "listingId": "432362084",
  "url": "https://www.finn.no/recommerce/forsale/item/432362084",
  "section": "marketplace",
  "title": "EL-SYKKEL MERIDA eOne-Sixty 400 short",
  "price": 44999,
  "currency": "NOK",
  "location": "Lillehammer",
  "latitude": 61.1218,
  "longitude": 10.45909,
  "sellerType": "business",
  "seller": "Rustadstuen Sport AS",
  "published": "2026-09-24T11:35:08.000Z",
  "isPromoted": false,
  "imageCount": 1,
  "matchedBy": "keyword",
  "tradeType": "for sale",
  "canShip": false,
  "buyNow": false,
  "isSold": false,
  "description": "Veil pris 54999,-\nMøt din nye enduro-partner: En kraftig Shimano EP801-motor, 630 Wh batteri og veljustert fjæring gjør den perfekt for e-MTB-eventyret ditt – både oppover og nedover…",
  "category": "Sport og friluftsliv > Sykkelsport > Sykler",
  "condition": "Helt ny - Uåpnet/med lapp",
  "postcode": "2615",
  "postalTown": "Lillehammer",
  "details": { "Sykkeltype": "Elsykler" },
  "isWebshop": true,
  "status": "OK"
}
```

A private landlord's rental from another live run comes with `"seller": null`, `"latitude": null`, `"longitude": null` and only the place (`"location": "Søreidgrend"`), plus `"price": 40000`, `"priceIsMonthly": true`, `"areaM2": 239`, `"bedrooms": 4`, `"propertyType": "Enebolig"`, `"furnished": "Møblert"`.

### How to use it

1. Paste **Search links** from finn.no, one per line — or type **Keywords** and choose the section and the filters.
2. Set **Max listings per search**, and tick **Open every Torget listing and job ad for its details** if you need the ad text, the condition and the category, or the job ads' sector, occupations and skills.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new listings, choose **Newest first** (or sort by date on finn.no before you copy the link), save your input as a task and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per listing delivered** — see the price on this page. Opening Torget listings and job ads for their details costs nothing extra, only time. Links that are not FINN searches, places FINN does not know and searches with no listings are free.

### FAQ

**How many listings per search?** As many as you set in **Max listings per search**. Past FINN's own limit of 50 pages the Actor splits the search by county, municipality, district and price band, and leaves out listings it has already delivered.

**Why are there listings without my words?** When a Torget search finds only a few ads with your words, FINN adds similar ones and counts them in its own result: in a live run "volvo pv444" gave 40 listings, 13 of them with the words. `matchedBy` tells them apart; tick **Only exact matches** to leave the similar ones out.

**Do old FINN links work?** Links from the old site (finn.no/car/used/search.html?…, finn.no/job/fulltime/search.html?…) are followed to the new search, the way FINN redirects them.

**Why no "wanted" housing ads?** FINN's "Bolig ønskes leid" ads are written by private persons looking for a place to live; the Actor does not read them and says so in a free record.

**Why no job ad texts?** The ad texts and FINN's contact boxes name the employer's contact persons, with their mobile numbers. The Actor gives the ad's structured data and FINN's short summary of qualifications and benefits instead; every record has its `url`.

**Why no phone numbers or seller names?** They are personal data. Every listing has its `url`; buyers contact the seller on FINN. Note that a Torget description is the seller's own text: it is passed on as written apart from phone numbers, e-mail addresses, names after contact words and — for private sellers — street addresses.

**Is this affiliated with FINN.no?** No. This is an independent tool that reads public FINN listings.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

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

Set up a search on finn.no — Torget (the marketplace), cars, motorbikes, boats, caravans, motorhomes, machines, property (homes for sale, new homes, rentals, holiday homes, plots, commercial) or jobs — with all the filters you want, and paste the address of the results page. One per line.

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

Or search for these words, one per line — e.g. "sofa", "iphone 15", "volvo v70", "sjøutsikt", "utvikler". The options below apply to them.

## `section` (type: `string`):

For the keywords above.

## `category` (type: `string`):

Optional, for Torget keywords. For a narrower category (e.g. bikes or sofas), set it up on finn.no and paste the link instead.

## `region` (type: `string`):

Optional, for the keywords above: a county (fylke) such as "Oslo", "Vestland" or "Trøndelag", or a municipality or district such as "Bergen", "Trondheim" or "Stavanger". Empty: all of Norway.

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

Optional, for the keywords above (for rentals: the monthly rent). Not used for jobs.

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

Optional, for the keywords above (for rentals: the monthly rent). Not used for jobs.

## `condition` (type: `string`):

Optional, for Torget keywords.

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

Optional, for the keywords above: private persons, or dealers, shops, estate agents and other businesses.

## `sortBy` (type: `string`):

For the keywords above. Jobs can be sorted by newest only.

## `maxListingsPerSearch` (type: `integer`):

Stops each search (link or keyword) after this many listings. FINN shows at most 50 pages (2,500-2,650 listings) for one search; to go further, the Actor reads the rest county by county, municipality by municipality and in price bands.

## `includeDetails` (type: `boolean`):

Torget listings get the full description, the category, the condition, the postcode and the item details (brand, size, type…). Job ads get the sector, extent, duration, occupations, industries, skills, workplace postcode and FINN's summary of qualifications and benefits. One more page per listing, so slower. Vehicles and property already carry their data and are not opened.

## `exactMatchesOnly` (type: `boolean`):

When a Torget search finds only a few listings with your words, FINN adds similar ones and counts them in its result ("volvo pv444": 40 listings, 13 of them with the words). Tick to leave the similar ones out. Every Torget record says how it matched in "matchedBy".

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

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

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.finn.no/recommerce/forsale/search?q=sofa&location=0.20061&price_to=3000"
  ],
  "section": "marketplace",
  "category": "all",
  "condition": "any",
  "sellerType": "all",
  "sortBy": "default",
  "maxListingsPerSearch": 30,
  "includeDetails": false,
  "exactMatchesOnly": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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": [
        "https://www.finn.no/recommerce/forsale/search?q=sofa&location=0.20061&price_to=3000"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/finn-listings").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": ["https://www.finn.no/recommerce/forsale/search?q=sofa&location=0.20061&price_to=3000"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/finn-listings").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": [
    "https://www.finn.no/recommerce/forsale/search?q=sofa&location=0.20061&price_to=3000"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/finn-listings --silent --output-dataset

```

## MCP server setup

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

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/zjWToACgUrfByHHnp/builds/8i5YL2ZTel3aRcvcY/openapi.json
