# Etuovi Search API Documentation

<p><strong>Etuovi Search API</strong> lists properties for sale or for rent in Finland. Send a <code>location</code> place name, or a <code>location_type</code> with a <code>location_code</code> from the autocomplete route, or neither for all of Finland. A place name uses the first matching place and returns it in <code>meta.location</code>; an unknown place returns 422. Prices are in EUR, rent is per month. A missing value is <code>null</code>, never 0.</p><p>There is no bedroom or bathroom filter on the site. Use <code>room_counts</code>. Some sale items show only the share price of the housing company: then <code>price.amount</code> is <code>null</code> and <code>price.is_share_price</code> 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 <code>meta.dropped_by_filter</code>. 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 <code>has_next</code> false. The sort <code>price_asc</code> lists items without a price first. Rent listings have no public page, so <code>url</code> is null for rent.</p>

- **Documentation:** [https://scrappa.co/docs/etuovi-api/etuovi_search](https://scrappa.co/docs/etuovi-api/etuovi_search)
- **API group:** Etuovi API
- **Endpoint:** `GET https://scrappa.co/api/etuovi/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `listing_type` | string | No | sale (default) or rent. |
| `location` | string | No | Place name, for example Tampere. Send location or location_type with location_code. |
| `location_type` | string | No | Place type from the autocomplete route, for example CITY, DISTRICT or POST_CODE. Send with location_code. |
| `location_code` | string | No | Place code from the autocomplete route, for example FI_PIRKANMAA_TAMPERE. |
| `property_type` | string | No | residential (default), plot, leisure, estate or other. Rentals: residential only. |
| `residential_type` | string | No | Comma-separated: apartment_house, row_house, semi_detached_house, detached_house, separate_house, balcony_access_block, wooden_house_apartment. |
| `room_counts` | string | No | Comma-separated: 1, 2, 3, 4, 5 or more_than_five. Residential only. |
| `min_price` | integer | No | Minimum price in EUR (rent: per month). |
| `max_price` | integer | No | Maximum price in EUR (rent: per month). |
| `min_area` | integer | No | Minimum living area in square meters. |
| `max_area` | integer | No | Maximum living area in square meters. |
| `min_year` | integer | No | Earliest year built. Residential only. |
| `max_year` | integer | No | Latest year built. Residential only. |
| `agency_id` | integer | No | Only listings of this agency, from the agencies route. |
| `sort` | string | No | newest (default), oldest, price_asc, price_desc, area_asc, area_desc, year_asc or year_desc. |
| `page` | integer | No | One-based page number. Default 1, maximum 500. |
| `per_page` | integer | No | Items per page: 30 (default), 50 or 100. |

## Example response

```json
{
    "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

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A required parameter or a value is invalid. This response is not billable. |
| 422 | Unknown Location | The location text matches no place. Use the autocomplete route. This response is not billable. |
| 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. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
