FINN.no Scraper - Norway Property Listings avatar

FINN.no Scraper - Norway Property Listings

Pricing

from $3.00 / 1,000 listings

Go to Apify Store
FINN.no Scraper - Norway Property Listings

FINN.no Scraper - Norway Property Listings

Extract FINN.no property listings in Norway, including prices, sizes, locations, photos and available agent contacts. Search categories or collect specific ads. Billed per delivered row plus a start event.

Pricing

from $3.00 / 1,000 listings

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

4

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

FINN.no Scraper

Extract FINN.no property listings in Norway, with prices, sizes, locations and published contact details in rows you can export.

  • Search homes for sale, rentals, holiday homes, plots and new projects.
  • Collect specific ads, company profiles, vehicles, jobs or used goods.
  • Add available viewing times, facilities and photos to listing rows.
  • Export results or use them through the Apify API and MCP.
  • Pay $3.00 per 1,000 delivered rows, plus a $0.005 start event at default memory.

What does FINN.no Scraper do?

FINN.no Scraper collects public information from finn.no. Start with a location, keyword or listing URL. Each row represents a listing, office profile or service result, depending on your input.

  • Search: choose a channel and enter location or q.
  • Specific ads: use detailUrls instead of searching.
  • Office profiles: use channel: "office" with officeUrl.
  • Discovery: use feeds, sitemaps or map areas to find ads.
  • Additional data: select an appsgwService, or browse refurbished electronics with channel: "nybrukt".

enrichDetails is on by default. Optional neighborhood, ownership-history, area-profile and office enrichment is off by default and adds fields to the listing row, not separate billed rows. Nybrukt variant expansion is also off by default; each delivered variant row is billed.

What data can you extract from FINN.no?

Listing rows

Fields vary by channel and what FINN publishes. Search-only rows can contain fewer details than individual ads.

FieldDescriptionExample
listingIdFINN identifier; also available as finnkode for ads123456789
nameListing headlineExample apartment in Oslo
listingUrlSource ad URLhttps://www.finn.no/realestate/homes/ad.html?finnkode=123456789
channelSelected listing categorysale
priceDisplayPublished price text, usually NOK3 900 000 kr
bedroomsNumber of bedrooms2
areaSqmProperty area in square metres65
addressLocation text or structured addressOslo
propertyTypeProperty categoryLeilighet
ownershipTypeOwnership categorySelveier
imageUrlsAvailable photo URLs[]
facilitiesPublished amenities["Balkong"]
viewingsViewing information, when available[]
phonesPublished contact numbers[{"value":"+1 555 0100","type":"mobile"}]
emailsPublished contact emails[{"value":"name@example.com","type":"work"}]
personContact name and role{"name":"Jane Doe","role":"Agent"}
orgBrokerage or company{"name":"Example Agency"}
leadAbsencesReasons contact information is missing{}
enrichmentOptional supplementary information{}
scrapedAtCollection timestamp2026-10-24T08:00:00+00:00

Office rows

These use type: "office"; a profile title is not a guarantee of complete contact information.

FieldDescriptionExample
officeNameProfile headingExample Agency
officeUrlSupplied FINN profile URLhttps://www.finn.no/realestate/agent/

Nybrukt rows

Products and reseller variants use listing rows with additional fields when available.

FieldDescriptionExample
skuVariant identifierEXAMPLE-SKU
conditionPublished conditionGrade A
storageStorage capacity128 GB
seller_nameReseller nameExample Seller
price_currencyCurrency codeNOK

Service rows

FieldDescriptionExample
serviceRequested servicelocation_autocomplete
serviceDataJsonStructured service result stored as a JSON string"{\"name\":\"Oslo\"}"
httpStatusService response status200

How to scrape FINN.no

  1. Open FINN.no Scraper in Apify Console.
  2. Enter location, such as Oslo, or paste a listing into detailUrls.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and inspect the dataset when the run finishes.
  5. Download rows or read them through the API.

Empty input starts an example requesting 3 homes for sale in Oslo from the form's sample values. It is billed normally; it is not a free preview. A place, keyword or listing URL can be the only target field. Specialized channels still need the settings described below; there is no mode input.

Real-estate channels are sale, rent, projects, leisure, leisure_plots, plot, commercial, abroad and planned. Other search channels are torget, car, mc, boat, caravan and job. A keyword without a location uses Oslo. For abroad, leave location unset; Norwegian location filters can exclude overseas listings.

Specific ads

Fill detailUrls with one or more FINN ad URLs. These replace the usual search. FINN subdomains, addresses without a scheme and http:// addresses are normalized to https://www.finn.no.

Office profiles

Set channel to office and provide officeUrl or profile URLs in detailUrls. Do not rely on officeUrl alone to select this channel.

Discovery

feed: true reads recent entries for torget or job. enumerateMode: "sitemap" discovers listing URLs; seed_pool uses previously discovered URLs with a sitemap fallback. Map options use mapBbox and optional mapLayers. Discovery does not guarantee every active ad.

Services and Nybrukt

Use appsgwService with the matching term or identifier. Service results are not necessarily property listings. For refurbished electronics, set channel: "nybrukt" and use nybruktCategory or nybruktProduct. nybruktExpandVariants changes category collection to reseller-variant rows.

What to fill in

FieldWhat to enterDefault
locationNorwegian place or FINN location codeOslo when omitted
channelCategory listed abovesale
qSearch words, preferably NorwegianEmpty
detailUrlsArray of FINN ad URLsEmpty
officeUrlFINN profile URL with channel: "office"Empty
maxResultsRow limit per input, 1–2,00070; form sample 3
maxPagesSearch-page setting, 1–100; collection can expand it to meet the row limit1
fetchAllPagesContinue through available pages within the row limitfalse
priceFrom, priceToPrice range in NOKEmpty
priceCollectiveFrom, priceCollectiveToCollective-price rangeEmpty
areaFrom, areaToProperty size range, m²Empty
plotAreaFrom, plotAreaToPlot size range, m²Empty
minBedroomsMinimum bedroom countEmpty
propertyType, ownershipTypeFINN category IDs or labelsEmpty
constructionYearFrom, constructionYearToConstruction-year rangeEmpty
published, videoTypeFINN recency or video filtersEmpty
sortForm option, such as PRICE_ASCUnset
enrichDetailsAdd available ad detailstrue
enrichOffice, enrichAreaProfile, enrichOwnershipHistory, enrichNeighborhoodOptional supplementary fieldsfalse
incrementalSkip previously seen listing IDs across runsfalse
feedRecent feed entriesfalse
enumerateModeSitemap, saved URL collection or map discoveryUnset
mapBboxmin_lon,min_lat,max_lon,max_latSouthern Norway
mapZoom, mapLayersZoom 3–16 and FINN map-layer identifiers10; available layers
appsgwServiceService name, such as location_autocompleteEmpty
appsgwTerm, appsgwId, appsgwIdsMatching term, single ID or ID listEmpty
appsgwLimitSuggestion limit, 1–100Service default
nybruktCategory, nybruktProductCategory or product slugmobil on Nybrukt; no product
nybruktExpandVariantsExpand category products into variantsfalse
revealPhonesRequest available vehicle-ad phone numbersfalse
includeRawInclude extra source fields when availablefalse
fieldsOptional output-field selection; leave empty for full rowsEmpty
webhookUrlHTTPS address for result notificationEmpty

Search:

{"location":"Bergen","channel":"rent","maxResults":3}

Specific ads; replace the example identifier with your ad:

{"detailUrls":["https://www.finn.no/realestate/homes/ad.html?finnkode=123456789"],"maxResults":1}

Office profile; replace the example URL with an actual profile:

{"channel":"office","officeUrl":"https://www.finn.no/realestate/agent/","maxResults":1}

Recent feed:

{"channel":"torget","q":"sykkel","feed":true,"maxResults":3}

Sitemap discovery:

{"enumerateMode":"sitemap","channel":"sale","maxResults":3}

Saved URL discovery:

{"enumerateMode":"seed_pool","channel":"sale","maxResults":3}

Map discovery:

{"enumerateMode":"mapBbox","mapBbox":"10.70,59.88,10.80,59.95","maxResults":3}

Location suggestions:

{"appsgwService":"location_autocomplete","appsgwTerm":"Oslo","maxResults":3}

Refurbished electronics:

{"channel":"nybrukt","nybruktCategory":"mobil","nybruktExpandVariants":false,"maxResults":3}

maxItems and limit are aliases for maxResults; city and place mean location; keyword and query mean q; urls and startUrls mean detailUrls.

Close field-name misspellings are corrected when possible; other unknown fields are ignored with a note. An invalid sort is dropped. Invalid targets fail with INVALID_INPUT: followed by the field and correction, before rows are charged; a start event can still apply. Every run writes its input interpretation to INPUT_REPORT in the default key-value store. No automatic date-window advancement is provided.

Output example

Illustrative property row; the identifier and address are placeholders, not a captured ad:

{
"listingId": "123456789",
"finnkode": "123456789",
"name": "Example apartment in Oslo",
"type": "listing",
"status": "active",
"country": "NO",
"authority": "finn.no",
"channel": "sale",
"listingUrl": "https://www.finn.no/realestate/homes/ad.html?finnkode=123456789",
"priceDisplay": "3 900 000 kr",
"bedrooms": 2,
"areaSqm": 65,
"address": "Example Street 1, Oslo",
"phones": [],
"emails": [],
"scrapedAt": "2026-10-24T08:00:00+00:00"
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Nested fields are easier to retain in JSON than a flat spreadsheet.

Why use this FINN.no scraper?

  • Pay per delivered row: unsuccessful page attempts are not billed as rows.
  • Keep partial results: available partial rows are delivered when collection ends early; rows already saved remain available.
  • Understand failures: ERROR_SUMMARY and RUN_SUMMARY provide failure or partial-result information.
  • Avoid invented details: unavailable source fields remain empty or absent.
  • Batch specific inputs: provide several detailUrls or supported appsgwIds in one run.
  • No proxy configuration: you do not need to set up proxies.

How much does it cost to scrape FINN.no?

The Actor uses pay-per-event pricing. At the default 512 MB memory, one start event costs $0.005. Memory billing uses one start event per GB, with a minimum of one.

Apify planStart event at 512 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.003$3.00
Business$0.005$0.003$3.00

These are event prices. The current Actor configuration marks platform usage as user-paid, so do not assume platform usage is included; check the run's pricing before starting.

  • maxResults applies to each input. Its default is 70; larger requests are collected in parts of 70.
  • Free-plan users have up to 200 rows per run and 10 runs of this Actor. Paid plans remove the 10-run restriction, not the input limits.
  • Set Maximum cost per run (maxTotalChargeUsd in the API) to cap event charges across all inputs.

Example: 5 delivered rows cost 5 × $0.003 + $0.005 = $0.020 in events at 512 MB, before any separately charged platform usage. Empty runs have no row charge, but a start charge can still apply.

What happens when the run timeout is too short

A run can pause rather than fail when results are expected after its remaining timeout. It displays “Queued on the collection backend; this run will resume automatically when results are ready (about N s).” and temporarily appears as ABORTED.

When results are ready, the same run resumes and delivers to the same dataset. Delivery skips rows already saved; the resumed-delivery message is “Resumed: delivering N rows.” Successful delivery finishes as SUCCEEDED. No manual restart is needed for this pause. A genuine collection failure can still produce an error or partial result.

The pause mechanism has a limit of 3 attempts. Keep the default timeout of 3,600 seconds to reduce interruptions. The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return no rows during a pause. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.

Use with AI agents and the API

Apify MCP server

In Claude, ChatGPT, Cursor, VS Code or another compatible remote MCP client, add:

https://mcp.apify.com?tools=lentic_clockss/finn-scraper

Sign in through Apify OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read results with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/finn-scraper with APIFY_TOKEN set locally.

Example prompt: “Collect three rental listings in Bergen and return their prices, sizes and URLs.”

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/finn-scraper").call(
run_input={"location": "Bergen", "channel": "rent", "maxResults": 3}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/finn-scraper').call({
location: 'Bergen', channel: 'rent', maxResults: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For asynchronous HTTP runs, send the JSON input to POST https://api.apify.com/v2/acts/lentic_clockss~finn-scraper/runs with an Authorization: Bearer token header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Apify Schedules can repeat saved searches; use incremental when you want to skip previously seen listing IDs.

På norsk

FINN.no Scraper henter offentlig tilgjengelige annonser fra FINN og gjør dem om til rader som kan lastes ned. For boliger fyller du inn location, for eksempel Oslo eller Bergen, og velger channel: sale for salg eller rent for leie. Bruk detailUrls hvis du vil hente bestemte annonser. Start gjerne med maxResults satt til 3. Du får pris, størrelse, beliggenhet og andre opplysninger som annonsen faktisk viser. Kontaktinformasjon kan mangle, særlig i private leieannonser. Resultatene faktureres per levert rad, i tillegg til en startavgift og eventuell plattformbruk. Tomt input starter et lite, betalbart eksempel fra Oslo. Du kan laste ned radene som Excel, CSV eller JSON.

FAQ

Public availability does not remove your obligations. You are responsible for FINN's terms and applicable data-protection law. Collecting or using personal data requires a lawful basis; this Actor does not grant one.

Why did my run end as ABORTED?

Check the status message. An automatic pause can appear as ABORTED before resuming. A manually stopped run is different and is not guaranteed to restart.

How many results can I get?

maxResults accepts up to 2,000 per input. Availability, pagination, the charge limit and the free-plan cap can reduce delivery. A request is a ceiling, not a promised count.

Why are some fields empty?

Search cards contain fewer fields than details. FINN may omit size, price or contact information. Private rentals can offer only a contact form, which the Actor does not submit.

Does it collect listing details?

Yes. enrichDetails defaults to true; turn it off for search-only collection. Additional enrichment is optional and depends on the source.

Can I use this as a FINN.no API?

Use the Apify API examples above. This is an independent scraper, not an official FINN API.

Why did my free-plan run stop after 10 runs?

The Actor limits free-plan users to 10 runs. The status message identifies the limit. Paid Apify plans are not subject to that run-count restriction.

Does incremental collection detect changed prices?

No. incremental skips stored listing IDs, rather than comparing prices. Leave it off when revisiting known ads for changes.

Limitations

  • FINN coverage is not a complete inventory of Norway's property market.
  • Filters and field availability differ between channels; property filters do not apply universally.
  • Office profiles do not guarantee phone numbers, emails or individual agent details.
  • enumerateMode: "bare_id" has no dedicated collection path; use detailUrls for known ads.
  • Map and sitemap discovery may return limited details. No complete historical archive is promised.
  • A forced stop cannot guarantee delivery of information not yet saved to the dataset.

More real estate and property data scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.