# Oikotie Scraper — Finland Homes for Sale & Rent, No Phones (`highbrow_fame/oikotie-properties`) Actor

Finnish homes for sale and rent from Oikotie: debt-free and selling price, rent, charges, area, rooms, floor, year, energy class, postcode, agency, description. No phones. Unofficial Oikotie API.

- **URL**: https://apify.com/highbrow_fame/oikotie-properties.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 properties

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Oikotie Scraper — Finland Homes for Sale & Rent, No Phones

Get homes for sale and for rent from Oikotie Asunnot, one of Finland's biggest property portals — and holiday homes and plots too: the debt-free price and the selling price, the rent, maintenance and financing charges, living area, rooms and room layout, floor, year built, condition, energy class, building type, town, district and postcode, the agency or landlord company, photos and the full description. Paste your Oikotie search links — or just type a place.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on asunnot.oikotie.fi and paste the link — for sale, for rent, holiday homes or plots, with any place, price, size, rooms, building type and sort order. Or type a place here — Helsinki, "Kallio, Helsinki", Uusimaa, 00100 — and choose what to search, the building type, price, area, rooms, year built, private or business, new or old, "added within" and the sort order below.
- 🏷️ **Both Finnish prices, and the rent.** For a flat you get the debt-free price (velaton hinta), the selling price (myyntihinta) and the share of the housing company's debt, plus the monthly maintenance and financing charges. Rentals come with the rent a month; holiday rentals with the price a week or a day when the listing gives one.
- ⚡ **Fast, and deep.** A live test run read 2-room flats in Helsinki, the rentals in Tampere, every plot in Espoo, every holiday rental in Finland and private sellers' homes all over Uusimaa — 5,634 properties with all their details in 284 seconds. Without the details, a run read all 8,001 homes for sale in Helsinki in 367 seconds.
- 🔒 **No phone numbers, no agent names.** Businesses are named by their company; private sellers and landlords by nothing, and their street address and map point are left out (town, district and postcode stay). Phone numbers, e-mail addresses, social media profiles and the names written into descriptions are replaced with `[phone removed]`, `[e-mail removed]`, `[name removed]` and so on — in that test run 2,120 phones, 1,520 e-mails and 1,166 names.
- 💸 **You pay only for properties delivered.** A link that is not an Oikotie search, or a place Oikotie does not know, comes back as a free record with the reason.

### What you get

For every property:

| Field | What it is |
|---|---|
| `listingType`, `propertyType`, `buildingType` | sale / rent; home, holiday-home, plot; apartment-block (kerrostalo), row-house (rivitalo), detached (omakotitalo), semi-detached (paritalo), balcony-access-block (luhtitalo), cottage-or-villa, detached-house-plot, … |
| `price`, `currency`, `pricePeriod`, `priceChangedAt` | the price as Oikotie lists it in EUR — the debt-free price for sales, the rent for rentals (`pricePeriod` "month") — and when it last changed |
| `livingAreaSqm`, `plotAreaSqm` | sizes in m² |
| `rooms`, `roomLayout`, `floor`, `buildingFloors`, `yearBuilt`, `newBuilding` | e.g. 2 and "2h, avok, kph, s, wc/khh, parveke" |
| `address`, `district`, `city`, `latitude`, `longitude` | street and map point for business listings only |
| `sellerType`, `seller` | business / private, and the company name (none for private sellers) |
| `title`, `nextViewing`, `views`, `viewsThisWeek`, `publishedAt`, `updatedAt` | the headline, the next viewing, how often the listing was opened, dates |
| `image`, `url`, `listingId` | the listing |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

With **Open every listing for its details** (on by default) also: `debtFreePrice`, `sellingPrice`, `debtShare`, `maintenanceCharge`, `financingCharge`, `totalMonthlyCharge` (EUR per month), `rentPerMonth`, `rentPerWeek`, `rentPerDay`, `securityDeposit`, `totalAreaSqm`, `bedrooms`, `condition` (new / good / satisfactory / tolerable), `energyClass` and `energyClassScale` (A–G, 2013 or 2018 scale), `heating`, `sauna`, `lift`, `lotOwnership` (own or rented plot), `housingCompany`, `region`, `postcode`, `photoCount`, `description`, `availability`, `renovationsDone`, `renovationsPlanned`.

In the test run, of 2,700 homes for sale: 98% had a debt-free price, 93% a selling price, 78% a maintenance charge, 89% a condition, 69% an energy class, 100% a postcode. All 1,389 rentals had the rent a month.

#### Example

A real record from a live run — 2-room flats in Helsinki up to €300,000, 25 September 2026 (some fields left out; the description, renovation texts and image link shortened):

```json
{
  "listingId": "24708031",
  "url": "https://asunnot.oikotie.fi/myytavat-asunnot/helsinki/24708031",
  "listingType": "sale",
  "propertyType": "home",
  "buildingType": "apartment-block",
  "price": 247000,
  "currency": "EUR",
  "livingAreaSqm": 49.5,
  "plotAreaSqm": 1648,
  "rooms": 2,
  "roomLayout": "2h, avok, kph, s, wc/khh, parveke",
  "floor": 3,
  "buildingFloors": 7,
  "yearBuilt": 1995,
  "newBuilding": false,
  "address": "Jaalaranta 6",
  "district": "Ruoholahti",
  "city": "Helsinki",
  "latitude": 60.161022,
  "longitude": 24.913709,
  "sellerType": "business",
  "seller": "Kiinteistömaailma Helsinki Punavuori | Sydänkoti Real Estate Punavuori Oy",
  "nextViewing": "2026-09-27T14:00",
  "views": 166,
  "publishedAt": "2026-09-24T11:57:05Z",
  "image": "https://cdn.asunnot.oikotie.fi/_F-LC_cm8Tz4uivobbikq5APma0=/full-fit-in/623x464/…",
  "debtFreePrice": 247000,
  "sellingPrice": 237100.69,
  "debtShare": 9899.31,
  "maintenanceCharge": 402.93,
  "financingCharge": 80.19,
  "totalMonthlyCharge": 483.12,
  "condition": "satisfactory",
  "energyClass": "D",
  "energyClassScale": "2018",
  "heating": "Lämmitystapa: Kaukolämpö. Lämmönjakotapa: Vesikiertoinen patterilämmitys",
  "sauna": true,
  "lift": true,
  "lotOwnership": "rented",
  "housingCompany": "Asunto Oy Helsingin Jaalalaituri",
  "region": "Uusimaa",
  "postcode": "00180",
  "photoCount": 23,
  "description": "Tervetuloa viihtymään Ruoholahden halutuimmille paikoille kanavan tuntumaan!\n\nTämä muuttovalmis kaksio tarjoaa toimivan pohjaratkaisun, vehreät näkymä…",
  "availability": "Viimeistään 2 kk kaupanteon jälkeen.",
  "renovationsDone": "2025 Asuntoihin hankittiin taloyhtiön kunnossapitovastuulla olevat palovaroittimet.\n2025 A-portaan päädyn katon korjaus.\n…",
  "status": "OK"
}
```

### How to use it

1. Paste **Search links** from asunnot.oikotie.fi, one per line — or type **Places**, choose **What to search** and the filters.
2. Set **Max listings per search**. Keep **Open every listing for its details** ticked for both prices, the charges, condition, energy class, postcode and description; untick it for the fastest run.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

When a place name exists in several towns, write the town after it: "Kallio, Helsinki". Write names with ä and ö — Oikotie does not find "Jyvaskyla". A street works with its town: "Mannerheimintie, Helsinki".

To follow new listings in an area, save your input as a task with **Added within** set to "Last day" and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per property delivered** — see the price on this page. Opening listings for their details costs nothing extra, only time. Links that are not Oikotie searches and places Oikotie does not know are free.

### FAQ

**How many properties per search?** As many as Oikotie shows — every page answers to the end; set **Max listings per search** as high as you need. Oikotie's own pages repeat a few listings, most of all when sorted by price: each is delivered once, so a long search can come back a little short of Oikotie's count — in the live runs, 8,001 of the 8,015 homes for sale in Helsinki, and 1,389 of the 1,394 rentals in Tampere sorted by price.

**Does it do business premises?** No: those are on toimitilat.oikotie.fi, a separate section. This actor reads homes for sale and rent, holiday homes and plots.

**Why no phone numbers or agent names?** They are personal data. Every listing has its `url`; buyers and tenants contact the agency or the seller on Oikotie.

**Is this affiliated with Oikotie?** No. This is an independent tool that reads public Oikotie listings.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

### Related Actors

- [Etuovi Scraper — Finland Property Listings & Prices, No Phones](https://apify.com/highbrow_fame/etuovi-properties) — Finnish homes for sale from Etuovi, with debt-free price
- [FINN.no Scraper — Marketplace, Cars, Homes & Jobs, No Phones](https://apify.com/highbrow_fame/finn-listings) — Norwegian FINN.no marketplace, cars, homes and jobs
- [Blocket Scraper — Sweden Marketplace, Cars & Boats, No Phones](https://apify.com/highbrow_fame/blocket-listings) — Swedish marketplace, cars, boats and machines from Blocket
- [Immoweb Scraper — Belgium Real Estate, Property Listings](https://apify.com/highbrow_fame/immoweb-properties) — Belgian property for sale or rent from Immoweb, with EPC

# Actor input Schema

## `searchUrls` (type: `array`):

Set up a search on asunnot.oikotie.fi with all the filters you want and paste the address of the results page (…/myytavat-asunnot/…, /vuokra-asunnot/…, /myytavat-loma-asunnot/…, /myytavat-tontit/…). One per line.

## `locations` (type: `array`):

Or search here without a link: towns, districts, regions or postcodes (Helsinki, "Kallio, Helsinki", Uusimaa, 00100), written with ä and ö. The filters below apply.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many listings.

## `listingType` (type: `string`):

For the places above.

## `buildingTypes` (type: `array`):

Optional, for homes: any of these.

## `minPrice` (type: `integer`):

Optional. The debt-free price for sales, the rent a month for rentals.

## `maxPrice` (type: `integer`):

Optional. The debt-free price for sales, the rent a month for rentals.

## `minArea` (type: `integer`):

Optional: living area (plot area for plots).

## `maxArea` (type: `integer`):

Optional: living area (plot area for plots).

## `rooms` (type: `array`):

Optional: any of these room counts.

## `minYear` (type: `integer`):

Optional, for homes.

## `maxYear` (type: `integer`):

Optional, for homes.

## `sellerType` (type: `string`):

Optional, for homes.

## `newBuilding` (type: `string`):

Optional, for homes.

## `addedWithinDays` (type: `string`):

Optional: only listings added recently.

## `sortBy` (type: `string`):

For the places above.

## `includeDetails` (type: `boolean`):

Adds the debt-free and selling price, the charges, condition, energy class, postcode, region, photo count and the description. One more quick request per listing; untick for the fastest run.

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

## `proxyConfiguration` (type: `object`):

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://asunnot.oikotie.fi/myytavat-asunnot/tampere"
  ],
  "maxListingsPerSearch": 30,
  "listingType": "homes-for-sale",
  "sellerType": "all",
  "newBuilding": "all",
  "addedWithinDays": "any",
  "sortBy": "newest",
  "includeDetails": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [
        "https://asunnot.oikotie.fi/myytavat-asunnot/tampere"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/oikotie-properties").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": ["https://asunnot.oikotie.fi/myytavat-asunnot/tampere"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/oikotie-properties").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://asunnot.oikotie.fi/myytavat-asunnot/tampere"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/oikotie-properties --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/oikotie-properties"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/R47KMjF2Op7Kleirt/builds/rxZTWL6thRQfZa0uK/openapi.json
