Otodom.pl Property Scraper — Poland Sale & Rent avatar

Otodom.pl Property Scraper — Poland Sale & Rent

Pricing

from $2.00 / 1,000 result items

Go to Apify Store
Otodom.pl Property Scraper — Poland Sale & Rent

Otodom.pl Property Scraper — Poland Sale & Rent

Otodom.pl scraper for analysts, agents and AI agents: flats, studios, houses, plots, commercial, rooms and new developments for sale or rent anywhere in Poland.

Pricing

from $2.00 / 1,000 result items

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Otodom.pl Scraper — Poland Real Estate for Sale & Rent

Structured listings from otodom.pl, Poland's largest property portal (OLX Group): flats, studios, houses, plots, commercial premises, warehouses, garages, rooms and new-build developments, for sale or rent, in any city, district or voivodeship. Every search supports otodom's own filters (price, zł/m², area, rooms, primary/secondary market, private/agency/developer, build year, floor, building type and material, extras…). Each item has price per m², advertiser type and publish dates. detail: true adds GPS coordinates, full description, building data and business contact details.

Reads the page's embedded JSON. No browser, no proxies, no API key.

Use cases

  • Lead generation for agencies: ownerType: "PRIVATE" + your city + sinceHours: 24 on a daily schedule gives owner-listed flats that no agency has picked up yet.
  • Price per m² benchmarks: pull 1 000 flats in Warszawa or Kraków, group by district, market, buildYear and compute the median pricePerM2.
  • Rental yield screening: run the same city and rooms once with transaction: "sprzedaz" and once with "wynajem", then divide rent by price per district.
  • Developer & new-build intelligence: market: "PRIMARY" + ownerType: "DEVELOPER" shows which developers sell where, at what zł/m²; estate: "inwestycja" lists whole projects.
  • Commercial property sourcing: estate: "lokal" or "haleimagazyny" with area ranges, for investors and franchise expansion.
  • Valuation & due diligence: comparable listings with coordinates (detail: true) around an address using district + distanceRadius.

Input

All fields are optional. Filters that don't apply to the estate type are dropped with a warning in the log.

FieldTypeDefaultAllowed values / notes
transactionstringsprzedazsprzedaz (sale), wynajem (rent)
estatestringmieszkaniemieszkanie, kawalerka, dom, inwestycja (sale only), pokoj (rent only), dzialka, lokal, haleimagazyny, garaz
locationstringmazowieckie/warszawa/warszawa/warszawaCity name (see Reference), voivodeship slug, cala-polska, or a raw otodom location path
districtstringDistrict of the city, e.g. mokotow, praga-poludnie, podgorze
distanceRadiusinteger0, 5, 10, 15, 25, 50, 75 km around the location
priceMin / priceMaxintegerzł (monthly rent for wynajem)
pricePerMeterMin / pricePerMeterMaxintegerzł/m²
areaMin / areaMaxinteger
terrainAreaMin / terrainAreaMaxintegerm², dom and dzialka
roomsNumberstring[][]ONE, TWO, THREE, FOUR, FIVE, SIX_OR_MORE. Numbers ("2", "6+") and the v0.1 comma string ("TWO,THREE") also work.
marketstringALLALL, PRIMARY, SECONDARY
ownerTypestringALLALL, PRIVATE, AGENCY, DEVELOPER
buildYearMin / buildYearMaxinteger
floorsstring[][]CELLAR, GROUND, FIRSTTENTH, ABOVE_TENTH, GARRET (numbers 010 work too)
floorsNumberMin / floorsNumberMaxintegerFloors in the building
buildingTypestring[][]BLOCK, TENEMENT, HOUSE, INFILL, RIBBON, APARTMENT, LOFT
buildingMaterialstring[][]BRICK, WOOD, BREEZEBLOCK, HYDROTON, CONCRETE_PLATE, CONCRETE, SILIKAT, CELLULAR_CONCRETE, REINFORCED_CONCRETE, OTHER
extrasstring[][]BALCONY, TERRACE, GARDEN, GARAGE, BASEMENT, LIFT, SEPARATE_KITCHEN, TWO_STOREY
keywordstringText searched in the description
hasPhotos / hasMovie / hasOpenDay / hasRemoteServicesbooleanfalse
sortstringrelevancerelevance, newest, price_asc, price_desc, area_asc, area_desc
sinceHoursintegerAds added or refreshed in the last N hours (otodom day filter + exact client check)
excludeInvestmentsbooleanfalseDrop whole-project development tiles from flat searches
maxItemsinteger501–5000, 72 per page
maxPagesinteger30Safety cap
detailbooleanfalseOpen each offer page (+1 request per listing)
dedupebooleantrueDrop repeated ids
fieldsstring[][]Output only these fields
extraParamsobject{}Other otodom query parameters from a URL

The actor verified each filter value against the live site (the result count changes). Values otodom silently ignores (AIR_CONDITIONING, USABLE_ROOM, PETS…) are dropped with a warning instead of producing a misleading "filtered" dataset.

Reference

Voivodeships (location)

dolnoslaskie, kujawsko--pomorskie, lubelskie, lubuskie, lodzkie, malopolskie, mazowieckie, opolskie, podkarpackie, podlaskie, pomorskie, slaskie, swietokrzyskie, warminsko--mazurskie, wielkopolskie, zachodniopomorskie. Otodom writes a hyphen inside a name as a double hyphen (--).

Cities (location: the name, with or without Polish diacritics)

Cityotodom path
Warszawamazowieckie/warszawa/warszawa/warszawa
Krakówmalopolskie/krakow/krakow/krakow
Wrocławdolnoslaskie/wroclaw/wroclaw/wroclaw
Łódźlodzkie/lodz/lodz/lodz
Poznańwielkopolskie/poznan/poznan/poznan
Gdańsk / Gdynia / Sopotpomorskie/gdansk/gdansk/gdansk, pomorskie/gdynia/gdynia/gdynia, pomorskie/sopot/sopot/sopot
Szczecinzachodniopomorskie/szczecin/szczecin/szczecin
Bydgoszcz / Toruń / Włocławekkujawsko--pomorskie/bydgoszcz/…, kujawsko--pomorskie/torun/…, kujawsko--pomorskie/wloclawek/…
Lublinlubelskie/lublin/lublin/lublin
Białystokpodlaskie/bialystok/bialystok/bialystok
Katowice, Gliwice, Sosnowiec, Bielsko-Biała, Częstochowa, Zabrze, Bytom, Tychy, Rybnikslaskie/<city>/<city>/<city> (Bielsko-Biała → bielsko--biala)
Kielceswietokrzyskie/kielce/kielce/kielce
Olsztyn, Elblągwarminsko--mazurskie/olsztyn/…, warminsko--mazurskie/elblag/…
Opoleopolskie/opole/opole/opole
Zielona Góra, Gorzów Wielkopolskilubuskie/zielona-gora/…, lubuskie/gorzow-wielkopolski/…
Rzeszów, Przemyślpodkarpackie/rzeszow/…, podkarpackie/przemysl/…
Radom, Płock, Pruszków, Piasecznomazowieckie/radom/…, mazowieckie/plock/…, mazowieckie/pruszkowski/pruszkow/pruszkow, mazowieckie/piaseczynski/piaseczno/piaseczno
Tarnów, Nowy Sącz, Zakopanemalopolskie/tarnow/…, malopolskie/nowy-sacz/…, malopolskie/tatrzanski/zakopane/zakopane
Wałbrzych, Legnica, Jelenia Góradolnoslaskie/walbrzych/…, dolnoslaskie/legnica/…, dolnoslaskie/jelenia-gora/…
Kaliszwielkopolskie/kalisz/kalisz/kalisz
Koszalin, Świnoujściezachodniopomorskie/koszalin/…, zachodniopomorskie/swinoujscie/…
Słupskpomorskie/slupsk/slupsk/slupsk
Piotrków Trybunalskilodzkie/piotrkow-trybunalski/…

Any other town works as a raw path copied from an otodom URL (the part after /pl/wyniki/sprzedaz/mieszkanie/). A wrong path fails with a clear 404 error.

Warsaw districts (district): bemowo, bialoleka, bielany, mokotow, ochota, praga-polnoc, praga-poludnie, rembertow, srodmiescie, targowek, ursus, ursynow, wawer, wesola, wilanow, wlochy, wola, zoliborz.

Estate types

SlugMeaningSaleRent
mieszkanieFlats
kawalerkaStudio flats
domHouses
inwestycjaNew-build development projects
pokojRooms
dzialkaPlots
lokalCommercial premises
haleimagazynyHalls & warehouses
garazGarages

Examples

Agency lead list: owner-listed flats in Kraków from the last 24 h

{ "location": "Kraków", "ownerType": "PRIVATE", "sinceHours": 24, "sort": "newest", "maxItems": 200 }

Market report: 2–3 room resale flats in Warsaw Mokotów with building data

{ "location": "Warszawa", "district": "mokotow", "market": "SECONDARY", "roomsNumber": ["TWO", "THREE"], "excludeInvestments": true, "detail": true, "maxItems": 300 }

Rental yield: flats for rent in Wrocław under 4 000 zł

{ "transaction": "wynajem", "location": "Wrocław", "priceMax": 4000, "areaMin": 35, "maxItems": 500, "fields": ["id", "price", "rentAdditional", "area", "rooms", "district", "url"] }

Developer intelligence: primary-market flats in Gdańsk, cheapest per listing

{ "location": "Gdańsk", "market": "PRIMARY", "ownerType": "DEVELOPER", "sort": "price_asc", "maxItems": 500 }

Warehouse sourcing: halls for rent around Poznań, 500+ m²

{ "transaction": "wynajem", "estate": "haleimagazyny", "location": "Poznań", "distanceRadius": 25, "areaMin": 500, "detail": true }

Output

Example item (location: "Kraków", detail: true, trimmed):

{
"id": "68412264",
"url": "https://www.otodom.pl/pl/oferta/rodzinne-mieszkanie-z-widokiem-na-park-kobierzynska-ID4D39C",
"title": "Rodzinne mieszkanie z widokiem na park. Kobierzyńska",
"estate": "FLAT",
"transaction": "SELL",
"price": 950000,
"currency": "PLN",
"priceType": "total",
"rentAdditional": 700,
"pricePerM2": 12686.97,
"area": 74.88,
"rooms": 3,
"floor": 2,
"province": "małopolskie",
"city": "Kraków",
"district": "Dębniki",
"residential": "Ruczaj",
"advertiserType": "private",
"isPrivateOwner": true,
"isPromoted": true,
"tags": ["BALCONY", "STORAGE_ROOM", "PARKING_SPOT", "SECURE_BUILDING"],
"publishedAt": "2026-09-12T20:37:11.000Z",
"firstPublishedAt": "2026-09-12T20:34:03.000Z",
"imagesCount": 11,
"searchTotal": 13,
"fetchedAt": "2026-09-13T08:34:20.669Z",
"descriptionFull": "-- Bez prowizji od kupującego --\nSprzedam przestronne mieszkanie…",
"market": "secondary",
"latitude": 50.015842,
"longitude": 19.903831,
"buildYear": 2006,
"buildingFloors": 3,
"buildingType": "block",
"heating": "gas",
"windows": "plastic",
"extras": ["balcony", "usable_room", "garage"],
"equipment": ["furniture", "washing_machine", "dishwasher"],
"freeFrom": "2026-10-01",
"ownerName": "Bogna Smug",
"ownerPhones": [],
"detailFetched": true
}
FieldDescription
id, url, titleotodom ad id (stable), offer URL, title
estate, transactionFLAT, HOUSE, INVESTMENT, TERRAIN, … / SELL, RENT
price, currency, priceTypeTotal price (sale) or monthly rent (rent); on_request when hidden
rentAdditionalMonthly administrative fee (czynsz) in zł, if given
pricePerM2, priceFromPerM2From otodom, or computed as price / area; "from" price for developments
area, terrainArea, rooms, roomsCode, floor, floorCodeSize and layout (floor: -1 cellar, 0 ground, 11 = above 10)
province, city, district, residential, street, locationPathLocation
advertiserType, isPrivateOwner, agencyName, agencyId, agencyUrlprivate / agency / developer
developmentId, developmentTitle, developmentUrlParent new-build project
isPromoted, isExclusiveOffer, hidePrice, tags
publishedAt, firstPublishedAt, pushedUpAtLast added/refreshed, first appearance, paid bump (ISO UTC)
shortDescription, image, imagesCount, searchTotal, searchUrl, fetchedAt
descriptionFull, market, latitude, longitude, buildYear, buildingFloors, buildingType, buildingMaterial, constructionStatus, ownership, heating, windows, extras, equipment, security, media, deposit, freeFrom, ownerName, ownerAddress, ownerPhones, agencyUrl, status, createdAt, modifiedAt, photos, characteristics, detailFetched, detailErrordetail: true only. Phones and address are included only for agencies and developers, never for private owners.

Use it from code / agents

Apify API (curl)

curl -X POST "https://api.apify.com/v2/acts/yadroo~otodom-pl/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"location":"Gdańsk","ownerType":"PRIVATE","sinceHours":24}'

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/otodom-pl').call({ location: 'Warszawa', district: 'wola', market: 'PRIMARY', maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/otodom-pl").call(run_input={"transaction": "wynajem", "location": "Kraków", "priceMax": 3500})
items = client.dataset(run["defaultDatasetId"]).list_items().items

AI agents (MCP): connect https://mcp.apify.com?actors=yadroo/otodom-pl to Claude, Cursor or any MCP client. The input schema is written for agents: every enum has readable titles and every filter explains its unit.

Pricing

Pay per event: $0.005 per run start + $0.002 per listing in the dataset.

  • 50 listings (default): $0.105
  • 1 000-listing city snapshot: $2.005
  • Daily alert returning about 30 new owner listings: about $0.065 per day

detail: true doesn't change the price. It is slower, about 1.2 s per listing.

Limits & FAQ

  • Speed: 72 listings per search page, about 1 request per second. 1 000 listings take about 20 s without detail pages.
  • Promoted and development tiles: otodom mixes promoted ads and INVESTMENT tiles into flat searches. Dedupe removes repeats; excludeInvestments removes project tiles.
  • Dates: publishedAt is when the ad was last added or refreshed (this is what otodom's "added in the last N days" filter uses). For truly new ads, compare firstPublishedAt.
  • Blocks & errors: 429/5xx are retried with backoff. A bot challenge on a search page fails the run with a clear message. If only offer pages get blocked, the run keeps list data and marks items with detailError.
  • Personal data: phone numbers and addresses of private owners are never collected.
  • Roadmap: price-change tracking between runs, a developer-project mode (units per inwestycja).

Made by Yadroo. Sibling actors: Willhaben.at (Austria) · Kleinanzeigen.de (Germany) · Rightmove UK · Krisha.kz · Marktplaats.nl · AutoScout24 cars