FINN.no Real Estate Scraper & New-Listing Monitor - Norway
Pricing
from $1.46 / 1,000 listing returneds
FINN.no Real Estate Scraper & New-Listing Monitor - Norway
Turn monitoring on and every later run returns only the listings it has not returned before, so you are never charged for the same property twice. Every FINN.no listing as clean JSON: asking price, total price, monthly shared costs, area, bedrooms, ownership type, agency. Unofficial.
Pricing
from $1.46 / 1,000 listing returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
FINN.no Real Estate Scraper - Norway Homes for Sale & Rent
Pull property listings from FINN.no — Norway's largest marketplace — as clean JSON: the asking price, the total price with the share of cooperative debt, the monthly shared costs, area, plot, bedrooms, ownership type, address with coordinates, the agency and the publish time, for sale (homes) or to rent (lettings), for any Norwegian county or district.
Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by FINN.no. All product names are trademarks of their respective owners.
No API key. Reads the same public pages a visitor sees.
Run it tomorrow and you only get what is new
Schedule this Actor with monitoringMode: true and each run returns only the listings it has not returned before. Not "here is everything again, please de-duplicate it yourself" — the Actor remembers what it already gave you, so a daily feed of a 4,000-listing search costs you the handful of new homes, not 4,000 rows every morning. You are never charged for the same property twice.
Listings your filters removed are remembered too, so widening a filter later does not resurrect them as false "new" listings. Listings that did not fit under your limit are not remembered, so they are still waiting on the next run instead of being silently lost.
Why this one is different
Three prices, each with its real meaning
A Norwegian sale listing carries three numbers that are easy to confuse. FINN publishes the asking price (prisantydning), the total price (totalpris — the asking price plus the purchase costs such as the 2.5% document tax and, for a cooperative share, the buyer's share of the cooperative's debt) and the monthly shared costs (felleskostnader). In the 100 Oslo sale listings measured their medians were NOK 6,950,000, NOK 7,398,901 and NOK 4,741 — mixing them up changes a price by hundreds of thousands of kroner. This Actor keeps them apart as price (priceType: "asking-price"), totalPrice and sharedCostPerMonth. In the 64 freehold (Selveier) listings measured the total sat 2.5% above the asking price — that is the purchase cost, not debt; in the 31 cooperative (Andel) listings the gap ran from 0.1% to 69%, which is the debt. A new-build project with no single price comes back with priceType: "sale-range", price: null and priceFrom / priceTo as FINN shows them ("fra 1 120 000"). A rental comes back as price with priceType: "monthly-rent" (median in the 50 Oslo rentals: NOK 19,000).
Area is a value, or honestly a range
FINN publishes the internal area as a range on some listings. This Actor returns areaSqm only when the range is a single value, and areaSqmFrom / areaSqmTo always — it never picks one end of a range and calls it the area. Area filters keep a ranged listing whenever any part of the range fits.
A private seller or landlord is never named
Listings from private advertisers (49 of the 150 measured, mostly rentals) carry no agency name on FINN. This Actor returns advertiserType: "private" with agencyName: null for them and the agency name only for agency listings. Norwegian mobile numbers and e-mail addresses written into the heading or address are removed. Listing IDs and prices, which can look like phone numbers, are left intact.
FINN's page is read, never executed
FINN ships its data as a React Router stream — one flat array with index references. This Actor reconstructs it in plain code; it never evaluates FINN's JavaScript.
Places are FINN's own codes, checked before anything is requested
FINN identifies places by code (0.20061 is Oslo). This Actor accepts the sixteen county names as FINN lists them, or any code copied from a FINN address (1.20061.20528 is the Bjerke district). An unknown word is refused up front; a code FINN does not know comes back as a free no-such-search row, because FINN answers such codes — and any page beyond its last — with HTTP 500 rather than an empty list. searchedLocation on every row carries the place FINN actually searched.
Pages overlap, and that is handled
FINN's pages can overlap: in one measurement the second page started at the 29th listing (21 of its 50 cards were already on page one); in another, taken a few hours later, the two pages did not overlap at all. Repeats are dropped before delivery, so you are never charged twice for the same listing, and the page budget is sized for the worst case of 29 new listings per page. FINN serves at most 50 pages per search.
Filters run here
Every filter — price, total price, shared costs, bedrooms, area, property type, ownership, advertiser, coming-for-sale, promoted, keywords, agency, publish date — runs on the rows already fetched. Only the location is sent to FINN. Nothing extra is requested and nothing extra is charged. A listing is never dropped for a value FINN did not publish.
Input
Either paste a search URL, or build one from the fields below.
| Field | Type | Default | Description |
|---|---|---|---|
searchUrl | string | — | e.g. https://www.finn.no/realestate/homes/search.html?location=0.20061. Only location is kept |
channel | string | sale | sale (homes) or rent (lettings) |
location | string | oslo | A county (oslo, akershus, vestland, rogaland, trondelag, innlandet, agder, buskerud, vestfold, ostfold, telemark, nordland, troms, finnmark, more-og-romsdal, svalbard) or a FINN code. Empty = all of Norway |
maxListings | integer | 20 | 1-1000. One listing = one row = one charged event. FINN serves at most 50 pages (up to 2,500 listings) per search |
maxPages | integer | 0 | Hard cap on requests; 0 = decide from maxListings. 50 at most |
useProxy | boolean | false | Off by default — FINN answers Apify's network directly. Switches on by itself if blocked |
keywords / keywordMatch / excludeKeywords | array / string / array | — | Match on heading, type, ownership, address, area name, agency and furnishing |
agencyNames | array | — | Keep only these agencies (partial match) |
minPrice / maxPrice | integer | 0 | NOK. Asking price, or monthly rent. A project with only a range is kept whenever any part of the range fits. A listing with no price is kept |
maxTotalPrice | integer | 0 | NOK. FINN's total price — asking price plus purchase costs and any share of cooperative debt (sale only) |
maxSharedCost | integer | 0 | NOK per month |
requirePrice | boolean | false | Drop listings with no published price |
minBedrooms / maxBedrooms | integer | -1 | -1 = off. FINN counts a studio as 0 bedrooms. An unpublished count is kept |
minAreaSqm / maxAreaSqm | integer | 0 | m². A ranged listing is kept if any part of the range fits |
propertyTypes | array | — | Partial match on FINN's words: Leilighet, Enebolig, Rekkehus, Tomannsbolig, Gårdsbruk … |
ownershipTypes | array | — | Sale only: Selveier, Andel, Aksje. An unpublished type is kept |
advertiserType | string | any | agency or private |
excludeComingForSale | boolean | false | Drop listings flagged as coming for sale |
excludePromoted | boolean | false | Drop paid highlight placements (102 of the 150 measured carry one) |
publishedWithinDays | integer | 0 | By FINN's publish timestamp. 0 = off |
monitoringMode | boolean | false | Return only listings not returned on a previous run |
resetMonitoringState | boolean | false | One-shot: forget what was already returned |
{ "channel": "sale", "location": "oslo", "maxListings": 200,"minBedrooms": 2, "maxTotalPrice": 8000000, "maxSharedCost": 5000, "ownershipTypes": ["Selveier"], "excludeComingForSale": true }
Monitoring mode turns this into a daily feed
FINN lists newest first. Schedule this Actor and set monitoringMode: true: each run returns only the listings it has not returned before, reading on past the listings it already knows — up to FINN's 50 pages, or maxPages if you set it — until it has maxListings new ones (in Oslo one page of 50 covers about three hours of new sale listings, so a daily feed of 200 is a few pages). Listings removed by your filters are remembered too, so changing a filter later does not resurrect them as false "new" listings — and listings that simply did not fit under maxListings, or were cut off by the run's charge limit, are not remembered, so they are still waiting for you on the next run rather than being silently lost.
Measured on 2026-09-05: 5,249 homes for sale in Oslo; 2,466 to rent in Oslo; 41,311 for sale across Norway.
Output
One row per listing:
{"source": "finn.no","status": "ok","listingId": "475590706","title": "Arealeffektiv og delikat 1 roms i 7. etasje. Felles takterrasse. Varmt vann og internett inkl. (fiber). Nært \"alt\".","url": "https://www.finn.no/realestate/homes/ad.html?finnkode=475590706","searchedLocation": "Oslo","transactionType": "sale","propertyType": "Leilighet","ownershipType": "Andel","isComingForSale": false,"isPromoted": true,"price": 2980000,"priceFrom": null,"priceTo": null,"priceCurrency": "NOK","priceType": "asking-price","totalPrice": 3167081,"sharedCostPerMonth": 3837,"areaSqm": 18,"areaSqmFrom": 18,"areaSqmTo": 18,"plotSqm": 2368,"bedrooms": 0,"furnishedState": null,"address": "Stavangergata 46 A, Oslo","localAreaName": "Bjølsen - Perfekt førstegangskjøp.","latitude": 59.94441,"longitude": 10.75882,"advertiserType": "agency","agencyName": "OBOS eiendomsmeglere - Kalbakken","viewingTimes": ["2026-09-13T12:00:00.000Z"],"mainImageUrl": "https://images.finncdn.no/dynamic/default/2026/9/vertical-2/05/6/475/590/706_….jpg","publishedAt": "2026-09-05T08:00:27.000Z","scrapedAt": "2026-09-05T09:30:32.423Z"}
Measured across 150 live listings (129 unique) on 2026-09-05 — 100 for sale and 50 to rent in Oslo: id, heading, url, type, address, advertiser and publish time on 150 of 150; bedrooms on 149; coordinates on 141 (nine rentals carried 0,0, which is returned as null, not as a point in the Gulf of Guinea); a price on 147 — the three without one are a coming-for-sale home listed twice, with no price yet, and a project that carries a range instead (priceFrom / priceTo); an area on 147 (146 as a single value); a plot area above zero on 90 (for a flat this is the whole estate's plot, not the flat's); a total price on 97 and monthly shared costs on 84 of the 100 sales (a zero on FINN is returned as null, not as a free home); an ownership type on 100 of the 100 sales; a local area name on 137; viewing times on 91. The card carries at most three preview images, so no image count is returned — only mainImageUrl. localAreaName is the agent's own line and sometimes reads as a slogan rather than a place.
Rows that are never charged
status | when |
|---|---|
no-results | FINN reports zero listings for this search. That is its answer, not a failure |
no-such-search | FINN answered HTTP 500 — what it does for a location code it does not know, and for a page beyond its last. Not a claim that there is nothing there |
no-filter-match | Listings were read, but your filters removed all of them. The row says how many were read |
no-new-listings | Monitoring mode: nothing new since the previous run |
unreadable | The page could not be read, its stream was missing, or it claimed a total above zero while yielding nothing |
Pricing
Pay per listing returned. Rows that report an empty search, an unknown location, a filter that matched nothing, or a page that could not be read are not charged. A listing that appears twice across pages is dropped before delivery, so it is never charged twice.
Notes
robots.txtwas read in full on 2026-09-05. TheUser-agent: *section disallows messaging, profile, contact, map (/map,/map?), gallery, report and a few legacy pages. This Actor requests only/realestate/homes/search.htmlor/realestate/lettings/search.htmlwithlocationandpage.- Only public pages are read. No login, no API key.