---
title: "Etuovi API: JSON data, 6 endpoints, 1 credit per call"
description: "Etuovi API for Finnish property search, listings, real estate agencies, agents and location autocomplete as JSON, sale or rent. 1 credit per successful call."
url: https://perceptlayer.com/apis/etuovi
---

[APIs](https://perceptlayer.com/apis) / [Real estate](https://perceptlayer.com/verticals/real-estate) / Etuovi

1 credit per call 6 endpoints 25 datapoints

# Etuovi API

Etuovi API for Finnish property search, listings, real estate agencies, agents and location autocomplete as JSON, sale or rent. 1 credit per successful call.

[Get a free API key](https://perceptlayer.com/signup) Run it below

Etuovi

GET /v1/etuovi/search?listing\_type=sale&location=Tampere&room\_counts\[\]=2&max\_price=200000 

```
{
  "success": true,
  "data": {
    "items": [
      {
        "id": 2770003,
        "friendly_id": "20831797",
        "url": "https://www.etuovi.com/kohde/20831797",
        "listing_type": "sale",
        "address_line_1": "Ristinarkuntie 20",
        "address_line_2": "Janka Tampere",
        "location": "Ristinarkuntie 20 Janka Tampere",
        "geo": {
          "lat": 61.488856,
          "lng": 23.854849
        },
        "year_built": 2019,
        "published_at": "2026-11-12T13:20:04+00:00",
        "updated_at": "2026-11-12T13:20:04+00:00",
        "price": {
          "amount": 154000,
          "currency": "EUR",
          "is_share_price": false
        },
        "area": 37.5,
        "total_area": 37.5,
        "room_count": {
          "count": 2,
          "type": "TWO_ROOMS"
        },
        "room_structure": "2h, k, kph, lasit. parveke",
        "floor": 4,
        "floor_count": 7,
        "property_type": "RESIDENTIAL",
        "property_subtype": "APARTMENT_HOUSE",
        "new_building": false,
        "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/3/2770003/0e76b9541118d347871c0e0e51d244c4/25467491564731048a0ddb8f622aaf04/ORIGINAL.jpeg",
        "office": {
          "id": 2681,
          "name": "Herrainmäki | Sami Nyman LKV Oy",
          "logo": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/office/logo/customerlogo2681_1.png",
          "url": "https://www.herrainmaki.fi/"
        },
        "agent": {
          "name": "Nyman Sami",
          "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/agent/import/41383e893b76788fdf9f4f871772c49e/f1b0debe73c9a6b5165535f60feeb738/ORIGINAL.jpeg"
        },
        "preview_images": [
          "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/3/2770003/0e76b9541118d347871c0e0e51d244c4/9256ff8d83f976fc77f78f15e73b7c9f/ORIGINAL.jpeg",
          "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/3/2770003/0e76b9541118d347871c0e0e51d244c4/4fdbabe5d0e06625e47cf35c31f253f8/ORIGINAL.jpeg"
        ]
      },
      {
        "id": 2769992,
        "friendly_id": "628844",
        "url": "https://www.etuovi.com/kohde/628844",
        "listing_type": "sale",
        "address_line_1": "Sarvijaakonkatu 23 B",
        "address_line_2": "Kaleva Tampere",
        "location": "Sarvijaakonkatu 23 B Kaleva Tampere",
        "geo": {
          "lat": 61.492977,
          "lng": 23.812435
        },
        "year_built": 2018,
        "published_at": "2026-11-12T13:11:13+00:00",
        "updated_at": "2026-11-12T13:11:13+00:00",
        "price": {
          "amount": 189000,
          "currency": "EUR",
          "is_share_price": false
        },
        "area": 45.5,
        "total_area": 45.5,
        "room_count": {
          "count": 2,
          "type": "TWO_ROOMS"
        },
        "room_structure": "2h + kt + vh + p",
        "floor": 5,
        "floor_count": 6,
        "property_type": "RESIDENTIAL",
        "property_subtype": "APARTMENT_HOUSE",
        "new_building": false,
        "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/992/2769992/0e76b9541118d347871c0e0e51d244c4/665bf4765b6e48b0dd346328d2b590fd/ORIGINAL.jpeg",
        "office": {
          "id": 420,
          "name": "OP Koti Sisä-Suomi Oy LKV, Tampere Keskusta",
          "logo": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/etuovi/customer/logo/customerImage23_20261020_125652.jpeg",
          "url": "https://op-koti.fi?cmpid=.opkoti..huom.1.etuovi.banner.yrityslogo.ha_jn_opkoti_valitys"
        },
        "agent": {
          "name": "Heli Jussila",
          "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/agent/import/41383e893b76788fdf9f4f871772c49e/e7eac067c6d52df6796cf7eae47b13f1/ORIGINAL.jpeg"
        },
        "preview_images": [
          "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/992/2769992/0e76b9541118d347871c0e0e51d244c4/df5f314cbd1f1bd5087d405cc1eb4091/ORIGINAL.jpeg"
        ]
      },
      {
        "id": 2769973,
        "friendly_id": "67432227",
        "url": "https://www.etuovi.com/kohde/67432227",
        "listing_type": "sale",
        "address_line_1": "Hallituskatu 15",
        "address_line_2": "Keskusta Tampere",
        "location": "Hallituskatu 15 Keskusta Tampere",
        "geo": {
          "lat": 61.496086,
          "lng": 23.754608
        },
        "year_built": 1962,
        "published_at": "2026-11-12T12:54:05+00:00",
        "updated_at": "2026-11-12T12:54:05+00:00",
        "price": {
          "amount": 162000,
          "currency": "EUR",
          "is_share_price": false
        },
        "area": 36,
        "total_area": 36,
        "room_count": {
          "count": 2,
          "type": "TWO_ROOMS"
        },
        "room_structure": "2h, kk, kph / wc, vh",
        "floor": 8,
        "floor_count": 8,
        "property_type": "RESIDENTIAL",
        "property_subtype": "APARTMENT_HOUSE",
        "new_building": false,
        "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/973/2769973/0e76b9541118d347871c0e0e51d244c4/e6144c7ae5a375b4de875e03405b953c/ORIGINAL.jpeg",
        "office": {
          "id": 3297,
          "name": "Bo LKV Tampere | Valtteri Lampinen LKV Oy",
          "logo": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/etuovi/customer/logo/customerImage68v2.jpeg",
          "url": "https://bo.fi/myymassa/"
        },
        "agent": {
          "name": "Valtteri Lampinen",
          "image": "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/agent/import/41383e893b76788fdf9f4f871772c49e/957bc6f22f9717a41980a8cf4e48b1b4/ORIGINAL.png"
        },
        "preview_images": [
          "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/973/2769973/0e76b9541118d347871c0e0e51d244c4/eef287a17928a479b80449db49b94da4/ORIGINAL.jpeg",
          "https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/973/2769973/0e76b9541118d347871c0e0e51d244c4/9898dfb64598af0f0e5f9c35e5f882af/ORIGINAL.png"
        ]
      }
    ],
    "pagination": {
      "page": 1,
      "per_page": 30,
      "total": 752,
      "total_pages": 26,
      "has_next": true
    }
  },
  "meta": {
    "endpoint_family": "search",
    "location": {
      "type": "CITY",
      "code": "FI_PIRKANMAA_TAMPERE",
      "name": "Tampere",
      "full_name": "Tampere"
    },
    "dropped_by_filter": 0,
    "request_id": "req_04ca53d239f44c81a3c9c0828fa83c82",
    "credits_charged": 1,
    "credits_remaining": 1872
  }
}
```

200 OK JSON X-Credits-Used: 1

Recorded from our API and shortened.

Sample data

## What one call returns

A recorded run of `search`: the fields and shapes you will get, shortened to 3 items.

| # | id integer | friendly\_id string | url url | listing\_type string | address\_line\_1 string | address\_line\_2 string | location string | geo object | year\_built integer | published\_at string | updated\_at string | price object | area number | total\_area number | room\_count object | room\_structure string | floor integer | floor\_count integer | property\_type string | property\_subtype string | new\_building boolean | image url | office object | agent object | preview\_images string\[\] |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | 2770003 | 20831797 | https://www.etuovi.com/kohde/20831797 | sale | Ristinarkuntie 20 | Janka Tampere | Ristinarkuntie 20 Janka Tampere | {2 fields} | 2019 | 2026-11-12T13:20:04+00:00 | 2026-11-12T13:20:04+00:00 | {3 fields} | 37.5 | 37.5 | {2 fields} | 2h, k, kph, lasit. parveke | 4 | 7 | RESIDENTIAL | APARTMENT\_HOUSE | false | https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/3/2770003/0e76b9541118d347871c0e0e51d244c4/25467491564731048a0ddb8f622aaf04/ORIGINAL.jpeg | {4 fields} | {2 fields} | \[2 items\] |
| 2 | 2769992 | 628844 | https://www.etuovi.com/kohde/628844 | sale | Sarvijaakonkatu 23 B | Kaleva Tampere | Sarvijaakonkatu 23 B Kaleva Tampere | {2 fields} | 2018 | 2026-11-12T13:11:13+00:00 | 2026-11-12T13:11:13+00:00 | {3 fields} | 45.5 | 45.5 | {2 fields} | 2h + kt + vh + p | 5 | 6 | RESIDENTIAL | APARTMENT\_HOUSE | false | https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/992/2769992/0e76b9541118d347871c0e0e51d244c4/665bf4765b6e48b0dd346328d2b590fd/ORIGINAL.jpeg | {4 fields} | {2 fields} | \[1 item\] |
| 3 | 2769973 | 67432227 | https://www.etuovi.com/kohde/67432227 | sale | Hallituskatu 15 | Keskusta Tampere | Hallituskatu 15 Keskusta Tampere | {2 fields} | 1962 | 2026-11-12T12:54:05+00:00 | 2026-11-12T12:54:05+00:00 | {3 fields} | 36 | 36 | {2 fields} | 2h, kk, kph / wc, vh | 8 | 8 | RESIDENTIAL | APARTMENT\_HOUSE | false | https://d3ls91xgksobn.cloudfront.net/800x600/etuovimedia/images/property/import/973/2769973/0e76b9541118d347871c0e0e51d244c4/e6144c7ae5a375b4de875e03405b953c/ORIGINAL.jpeg | {4 fields} | {2 fields} | \[2 items\] |

Recorded from our API · 3 items shown · 25 datapoints per item GET /v1/etuovi/search?listing\_type=sale&location=Tampere&room\_counts\[\]=2&max\_price=200000

25 datapoints

### Identity

-   id integer
-   friendly\_id string
-   listing\_type string
-   property\_type string
-   property\_subtype string

### Contact

-   url url
-   agent object

### Location

-   address\_line\_1 string
-   address\_line\_2 string
-   location string
-   area number
-   total\_area number

### Reputation

-   image url
-   preview\_images string\[\]

### Price

-   price object

### Other

-   geo object
-   year\_built integer
-   published\_at string
-   updated\_at string
-   room\_count object
-   room\_structure string
-   floor integer
-   floor\_count integer
-   new\_building boolean
-   office object

Playground

## Run this API

cURL shell 

```
curl "https://api.perceptlayer.com/v1/etuovi/search?listing_type=sale&location=Tampere&room_counts[]=2&max_price=200000" \
  -H "X-API-Key: $API_KEY"
```

Etuovi · 6 endpoints

## Endpoints

Every endpoint takes the same key. Open one for its parameters and an example request.

| Endpoint | Required parameters | Cost |
| --- | --- | --- |
| [GET `/v1/etuovi/agencies`](https://perceptlayer.com/apis/etuovi/agencies) | none +2 optional | 1 credit |
| [GET `/v1/etuovi/agency`](https://perceptlayer.com/apis/etuovi/agency) | `id` +5 optional | 1 credit |
| [GET `/v1/etuovi/agent`](https://perceptlayer.com/apis/etuovi/agent) | `realtor_id` +1 optional | 1 credit |
| [GET `/v1/etuovi/autocomplete`](https://perceptlayer.com/apis/etuovi/autocomplete) | `query` | 1 credit |
| [GET `/v1/etuovi/listing`](https://perceptlayer.com/apis/etuovi/listing) | `id` +1 optional | 1 credit |
| [GET `/v1/etuovi/search`](https://perceptlayer.com/apis/etuovi/search) | none +17 optional | 1 credit |

Overview

## About the Etuovi API

## What you can get

The Etuovi API returns Finnish property data from Etuovi as JSON through 6 endpoints.

-   **Search:** `search` takes a `listing_type` (sale or rent), with `location`, `location_type`, `location_code`, `property_type` (residential, plot, leisure, estate or other), repeatable `residential_type[]` (apartment\_house, row\_house, semi\_detached\_house, detached\_house, separate\_house, balcony\_access\_block or wooden\_house\_apartment) and `room_counts[]` (1 to 5 or more\_than\_five), `min_price`, `max_price`, `min_area`, `max_area`, `min_year`, `max_year`, `agency_id`, `sort` (newest, oldest, price\_asc, price\_desc, area\_asc, area\_desc, year\_asc or year\_desc), `page` and `per_page` (30, 50 or 100).
-   **Listings:** `listing` takes an `id`, with `listing_type`.
-   **Agencies and agents:** `agencies` takes a `location` or `name`; `agency` takes an `id`, with `include_listings`, `listing_type`, `property_type`, `page` and `per_page`; `agent` takes a `realtor_id`, with `include_listings`.
-   **Locations:** `autocomplete` takes a `query`.

The recorded `search` for two-room homes for sale in Tampere up to 200,000 EUR returns `data.items`, each with `id`, `friendly_id`, `url`, `listing_type`, `address_line_1`, `location`, `geo`, `year_built`, `published_at`, `price`, `area`, `total_area`, `room_count`, `room_structure`, `floor`, `property_type`, `property_subtype`, `new_building`, `office` and `agent`. It also returns `pagination` with `total` (752), `total_pages` and `has_next`, and `meta.location` with the resolved location `type`, `code` and `name`.

## How a call works

Search a city: `GET /v1/etuovi/search?listing_type=sale&location=Tampere&room_counts[]=2&max_price=200000` with your key in the `X-API-Key` header. Page with `page` and `per_page` while `has_next` is true. To see who is selling, `agencies?location=Tampere` lists the agencies there, and `agency` returns one with its listings when you pass `include_listings`. Every successful call costs 1 credit; failed calls cost nothing.

Real estate JSON REST MCP

### More real estate APIs

[28Hse](https://perceptlayer.com/apis/28hse) [4zida](https://perceptlayer.com/apis/4zida) [591](https://perceptlayer.com/apis/591-house) [99.co](https://perceptlayer.com/apis/99co) [99acres](https://perceptlayer.com/apis/99acres) [Adondevivir](https://perceptlayer.com/apis/adondevivir) [Apartment List](https://perceptlayer.com/apis/apartment-list) [Apartments.com](https://perceptlayer.com/apis/apartments-com) [Aqar](https://perceptlayer.com/apis/aqar) [Aqarmap](https://perceptlayer.com/apis/aqarmap) [Argenprop](https://perceptlayer.com/apis/argenprop) [athome](https://perceptlayer.com/apis/athome)

Use cases

### Track asking prices for flats in Tampere, Helsinki and other Finnish cities

`Use the Etuovi API to track asking prices for flats in Tampere, Helsinki and other Finnish cities` 

### Compare homes by \`year\_built\`, \`room\_structure\` and area

`` Use the Etuovi API to compare homes by `year_built`, `room_structure` and area `` 

### Watch summer cottages and plots with \`property\_type=leisure\` or \`plot\`

`` Use the Etuovi API to watch summer cottages and plots with `property_type=leisure` or `plot` `` 

### Build an agency directory for a city with \`agencies\`

`` Use the Etuovi API to build an agency directory for a city with `agencies` `` 

FAQ

## Questions

**Do I need an Etuovi account?**

No. You call this Etuovi API with your Perceptlayer key in the \`X-API-Key\` header, with no Etuovi login.

**How much does the Etuovi API cost?**

Each successful call costs one credit. New accounts get free credits to start, and credit packs bring the price down as you scale.

**What format are responses in?**

Every endpoint returns JSON, with no HTML parsing on your side.

**How do I filter by room count?**

Repeat \`room\_counts\[\]\` once per value, for example \`room\_counts\[\]=2\`. \`residential\_type\[\]\` works the same way.

**Should I build an Etuovi scraper instead?**

You can, but an Etuovi scraper is code you maintain: page changes break it, requests get blocked, and Etuovi's terms govern how you collect data. The Etuovi API gives you 6 endpoints of named JSON fields for 1 credit per successful call, and failed calls cost nothing. A scraper makes sense only for data these endpoints don't return, so check the response in the playground on this page first.

## Try the Etuovi API with 100 free credits

No credit card. Failed calls are never billed.

[Get a free API key](https://perceptlayer.com/signup) [Read the docs](https://docs.perceptlayer.com)
