Otodom + Imovirtual + Storia API & Scraper
Otodom (otodom.pl) is Poland's largest real-estate portal; Imovirtual (imovirtual.com, Portugal) and Storia (storia.ro, Romania) run on the same platform, so one API reads all three with site=pl, pt or ro.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
`search` lists flats, houses, plots, commercial premises, halls, garages, rooms and new-development projects for sale or rent, in the whole country or one location, with the site's own filters: price, price per m², area, number of rooms, floor, build year, private owner / agency / developer, primary or secondary market, listing age, a word in the description, extras such as balcony, garage, lift or garden, and building type, in six sort orders. Each row carries the listing id, title, link, total price, price per m², the monthly administrative fee where the advertiser gives one, area, rooms, floor, location down to the neighbourhood, advertiser type and agency, dates and photos, plus the site's own result count. `listing` returns one listing in full: the price as structured data and as the page prints it, the monthly fee and the rental deposit as separate fields, every characteristic (building type, material, ownership, heating, construction status, availability date), extras, the full description, all photos and floor plans, map coordinates, and the advertiser with contact name, the phone numbers the listing page shows, agency name, page and address. For a new-development project it adds the price-from per m², the area range and its first units with price and area. `locations` turns a place name into the site's location id.
What an Otodom / Imovirtual / Storia field actually contains
Fields that read differently from how they look. Every row was measured against live otodom.pl, imovirtual.com and storia.ro responses on 2026-10-14.
| Field | What it holds |
|---|---|
| listing_id | The ID… code at the end of the listing's web address (for example ID4Diz3). Pass it unchanged to listing. The numeric ad_id is returned too, but the sites do not open a listing by it. Search to listing returned the same id, price, area and rooms on 27 of 27 listings across the three sites. |
| price, price_type | price is a number in the row's own currency and price_type says what it is: sale_price, monthly_rent (when transaction is rent) or, for a new-development project, from_price_per_m2 with the figure in investment_price_from_per_m2. Hidden or on-request prices are null with price_on_request true, never 0. |
| maintenance_fee_monthly | The monthly administrative fee (czynsz in Poland) the advertiser states, on sale and on rental listings. It is never added to price; it is filled on roughly 4 in 10 rows because many advertisers leave it out. |
| deposit | Rental deposit, on the listing only, as its own field next to the monthly rent and the monthly fee. |
| price_display, price_mismatch | price_display is the price exactly as the listing page prints it ("449 000 zł", "257 500 €"). price_mismatch is true when the printed price and the structured price disagree; it was false on all 27 listings checked. |
| currency | Read from each row: PLN on otodom.pl, EUR on imovirtual.com, EUR or RON on storia.ro (both occur on the same Romanian search page). |
| kind | ad for a single property, investment for a new-development project. Flat search pages contain development rows too, so filter on kind or use estate=investment. |
| advertiser_type | The site's own label: private_person, agency, developer or business. |
| total, pages, page_clamped | total is the site's own count of matching listings. A page past the last one returns no rows with page_clamped true and last_page, instead of repeating the last page. |
Listings and search results were identical when read from Poland, Germany and the United States on 2026-10-14 (same listing field by field, 36 of 36 search rows with the same values). Every filter value the API offers was checked against the site's own answer; values the site does not apply are refused with INVALID_PARAM instead of returning the unfiltered list.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/otodom/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"site": "pl",
"transaction": "sell",
"estate": "flat",
"location": "mazowieckie/warszawa/warszawa/warszawa"
}
}{
"ok": true,
"meta": {
"api": "otodom",
"endpoint": "search",
"mode": "live",
"latency_ms": 1821.4,
"record_count": 28,
"bytes": 1614896,
"cache_hit": false,
"total": 20289,
"decoy_rows_dropped": 1,
"upstream_requests": 1,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "c0f5de6988364d84",
"queue_ms": 1.5,
"fetched_at": "2026-10-14T18:57:30.142Z"
},
"data": {
"results": [
{
"listing_id": "ID4uooF",
"ad_id": 66348969,
"kind": "ad",
"title": "2-pokojowe mieszkanie 38m2 + loggia",
"url": "https://www.otodom.pl/pl/oferta/2-pokojowe-mieszkanie-38m2-loggia-ID4uooF",
"estate": "flat",
"transaction": "sell",
"price": 878000,
"currency": "PLN",
"price_type": "sale_price",
"price_on_request": false,
"price_hidden": false,
"price_per_m2": 23056.72,
"maintenance_fee_monthly": null,
"investment_price_from_per_m2": null,
"area_m2": 38.08,
"plot_area_m2": null,
"rooms": 2,
"floor": "fifth",
"floor_number": 5,
"people_per_room": null,
"location": {
"region": "mazowieckie",
"city": "Warszawa",
"district": "Wola",
"neighbourhood": "Odolany",
"street": "Sowińskiego 28",
"location_id": "mazowieckie/warszawa/warszawa/warszawa/wola/odolany",
"full_name": "Odolany, Wola, Warszawa, mazowieckie",
"levels": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"advertiser_type": "business",
"is_private_owner": false,
"advertiser_name": "Matexi Polska",
"agency": {
"agency_id": 10557277,
"name": "Matexi Polska",
"type": "developer",
"slug": "matexi-polska-ID10557277",
"logo": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Im5mN3plNHdxbDY0ZDEtQVBMIn0.7b7fuHPm6wYU63P3DL1bgHwPXHMgJMX6h16TJx6k6ig/image"
},
"created_at": "2025-01-14T13:44:44Z",
"first_created_at": "2025-01-14T13:44:44+00:00",
"pushed_up_at": "2026-10-14T20:55:54+02:00",
"is_promoted": false,
"is_exclusive": false,
"is_crosslisted": false,
"has_remote_services": false,
"source": "urn:partner:obidointegration",
"tags": [
"PARKING_SPOT"
],
"short_description": null,
"special_offer": null,
"development": {
"development_id": 66348867,
"title": "Splot Wola",
"url": "https://www.otodom.pl/pl/inwestycja/splot-wola-ID4uon1"
},
"investment": null,
"image": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6InhnMHVwOG9sajUwbDItRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0._hPeD3FJBTo4p2_QdOqIB1PPqp_HxZM9GrV_-PqCJKc/image;s=1280x1024;q=80",
"images": [
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6InhnMHVwOG9sajUwbDItRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0._hPeD3FJBTo4p2_QdOqIB1PPqp_HxZM9GrV_-PqCJKc/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImxwMG01MWtmbnF0YjEtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.N4OGvHcCL6aq86Q_TVD6gXn8CY6ojMieM7-exg2uVQg/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImlhNWloeTk4OGwzYi1FQ09TWVNURU0iLCJ3IjpbeyJmbiI6ImVudmZxcWUxYXk0azEtQVBMIiwicyI6IjE2IiwiYSI6IjAiLCJwIjoiMTAsLTEwIn1dfQ.-5KvBl5EV4szgyyW45V8WGWW0miaMq7G5TdMuPO0DIE/image;s=1280x1024;q=80"
],
"image_count": 14
},
{
"listing_id": "ID4uoc3",
"ad_id": 66348187,
"kind": "ad",
"title": "3-pokojowe mieszkanie 65m2 + balkon Bez Prowizji",
"url": "https://www.otodom.pl/pl/oferta/3-pokojowe-mieszkanie-65m2-balkon-bez-prowizji-ID4uoc3",
"estate": "flat",
"transaction": "sell",
"price": 1476000,
"currency": "PLN",
"price_type": "sale_price",
"price_on_request": false,
"price_hidden": false,
"price_per_m2": 22500,
"maintenance_fee_monthly": null,
"investment_price_from_per_m2": null,
"area_m2": 65.6,
"plot_area_m2": null,
"rooms": 3,
"floor": "first",
"floor_number": 1,
"people_per_room": null,
"location": {
"region": "mazowieckie",
"city": "Warszawa",
"district": "Wola",
"neighbourhood": "Czyste",
"street": "Kolejowa",
"location_id": "mazowieckie/warszawa/warszawa/warszawa/wola/czyste",
"full_name": "Czyste, Wola, Warszawa, mazowieckie",
"levels": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"advertiser_type": "business",
"is_private_owner": false,
"advertiser_name": "SKANSKA RESIDENTIAL DEVELOPMENT POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"agency": {
"agency_id": 10556404,
"name": "SKANSKA RESIDENTIAL DEVELOPMENT POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"type": "developer",
"slug": "skanska-residential-development-poland-spolka-z-ograniczona-odpowiedzialnoscia-ID10556404",
"logo": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImsxZXBoN3BtYmtybTItQVBMIn0.rZjKCc0hwfl9ZgJnjjdxGhD7TNfclXk6eGWe7O4BJGo/image"
},
"created_at": "2025-01-14T12:53:32Z",
"first_created_at": "2025-01-14T12:53:32+00:00",
"pushed_up_at": "2026-10-14T20:54:27+02:00",
"is_promoted": false,
"is_exclusive": false,
"is_crosslisted": false,
"has_remote_services": false,
"source": "urn:partner:obidointegration",
"tags": [
"BALCONY",
"PARKING_SPOT"
],
"short_description": null,
"special_offer": null,
"development": {
"development_id": 66339760,
"title": "NU2 Warszawa Wola",
"url": "https://www.otodom.pl/pl/inwestycja/nu2-warszawa-wola-ID4um08"
},
"investment": null,
"image": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Inp4YzBhM251bmc2aTMtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.uEMH20nUlG8zJeU9IM14_9EZj9TpsuM-zSq6kD4jcyg/image;s=1280x1024;q=80",
"images": [
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Inp4YzBhM251bmc2aTMtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.uEMH20nUlG8zJeU9IM14_9EZj9TpsuM-zSq6kD4jcyg/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImFvY2FnczFnc2hkOTItRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.UjEGpYe6sWCarM0k-HJawggR4zw01-gpjs8MF04cvos/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImZ1NGFmazJxNWlxMTEtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.WiDE-3byBSKN0voO0QrJWZMOslX2BAkoxItJSCl8nxQ/image;s=1280x1024;q=80"
],
"image_count": 10
},
{
"listing_id": "ID4umfW",
"ad_id": 66340739,
"kind": "ad",
"title": "2-pokojowe mieszkanie 59m2 + balkon Bezpośrednio",
"url": "https://www.otodom.pl/pl/oferta/2-pokojowe-mieszkanie-59m2-balkon-bezposrednio-ID4umfW",
"estate": "flat",
"transaction": "sell",
"price": 947000,
"currency": "PLN",
"price_type": "sale_price",
"price_on_request": false,
"price_hidden": false,
"price_per_m2": 15825.53,
"maintenance_fee_monthly": null,
"investment_price_from_per_m2": null,
"area_m2": 59.84,
"plot_area_m2": null,
"rooms": 2,
"floor": "fourth",
"floor_number": 4,
"people_per_room": null,
"location": {
"region": "mazowieckie",
"city": "Warszawa",
"district": "Praga-Południe",
"neighbourhood": "Gocław",
"street": "Precyzyjna",
"location_id": "mazowieckie/warszawa/warszawa/warszawa/praga--poludnie/goclaw",
"full_name": "Gocław, Praga-Południe, Warszawa, mazowieckie",
"levels": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"advertiser_type": "business",
"is_private_owner": false,
"advertiser_name": "SKANSKA RESIDENTIAL DEVELOPMENT POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"agency": {
"agency_id": 10556404,
"name": "SKANSKA RESIDENTIAL DEVELOPMENT POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"type": "developer",
"slug": "skanska-residential-development-poland-spolka-z-ograniczona-odpowiedzialnoscia-ID10556404",
"logo": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImsxZXBoN3BtYmtybTItQVBMIn0.rZjKCc0hwfl9ZgJnjjdxGhD7TNfclXk6eGWe7O4BJGo/image"
},
"created_at": "2025-01-14T08:52:49Z",
"first_created_at": "2025-01-14T08:52:49+00:00",
"pushed_up_at": "2026-10-14T20:54:25+02:00",
"is_promoted": false,
"is_exclusive": false,
"is_crosslisted": false,
"has_remote_services": false,
"source": "urn:partner:obidointegration",
"tags": [
"SEPARATE_KITCHEN",
"BALCONY",
"PARKING_SPOT"
],
"short_description": null,
"special_offer": null,
"development": {
"development_id": 66339759,
"title": "Park Skandynawia V",
"url": "https://www.otodom.pl/pl/inwestycja/park-skandynawia-v-ID4um07"
},
"investment": null,
"image": "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6InE1dDBtNnk1anc0NTMtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.vWkAoyVNjKwB3gXzF3yyzWoj0icUT89zYPab9WsPLw0/image;s=1280x1024;q=80",
"images": [
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6InE1dDBtNnk1anc0NTMtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.vWkAoyVNjKwB3gXzF3yyzWoj0icUT89zYPab9WsPLw0/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6ImJ6ZjdkbXlrZTE0dzItRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.BLY2WTitNtRXDtCGaSrusfvNkTu40ChZyQE-Q4HEKeI/image;s=1280x1024;q=80",
"https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Ijl5MjhpbmQxMjRoLUVDT1NZU1RFTSIsInciOlt7ImZuIjoiZW52ZnFxZTFheTRrMS1BUEwiLCJzIjoiMTYiLCJhIjoiMCIsInAiOiIxMCwtMTAifV19.qmWlueCg1kQNUGLGfBuMV2UDLFp3bMbtz9M1hWq9pMI/image;s=1280x1024;q=80"
],
"image_count": 7
}
],
"total": 20289,
"pages": 564,
"page": 1,
"per_page": 36,
"last_page": 564,
"has_more": true,
"page_clamped": false,
"decoy_rows_dropped": 1,
"location": {
"location_id": "mazowieckie/warszawa/warszawa/warszawa",
"name": "Warszawa",
"full_name": "Warszawa, mazowieckie",
"level": "city",
"children": [
{
"location_id": "mazowieckie/warszawa/warszawa/warszawa/bemowo",
"name": "Bemowo",
"level": "district"
}
]
},
"query": {
"site": "pl",
"transaction": "sell",
"estate": "flat",
"location": "mazowieckie/warszawa/warszawa/warszawa",
"sort": "relevance",
"page": 1,
"limit": 36
}
}
}What the Otodom + Imovirtual + Storia API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search sale or rental listings on otodom.pl (site=pl), imovirtual.com (pt) or storia.ro (ro): property type, location (an id from `locations`), price, price per m², area, rooms, floor, build year, advertiser type (private / agency / developer), market (primary / secondary), listing age, keyword in the description, extras, building type, sort and page. Each row: listing id, title, URL, total price, price per m², monthly administrative fee, area, rooms, floor, location down to the neighbourhood, advertiser type and agency, dates, promoted flag, photos. Plus the source's own total and page count. Every filter is checked against the source's own echo: a value the site did not apply is refused, never silently ignored. | Real-estate investors call search to search sale or rental listings on otodom.pl (site=pl), imovirtual.com (pt) or storia.ro (ro). | site, transaction, estate, location, min_price, ... |
| listing | Full listing by `listing_id` (the ID… token from a search row) or URL: price, the price as the site prints it, monthly administrative fee (czynsz), deposit, price per m², area, rooms, floor, building floors, build year, building type / material, ownership, heating, construction status, extras, all characteristics, full description, photos, floor plans, location with coordinates, dates, and the advertiser (type, contact name, phone numbers as published, agency name / page / logo, owner address). For a new-development project: price-from per m², area range, number of units and the first page of its units with price and area. | Brokerage tools call listing to get full listing by `listing_id` (the ID… token from a search row) or URL. | listing_id, url, site |
| locations | Location lookup: type a place name (`Kraków`, `Mokotów`, `Lisboa`, `Cluj`) and get the site's own location ids with level (voivodeship / county / city / district / village…) and full name. Feed `location_id` to `search`. Diacritics are optional. | Property dashboards call locations to get location lookup. | query, query, site |
Call search from your stack
curl -X POST https://api.reefapi.com/otodom/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"site":"pl","transaction":"sell","estate":"flat","location":"mazowieckie/warszawa/warszawa/warszawa"}'import requests
r = requests.post(
"https://api.reefapi.com/otodom/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"site": "pl",
"transaction": "sell",
"estate": "flat",
"location": "mazowieckie/warszawa/warszawa/warszawa"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/otodom/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"site": "pl",
"transaction": "sell",
"estate": "flat",
"location": "mazowieckie/warszawa/warszawa/warszawa"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.otodom.search with {"site":"pl","transaction":"sell","estate":"flat","location":"mazowieckie/warszawa/warszawa/warszawa"}.Who uses this API and why
- Track asking prices and price per m² of flats by city and district in Poland, Portugal and Romania.
- Compare rents with the monthly fee and deposit separated, for rental yield calculations.
- Collect new listings every day, newest first, and read each one in full with coordinates.
- Build lead lists of agencies and developers from the advertisers behind the listings.
- Monitor new-development projects and their units as they come to market.
Questions developers ask before integrating
Do I need an Otodom account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
Does it cover Portugal and Romania too?
Yes. site=pt reads imovirtual.com and site=ro reads storia.ro; all three sites share one platform, so the fields and filters are the same. Prices stay in each listing's own currency.
How do I search one city or district?
Call locations with the place name (Kraków, Mokotów, Lisboa, Cluj) and pass the returned location_id to search. On 2026-10-14 flats for sale were 153,523 in all of Poland and 20,266 in Warsaw.
Can I separate private owners from agencies and developers?
Yes, with owner_type. On 2026-10-14 Polish flats for sale split into 11,093 from private owners, 76,095 from agencies and 66,294 from developers. Every row also carries advertiser_type.
Is the monthly fee included in the price?
No. price is the sale price or the monthly rent; the administrative fee (czynsz) is maintenance_fee_monthly and the rental deposit is deposit, each in its own field.
Do you return the advertiser's phone number?
listing returns the phone numbers that the listing page itself shows to a logged-out visitor, with the contact name and, for agencies, the agency name, page and address.
Which room counts can I filter on?
1 to 5 and 6+, the classes the sites use. On 2026-10-14 two or three rooms matched 114,976 Polish flats for sale, five rooms 2,711 and six or more 727.
What about new-development projects?
Search with estate=investment (2,064 projects in Poland, 887 in Portugal, 73 in Romania on 2026-10-14). listing on a project returns its price-from per m², area range, number of units and the first units with price and area.
What is the Otodom + Imovirtual + Storia API?
Otodom + Imovirtual + Storia API is a ReefAPI endpoint group for poland's, portugal's and romania's biggest property portals: flats, houses, plots and new developments for sale and rent, with price, m² price, fees and the advertiser. It returns live JSON through POST requests under /otodom/v1.
Is the Otodom + Imovirtual + Storia API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Otodom + Imovirtual + Storia calls use the same shared credit balance as every other ReefAPI engine.
Do I need an Otodom + Imovirtual + Storia login or account?
No login to Otodom + Imovirtual + Storia is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Otodom + Imovirtual + Storia data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Otodom + Imovirtual + Storia API use?
Otodom + Imovirtual + Storia actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Otodom + Imovirtual + Storia from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call otodom actions with the same key, credit pool and JSON envelope used by normal REST requests.