Otodom Scraper | Poland Real Estate Sale Rent
Pricing
from $2.20 / 1,000 results
Otodom Scraper | Poland Real Estate Sale Rent
Scrape Otodom.pl Poland sale, rent & developer listings. Extract prices (PLN), rooms, size, agencies & URLs — Otodom API alternative.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Otodom Scraper — Poland Real Estate Sale, Rent & Developers
Scrape Otodom.pl property listings for sale and rent in Poland — plus developer company pages — then download structured data as Excel, CSV, or JSON.
This Actor is a practical Otodom API alternative for property research, market monitoring, agency lead gen, and investment pipelines on otodom.pl. Enter a city (or voivodeship / nationwide), pick sale or rent (or a developer page), and get clean Dataset rows with listing IDs, prices in PLN, rooms, size, agencies, and direct Otodom URLs.
- Pull for-sale (
sprzedaż) and for-rent (wynajem) listings from Otodom - Filter by primary / secondary market (
PRIMARY/SECONDARY) and estate type (mieszkanie,dom,inwestycja, …) - Search by city, voivodeship, full location path, nationwide, or multiple
locations[] - Scrape developer entity pages (
/pl/firmy/deweloperzy/...) with portfolio listings - Optionally enrich listing details with guest-visible LDP fields (characteristics, energy cert, build year, and more)
- Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or Apify MCP / API
- Pay per event — Actor start + each Dataset result; platform compute is included (you do not pay separate Apify usage)
What does the Otodom Scraper do?
Otodom Scraper lets you extract structured Poland real-estate data from Otodom without maintaining your own CloudFront / browser farm. Give it a location and channel (or a developer URL / listing detail URLs), then start a run.
Under the hood, the Actor:
- Validates your input (channel, market, location / developer, filters)
- Calls a managed Cloud Run worker that fetches Otodom pages with Polish residential egress
- Parses guest-visible Next.js SSR (
__NEXT_DATA__→searchAds/pageProps.ad/ developerowner) - Pushes Dataset rows with preview fields (
name,type,status,country,authority) - Writes
RUN_SUMMARY(andERROR_SUMMARYon failure) to the key-value store
You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.
What Otodom data can I extract?
| Data | Sale / Rent | Developer |
|---|---|---|
| Listing / developer title | ✅ | ✅ |
| Listing ID + slug ID token | ✅ | ✅ |
| Price (PLN) + display | ✅ | — |
| Rooms / floor / area (m²) | ✅ | — |
| Estate / property type | ✅ | — |
| Market (primary / secondary) | ✅ | — |
| City / address locality | ✅ | ✅ |
| Agency / private owner | ✅ | — |
| Direct Otodom URL | ✅ | ✅ |
| Images | ✅ | ✅ |
| LDP characteristics (enrich) | ✅* | — |
| Developer portfolio ads | — | ✅ |
*With enrichDetails: true or detail URLs via detailUrls.
With enrichDetails on (the default), each listing row is enriched from its detail page (LDP) and includes the Lead / Contact fields below (contentDepth=detail). SERP-only runs (enrichDetails: false) return contentDepth=guest_preview with no contact data, because Otodom search cards do not carry phones.
Lead / Contact fields
Every enriched listing item carries the following contact / clue keys. Top-level lead keys that are null are paired with a leadAbsences reason so you know why a field is empty (nested address sub-fields such as unit / locality / region / postalCode may simply be unset per-listing; see Honest limitations).
| Field | Type | Meaning on Otodom |
|---|---|---|
phones | [{value, type}] | Mobile/landline numbers for the listing agent or private owner. Already-visible in Otodom's Next.js __NEXT_DATA__ hydration JSON on the LDP (e.g. +48695818511, type mobile). Empty on SERP cards, so the worker opens each LDP via enrichDetails. |
emails | [{value, type}] | Contact email. Otodom only exposes email through a login-gated contact form (data-testid=ad.contact-form.field-email) — no mailto: and no plaintext. Returned as [] with leadAbsences.emails = "闸门锁". |
address | {street, unit, locality, region, postalCode, country, full} | Listing address. street carries the street name (the building number, when present, is embedded in the string, e.g. Ul. Floriańska 16). country=PL; full is the assembled address string. |
geo | {lat, lng} | Listing coordinates from the LDP, in addition to (not instead of) the street address. |
person | {name, role} | Agent/owner contact name (e.g. Joanna, Amadeusz) with role=owner. Already-visible on the LDP. |
org | {name, id} | Agency name + Otodom agency id. Populated for agency listings; null for private listings (then leadAbsences.org = "本站无"). |
web | {website, socials[]} | Per-entity website / social links. Otodom does not expose per-listing, per-agent, or per-agency websites or socials (agency.website=null). Returned as null with leadAbsences.web = "本站无". |
leadSource | enum | detail — lead fields are read from the listing detail page, not from the search results. |
leadReveal | enum | visible — phones, person, address, and geo are already-visible in the page's hydration JSON; no click-to-reveal or XHR unlock is needed. |
leadAbsences | object | Per-subfield absence reason: emails="闸门锁", web="本站无", and org="本站无" (private listings). |
Reveal cost
Otodom exposes phones, person, address, and geo already-visible in the Next.js __NEXT_DATA__ hydration JSON on the listing detail page (LDP). There is no "show phone" click-to-reveal control and no XHR-after-click unlock (revealControls=[] site-wide). The only extra cost is fetching each LDP: when enrichDetails is on (the default), the worker makes one additional HTTP request per listing using Polish residential egress. This does not trigger any UI interaction, CAPTCHA, or login wall. SERP cards carry no contact info (contacts[] empty), so enrichDetails is required for any lead field.
Honest limitations
- Emails are not available. Otodom only accepts email via a login-gated contact form — there is no
mailto:and no plaintext. The Actor does not submit the form;emails=[]andleadAbsences.emails="闸门锁". - 门牌 (building number) is not a separate field. Otodom hides the dedicated
street.numbervalue (returnsnullfor privacy). The building number, when present, is embedded inside thestreet.namestring (e.g.Ul. Floriańska 16).address.unitis thereforenull; useaddress.street/address.full. - Web / socials are not exposed per-entity. No per-listing, per-agent, or per-agency website or social links (
agency.website=null; only platform-levelsameAs).web=nullandleadAbsences.web="本站无". - Org is empty on private listings. Private (non-agency) listings have no agency, so
org=nullandleadAbsences.org="本站无". Agency listings populateorg.name+org.id. - SRP-only runs carry no leads. If you set
enrichDetails: false, rows arecontentDepth=guest_previewwith no phone/person/address — Otodom search cards do not include contacts.
Why scrape Otodom?
Otodom is one of Poland’s largest real-estate portals (OLX Group), covering sale, rent, investments, and developers nationwide. Teams scrape Otodom to:
- Build custom Poland property databases for research or lead gen
- Track sale / rent inventory by city, voivodeship, and property type
- Separate primary vs secondary market supply
- Monitor investment (
inwestycja) and developer portfolios - Feed CRM workflows, dashboards, or enrichment pipelines with structured listing URLs and PLN prices
More Actors like this
Need another property portal or a different vertical? Use a dedicated Actor below for structured fields. Stay on Otodom Scraper for Polish Otodom sale and rent listings.
Similar real estate scrapers
- Idealista Scraper
- Rightmove Scraper
- Funda Scraper
- ImmoScout24 Scraper
- Immobiliare.it Scraper
- SeLoger Scraper
- FINN.no Scraper
- Daft.ie Scraper
- Realtor.com Scraper
- Zillow & Zumper Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
Prefer another specialized scraper?
If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Indeed Jobs Scraper
- Upwork Jobs Scraper
- Glassdoor Scraper
- Fiverr Gigs Scraper
- Bayt Jobs Scraper
E-commerce
- Walmart Product Scraper
- Amazon Search Scraper
- Shopee Search Scraper
- Etsy Scraper
- SHEIN Product Scraper
- Temu Product Scraper
- Target Product Scraper
- Allegro Scraper
Travel & Stays
Social & Content
Ads Intelligence
Local & Maps
General tools
→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.
How to scrape Otodom (no code required)
- Create a free Apify account
- Open Otodom Scraper
- Choose a channel (
sale,rent, ordeveloper) - For listings: enter a location (e.g.
warszawa,mazowieckie, ornational); for developers: enter developerUrl - Optionally set market,
propertyType, filters,maxResults, andenrichDetails - Click Start and download the Dataset as JSON, CSV, Excel, or JSONL
Start with maxResults: 5–10 to verify the query, then scale up.
How much does it cost to scrape Otodom?
This Actor uses pay-per-event pricing. You are charged for:
| Event | Price |
|---|---|
Actor Start (apify-actor-start) | $0.005 per start |
Result (apify-default-dataset-item) | $3.00 / 1,000 results ($0.003 each) |
Platform usage costs are included — you do not pay separate Apify compute/proxy usage for this Actor on top of the event prices above.
Example cost estimates
| Results collected | Approx. event cost* |
|---|---|
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |
*Assumes one Actor start at default memory billing for start events, plus $0.003 per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one).
Free Apify trial credit can cover a small test run — try maxResults: 5 first.
Input
Open the Input tab for the full form. Common fields:
| Field | Description |
|---|---|
channel | sale / rent / developer |
location | City (warszawa), voivodeship (mazowieckie), full path, or national / polska |
locations | Extra geos; results merged and deduped |
propertyType | mieszkanie, dom, dzialka, lokal, pokoj, garaz, inwestycja, … |
market | ALL / PRIMARY / SECONDARY |
minPrice / maxPrice / minArea / maxArea | SERP filters |
rooms / privateOnly / sortBy | Extra filters |
developerUrl / developerId / developerSlug | Required for channel=developer |
detailUrls | Listing (/pl/oferta/...) or developer URLs |
maxResults | Cap on Dataset rows (1–500) |
maxPages | ?page=N pagination (~36 cards/page on SERP) |
enrichDetails | Fetch LDP and merge characteristics / JSON-LD |
Example: Warsaw apartments for sale (primary market)
{"location": "warszawa","channel": "sale","propertyType": "mieszkanie","market": "PRIMARY","maxResults": 20,"maxPages": 1}
Example: multi-city rent listings
{"locations": ["warszawa", "krakow", "wroclaw"],"channel": "rent","propertyType": "mieszkanie","maxResults": 50,"maxPages": 2}
Example: investment listings
{"location": "warszawa","channel": "sale","propertyType": "inwestycja","maxResults": 30,"maxPages": 1}
Example: developer portfolio
{"channel": "developer","developerUrl": "https://www.otodom.pl/pl/firmy/deweloperzy/develia-ID10556359","maxResults": 20}
Example: enrich listing details
{"location": "warszawa","channel": "sale","maxResults": 10,"enrichDetails": true}
Output sample
Each Dataset item includes preview fields plus listing attributes:
{"name": "2-pokojowe mieszkanie z balkonem","type": "listing","status": "For Sale","country": "PL","authority": "otodom.pl","listingId": "68241709","listingIdToken": "ID4CkMJ","channel": "sale","market": "PRIMARY","estate": "FLAT","price": 610000,"priceDisplay": "610000 PLN","currency": "PLN","rooms": 2,"sqm": 48.5,"city": "Warszawa","agencyName": "Example Agency","listingUrl": "https://www.otodom.pl/pl/oferta/....-ID4CkMJ","imageUrl": "https://ireland.apollo.olxcdn.com/...","contentDepth": "detail","phones": [{ "value": "+48604146556", "type": "mobile" }],"emails": [],"address": {"street": "Ul. Floriańska 16","unit": null,"locality": null,"region": null,"postalCode": null,"country": "PL","full": "Ul. Floriańska 16, PL"},"geo": { "lat": 50.0647, "lng": 19.9450 },"person": { "name": "Mariusz Witkiewicz", "role": "owner" },"org": { "name": "White Estates", "id": "7547458" },"web": null,"leadSource": "detail","leadReveal": "visible","leadAbsences": { "emails": "闸门锁", "web": "本站无" }}
Diagnostics are stored in the key-value store as INPUT_ECHO, RUN_SUMMARY, and ERROR_SUMMARY.
Tips for better Otodom scrapes
- Prefer city slugs or full Otodom location paths when you need a district (e.g.
mazowieckie/warszawa/warszawa/warszawa/bemowo) - Use
market=PRIMARYfor new-build / primary market inventory - Use
propertyType=inwestycjafor investment-style ads - Keep
enrichDetailsoff for faster SERP-only runs; turn it on when you need LDP characteristics - Developer SSR pages return a short first page of portfolio ads — raise expectations with
maxResultscarefully
Integrations and API
- Apify API — start runs and fetch Dataset items programmatically
- Apify MCP — use this Actor from AI agents
- Make / Zapier / n8n — schedule exports into Sheets, CRMs, or warehouses
- Python / Node.js clients —
apify-clientfor batch pipelines
FAQ
Is this an official Otodom API?
No. This Actor scrapes public guest-visible Otodom pages and normalizes them into Dataset rows. It is designed as a practical Otodom data / API alternative for research and automation.
Does it return phone numbers?
Yes — when enrichDetails is on (the default), the Actor reads phone numbers that Otodom already shows in the listing detail page's hydration data. There is no click-to-reveal or CAPTCHA unlock. See Lead / Contact fields for the full contact schema and which fields are unavailable (emails are login-gated; web/socials are not exposed per-entity).
Which locations work?
Known cities (e.g. Warszawa, Kraków), all 16 voivodeships, full Otodom location paths, national / polska, and multi-geo via locations[].
Can I scrape developers?
Yes — set channel=developer and provide developerUrl (or slug/id). You get one developer profile row plus portfolio listing rows from the SSR payload.
Legal and ethical use
Scraping public web pages may be subject to Otodom’s terms, robots rules, and local law. Use this Actor responsibly, respect rate limits, and only process data you have a lawful basis to use. You are responsible for how you use the output.
Support
Questions or feature requests? Open an issue on the Actor page or contact the developer via Apify.
Related Actors
All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Bayt Jobs Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Himalayas Jobs Scraper
- Indeed Jobs Scraper
- Jobicy Remote Jobs Scraper
- RemoteOK Jobs Scraper
- SEEK Jobs Scraper
- Upwork Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- 99.co Scraper
- Realtor.com Agents Scraper
- Apartments.com Rental Scraper
- Bayut Scraper
- Craigslist Housing Scraper
- Daft.ie Scraper
- Dot Property Scraper
- FINN.no Scraper
- Funda Scraper
- Hepsiemlak Scraper
- Idealista Scraper
- Immobiliare.it Scraper
- ImmoScout24 Scraper
- Naver Land Scraper
- OpenSooq Scraper
- Otodom Scraper
- Property Finder Scraper
- PropertyGuru Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- SeLoger Scraper
- SUUMO Scraper
- Zillow Group Scraper
E-commerce
- Shopee Search Scraper
- E-commerce Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
- Amazon Search Scraper
- ASOS Product Scraper
- Cdiscount Product Scraper
- Costco Product Scraper
- Coupang Product Scraper
- Etsy Scraper
- Lazada Scraper
- MercadoLibre Scraper
- Mercari Japan Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
- Target Product Scraper
- Temu Product Scraper
- Walmart Product Scraper
Travel & Stays
- Booking.com & Airbnb Scraper
- Agoda Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
- Despegar Scraper
- Expedia Scraper
- Traveloka Scraper
- Travelstart Flights Scraper
- Trip.com Scraper
- TripAdvisor Scraper
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ Browse the full profile: apify.com/lentic_clockss