Finn.no Real Estate Scraper
Pricing
from $1.00 / 1,000 listings
Finn.no Real Estate Scraper
Scrape Norwegian real-estate listings from Finn.no with search URL or filter-based discovery, optional full details and broker contact info.
Pricing
from $1.00 / 1,000 listings
Rating
0.0
(0)
Developer
Data Scrapers
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
Finn.no Real Estate Scraper creates a structured dataset of Norwegian home listings collected from Finn.no. Each dataset item can include the listing id, title, location, asking and total price, usable area, rooms, property type, ownership, energy label, broker organisation, and publication time. Query the source with a Finn search URL or with filters for area, price, size, and housing type. Control the result limit with maxItems, and optionally request full listing details or broker contact. Retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | finn.no |
| Record unit | One home listing |
| Input methods | startUrls, or filters such as locations, price, and propertyTypes |
| Main identifiers | id, url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML |
| Update model | Fresh records per Actor run |
| Pricing | $1.00 per 1,000 listings. Detail and broker events are $2.00 per 1,000. Platform usage is billed separately. |
Coverage and available records
The Actor collects homes for sale from Finn.no. A startUrls entry is a Finn homes search URL. When no start URL is set, the Actor builds a search from the filter fields. maxItems stops the run after that many saved listings. 0 is not used; the schema default is 50.
scrapeDetails loads the listing page and charges detailed-listing when that page is saved. includeContactInfo charges broker-info when a contact block is saved. Search-card rows have source other than detail and do not include the detail-only fields. Sold, rental, and commercial Finn sections outside the homes search are not collected by this input.
Data dictionary
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
| id | string | no | Finn listing code. Deduplication key. | 470675677 |
| url | string | yes | Public listing page | https://www.finn.no/realestate/homes/ad.html?finnkode=470675677 |
| title | string | yes | Listing title | Enebolig med 3 soverom |
| location | string | yes | Address text | Skøelvdalen 231, 9310 Sørreisa |
| priceSuggestion | number | yes | Asking price, NOK | 1250000 |
| priceTotal | number | yes | Total price, NOK | 1282340 |
| priceSharedCost | number | yes | Shared monthly cost, NOK | 0 |
| areaUsable | number | yes | Usable area, square meters | 172 |
| bedrooms | number | yes | Bedroom count | 3 |
| rooms | number | yes | Room count | 4 |
| propertyType | string | yes | Housing type | Enebolig |
| ownershipType | string | yes | Ownership | Selveier |
| constructionYear | number | yes | Year built | 1958 |
| energyLabel | string | yes | Energy label | E |
| organisationName | string | yes | Broker organisation | EiendomsMegler 1 Finnsnes |
| publishedAt | string | yes | Publication time, ISO-8601 | 2026-07-24T17:42:00+00:00 |
| imageUrl | string | yes | Primary image | https://images.finncdn.no/dynamic/default/2026/7/vertical-2/24/7/470/675/677_8685aebe-5ba0-4089-aa60-1321d855748a.jpg |
| latitude | number | yes | Latitude | 69.11598 |
| longitude | number | yes | Longitude | 18.01850 |
| source | string | yes | detail when the listing page was fetched | detail |
Example dataset record
{"id": "470675677","url": "https://www.finn.no/realestate/homes/ad.html?finnkode=470675677","title": "Enebolig med 3 soverom | Balkong, terrasse og garasje | Ligger landlig til i Skøelvdalen","location": "Skøelvdalen 231, 9310 Sørreisa","priceSuggestion": 1250000,"priceTotal": 1282340,"priceSharedCost": 0,"areaUsable": 172,"bedrooms": 3,"rooms": 4,"propertyType": "Enebolig","ownershipType": "Selveier","constructionYear": 1958,"energyLabel": "E","organisationName": "EiendomsMegler 1 Finnsnes","publishedAt": "2026-07-24T17:42:00+00:00","imageUrl": "https://images.finncdn.no/dynamic/default/2026/7/vertical-2/24/7/470/675/677_8685aebe-5ba0-4089-aa60-1321d855748a.jpg","latitude": 69.11598185054471,"longitude": 18.018504483094624,"source": "detail"}
This row came from a Finn homes search for location code 0.20061 with scrapeDetails enabled.
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
| startUrls | array | no | empty | Finn homes search URLs | Direct search pages. Used ahead of the filter fields. |
| searchQuery | string | no | empty | Free text | Keyword on the homes search. |
| publishedToday | boolean | no | false | true, false | Limit to listings published today. |
| locations | array | no | empty | Finn area ids | Counties or areas. |
| saleStatus | array | no | empty | Schema enum | Sale status filter. |
| propertyCondition | string | no | empty | Schema enum | Condition filter. |
| priceFrom | integer | no | empty | NOK | Minimum asking price. |
| priceTo | integer | no | empty | NOK | Maximum asking price. |
| totalPriceFrom | integer | no | empty | NOK | Minimum total price. |
| totalPriceTo | integer | no | empty | NOK | Maximum total price. |
| sharedCostFrom | integer | no | empty | NOK | Minimum shared monthly cost. |
| sharedCostTo | integer | no | empty | NOK | Maximum shared monthly cost. |
| areaFrom | integer | no | empty | Square meters | Minimum usable area. |
| areaTo | integer | no | empty | Square meters | Maximum usable area. |
| minBedrooms | integer | no | empty | Integer | Minimum bedrooms. |
| constructionYearFrom | integer | no | empty | Year | Oldest year built. |
| constructionYearTo | integer | no | empty | Year | Newest year built. |
| plotAreaFrom | integer | no | empty | Square meters | Minimum plot size. |
| plotAreaTo | integer | no | empty | Square meters | Maximum plot size. |
| propertyTypes | array | no | empty | Schema enum | Housing types. |
| ownershipTypes | array | no | empty | Schema enum | Ownership types. |
| sellerTypes | array | no | empty | Schema enum | Private or broker. |
| facilities | array | no | empty | Schema enum | Facility filters. |
| energyLabels | array | no | empty | Schema enum | Energy labels. |
| floors | array | no | empty | Schema enum | Floor filters. |
| videoTypes | array | no | empty | Schema enum | Digital viewing filters. |
| scrapeDetails | boolean | no | false | true, false | Fetch each listing page. Charges detailed-listing. |
| includeContactInfo | boolean | no | false | true, false | Save broker contact when present. Charges broker-info. |
| maxItems | integer | no | 50 | 0 or a positive integer | Maximum listings saved. |
| proxyConfiguration | object | no | Apify residential | Apify proxy input | Proxy used for Finn requests. |
Minimal request:
{"startUrls": [{ "url": "https://www.finn.no/realestate/homes/search.html?location=0.20061" }],"maxItems": 5}
Retrieve the data through the API
Start the Actor with JSON input, wait for the run, then read the default dataset. Other languages are on the Actor API tab.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("datascrapers/finn-no-scraper").call(run_input={"startUrls": [{"url": "https://www.finn.no/realestate/homes/search.html?location=0.20061"}],"maxItems": 5,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["id"], item.get("priceSuggestion"))
Data quality and record handling
Use id as the deduplication key. A search-card row and a later detail row for the same Finn code share that id. Prices are numeric NOK amounts, not formatted strings. publishedAt is an ISO-8601 timestamp. A listing page that fails is skipped and is not saved. Contact blocks can include an organisation name. Person names from those blocks are not part of the example above.
Pricing and cost examples
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| dataset-item | $1.00 | $1.00 | $1.00 | $1.00 |
| detailed-listing | $2.00 | $2.00 | $2.00 | $2.00 |
| broker-info | $2.00 | $2.00 | $2.00 | $2.00 |
Prices are per 1,000 events. Platinum and Diamond use the Gold price. Platform usage is billed separately. A run that saves 1,000 search cards costs $1.00 before platform usage. The same run with details and broker contact, when both succeed, also charges 1,000 detailed-listing events and 1,000 broker-info events.
Limitations and responsible data use
Finn can change search markup, require a proxy, or omit fields on some listings. Results are a snapshot of one run, not a historical archive. Use the data under Finn.no's terms and applicable privacy rules. Do not treat missing contact fields as proof that a listing has no broker.
Dataset questions
Can I search without a Finn URL?
Yes. Leave startUrls empty and set filters such as locations, priceFrom, priceTo, and propertyTypes.
When is a row a detail record?
source is detail after scrapeDetails saves the listing page. Search-card rows do not carry that source value.
Which field should I store as the key?
Store id. It is the Finn code in the listing URL.
Related datasets from Data Scrapers
- Hemnet.se Scraper for Swedish listings.
- Booli Sweden Scraper for another Swedish homes source.
- Boliga Denmark Scraper for Danish listings.
- Daft.ie Property Scraper for Irish listings.
- DAHLER Real Estate Scraper for German listings.
Data Scrapers support
Questions about this dataset: stardustspotlight@gmail.com
