# FINN.no Property Scraper - Norway Real Estate Data (`sian.agency/finn-no-property-scraper`) Actor

Scrape FINN.no property listings across Norway: homes for sale and rent, new builds, plots and cabins. NOK prices, m2, bedrooms, agents, GPS, energy labels.

- **URL**: https://apify.com/sian.agency/finn-no-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.06 / 1,000 property searches

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

## FINN.no Property Scraper — Norway Real Estate Data & Listings 🏠

[![Store SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store Rightmove](https://img.shields.io/badge/Store-Rightmove%20UK%20Property-00DEB6)](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) [![Store ImmobilienScout24](https://img.shields.io/badge/Store-ImmobilienScout24%20Germany-FF6C00)](https://apify.com/sian.agency/immobilienscout24-property-scraper?fpr=sian) [![Store Funda](https://img.shields.io/badge/Store-Funda%20Netherlands-0089D0)](https://apify.com/sian.agency/funda-property-scraper?fpr=sian)

#### 🇳🇴 All seven FINN Eiendom sections, 50 listings per request, areas by name

##### Built for analysts, agencies and proptech teams who need Norwegian housing data in a spreadsheet this afternoon

### 🔎 What is the FINN.no Property Scraper — and when should you use it?

The **FINN.no Property Scraper** turns public property listings from FINN.no, Norway's dominant classifieds platform into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Norwegian property listings by area and filter. Each row carries the heading, street address, Prisantydning and Totalpris in NOK, monthly felleskostnader, usable and plot area in m², bedrooms, property type, ownership form, the listing estate agency, GPS coordinates and a direct FINN link. Rentals add monthly rent, deposit and furnishing state; new builds carry a price range instead of one figure. Switch on full details and a row also gains the complete Norwegian ad description, facilities, energy label, construction year, cadastre numbers, viewing times and the agent's phone number.

**Use something else when:** the property is not in Norway. Use [Rightmove Property Scraper](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) for UK sale and rental listings, with the sold-price history FINN has no public equivalent of. Use [ImmobilienScout24 Property Scraper](https://apify.com/sian.agency/immobilienscout24-property-scraper?fpr=sian) for German sale and rental listings, including the Nebenkosten and Energieausweis fields. Use [Funda Property Scraper](https://apify.com/sian.agency/funda-property-scraper?fpr=sian) for Dutch sale and rental listings with price per m² across the Netherlands. This actor covers FINN's seven Eiendom sections only. FINN's cars, jobs and Torget classifieds run on different front-ends and are out of scope, as is commercial property. FINN publishes no sold-price archive, so Norwegian sale history is not available from here.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/finn-no-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Norwegian property listings and prices from FINN.no using the Apify Actor `sian.agency/finn-no-property-scraper`.

Use it when I need: Norwegian property listings by area and filter. Each row carries the heading, street address, Prisantydning and Totalpris in NOK, monthly felleskostnader, usable and plot area in m², bedrooms, property type, ownership form, the listing estate agency, GPS coordinates and a direct FINN link. Rentals add monthly rent, deposit and furnishing state; new builds carry a price range instead of one figure. Switch on full details and a row also gains the complete Norwegian ad description, facilities, energy label, construction year, cadastre numbers, viewing times and the agent's phone number.

Don't use it when: the property is not in Norway — use rightmove-property-scraper or immobilienscout24-property-scraper or funda-property-scraper instead.

How to call it: give `locations` a list of Norwegian place names (`Oslo`, `Bergen`, `Bærum`) or FINN area codes, plus a `section` (`homes`, `lettings`, `newbuildings`, `plots`, `leisuresale`, `leisureplots`, `abroad`). Narrow with `priceFrom`, `priceTo`, `areaFrom`, `areaTo`, `minBedrooms`, `propertyType`, `ownershipType`, `energyLabel`, `sellerType`, `constructionYearFrom`, `constructionYearTo` or `publishedToday`, and order with `sort`. `includeDetails` adds the full ad description, facilities and agent phone for an extra charge per listing. To expand ads you already have, set `operation` to `listingDetail` and pass `listingUrls`; to reuse a search you built on finn.no, paste it into `searchUrls`.

Start with this input:
{
  "section": "homes",
  "locations": [
    "Oslo"
  ],
  "minBedrooms": 3,
  "priceTo": 12000000,
  "maxResults": 200
}

Ask me which Norwegian areas and which section to search, and whether they want estate-agent listings, private sellers or both, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull every three-bedroom apartment for sale in Oslo and Bærum under 12 million kroner and rank them by total price per square metre.*
- *Find the private sellers currently listing homes in Bergen and Trondheim without an estate agent, with their phone numbers.*
- *Give me every cabin for sale in Trøndelag with shoreline, and show the plot size against the asking price.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/finn-no-property-scraper.md](https://apify.com/sian.agency/finn-no-property-scraper.md).

### 📋 Overview

**FINN.no is where Norwegian property lives.** This actor turns its Eiendom sections into clean rows and hands them back as JSON, CSV or Excel. Each row carries asking price, total price, usable m², plot size, bedrooms, build year, energy label, GPS, the listing agency and the agent's phone.

**What you get:**

- ✅ **Seven sections, one actor**: homes for sale, homes to rent, new builds, plots, holiday homes, holiday plots and property abroad. 87,500 live listings on the day this was measured.
- ⚡ **50 listings per request**: FINN's own listing feed, so a thousand-row pull is twenty requests rather than a thousand page loads.
- 🎯 **Areas by name**: type Oslo, Bergen, Bærum or Frogner. Names are matched against FINN's live area tree, so nothing breaks when Norway merges another municipality.
- 💰 **$1.20 per 1,000 listings**: under every other FINN property actor on the Store, and you are only charged for rows that come back.
- 💎 **The Norwegian fields that decide a deal**: ownership form (Selveier, Andel, Aksje), Totalpris beside Prisantydning, felleskostnader, cadastre numbers and the energy rating.
- ✨ **Full ad text on request**: switch on details and each row gains the complete Norwegian description, the facilities list, viewing times and the agent's number.

***

### ✨ Features

- 🏘️ **Section selector**: pick homes, rentals, new builds, plots, cabins, holiday plots or abroad — each returns the columns that section actually has.
- 📍 **Multi-area sweeps**: pass a list of areas and the run covers all of them, which is how you get past FINN's 2,500-row ceiling on a single query.
- 🎚️ **FINN's own filters**: price, size, bedrooms, property type, ownership form, energy label, build year, private-seller-only and published-today — all applied by FINN before rows are counted.
- 💵 **Both Norwegian prices**: Prisantydning (asking) and Totalpris (asking plus document duty and fees), which are different numbers and are what a Norwegian buyer compares.
- 🔑 **Rental economics**: monthly rent, deposit and furnishing state on the rentals section.
- 🗺️ **GPS on every row**: latitude and longitude, ready for a map or a distance join.
- 📄 **Optional deep detail**: full description, facilities, energy label, construction year, cadastre, viewings and agent phone.
- 🔗 **Paste a FINN URL**: build the search on finn.no with FINN's own filters, paste the address bar, and every parameter on it is used as-is.
- 📊 **Clean numbers, not strings**: prices and areas arrive as numbers, with FINN's "not stated" zeros nulled so they never poison an average.
- 🆓 **Free trial rows**: run it without a card and see real Norwegian listings before you spend anything.

***

### 🎬 Quick Start

Pick a section, name an area, press Start. The first run returns rows in under ten seconds, and you can export them straight to CSV or Excel from the dataset tab. Everything below is optional.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~finn-no-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"section": "homes", "locations": ["Oslo"], "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose a section

Homes for sale is the default. Switch to rentals, new builds, plots, cabins, holiday plots or abroad from the dropdown.

#### Step 2: Name your areas

Type the Norwegian place names you care about — Oslo, Bergen, Trondheim, Bærum. Add as many as you like; each one is searched in turn.

#### Step 3: Press Start

Rows appear as they arrive. Export to JSON, CSV or Excel, or read them straight from the API.

**That's it. In about a minute you'll have:**

- Every matching listing with price, size, bedrooms and coordinates
- The estate agency behind each one
- A direct FINN link per row that will still work tomorrow

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (default) or `listingDetail` |
| `section` | string | No | `homes`, `lettings`, `newbuildings`, `plots`, `leisuresale`, `leisureplots`, `abroad` |
| `locations` | array | No | Norwegian area names or FINN area codes |
| `searchQuery` | string | No | Free-text keyword matched across the ad |
| `sort` | string | No | Newest, price, size or price per m² |
| `maxResults` | integer | No | Ceiling on listings returned and billed, counted across every area together |
| `publishedToday` | boolean | No | Only ads published today |
| `priceFrom` / `priceTo` | integer | No | Total price in NOK, or monthly rent on rentals |
| `areaFrom` / `areaTo` | integer | No | Usable floor area in m² |
| `minBedrooms` | integer | No | Minimum bedroom count, 1 to 5 |
| `propertyType` | string | No | Apartment, detached, semi-detached, terraced, farm and more |
| `ownershipType` | string | No | Selveier, Andel, Aksje, Obligasjon |
| `energyLabel` | string | No | A to G |
| `sellerType` | string | No | Estate agent or private seller |
| `constructionYearFrom` / `constructionYearTo` | integer | No | Build-year range |
| `includeDetails` | boolean | No | Add full description, facilities, agent phone |
| `listingUrls` | array | No | FINN ad URLs or finnkoder, for the Listing Detail operation |
| `searchUrls` | array | No | Paste FINN search URLs instead of using the fields above |

**Example:**

```json
{
  "section": "homes",
  "locations": ["Oslo", "Bærum"],
  "priceTo": 8000000,
  "minBedrooms": 3,
  "maxResults": 500
}
```

**Expanding ads you already have:**

```json
{
  "operation": "listingDetail",
  "listingUrls": [
    "https://www.finn.no/realestate/homes/ad.html?finnkode=474575679",
    "474861617"
  ]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **48 fields** including:

| Field | Type | Description |
|-------|------|-------------|
| `listingTitle` | string | The ad heading as FINN shows it |
| `url` | string | Direct link to the FINN ad |
| `address` | string | Street address and place |
| `priceSuggestion` | number | Prisantydning — the asking price in NOK |
| `priceTotal` | number | Totalpris — asking price plus duty and fees |
| `priceSharedCost` | number | Felleskostnader per month |
| `monthlyRent` | number | Monthly rent, on the rentals section |
| `deposit` | number | Deposit, on the rentals section |
| `areaFrom` / `areaTo` | number | Usable floor area in m² |
| `plotArea` | number | Plot size in m² |
| `bedrooms` | number | Bedroom count |
| `propertyType` | string | Leilighet, Enebolig, Hytte, Tomt and so on |
| `ownershipType` | string | Selveier, Andel, Aksje |
| `agencyName` | string | The listing estate agency |
| `latitude` / `longitude` | number | GPS position |
| `energyLabelClass` | string | A to G, when the ad carries one |
| `constructionYear` | number | Year built |
| `facilities` | array | Balcony, lift, garage, fireplace and the rest |
| `listingText` | string | The complete Norwegian ad description |
| `agentPhones` | array | Contact numbers on the ad |
| `viewingTimes` | array | Scheduled viewings |
| `imageUrls` | array | Every photo on the listing |

**Example:**

```json
{
  "adId": 474575679,
  "finnCode": "474575679",
  "listingTitle": "Lys og romslig 2-roms leilighet i 3.etg | Garasjeplass | Fine solforhold",
  "url": "https://www.finn.no/realestate/homes/ad.html?finnkode=474575679",
  "section": "homes",
  "address": "Dampsaga allé 44, Jessheim",
  "localArea": "Jessheim",
  "priceSuggestion": 3690000,
  "priceTotal": 3783600,
  "priceSharedCost": 2276,
  "currency": "NOK",
  "areaFrom": 50,
  "areaTo": 50,
  "usableArea": 56,
  "plotArea": 9687,
  "bedrooms": 1,
  "propertyType": "Leilighet",
  "ownershipType": "Selveier",
  "agencyName": "EIE eiendomsmegling Jessheim",
  "latitude": 60.14288,
  "longitude": 11.17802,
  "energyLabelClass": "A",
  "constructionYear": 2020,
  "floor": 3,
  "facilities": ["Balkong/Terrasse", "Garasje/P-plass", "Heis", "Lademulighet"],
  "agentPhones": ["+4795297578"],
  "viewingTimes": ["2026-09-07T16:30:00.000Z"],
  "publishedAt": "2026-08-29T16:09:29.900Z",
  "imageCount": 24,
  "isSold": false,
  "searchedArea": "Ullensaker",
  "_operation": "search"
}
```

***

### 💼 Use Cases & Examples

#### 1. Norwegian Housing Market Analysis

**A property analyst tracking price per square metre across Oslo's districts.**

**Input:** `section: homes`, a list of Oslo districts, `sort: PRICE_SQM_ASC`
**Output:** Every listing with Totalpris, usable m² and coordinates
**Use:** Compute price per m² by district weekly and watch the spread move. Nobody publishes a Norwegian index at district granularity.

#### 2. Estate Agency Lead Lists

**An agency prospecting owners who are selling without representation.**

**Input:** `sellerType: private`, the municipalities the agency covers
**Output:** The roughly 1,100 private sellers currently on FINN, with address, price and phone
**Use:** Call the list in the first week. Norwegian agencies bid over $20 a click for this audience; this is the same audience, at source.

#### 3. Rental Yield Benchmarking

**A landlord or fund pricing a portfolio against live comparables.**

**Input:** `section: lettings`, your areas, `areaFrom` and `areaTo` bracketing your units
**Output:** Monthly rent, deposit, furnishing state and size per comparable
**Use:** Set asking rent from what is listed this month rather than from last year's report.

#### 4. Development Pipeline Tracking

**A developer or lender watching where Norwegian supply is coming from.**

**Input:** `section: newbuildings` and `section: plots` across target municipalities
**Output:** Project price ranges, plot areas and cadastre numbers
**Use:** See a scheme months before completion, and see who bought the land next door.

#### 5. Cabin and Holiday-Home Comparables

**A valuer pricing a hytte, where no index helps.**

**Input:** `section: leisuresale`, the region, `includeDetails: true`
**Output:** Price, plot, facilities (shoreline, boat mooring, road access) and GPS
**Use:** Compare like with like on the features that move a Norwegian cabin price.

#### 6. Relocation and Corporate Housing

**An HR or relocation team costing a move to Norway.**

**Input:** `section: lettings`, the city, `minBedrooms`, `priceTo`
**Output:** Live rentals with rent, size and furnishing
**Use:** Give an incoming employee a real budget instead of a guess.

#### 7. Proptech Data Feeds

**A product team seeding a Norwegian valuation or search model.**

**Input:** A scheduled run per municipality with `publishedToday: true`
**Output:** Only what is new since yesterday
**Use:** Keep the index current for the price of the new rows, not the whole market.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/finn-no-property-scraper').call({
  section: 'homes',
  locations: ['Oslo', 'Bærum'],
  minBedrooms: 3,
  maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/finn-no-property-scraper').call(
    run_input={
        'section': 'lettings',
        'locations': ['Bergen'],
        'priceTo': 20000,
        'maxResults': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['address'], item.get('monthlyRent'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~finn-no-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"section": "leisuresale", "locations": ["Trøndelag"], "maxResults": 100}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a daily schedule
2. **HTTP Request**: run the actor with `publishedToday: true`
3. **Process**: filter the returned rows on your own criteria
4. **Action**: write to Sheets, push to a CRM, or send a Slack alert per new listing

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run, with every field and every section
- No credit card required
- Enough to see the data shape and check an area before you commit

#### PAID Tier (Production Ready)

- **Unlimited** listings per run, up to FINN's own 2,500-per-query ceiling
- Full-speed paging, no throttling
- Pay per result: rows that come back are charged, rows that fail are not

💰 **$1.20 per 1,000 listings** — under every other FINN property actor on the Store, and there is no separate proxy bill because this actor does not need one.

🔗 [View current pricing](https://apify.com/sian.agency/finn-no-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Do I need a FINN account, an API key or a proxy?**
A: No. Name an area and press Start.

**Q: Which parts of FINN does it cover?**
A: The seven Eiendom sections — homes for sale, homes to rent, new builds, plots, holiday homes, holiday plots and property abroad. FINN's cars, jobs and Torget classifieds are not in scope.

**Q: How do I name an area?**
A: Type the Norwegian place name — Oslo, Bergen, Bærum, Frogner. It is matched against FINN's own area list while the run works, so a raw FINN area code such as `1.22046.20220` works too.

**Q: How many listings can one search return?**
A: About 2,500 per query, which is FINN's ceiling rather than ours. To go wider, add areas or split by price band or property type.

**Q: What does the full-details option cost?**
A: It opens each ad page, so it bills one Detail Enrichment event per enriched listing on top of the search row. Leave it off and you pay search rows only.

**Q: Are prices in NOK?**
A: Yes on every Norwegian section. Property abroad is priced in EUR or the local currency, which is why the currency travels on each row instead of being assumed.

**Q: Can I paste a search I built on finn.no?**
A: Yes. Put it in Search URLs and every filter on it is used as-is, including ones this actor does not expose as its own field.

**Q: Does it return sold prices?**
A: No. FINN shows sold status for about three days and keeps no public archive, so there is no Norwegian sold-price history to return.

***

### 🐛 Troubleshooting

**"Atlantis is not a FINN area"**

- The name is matched against FINN's own list. Use the Norwegian spelling, or paste a FINN area code out of a finn.no search URL.

**A filter appears to have been ignored**

- The run log names the filters FINN applied and the ones it dropped. Not every filter exists in every section: energy label and ownership form are for-sale concepts, so they do nothing on rentals.

**Fewer rows than the match count**

- The header count is what FINN says matches. The reachable set is capped at 50 pages. Split the search by price band or by area to reach the rest.

**Empty prices on plots or new builds**

- Plots often state no asking price at all, and new builds carry a range rather than one number. Those rows use `priceRangeFrom` and `priceRangeTo`.

**No rows at all**

- Widen the filters. A price ceiling plus a bedroom minimum plus an energy label narrows a Norwegian municipality to nothing very quickly.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

FINN.no is a trademark of FINN.no AS (Schibsted). This actor is not affiliated with, endorsed by, or sponsored by FINN.no.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

Pick one per run. Property Search sweeps FINN's own search endpoint by area and filter and returns 50 listing rows per call. Listing Detail takes FINN ad URLs or finnkoder and returns the full description, facilities, energy label, viewings and agent contact for each.

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

Which FINN Eiendom section to search. Homes for sale is the big one (41,100 live listings); rentals hold 11,200 and cabins 7,100. Each section returns a slightly different row shape — rentals carry monthly rent and deposit, new builds carry price ranges instead of a single asking price.

## `locations` (type: `array`):

Norwegian counties, municipalities or city districts: Oslo, Bergen, Trondheim, Stavanger, Bærum, Tromsø, Frogner. Names are matched against FINN's own live area tree, so spelling follows FINN and a raw FINN area code (0.20061, 1.22046.20220) is passed straight through. One search runs per area, in the order you list them, and every area shares the single Max listings budget below. Leave empty to search all of Norway.

## `searchQuery` (type: `string`):

Free-text keyword, matched by FINN across the ad heading and body — enebolig, sjøutsikt, garasje, nyoppusset. Leave empty to take the whole section for each area.

## `sort` (type: `string`):

Newest first is what you want for monitoring a market on a schedule. Price per m² is the one that surfaces genuinely underpriced stock.

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

Hard ceiling on the listings this run returns and bills, counted across every area together: three areas with a limit of 50 return 50 rows in total, not 150. Each search call returns 50 rows, so the run stops at the first call that crosses your limit. FINN itself caps a single query at 2,500 rows, so tighten the filters or split the run to go wider.

## `publishedToday` (type: `boolean`):

Only ads FINN published today — the cheap way to run this daily and pay for new rows only.

## `priceFrom` (type: `integer`):

Lowest total price (Totalpris — asking price plus document duty and fees). 0 means no lower bound. On rentals this filters monthly rent instead.

## `priceTo` (type: `integer`):

Highest total price (Totalpris). 0 means no upper bound. On rentals this filters monthly rent instead.

## `areaFrom` (type: `integer`):

Smallest usable floor area to include, in square metres. 0 means no lower bound.

## `areaTo` (type: `integer`):

Largest usable floor area to include, in square metres. 0 means no upper bound.

## `minBedrooms` (type: `integer`):

Only listings with at least this many bedrooms. FINN supports 1 to 5; 0 means no bedroom filter.

## `propertyType` (type: `string`):

Restrict to one FINN property type. Apartments are 25,700 of the 41,100 homes for sale; detached houses are 9,600.

## `ownershipType` (type: `string`):

Norwegian ownership form. Freehold and co-op share behave very differently on financing and monthly cost, so this is usually the first filter a Norwegian buyer applies.

## `energyLabel` (type: `string`):

Norwegian energy rating (Energikarakter). Only a minority of ads carry one, so setting this drops every listing that has not been rated.

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

Private-seller ads are the FSBO pocket of the Norwegian market — about 1,100 of 41,100 homes for sale, and the list agents want.

## `constructionYearFrom` (type: `integer`):

Oldest construction year to include. 0 means no lower bound.

## `constructionYearTo` (type: `integer`):

Newest construction year to include. 0 means no upper bound.

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

Open each listing's ad page to add the full Norwegian description, facilities list, energy label, construction year, viewing times, cadastre and agent phone. Costs one extra request per listing and bills the Detail Enrichment event on top of the search row.

## `listingUrls` (type: `array`):

Used by the Listing Detail operation: FINN ad URLs to expand. Any section works — homes, lettings, project, plots, leisuresale, abroad. A bare finnkode (474575679) is accepted too and resolved against the homes path.

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

Paste FINN search URLs instead of filling the fields above. Copy the address bar after clicking through FINN's own filters and every parameter on it is used as-is, including filters this actor does not expose as fields.

## Actor input object example

```json
{
  "operation": "search",
  "section": "homes",
  "locations": [
    "Oslo"
  ],
  "searchQuery": "",
  "sort": "PUBLISHED_DESC",
  "maxResults": 50,
  "publishedToday": false,
  "priceFrom": 0,
  "priceTo": 0,
  "areaFrom": 0,
  "areaTo": 0,
  "minBedrooms": 0,
  "propertyType": "",
  "ownershipType": "",
  "energyLabel": "",
  "sellerType": "",
  "constructionYearFrom": 0,
  "constructionYearTo": 0,
  "includeDetails": false,
  "listingUrls": [],
  "searchUrls": []
}
```

# Actor output Schema

## `finnNoListings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "section": "homes",
    "locations": [
        "Oslo"
    ],
    "searchQuery": "",
    "sort": "PUBLISHED_DESC",
    "maxResults": 50,
    "publishedToday": false,
    "priceFrom": 0,
    "priceTo": 0,
    "areaFrom": 0,
    "areaTo": 0,
    "minBedrooms": 0,
    "propertyType": "",
    "ownershipType": "",
    "energyLabel": "",
    "sellerType": "",
    "constructionYearFrom": 0,
    "constructionYearTo": 0,
    "includeDetails": false,
    "listingUrls": [],
    "searchUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/finn-no-property-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 = {
    "operation": "search",
    "section": "homes",
    "locations": ["Oslo"],
    "searchQuery": "",
    "sort": "PUBLISHED_DESC",
    "maxResults": 50,
    "publishedToday": False,
    "priceFrom": 0,
    "priceTo": 0,
    "areaFrom": 0,
    "areaTo": 0,
    "minBedrooms": 0,
    "propertyType": "",
    "ownershipType": "",
    "energyLabel": "",
    "sellerType": "",
    "constructionYearFrom": 0,
    "constructionYearTo": 0,
    "includeDetails": False,
    "listingUrls": [],
    "searchUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/finn-no-property-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 '{
  "operation": "search",
  "section": "homes",
  "locations": [
    "Oslo"
  ],
  "searchQuery": "",
  "sort": "PUBLISHED_DESC",
  "maxResults": 50,
  "publishedToday": false,
  "priceFrom": 0,
  "priceTo": 0,
  "areaFrom": 0,
  "areaTo": 0,
  "minBedrooms": 0,
  "propertyType": "",
  "ownershipType": "",
  "energyLabel": "",
  "sellerType": "",
  "constructionYearFrom": 0,
  "constructionYearTo": 0,
  "includeDetails": false,
  "listingUrls": [],
  "searchUrls": []
}' |
apify call sian.agency/finn-no-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/finn-no-property-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/gSpLy26Lm7CLIFSm3/builds/sI6w3T7bOatVb8gHl/openapi.json
