Finland Real Estate Scraper [$0.70/1K💰] | Etuovi + Oikotie
Pricing
from $0.67 / 1,000 listings
Finland Real Estate Scraper [$0.70/1K💰] | Etuovi + Oikotie
Finnish property data from both Etuovi and Oikotie in one run. Scrape real estate listings with price, €/m², energy class, agent contacts and photos for Finland housing market research, price monitoring and lead generation. No portal API key needed.
Pricing
from $0.67 / 1,000 listings
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Etuovi & Oikotie Scraper — Finland Real Estate Data (Listing Prices, Energy Class, Agents)
Etuovi & Oikotie Scraper extracts real estate listings from etuovi.com and oikotie.fi — Finland's two largest property marketplaces, with tens of thousands of active listings between them — and returns clean, structured JSON. For every listing you get the price, address, living area, room count, year built, heating system, energy class, all photos, agent contact details, and the listing URL. It is the Apify actor that scrapes both portals in a single run with one unified schema — most other Finland property scrapers cover only one of the two sites. No portal API key, no login, and no browser are required.
Instead of rendering pages, the actor talks directly to the internal JSON APIs that the portals' own frontends use, which keeps runs fast and cheap. It runs on the Apify platform, so you get API access, scheduling, webhooks, and proxy rotation out of the box.
Main Use Cases: Finnish Housing Market Research, Price Monitoring & Lead Generation
- Finland real estate market research — pull current listings and asking prices across cities to analyze the Finnish housing market without manual browsing.
- Real estate investment analysis — compare properties by price, €/m², area, and construction year with
priceSell,debtShareAmount, andpricePerSquareMeterfields. - Housing price monitoring & new-listing alerts — schedule daily runs and track new listings, price changes, and sold/withdrawn signals in any Finnish city.
- Expat & relocation housing research — build a shortlist of homes for sale in Helsinki, Tampere, Espoo, or any Finnish municipality when moving to Finland.
- Real estate agent & agency lead generation — collect agent names, agency names, and contact details for B2B outreach and CRM enrichment.
- Property databases & proptech applications — assemble a clean dataset with GPS coordinates, images, and building details for maps, dashboards, and analytics.
How It Works: Direct JSON API Access To Etuovi & Oikotie
The actor reverse-engineers the portals' internal JSON APIs instead of rendering pages in a browser:
- Etuovi:
GET /api/v2/location/suggestions?q=resolves a free-text location;POST /api/v2/announcements/search/listpagereturns search results;GET /api/v2/announcement/details?friendlyId=returns full details. The listing page's embeddedwindow.__INITIAL_STATE__blob provides all photos and the energy certificate. Requests carry theX-PORTAL-IDENTIFIER: ETUOVIheader. - Oikotie: a fresh listing page provides rotating auth tokens (
OTA-token,OTA-loaded,OTA-cuid), which are then used onGET /api/cards(search) andGET /api/card/{id}(details).
Because the portals do the filtering server-side, a targeted query — e.g. Helsinki apartments under €400k — returns only matching rows instead of downloading the whole catalogue, which keeps runs fast and cheap.
Input: Search Finnish Cities, Filter By Price And Size, Or Paste Listing URLs
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
source | string | No | both | Portal(s) to scrape: both, etuovi, or oikotie. Not used in Direct-URL-only mode. |
scrapeMode | string | No | search | search (by location), directUrls (URLs only), or both. When URLs are provided and no mode is set, it auto-switches to directUrls so no location search runs behind your back. |
location | string | No | Tampere | Location to search, e.g. Helsinki, Tampere, Lintulampi, Tampere. Used only in search modes. |
maxItems | integer | No | 50 | Max listings per source (Etuovi and Oikotie each). Range 1–1000. |
includeDetails | boolean | No | off (form) / on (API) | Fetch full details: description, agent contact, energy class, all photos. Adds a per-listing listing-details charge. When you call via API and omit this field, details default to on. |
priceMin / priceMax | integer | No | — | Asking-price filter range in EUR. |
sizeMin / sizeMax | integer | No | — | Living-area filter range in m². |
directUrls | array | No | [] | Scrape specific listings, portal search/filter URLs, or Etuovi saved-search URLs. Accepted: an Etuovi listing (https://www.etuovi.com/kohde/gx2642), an Oikotie listing (https://asunnot.oikotie.fi/myytavat-asunnot/24693830), an Oikotie filter/search URL copied from the address bar, an Etuovi search URL (e.g. /myytavat-asunnot/tampere/), or an Etuovi saved-search URL ending in ?haku=... (resolved via Etuovi's API, so all saved filters apply exactly). |
proxy | object | No | off | Standard Apify proxy configuration. Enable residential groups for very large runs. |
Output: A Structured Property Dataset For Every Listing
Every dataset item is one listing in a uniform shape, regardless of portal. Main fields:
| Field | Description |
|---|---|
source / listingId / url | Portal (etuovi or oikotie), stable listing ID, and direct link |
price / priceSell / debtShareAmount | Asking price, selling price, and share of housing-company debt (EUR) |
pricePerSquareMeter | Price per square metre (EUR/m²), with details enabled |
address / city / district / postalCode | Full location hierarchy |
latitude / longitude | GPS coordinates for mapping and spatial analysis |
rooms / roomStructure / area / totalArea | Room count, Finnish layout string (e.g. 2h + k + kph/s), living and total area in m² |
floor / floorCount / constructionYear | Floor, building floors, and build year |
heating / energyClass | Heating system description and energy certificate type |
maintenanceFee / financialFee | Monthly housing-company charges (EUR) |
propertyType / ownershipType / availabilityDescription | Property and ownership type, availability |
agentName / agentPhone / agentTitle / agencyName / agencyPhone | Selling agent and agency contact details |
images / mainImage | Full photo gallery and main photo URL |
title / description / publishedAt / status | Room configuration, full description, publication timestamp, status |
Extended detail fields also appear when includeDetails is on: newProperty, housingCompanyName, housingCompanyFloorCount, plotArea, buildingType, auxiliarySpace, dwellingFeatures, periodicChargesAdditionalInfo. You can download the dataset as JSON, CSV, Excel, HTML, or XML, or pull it via the Apify API.
Example Input: Scrape Tampere Apartments, Pasted Search URLs, Or Specific Listings
Search by location with filters:
{"source": "both","scrapeMode": "search","location": "Tampere","maxItems": 100,"includeDetails": true,"priceMin": 100000,"priceMax": 400000}
Scrape only an Oikotie filter URL you copied from the browser's address bar:
{"scrapeMode": "directUrls","directUrls": [{ "url": "https://asunnot.oikotie.fi/myytavat-asunnot?locations=%5B%5B1676,4,%22Malmi,%20Helsinki%22%5D%5D&cardType=100&buildingType%5B%5D=4&buildingType%5B%5D=8" }]}
Scrape only an Etuovi saved-search URL (all saved filters re-applied exactly):
{"scrapeMode": "directUrls","directUrls": [{ "url": "https://www.etuovi.com/myytavat-loma-asunnot?haku=M2587026111" }]}
Example Output: One JSON Record Per Listing
{"source": "oikotie","listingId": "24693206","url": "https://asunnot.oikotie.fi/myytavat-asunnot/tampere/24693206","title": "2h + k + kph/s + erillinen wc + vh","description": "Harvoin on tarjolla rivitalokaksiota...","price": 198000,"priceSell": 183514.68,"debtShareAmount": 14485.32,"pricePerSquareMeter": 3328,"address": "Ollinkatu 9 B, 33400 Tampere","city": "Tampere","district": "Lintulampi","postalCode": "33400","latitude": 61.524635,"longitude": 23.675424,"rooms": 2,"roomStructure": "2h + k + kph/s","area": 59.5,"constructionYear": 1991,"heating": "Kaukolämpö","energyClass": "E18_D","agentName": "Minna Kivimäki","agentPhone": "050 389 6823","agencyName": "OP Koti","images": ["https://d3ls91xgksobn.cloudfront.net/1200x800,fit,f=webp/etuovimedia/..."],"mainImage": "https://d3ls91xgksobn.cloudfront.net/1200x800,fit,f=webp/etuovimedia/...","publishedAt": "2026-09-15T06:29:30Z"}
Integrations & Automation: Schedule Daily Price Monitoring & New-Listing Alerts
- Apify API — run the actor from any app with the Apify REST API or the Apify SDK (JavaScript, Python, CLI).
- Schedules — run daily, hourly, or on a custom cron. A daily run of a city search is the recommended pattern for a new-listing watchlist: sort-by-newest results are returned by default, so diffing
listingIdagainst your previous run surfaces new homes within a day. - Webhooks — push each finished dataset to your own endpoint.
- Zapier / Make / n8n — trigger runs and send results to Google Sheets, Airtable, Slack, or a database.
- MCP / AI agents — the actor is callable through the Apify MCP server (see the section below for agents).
Use recurring runs for recurring value: price monitoring, market snapshots, and new-listing alerts all depend on a schedule. Recurring usage also keeps your Store/MCP recommendations sharp.
Tips: Cut Costs, Handle Rate Limits & Follow Saved Searches
- Turn off
includeDetailsif you only need search-result summaries (price, address, area, main photo) — this roughly halves the request count and avoids the per-listing details charge. - Scrape by URL — set
scrapeModetodirectUrls, paste listing, filter, or saved-search URLs, and leave Location empty. The location search is skipped entirely. - Enable the Apify proxy for very large runs. Both portals rate-limit rapid bursts (HTTP 429); the actor paces requests with a per-domain delay and retries.
- Schedule the actor (e.g. daily) to track new listings in your target area, and combine with Apify integrations to push results to Google Sheets, Slack, or your own database.
How Much Does It Cost To Scrape Etuovi And Oikotie?
The actor is pay-per-event (tiered by your Apify plan):
- Actor start: $0.00005 per run.
- Listing: $0.0007 per listing written to the dataset.
- Listing details: an additional $0.0015 per listing when
includeDetailsis on.
A summary-mode run of 100 listings therefore costs about $0.07 + run start; with full details it is about $0.22 + run start. Runs use plain HTTP, so Apify compute stays minimal. Free Apify users get a capped 10-item preview run to evaluate the output; paid users can scrape up to 1,000 items per source.
Competitive Positioning
Compared to the Etuovi-only and Oikotie-only scrapers on Apify, this actor is the only option that returns both portals in one run with a unified schema, which matters because a Finnish home is frequently listed on both sites at once — you no longer need two actors and a merge step.
| Capability | Single-portal competitors | This actor |
|---|---|---|
| Scrapes etuovi.com | Yes (Etuovi-only actors) | Yes |
| Scrapes oikotie.fi | Yes (Oikotie-only actors) | Yes |
| Both portals in one run, one schema | No — requires two separate actors | Yes |
Etuovi listing, filter, and ?haku= saved-search URLs | Etuovi URLs only | Etuovi + Oikotie listing & filter URLs |
| Oikotie search/filter URL from the address bar | Oikotie actors accept listings only | Yes — pasted filter URL is converted to the /api/cards call |
| Price, €/m², energy class, agent phone, full photo gallery | Varies by actor | Yes (details mode) |
Related Actors: European Property Portal Scrapers
This actor is part of a family of European real estate scrapers that together cover the biggest national property portals:
- Rightmove Scraper — UK Property
- SeLoger Scraper — French Property
- Funda Scraper — Dutch Property
- Idealista Scraper — Spain, Italy & Portugal
- Otodom.pl Scraper — Polish Property
FAQ: Etuovi API, Oikotie API & Finnish Property Data Questions
Why use this actor instead of the official API?
Etuovi has no public API for listing data — it's a private internal JSON API used by the portal's own frontend, undocumented and not available for external developers. Oikotie's official Listing API is vendor-only: it requires a commercial contract with Oikotie, a vendor identifier, a company API key, and onboarding — it exists to let real-estate agencies publish their own listings, not to read competition data. This actor reads the same public listing data both portals show in their browsers, via the internal JSON endpoints, with no contract, no API key, and no login.
Do I need an API key or account from Etuovi or Oikotie?
No. Both portals are read through their publicly reachable internal JSON endpoints. You only need your Apify account token to run the actor.
What are the alternatives for Finnish property data?
- This actor — current for-sale listings from both Etuovi and Oikotie (what's on the market now).
- Asuntojen hintatiedot (Ministry of the Environment / KVKL) — realized transaction prices from the past 12 months, free to search.
- Statistics Finland — official price indices and €/m² by municipality and postal-code area; aggregate statistics on a release schedule, not listings.
- National Land Survey property transaction API — historical transaction data since 1985; requires an agreement, permits, and a yearly fee.
- Alma Insights (B2B) — commercial APIs, including Etuovi listing details, aimed at companies.
- Vuokraovi.com — the rental side of Finland's housing market (this actor scrapes for-sale listings only).
- Etuovi-only and Oikotie-only Apify actors — if you only ever need one portal.
Does this actor scrape rental listings?
No. Etuovi.com is sale-only by design (rentals live on the sister site Vuokraovi.com), and the actor's Oikotie path handles for-sale listings (myytavat asunnot). For rental data you'd use a Vuokraovi-compatible tool instead.
Can I track price drops and new listings over time?
Yes — that's one of the main scheduling patterns. Run the actor daily with a fixed city and filters, keep snapshots of listingId/price/publishedAt, and diff consecutive runs: a new listingId is a new listing, a changed price is a price update, and a listing that disappears is usually a sale or withdrawal.
Which cities and regions are covered?
Any location the portals index. Use the location field for cities or districts (e.g. Helsinki, Tampere, Oulu, Lintulampi, Tampere), paste an Etuovi search URL or ?haku= saved-search URL, or paste an Oikotie filter URL from the address bar with any municipality/district filters it carries.
How can I compare Helsinki versus Tampere prices?
Run the same input twice with a different location and keep includeDetails on — the price and pricePerSquareMeter fields give you directly comparable asking-price data for both cities.
Is scraping Etuovi and Oikotie legal?
Scraping publicly available listing data for personal, analytical, or research use is generally acceptable, but you are responsible for respecting the portals' Terms of Service, robots.txt, and applicable data-protection law. This actor is provided as-is for legitimate use cases.
For AI Agents & LLM Apps
Purpose: returns structured JSON records for for-sale property listings from etuovi.com and oikotie.fi (Finnish real estate), one record per listing.
Minimal working input:
{ "location": "Tampere", "maxItems": 20, "includeDetails": false }
Variant inputs — three distinct modes exist:
- Location search (above), optionally with
source: "etuovi"or"oikotie"andpriceMin/priceMax/sizeMin/sizeMaxfilters. - Direct URLs:
{ "scrapeMode": "directUrls", "directUrls": [{ "url": "https://www.etuovi.com/kohde/gx2642" }] }. - Both: add
"scrapeMode": "both"to run a location search plus the provided URLs.
Main output fields: source, listingId, url, title, description, price, priceSell, debtShareAmount, pricePerSquareMeter, address, city, district, postalCode, latitude, longitude, rooms, roomStructure, area, totalArea, floor, floorCount, constructionYear, heating, energyClass, maintenanceFee, financialFee, agentName, agentPhone, agentTitle, agencyName, agencyPhone, images, mainImage, publishedAt, status.
Behaviors an agent should know:
- If
scrapeModeis omitted butdirectUrlsare present, the run does direct-URL mode only (location search is skipped). - If
scrapeModerequires URLs (directUrlsorboth) and no valid URLs are provided, the actor falls back to a location search. maxItems(default 50, max 1000) applies per source, sosource: "both"can return up to 2× the cap.- If
includeDetailsis omitted from the API input, it defaults to true — full details are fetched and the per-listinglisting-detailscharge applies. PassincludeDetails: falseexplicitly for a cheap summary-only run. - Free (non-paying) Apify accounts are hard-capped at 10 items per run.
- Known field gaps: Oikotie's API does not expose the agent's phone number (name only); Etuovi search summaries lack city/district until details are fetched; energy class appears only with
includeDetails: true. - Unrecognized direct URLs are skipped with a log warning — sanitize URLs before passing them.
Billing: pay-per-event — $0.00005 run start + $0.0007 per listing + $0.0015 per listing when includeDetails is on (tiered by Apify plan). A 100-listing summary run ≈ $0.07.
SEO Keywords
etuovi scraper, oikotie scraper, finland real estate scraper, finnish property listings, finland real estate data, finland housing market data, finnish apartment prices, etuovi api alternative, oikotie api alternative, scrape etuovi.com, scrape oikotie.fi, finland property price monitoring, new listing alerts finland, helsinki apartment prices, tampere property listings, espoo real estate, finland property database, finnish real estate market research, real estate investment finland, expat housing finland, price per square meter finland, finland real estate agent leads
Legal & Compliance Disclaimer
This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Etuovi (Alma Media Oyj), Oikotie (Sanoma Media Finland), or any of their parent companies. It accesses only publicly available listing pages and the portals' public internal JSON endpoints — there is no login bypass, no CAPTCHA solving, and no use of private credentials. You are responsible for complying with Etuovi's and Oikotie's Terms of Service, robots.txt, and applicable data-protection law (in particular the EU GDPR and the Finnish Act on the Protection of Privacy in Working Life where personal data is concerned). Output may include personal contact data of real-estate agents (names, phone numbers); do not use this data for unsolicited commercial outreach that would violate applicable law (e.g. CAN-SPAM, GDPR, TCPA). This section is a factual disclosure, not legal advice.