# Vuokraovi Property Search Scraper (`stealth_mode/vuokraovi-property-search-scraper`) Actor

Scrape rental property listings from Vuokraovi.com effortlessly. This scraper collects property details including addresses, pricing, availability, floor information, images, and 30+ structured fields — perfect for property aggregators, market researchers, and real estate analysts.

- **URL**: https://apify.com/stealth\_mode/vuokraovi-property-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Developer tools, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Vuokraovi Property Search Scraper: Extract Finnish Rental Listings

---

### What Is Vuokraovi.com?

Vuokraovi.com is Finland's leading online platform for residential rental properties. It hosts thousands of apartments, houses, and rooms available for rent across Finland, connecting landlords with tenants. The platform displays detailed property information, including location, price, specifications, and availability. Manually extracting and organizing this rental data is tedious and error-prone — the **Vuokraovi Property Search Scraper** automates the collection process, delivering clean, structured property records ready for analysis or integration.

---

### Overview

The **Vuokraovi Property Search Scraper** extracts comprehensive property listing data from Vuokraovi search results pages, converting unstructured HTML into machine-readable records. It is ideal for:

- **Real estate aggregators** building multi-source rental databases
- **Market researchers** analyzing rental trends and pricing across Finland
- **Property investors** monitoring market competition and availability
- **Data analysts** studying housing supply and demand patterns
- **Developers** integrating rental data into property comparison platforms

Key features include configurable item limits per page, automatic failure handling, and support for paginated search results with custom filters.

---

### Input Format

The scraper accepts a JSON configuration object with three main parameters:

```json
{
  "urls": ["https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

#### Input Parameters Explained

| Parameter             | Type    | Description                                                                                                                                                                                                                    |
| --------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `urls`                | Array   | URLs of Vuokraovi property search pages to scrape. Paste search result pages directly; you can include filters, location criteria, and pagination parameters. Multi-page runs are supported by adding multiple URLs.           |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running even if individual URLs fail to load or timeout. Useful for batch jobs where temporary network issues shouldn't halt the entire operation. Set to `false` to stop on the first error. |
| `max_items_per_url`   | Integer | Maximum number of property listings to extract per URL. For example, `200` collects up to 200 properties from each search results page. Lower values reduce execution time; higher values capture more data per request.       |

> **Pro tip:** Use filtered search URLs to target specific regions, price ranges, or property types (e.g., apartments only, 2+ rooms), reducing noise and improving data relevance.

***

### Output Format

**Sample output**

```json
{
  "property_type": "RESIDENTIAL",
  "id": 2609124,
  "friendly_id": "fs4324",
  "address_line_1": null,
  "address_line_2": null,
  "location": "Jättiläisenkaari 2 Tolsa Kirkkonummi",
  "latitude": 60.123047,
  "longitude": 24.479715,
  "construction_finished_year": 2004,
  "published": true,
  "publishing_time": "2026-06-10T09:20:11.196Z",
  "published_or_updated_at": "2026-06-10T09:20:11.196Z",
  "next_showings": [],
  "main_image_uri": "//d3ls91xgksobn.cloudfront.net/{imageParameters}/etuovimedia/images/rental/import/124/2609124/0e76b9541118d347871c0e0e51d244c4/be02d352d7d7f2c978fcd5d8571834c8/ORIGINAL.jpeg",
  "main_image_hidden": false,
  "office": {
    "id": 3981,
    "logo_uri": "//d3ls91xgksobn.cloudfront.net/{imageParameters}/etuovimedia/images/vuokraovi/office/logo/customerImage3981v2.jpeg",
    "web_page_url": "https://www.avara.fi/",
    "name": "Avara Oy",
    "customer_group_id": 29,
    "office_number": 34256
  },
  "new_building": false,
  "room_structure": "2H + K + S",
  "room_count": "TWO_ROOMS",
  "floor_level": 2,
  "housing_company_floor_count": 2,
  "residential_floor_count": 2,
  "area": 53,
  "total_area": null,
  "top_of_list_activated_in_last_2_weeks": null,
  "has_alma_premium_visibility": false,
  "is_company_announcement": false,
  "search_rent": 866,
  "notify_rent_changed": true,
  "rental_availability": {
    "type": "VACANCY",
    "vacancy_date": "2026-07-01"
  },
  "property_subtype": "BALCONY_ACCESS_BLOCK",
  "right_of_occupancy": false,
  "from_url": "https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"
}
```

Each scraped property returns a detailed record with 30+ fields covering identity, location, specifications, and status:

#### Property Identification

| Field                | Meaning                                                       |
| -------------------- | ------------------------------------------------------------- |
| `Property Type`      | Classification: apartment, house, room, or other              |
| `ID`                 | Unique internal Vuokraovi identifier                          |
| `Friendly ID`        | Human-readable property reference number                      |
| `Property Subtype`   | More specific category (e.g., studio, 1-room, detached house) |
| `Right Of Occupancy` | Ownership model (lease, right of occupancy contract, etc.)    |

#### Location & Coordinates

| Field            | Meaning                                                       |
| ---------------- | ------------------------------------------------------------- |
| `Address Line 1` | Street address and building number                            |
| `Address Line 2` | Additional address details (apartment number, entrance, etc.) |
| `Location`       | City or neighborhood name                                     |
| `Latitude`       | Geographic latitude coordinate                                |
| `Longitude`      | Geographic longitude coordinate                               |

#### Property Specifications

| Field                         | Meaning                                               |
| ----------------------------- | ----------------------------------------------------- |
| `Room Count`                  | Number of rooms (bedrooms + living spaces)            |
| `Room Structure`              | Layout description (e.g., "2h+k" = 2 rooms + kitchen) |
| `Area`                        | Usable floor area in square meters                    |
| `Total Area`                  | Total area including common spaces                    |
| `Floor Level`                 | Which floor the property is on                        |
| `Housing Company Floor Count` | Total floors in the building                          |
| `Residential Floor Count`     | Number of residential floors                          |
| `Construction Finished Year`  | Year the building was built or renovated              |

#### Listing Status & Visibility

| Field                                   | Meaning                                              |
| --------------------------------------- | ---------------------------------------------------- |
| `Published`                             | Whether the listing is currently active              |
| `Publishing Time`                       | Time the listing was first published                 |
| `Published Or Updated At`               | Most recent publish or update timestamp              |
| `Top Of List Activated In Last 2 Weeks` | Whether the listing received recent visibility boost |
| `Has Alma Premium Visibility`           | If premium/highlighted placement is active           |
| `Is Company Announcement`               | Whether listed by a company or private landlord      |
| `New Building`                          | Flag indicating newly constructed property           |

#### Rental & Availability Details

| Field                 | Meaning                                       |
| --------------------- | --------------------------------------------- |
| `Search Rent`         | Monthly rent amount visible in search results |
| `Notify Rent Changed` | Whether rent price has changed recently       |
| `Rental Availability` | Move-in date or availability status           |
| `Next Showings`       | Scheduled property viewing times              |

#### Media & Organization

| Field               | Meaning                                                |
| ------------------- | ------------------------------------------------------ |
| `Main Image URI`    | URL of the primary property photo                      |
| `Main Image Hidden` | Whether the main image is currently hidden from view   |
| `Office`            | Real estate agency or property management company name |

***

### How to Use

1. **Prepare URLs** — Navigate to Vuokraovi.com and apply desired filters (location, price, rooms, etc.). Copy the search result page URL(s).
2. **Configure input** — Paste URLs into the `urls` array. Adjust `max_items_per_url` based on your needs (e.g., `50` for quick previews, `200` for comprehensive data).
3. **Enable error handling** — Set `ignore_url_failures: true` for bulk multi-page runs to prevent interruptions from temporary network hiccups.
4. **Execute the scraper** — Start the run and monitor progress in the logs.
5. **Export and analyze** — Download results as JSON or CSV; import into spreadsheets, databases, or analysis tools.

**Troubleshooting:**

- If few items are returned, verify the URL loads correctly in your browser.
- For dynamic content, ensure JavaScript rendering is enabled (handled by default).
- Use country-specific proxies if scraping from outside Finland to avoid geo-blocking.

***

### Use Cases & Business Value

- **Market intelligence:** Track rental price trends, vacancy rates, and supply by region
- **Investment analysis:** Compare properties across neighborhoods to identify opportunities
- **Competitive monitoring:** Analyze competitor listings, pricing strategies, and positioning
- **Research datasets:** Build historical archives of rental market data for academic or policy analysis
- **Integration platforms:** Feed rental data into property comparison tools or mobile apps

The Vuokraovi Property Search Scraper transforms rental search results into actionable datasets, saving weeks of manual work and enabling data-driven real estate decisions.

***

### Conclusion

The **Vuokraovi Property Search Scraper** is a powerful tool for anyone needing structured Finnish rental property data at scale. With 30+ output fields covering location, specifications, pricing, and availability, it delivers comprehensive insights into the rental market. Whether you're building an aggregator, conducting research, or making investment decisions, this scraper provides the clean, organized data you need.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/vuokraovi-property-search-scraper").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 = {
    "urls": ["https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/vuokraovi-property-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.vuokraovi.com/vuokra-asunnot?haku=m2495556489&sivu=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/vuokraovi-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/vuokraovi-property-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vuokraovi Property Search Scraper",
        "description": "Scrape rental property listings from Vuokraovi.com effortlessly. This scraper collects property details including addresses, pricing, availability, floor information, images, and 30+ structured fields — perfect for property aggregators, market researchers, and real estate analysts.",
        "version": "0.0",
        "x-build-id": "lUchDbWvFMSylez78"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~vuokraovi-property-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-vuokraovi-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~vuokraovi-property-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-vuokraovi-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~vuokraovi-property-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-vuokraovi-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the property list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
