Otodom Poland Real Estate Listings
Pricing
from $1.70 / 1,000 listing founds
Otodom Poland Real Estate Listings
Pull live apartment and house listings straight from Otodom.pl — Poland's biggest real-estate classifieds portal — by deal type, property type and city. No login, no browser, no proxies. Unofficial, independent tool — not affiliated with, endorsed by, or sponsored by Otodom.
Pricing
from $1.70 / 1,000 listing founds
Rating
0.0
(0)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Pull live apartment and house listings straight from Otodom.pl — Poland's biggest real-estate classifieds portal — filtered by deal type (sale/rent), property type and city. No login, no API key, no browser needed on your side.
What you get
- Title, price (with currency), rooms, floor area, voivodeship/city/district location, a short description, preview photos and the direct listing URL for every ad found.
- Filter by sale or rent, apartment or house, and any Otodom.pl city.
- Runs on Apify: schedule it, monitor it, call it from the API, export to JSON/CSV/Excel or push straight into your own pipeline.
How to run it
- Click Try for free — no card needed on the free plan.
- Pick Deal type (sale/rent) and Property type (apartment/house), and
set City path — for example
mazowieckie/warszawa/warszawa/warszawafor the city of Warsaw. - Hit Start and pull the results from the dataset (UI, API or webhook).
Pricing
Pay-per-event: $0.005 per run start + $0.002 per result. No monthly seat, no minimum. 100 listings found cost about $0.21 (the one-time start fee plus 100 result rows). Rows where the source returned nothing (an unrecognized combination, a search with zero matching listings, or a request that failed) are returned for transparency but are never charged for.
Input
| Field | Required | What it does |
|---|---|---|
deal_type | no | sprzedaz (sale) or wynajem (rent). Default sprzedaz. |
property_type | no | mieszkanie (apartment) or dom (house). Default mieszkanie. |
city | no | Otodom.pl location path, e.g. mazowieckie/warszawa/warszawa/warszawa for the city of Warsaw. Default mazowieckie/warszawa/warszawa/warszawa. |
max_items | no | Total row cap for this run (default 100). |
max_pages | no | How many result pages to walk before stopping (default 3). |
{"deal_type": "sprzedaz","property_type": "mieszkanie","city": "mazowieckie/warszawa/warszawa/warszawa","max_items": 5,"max_pages": 1}
Output
Real row from a live run on the platform (2026-07-30):
{"found": true,"url": "https://www.otodom.pl/pl/oferta/2-pokojowe-mieszkanie-41m2-balkon-bezposrednio-ID4uobY","title": "2-pokojowe mieszkanie 41m2 + balkon Bezpośrednio","price": 1059000,"currency": "PLN","deal_type": "sale","property_type": "FLAT","rooms": 2,"area_sqm": 41.53,"location": "Czyste, Wola, Warszawa, mazowieckie","lat": null,"lng": null,"posted_date": "2026-07-30 16:37:36","description": "2-pokojowe mieszkanie numer BC0102 na 1. piętrze w budynku 2 w Inwestycji NU2 Warszawa Wola Dewelopera SkanskaPonadstandardowa wysokość pomieszczeńSterowanie mediami i oświetleniem z poziomu aplikacj...","images": ["https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6ImtsZjZ0dXJmNmRmNC1FQ09TWVNURU0iLCJ3IjpbeyJmbiI6ImVudmZxcWUxYXk0azEtQVBMIiwicyI6IjE0IiwicCI6IjEwLC0xMCIsImEiOiIwIn1dfQ.nIxmw2l4KAr-qTtFs1F3CQmnKvsrS494RKm9YPVRC5k/image;s=655x491;q=80","https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6IjA5MDVtZnBhM3VhYzMtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.JioWAGfTQKktwfxyeNOHWtOEKJyI3JHq1wKzKOSUsEk/image;s=655x491;q=80","https://ireland.apollo.olxcdn.com/v1/files/eyJmbiI6ImFuNW5nbjBiOXdlMTItRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNCIsInAiOiIxMCwtMTAiLCJhIjoiMCJ9XX0.Po1kmZ0Fo3zyxNXo2vdPYNJjKho2RFT9pIfP4dKuEVE/image;s=655x491;q=80"],"source_portal": "otodom-warsaw","scraped_at": "2026-07-30T14:41:21.073Z","partial": true,"partial_reason": "stopped after 1 page(s), 5 item(s) collected — reached this run's own max_pages/max_items limit before the source confirmed (via confirmedEnd) that there is nothing more; there may be additional matching listings beyond what was collected"}
| Field | Meaning |
|---|---|
found | true for a real listing row; false for an empty-result or error row. |
title | Listing headline as published. |
price | Sale price, or monthly rent for rentals. |
currency | Always PLN on Otodom.pl. |
deal_type | sale or rent. |
property_type | Otodom's own classification: FLAT, HOUSE, or INVESTMENT (new-development project). |
rooms | Number of rooms, up to 10. null when Otodom reports an open-ended "10+" instead of an exact count. |
area_sqm | Floor area in square meters. |
location | Most specific location Otodom gives (district/neighborhood where available, otherwise city/voivodeship). |
posted_date | Raw timestamp as Otodom publishes it. |
description | Short listing description, as Otodom publishes it. |
lat / lng | Not available on list pages — always null. |
url | Direct link to the listing. |
images | Up to 5 photo URLs. |
source_portal | Always "otodom-warsaw". |
scraped_at | When this Actor fetched the row. |
partial | true when this run stopped without Otodom itself confirming there is nothing more — either max_pages/max_items was reached, or an unconfirmed empty page came back. false only when the source's own response confirmed no further results exist. Carried on every row, found or not. |
partial_reason | Plain-English reason when partial is true; null when it's false. |
API
Start a run with a bearer token and explicit JSON input:
curl -sS -X POST 'https://api.apify.com/v2/acts/zinin~otodom-warsaw/runs?waitForFinish=60' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data '{"deal_type":"sprzedaz","property_type":"mieszkanie","city":"mazowieckie/warszawa/warszawa/warszawa","max_items":5,"max_pages":1}'
Read Dataset rows using the returned defaultDatasetId:
curl -sS "https://api.apify.com/v2/datasets/$DEFAULT_DATASET_ID/items?clean=true&format=json" \-H "Authorization: Bearer $APIFY_TOKEN"
MCP
For an Apify MCP client exposing the standard call-actor tool, send this exact payload:
{"name": "call-actor","arguments": {"actor": "zinin/otodom-warsaw","input": {"deal_type": "sprzedaz","property_type": "mieszkanie","city": "mazowieckie/warszawa/warszawa/warszawa","max_items": 5,"max_pages": 1}}}
Related Actors
Other European real-estate portals on the same account, for a buyer comparing markets rather than looking at Warsaw alone.
| Actor | Use it when |
|---|---|
| Imovirtual Portugal Real Estate Listings | Comparing Warsaw against a Western-Europe capital with EU Golden-Visa-style buyer interest, in the same pipeline. |
| Storia Romania Real Estate Listings | Adding a lower entry-price EU market to the same portfolio without new plumbing. |
| Rightmove UK Property Listings (London and beyond) | Benchmarking Warsaw's prices against London's for a buyer being priced out of the UK market. |
| Krisha.kz Kazakhstan Real Estate Listings | Diversifying a portfolio outside the EU into a CIS/Central Asia market with the same query shape. |
FAQ / Limitations
Does this need a login or API key on Otodom's side? No — it reads the same public listing pages a visitor would see.
What this is NOT. This is not a valuation tool and does not enrich
listings with data Otodom itself doesn't publish (no coordinates, no agent
phone numbers). Rooms reported by Otodom as an open-ended "10+" come back as
null, not a guessed number.
Found a bug or need this adapted to your case — issues on the Actor page.
Machine use
The Actor is callable through the Apify API, SDK, and Apify MCP server. The input and Dataset row are the machine-facing contract; images returns preview photo URLs only, not the full listing gallery, and rooms is null whenever Otodom itself reports an open-ended "10+" rather than an exact count — this Actor never fills that gap with a guess.