Otodom Scraper - Polish Property Listings & Price Drops
Pricing
from $2.00 / 1,000 listings
Otodom Scraper - Polish Property Listings & Price Drops
Scrape Otodom.pl listings from any search URL: price, price per m², area, rooms, floor, district, agency or private owner, first published date. Flags price drops, tracks price changes between runs and can add GPS, description and building details.
Pricing
from $2.00 / 1,000 listings
Rating
0.0
(0)
Developer
Joran Morgan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Scrape listings from Otodom.pl, Poland's largest property portal: flats, houses, plots, rooms and commercial property, for sale or rent. Set up any search on otodom.pl, paste the URL, and get every result as a clean row with price, price per m², area, rooms, floor, district, who is selling (developer, agency or private owner) and when the listing first went up.
Two things I added because I wanted them for market tracking. First, price drops: Otodom shows the lowest price of the last 30 days for discounted listings, and the scraper turns that into lowestPrice30d and priceDropPct. Second, it remembers what it saw, so on a schedule you can ask for only new listings and listings whose price changed since your last run, with the old price next to the new one.
Example
Input:
{"startUrls": [{ "url": "https://www.otodom.pl/pl/wyniki/sprzedaz/mieszkanie/mazowieckie/warszawa/warszawa/warszawa" }],"maxItems": 300}
One of the 300 rows from a real run (Sep 29 2026), a listing priced 8% below its 30-day low:
{"id": 67457296,"url": "https://www.otodom.pl/pl/oferta/2-pokojowe-mieszkanie-45m2-loggia-bezposrednio-ID4z2IU","title": "2-pokojowe mieszkanie 45m2 + loggia Bezpośrednio","transaction": "sale","propertyType": "flat","price": 1009908,"currency": "PLN","pricePerSqm": 21987.98,"lowestPrice30d": 1097727,"priceDropPct": 8,"previousPrice": null,"priceChange": null,"isNew": true,"areaSqm": 45.93,"rooms": 2,"floor": 7,"province": "mazowieckie","city": "Warszawa","district": "Bielany","subdistrict": "Chomiczówka","street": "Conrada","isPrivateOwner": false,"advertiserName": "Marvipol Development","advertiserType": "developer","developmentTitle": "Conrada 30","tags": ["PARKING_SPOT"],"imageCount": 8,"firstPublishedAt": "2025-11-18T13:57:23Z","bumpedAt": "2026-09-29T15:34:31+02:00"}
With includeDetails on, each row also gets data from the listing page. From a Kraków rental run:
{"title": "2 pok., 49m2, przy Galerii Bonarka, ul. Sucha ENG","price": 2600,"monthlyFee": 460,"latitude": 50.021736,"longitude": 19.94083,"buildYear": 2018,"buildingFloors": 2,"heating": "gas","description": "..."}
Every row has the same fields; missing values are null. Field names are in English, values like heating: "gas" or market: "primary" come from Otodom's own codes.
Input
| Field | What it does | Default |
|---|---|---|
startUrls | Otodom search result URLs. Any filters you set on the site (city, sale/rent, type, price, area, rooms, market) are kept | required |
maxItems | Cap on listings across all URLs | 500 |
includeDetails | Open each listing for GPS, description, build year, building floors, market, ownership, heating, features | off |
onlyNewOrChanged | Only listings you haven't received before, or whose price changed since your last run | off |
Good to know
- Speed: a run of 300 Warsaw listings took about 25 seconds; 40 Kraków rentals with details took about 11 seconds.
priceDropPctis only filled when Otodom publishes the 30-day lowest price (mostly developers' discounted units).priceChangecomes from your own previous runs and works for every listing.- Development projects appear as
propertyType: "development"rows without a single price; the individual units are separate rows. - Private sellers are marked with
isPrivateOwner: true; their names are not collected.
Use cases
Tracking asking prices and price per m² by district, spotting discounted units from developers, alerting on new listings that match a search (schedule it and connect Slack, email or Google Sheets), building datasets for valuation models, or monitoring a competitor agency's portfolio.
FAQ
Can I scrape all of Poland? Yes, use a search URL without a city, or several city URLs. For very large pulls, splitting by city or price range keeps each run short and easy to re-run.
What does it cost?
See the Pricing tab: a price per listing, plus a separate small charge per listing when includeDetails is on.
The site changed and something broke. Open an issue. I run a daily test on this Actor, so breakages usually get noticed and fixed quickly.
Notes
Only public listing pages are read, no login. Otodom is a trademark of its owner; this Actor isn't affiliated with it.