Skip to content
Scrappa Get API key
Etuovi API 1 credit/request

Etuovi Search API Documentation

GET https://scrappa.co/api/etuovi/search

Etuovi Search API lists properties for sale or for rent in Finland. Send a location place name, or a location_type with a location_code from the autocomplete route, or neither for all of Finland. A place name uses the first matching place and returns it in meta.location; an unknown place returns 422. Prices are in EUR, rent is per month. A missing value is null, never 0.

There is no bedroom or bathroom filter on the site. Use room_counts. Some sale items show only the share price of the housing company: then price.amount is null and price.is_share_price is true. A search by place name costs one extra lookup for the place and is cached. Rentals support residential properties only. Items that break a requested filter are dropped and counted in meta.dropped_by_filter. With a price filter, share-price items are dropped too, because their real price is not known. A page past the last page is empty with has_next false. The sort price_asc lists items without a price first. Rent listings have no public page, so url is null for rent.

Etuovi Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/etuovi/search
Auth header
x-api-key
Cost
1 credit/request
Response preview
200 OK
{
    "data": {
        "items": [
            {
                "id": 2750637,
                "geo": {
                    "lat": 61.496895,
                    "lng": 23.899103
                },
                "url": "https://www.etuovi.com/kohde/hh3276",
                "area": 44.5,
                "agent": null,
                "floor": 1,
                "image": "https://images.example.com/800x600/etuovimedia/images/property/import/637/2750637/0e76b9541118d347871c0e0e51d244c4/88e23ef344929c13f4892b0e6d37597a/ORIGINAL.jpeg",
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

This endpoint has no required query parameters.

17 optional filters available.

listing_type string Optional

sale (default) or rent.

Example value example
location string Optional

Place name, for example Tampere. Send location or location_type with location_code.

Example value Austin, Texas
location_type string Optional

Place type from the autocomplete route, for example CITY, DISTRICT or POST_CODE. Send with location_code.

Example value example
location_code string Optional

Place code from the autocomplete route, for example FI_PIRKANMAA_TAMPERE.

Example value example
property_type string Optional

residential (default), plot, leisure, estate or other. Rentals: residential only.

Example value example
residential_type string Optional

Comma-separated: apartment_house, row_house, semi_detached_house, detached_house, separate_house, balcony_access_block, wooden_house_apartment.

Example value example
room_counts string Optional

Comma-separated: 1, 2, 3, 4, 5 or more_than_five. Residential only.

Example value example
min_price integer Optional

Minimum price in EUR (rent: per month).

Example value 10
max_price integer Optional

Maximum price in EUR (rent: per month).

Example value 10
min_area integer Optional

Minimum living area in square meters.

Example value 10
max_area integer Optional

Maximum living area in square meters.

Example value 10
min_year integer Optional

Earliest year built. Residential only.

Example value 10
max_year integer Optional

Latest year built. Residential only.

Example value 10
agency_id integer Optional

Only listings of this agency, from the agencies route.

Example value 1234567890
sort string Optional

newest (default), oldest, price_asc, price_desc, area_asc, area_desc, year_asc or year_desc.

Example value relevance
page integer Optional

One-based page number. Default 1, maximum 500.

Example value 1
per_page integer Optional

Items per page: 30 (default), 50 or 100.

Example value 10

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

data meta success
JSON Response
200 OK
{
    "data": {
        "items": [
            {
                "id": 2750637,
                "geo": {
                    "lat": 61.496895,
                    "lng": 23.899103
                },
                "url": "https://www.etuovi.com/kohde/hh3276",
                "area": 44.5,
                "agent": null,
                "floor": 1,
                "image": "https://images.example.com/800x600/etuovimedia/images/property/import/637/2750637/0e76b9541118d347871c0e0e51d244c4/88e23ef344929c13f4892b0e6d37597a/ORIGINAL.jpeg",
                "price": {
                    "amount": null,
                    "period": null,
                    "currency": "EUR",
                    "is_share_price": true
                },
                "office": {
                    "id": 338,
                    "url": "https://www.yhkodit.fi/asiakaspalvelu",
                    "logo": "https://images.example.com/800x600/etuovimedia/images/logos/customerlogo338_7.jpg",
                    "name": "YH Kodit Oy, Tampere"
                },
                "location": "Pikkupiiankatu 3 Linnainmaa Tampere",
                "room_count": {
                    "type": "TWO_ROOMS",
                    "count": 2
                },
                "total_area": null,
                "updated_at": "2026-10-23T16:00:08+00:00",
                "year_built": 1993,
                "floor_count": 3,
                "friendly_id": "hh3276",
                "availability": null,
                "listing_type": "sale",
                "new_building": false,
                "price_change": null,
                "published_at": "2026-10-23T16:00:08+00:00",
                "next_showings": [],
                "property_type": "RESIDENTIAL",
                "address_line_1": "Pikkupiiankatu 3",
                "address_line_2": "Linnainmaa Tampere",
                "preview_images": null,
                "room_structure": "2H + KK + S",
                "property_subtype": "APARTMENT_HOUSE",
                "is_private_lessor": null
            },
            {
                "id": 2596617,
                "geo": {
                    "lat": 61.449391,
                    "lng": 23.835539
                },
                "url": "https://www.etuovi.com/kohde/fp3486",
                "area": 12.5,
                "agent": null,
                "floor": null,
                "image": "https://images.example.com/800x600/etuovimedia/images/property/import/617/2596617/0e76b9541118d347871c0e0e51d244c4/1cf4d4513b7c0a941f968332303ebd82/ORIGINAL.jpeg",
                "price": {
                    "amount": 10900,
                    "period": null,
                    "currency": "EUR",
                    "is_share_price": false
                },
                "office": null,
                "location": "Opiskelijankatu 29 Hervanta Tampere",
                "room_count": null,
                "total_area": 12.5,
                "updated_at": "2026-05-31T17:37:29+00:00",
                "year_built": 2019,
                "floor_count": null,
                "friendly_id": "fp3486",
                "availability": null,
                "listing_type": "sale",
                "new_building": false,
                "price_change": null,
                "published_at": "2026-05-31T17:37:29+00:00",
                "next_showings": [],
                "property_type": "RESIDENTIAL",
                "address_line_1": "Opiskelijankatu 29",
                "address_line_2": "Hervanta Tampere",
                "preview_images": null,
                "room_structure": "Autohallipaikka",
                "property_subtype": "APARTMENT_HOUSE",
                "is_private_lessor": null
            }
        ],
        "pagination": {
            "page": 1,
            "total": 1256,
            "has_next": true,
            "per_page": 30,
            "total_pages": 42
        }
    },
    "meta": {
        "billable": true,
        "location": {
            "code": "FI_PIRKANMAA_TAMPERE",
            "name": "Tampere",
            "type": "CITY",
            "full_name": "Tampere"
        },
        "endpoint_family": "search",
        "dropped_by_filter": 0
    },
    "success": true
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Validation Error

A required parameter or a value is invalid. This response is not billable.

{
    "errors": {
        "property_type": [
            "The selected property type is invalid."
        ]
    },
    "message": "The request validation failed"
}
422

Unknown Location

The location text matches no place. Use the autocomplete route. This response is not billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "VALIDATION_ERROR",
        "message": "The location is not a known place. Use the autocomplete route to find a location_type and location_code."
    },
    "success": false
}
503

Upstream Unavailable

Etuovi could not be reached or returned data that does not match the request. This response is not billable and is retryable.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "UPSTREAM_UNAVAILABLE",
        "message": "Etuovi could not be reached. Please retry shortly."
    },
    "success": false
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.