OrbTop

Nordic Real Estate Portal Scraper

REAL ESTATE

Nordic Real Estate Portal Scraper

Scrape active property listings from Hemnet (Sweden), Finn.no (Norway), Boligsiden (Denmark), and Etuovi (Finland) in a single run. Returns asking price, living area, room count, and address for each listing, normalized into one schema across all four markets.


Nordic Real Estate Portal Scraper Features

  • Covers all four major Nordic real estate markets in one actor — no juggling four separate scrapers
  • Extracts the core listing facts per property — asking price, living area, room count, and address — into a single unified schema regardless of source market
  • Filters by listing type: for-sale listings, rentals, or both. Asking for both means both — every selected platform is queried for sale and rental results
  • Respects per-country quotas, distributing maxItems evenly across selected countries
  • Handles the Cloudflare-protected portals (Hemnet, Boligsiden) automatically, along with the two JavaScript-heavy portals (Finn.no, Etuovi)
  • Returns property type where the source's search results expose it (Hemnet, Boligsiden) and monthly fee where it's shown on the card (Hemnet, Etuovi)

What Can You Do With Nordic Real Estate Data?

  • Real estate investors — Screen asking prices and living areas across four markets in one pass, before narrowing down to the listings worth a closer look
  • Market analysts — Track current asking-price and room-count distributions across Sweden, Norway, Denmark, and Finland without stitching together four separate feeds
  • Proptech builders — Feed active listings into a multi-market search or price-comparison tool
  • Relocation services — Pull current inventory across the region into a client-facing shortlist
  • Academic researchers — Snapshot pan-Nordic asking-price and floor-area data for comparative housing studies

How Nordic Real Estate Portal Scraper Works

  1. Pick which countries to include (SE, NO, DK, FI) and how many listings you want back. Leave countries empty to scrape all four.
  2. Set listingType to sale, rent, or allall queries every selected platform for both sale and rental listings.
  3. The scraper works through each platform's search results in turn, pulling listing ID, price, area, rooms, and address straight off the listing cards.
  4. Records are normalized into one schema and saved to the dataset — the same field names whether the listing came from Stockholm or Helsinki.

Input

{
  "countries": ["SE", "NO", "DK", "FI"],
  "listingType": "sale",
  "maxItems": 50
}
Field Type Default Description
countries array ["SE","NO","DK","FI"] Country codes to scrape. Valid values: SE (Hemnet), NO (Finn.no), DK (Boligsiden), FI (Etuovi). Leave empty to scrape all.
listingType string "sale" Filter by listing type. "sale" for properties for sale, "rent" for rentals, "all" for both sale and rental listings on every selected platform.
maxItems integer 10 Maximum number of records to return across all selected countries.

Single country example:

{
  "countries": ["NO"],
  "listingType": "rent",
  "maxItems": 100
}

Nordic Real Estate Portal Scraper Output Fields

{
  "listing_id": "20043617",
  "country": "FI",
  "platform": "etuovi",
  "url": "https://www.etuovi.com/kohde/20043617",
  "listing_type": "sale",
  "property_type": null,
  "title": "Runeberginkatu 35, Helsinki",
  "price": 385000,
  "currency": "EUR",
  "monthly_fee": 320,
  "area_living_m2": 68.5,
  "area_total_m2": null,
  "rooms": 3,
  "bedrooms": null,
  "year_built": null,
  "year_renovated": null,
  "energy_class": null,
  "tenure": null,
  "address": "Runeberginkatu 35",
  "city": null,
  "postal_code": null,
  "municipality": null,
  "region": null,
  "latitude": null,
  "longitude": null,
  "broker_firm": null,
  "broker_name": null,
  "broker_email": null,
  "broker_phone": null,
  "days_on_market": null,
  "listed_at": null,
  "sold_at": null,
  "sold_price": null
}

Field coverage varies by platform. A Hemnet (Sweden) record, for example, also fills in property_type and city:

{
  "listing_id": "18442201rum3-45-stockholm-sodermalm-gotgatan",
  "country": "SE",
  "platform": "hemnet",
  "url": "https://www.hemnet.se/bostad/lagenhet-3rum-sodermalm-stockholms-kommun-gotgatan-18442201",
  "listing_type": "sale",
  "property_type": "Lägenhet",
  "title": "Götgatan 45",
  "price": 4950000,
  "currency": "SEK",
  "monthly_fee": 3200,
  "area_living_m2": 72,
  "rooms": 3,
  "address": "Götgatan 45",
  "city": "Södermalm, Stockholms kommun"
}
Field Type Description
listing_id string Unique listing identifier from the source platform
country string Country code: SE, NO, DK, or FI
platform string Source platform: hemnet, finn, boligsiden, or etuovi
url string Direct URL to the listing page
listing_type string sale or rent — reflects what was actually queried for that record
property_type string Property type in local language (villa, apartment, terraced house, etc.). Populated for Hemnet and Boligsiden; null on Finn.no and Etuovi
title string Full listing title
price number Asking price in local currency
currency string Currency code: SEK, NOK, DKK, or EUR
monthly_fee number Monthly housing association fee or common expenses. Populated for Hemnet and Etuovi; null on Finn.no and Boligsiden
area_living_m2 number Living area in square metres
area_total_m2 number Total area including auxiliary space — not currently populated
rooms integer Total number of rooms
bedrooms integer Number of bedrooms — not currently populated
year_built integer Year the property was built — not currently populated
year_renovated integer Year of last renovation — not currently populated
energy_class string Energy efficiency class (A-G) — not currently populated
tenure string Tenure type: owned, cooperative, or rental — not currently populated
address string Street address as shown on the listing card
city string City name. Populated for Hemnet; null on Finn.no, Boligsiden, and Etuovi
postal_code string Postal code — not currently populated
municipality string Municipality name — not currently populated
region string Region or county name — not currently populated
latitude number Latitude coordinate — not currently populated
longitude number Longitude coordinate — not currently populated
broker_firm string Brokerage firm name — not currently populated
broker_name string Individual broker or agent name — not currently populated
broker_email string Broker contact email — not currently populated
broker_phone string Broker contact phone number — not currently populated
days_on_market integer Days the listing has been active — not currently populated
listed_at string Date the listing was published (ISO 8601) — not currently populated
sold_at string Date the property was sold (ISO 8601) — not currently populated
sold_price number Final sold price in local currency — not currently populated

Coverage note: Nordic Real Estate Portal Scraper reads each platform's listing search results — it does not open individual listing pages. That's why property_type, monthly_fee, and city are filled in on some platforms and not others (each site shows a different set of details on its search cards), and why area_total_m2, bedrooms, year_built, year_renovated, energy_class, tenure, postal_code, municipality, region, latitude, longitude, broker_firm, broker_name, broker_email, broker_phone, days_on_market, listed_at, sold_at, and sold_price are declared in the output schema but return null on every record today. If your workflow needs any of those fields, file an issue and tell us which ones.


FAQ

How do I scrape all four Nordic real estate markets at once?

Nordic Real Estate Portal Scraper runs all four by default. Set countries to ["SE","NO","DK","FI"] (or leave it empty) and the scraper visits each platform in sequence, distributing maxItems evenly across the selected countries.

What data can I get from Hemnet, Finn.no, Boligsiden, and Etuovi?

Nordic Real Estate Portal Scraper returns what's visible on each platform's search results: price, currency, living area, room count, address, and listing type on every record, plus property type and monthly fee where the source site shows them on the card. See the Coverage note above for the fields it doesn't return yet.

Does it include sold prices or broker contact details?

No. Nordic Real Estate Portal Scraper extracts active listing search results, not individual listing pages or historical sales data. sold_price, sold_at, broker_name, broker_email, and broker_phone are declared in the schema but return null on every record.

How much does it cost to run?

Nordic Real Estate Portal Scraper uses pay-per-event pricing at ~$0.002 per listing. A run returning 1,000 listings across all four countries costs roughly $2 plus the Apify compute overhead.

Can I filter by listing type?

Set listingType to "sale" for properties for sale, "rent" for rentals, or "all" to include both — "all" queries every selected platform for sale and rental listings. Rental inventory varies by platform.


Need More Features?

Need additional fields, different markets, or a custom filter? File an issue or get in touch.

Why Use Nordic Real Estate Portal Scraper?

  • Pan-Nordic coverage — Four countries, four platforms, one actor. No integrating four separate scrapers.
  • Unified schema — Output fields are consistent regardless of source. price is always a number, currency tells you the unit, and field names stay the same whether you're pulling from Sweden or Finland.
  • One quota, four markets — Set maxItems once and it's split across every country you select, instead of running four separate jobs to balance coverage yourself.