FINN.no Real Estate Scraper & New-Listing Monitor - Norway avatar

FINN.no Real Estate Scraper & New-Listing Monitor - Norway

Pricing

from $1.46 / 1,000 listing returneds

Go to Apify Store
FINN.no Real Estate Scraper & New-Listing Monitor - Norway

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

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.

FieldTypeDefaultDescription
searchUrlstringe.g. https://www.finn.no/realestate/homes/search.html?location=0.20061. Only location is kept
channelstringsalesale (homes) or rent (lettings)
locationstringosloA 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
maxListingsinteger201-1000. One listing = one row = one charged event. FINN serves at most 50 pages (up to 2,500 listings) per search
maxPagesinteger0Hard cap on requests; 0 = decide from maxListings. 50 at most
useProxybooleanfalseOff by default — FINN answers Apify's network directly. Switches on by itself if blocked
keywords / keywordMatch / excludeKeywordsarray / string / arrayMatch on heading, type, ownership, address, area name, agency and furnishing
agencyNamesarrayKeep only these agencies (partial match)
minPrice / maxPriceinteger0NOK. 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
maxTotalPriceinteger0NOK. FINN's total price — asking price plus purchase costs and any share of cooperative debt (sale only)
maxSharedCostinteger0NOK per month
requirePricebooleanfalseDrop listings with no published price
minBedrooms / maxBedroomsinteger-1-1 = off. FINN counts a studio as 0 bedrooms. An unpublished count is kept
minAreaSqm / maxAreaSqminteger0m². A ranged listing is kept if any part of the range fits
propertyTypesarrayPartial match on FINN's words: Leilighet, Enebolig, Rekkehus, Tomannsbolig, Gårdsbruk
ownershipTypesarraySale only: Selveier, Andel, Aksje. An unpublished type is kept
advertiserTypestringanyagency or private
excludeComingForSalebooleanfalseDrop listings flagged as coming for sale
excludePromotedbooleanfalseDrop paid highlight placements (102 of the 150 measured carry one)
publishedWithinDaysinteger0By FINN's publish timestamp. 0 = off
monitoringModebooleanfalseReturn only listings not returned on a previous run
resetMonitoringStatebooleanfalseOne-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

statuswhen
no-resultsFINN reports zero listings for this search. That is its answer, not a failure
no-such-searchFINN 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-matchListings were read, but your filters removed all of them. The row says how many were read
no-new-listingsMonitoring mode: nothing new since the previous run
unreadableThe 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.txt was read in full on 2026-09-05. The User-agent: * section disallows messaging, profile, contact, map (/map, /map?), gallery, report and a few legacy pages. This Actor requests only /realestate/homes/search.html or /realestate/lettings/search.html with location and page.
  • Only public pages are read. No login, no API key.