Otodom.pl Scraper - Polish Real Estate Data avatar

Otodom.pl Scraper - Polish Real Estate Data

Pricing

from $2.45 / 1,000 results

Go to Apify Store
Otodom.pl Scraper - Polish Real Estate Data

Otodom.pl Scraper - Polish Real Estate Data

Otodom.pl scraper & unofficial API alternative. Scrape Polish real estate listings without login and export property data to CSV or JSON.

Pricing

from $2.45 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

2

Monthly active users

4 days ago

Last modified

Share

Otodom.pl Scraper — Polish Real Estate Data, Prices & Leads (No API)

Otodom.pl Scraper — Polish Real Estate Data Extractor

Apify Actor No API key Pay per result Real Estate Export

Scrape property listings from Otodom.pl, Poland's #1 real estate portal (OLX Group) with 200K+ active listings — apartments, houses, plots, commercial space, warehouses, garages and rooms, for sale or rent. Get price, price/m², GPS coordinates, full Polish address, agency name & image galleries in clean structured JSON, straight from the site's __NEXT_DATA__ payload. Fast, no browser, no API key, no login.

🏆 Why this Otodom scraper?

60+ fields per listing · thousands of listings per run · direct HTTP + JSON (no browser) · residential-proxy ready · export to JSON / CSV / Excel. The unofficial Otodom API alternative for real-estate market research, investment screening and lead generation.


✨ What this Actor does / Key features

  • 🏠 7 property types — apartments, houses, plots/land, commercial, warehouses, garages and rooms, for sale or rent.
  • 📍 Nationwide targeting — scrape all of Poland, any of the 16 voivodeships, cities or sub-districts via location slugs.
  • 💰 Powerful filters — price range (PLN), area range (m²), room range, market (primary/secondary), owner type and distance radius.
  • 🔀 Flexible sorting — by latest, price, price/m² or area, ascending or descending.
  • 🗺️ Full address & GPS — province, city, district, subdistrict, street, postcode + latitude/longitude for every listing.
  • 🏢 Agency lead data — agency name, ID, slug, logo and type, plus exclusivity, featured and promoted flags.
  • 🖼️ Image galleries — main image URL plus the full list of image URLs and image count.
  • ⚡ Direct HTTP + JSON extraction — parses Otodom's __NEXT_DATA__ payload; no browser, no DOM walking, no GraphQL token.
  • 🛡️ Proxy support — Apify Proxy integration; residential + country=PL strongly recommended to avoid blocks.

🚀 Quick start (3 steps)

  1. Configure — paste one or more location slugs (e.g. mazowieckie/warszawa) and pick sale or rent. Add price/area/room filters if you want.
  2. Run — click Start. The Actor paginates the search results and streams listings into your dataset.
  3. Get your data — open the Output tab and export to JSON, CSV, Excel or XML, or pull it via the Apify API.

📥 Input

Give the Actor at least one locationSlugs value. Everything else is optional.

Example — apartments for sale in Warsaw & Kraków

{
"locationSlugs": ["mazowieckie/warszawa", "malopolskie/krakow"],
"transaction": "sale",
"propertyType": "apartment",
"priceMin": 500000,
"priceMax": 1500000,
"areaMin": 40,
"sort": "latest",
"maxListings": 500,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "PL" }
}

Example — private-owner rentals nationwide (lead generation)

{
"locationSlugs": ["cala-polska"],
"transaction": "rent",
"propertyType": "apartment",
"ownerType": "PRIVATE",
"sort": "latest",
"maxListings": 1000
}

Example — new-build developer offers in Wrocław

{
"locationSlugs": ["dolnoslaskie/wroclaw"],
"transaction": "sale",
"market": "PRIMARY",
"maxListings": 300
}
FieldTypeDescription
locationSlugsarrayOtodom URL location paths. Each slug becomes its own task (e.g. mazowieckie/warszawa, cala-polska). Required.
transactionstringsale (sprzedaż) or rent (wynajem).
propertyTypestringapartment, house, plot, commercial, warehouse, garage or room.
priceMin / priceMaxintegerPrice range in PLN. 0 = no bound.
areaMin / areaMaxintegerSurface area range in m². 0 = no bound.
roomsMin / roomsMaxintegerRoom-count range (1–10). 0 = no bound.
marketstringALL, PRIMARY (new build) or SECONDARY (resale).
ownerTypestringALL, PRIVATE or BUSINESS (agency).
sortstringlatest, price_asc/desc, price_per_m_asc/desc, area_asc/desc.
distanceRadiusintegerExpand to nearby areas: 0, 5, 10, 15, 25, 50 or 75 km.
limitintegerListings per page: 24, 36, 48 or 72.
maxListingsintegerTotal cap across all location tasks. 0 = unlimited.
maxPagesPerTaskintegerPagination depth per location (Otodom caps around page 50).
requestDelayintegerDelay between page requests in ms (keep ≥ 600 ms).
maxRetriesintegerRetries per request on HTTP errors (rotates proxy IP).
proxyConfigurationobjectApify Proxy settings. Residential + country=PL strongly recommended.

Finding a location slug: browse otodom.pl, apply a location filter, and copy the path between /wyniki/{txn}/{type}/ and ? from the URL. Use cala-polska for all of Poland, a voivodeship slug like mazowieckie, or a deeper path like mazowieckie/warszawa.

Additional input fields

These optional fields are also available in the input form and API:

FieldTypeDefaultDescription
timeBudgetSecsinteger1200Hard wall-clock limit. The Actor stops paginating and saves whatever it has collected before this many seconds elapse, then exits cleanly (SUCCEEDED). Raise it for big crawls;

📤 Output

One row per listing — 60+ fields, exportable to JSON, CSV, Excel or XML. Here is a trimmed sample record:

{
"adId": 66412873,
"detailUrl": "https://www.otodom.pl/pl/oferta/nowoczesne-2-pokoje-mokotow-ID4qXyZ",
"title": "Nowoczesne 2 pokoje | Mokotów | balkon",
"transactionType": "sale",
"propertyType": "apartment",
"advertType": "AGENCY",
"isPrivate": false,
"market": "SECONDARY",
"price": 899000,
"priceCurrency": "PLN",
"pricePerSqm": 16648,
"monthlyRent": null,
"areaSqm": 54,
"rooms": 2,
"floor": "FLOOR_3",
"totalFloors": 5,
"province": "mazowieckie",
"city": "Warszawa",
"district": "Mokotów",
"street": "ul. Puławska",
"postalCode": "02-566",
"latitude": 52.1937,
"longitude": 21.0246,
"mainImageUrl": "https://ireland.apollo.olxcdn.com/v1/files/…/image.jpeg",
"imageUrls": ["https://…/1.jpeg", "https://…/2.jpeg", "…"],
"imageCount": 14,
"agencyName": "Premium Estate Sp. z o.o.",
"agencyId": 39215,
"agencyType": "AGENCY",
"isExclusive": true,
"dateCreated": "2026-07-02T09:14:00Z",
"labels": ["Wyróżnione"],
"searchLocation": "mazowieckie/warszawa",
"scrapedAt": "2026-07-06T12:00:00Z"
}

💡 Use cases

  • Market research — build PLN/m² heatmaps by voivodeship, city and district.
  • Investment screening — calculate rental yield (monthly rent vs. sale price) per area.
  • Lead generation — use ownerType: PRIVATE to find direct-owner listings, or cluster agency listings by agencyId.
  • Price tracking — re-run on a schedule and diff against prior datasets using dateCreated and pushedUpAt.
  • Primary-market monitoring — use market: PRIMARY to track new developer offers.
  • Cross-city comparison — pass multiple locationSlugs in one run to benchmark prices across Polish cities.

👥 Who uses it

Real-estate agencies & proptech teams · property investors & flippers · mortgage and valuation analysts · market researchers & data journalists · lead-gen agencies building owner/agency contact lists.

💰 Pricing

This Actor runs on a simple pay-per-result model — you pay for the listings you extract, with no separate Apify platform fees to calculate. Try it on the free tier first, then scale up. See the Pricing tab on this page for the current rate.

❓ Frequently Asked Questions

Is it legal to scrape Otodom.pl? The Actor only collects publicly available property listing data. You are responsible for using the data in compliance with Otodom's terms and applicable laws such as GDPR.

Does Otodom.pl have a public API? Otodom does not offer an open public data API for listings, so this Actor reads the site's own embedded __NEXT_DATA__ JSON instead — giving you structured Polish real estate data without any API key.

Do I need an API key or a login? No. There is no Otodom account, login or API key required — only an Apify account.

Do I need a proxy? Otodom deploys mild bot protection. Datacenter proxies often get blocked, so residential Apify Proxy with country=PL is strongly recommended; the Actor runs cleanly with it at a ≥600 ms request delay.

How much data can I get? You can scrape thousands of listings per run. Otodom caps pagination around page 50 (~3,600 listings per filter set), so narrow with price and area filters to reach deeper inventory across multiple locations.

Does it return rental czynsz separately? Yes. For rental listings, the recurring monthly rent is returned in the monthlyRent field, separate from the main price.

Is this an Otodom API alternative?

Yes. Otodom has no open public listings API, so this Actor works as an unofficial Otodom API alternative — it reads the site's embedded __NEXT_DATA__ JSON and returns structured Polish real estate data with no API key.

Can I scrape Otodom without an API or login?

Yes. No Otodom account, login or API key is needed — only an Apify account. The Actor pulls publicly available property listings over direct HTTP.

How do I export Otodom data to CSV or JSON?

Run the Actor, then export the resulting dataset as CSV, JSON, Excel or XML from the Apify console or via the Apify API.

Can I calculate rental yield from Otodom data?

Yes. Scrape sale and rent listings for the same area: sale rows carry price and price/m², while rental rows carry monthlyRent, so you can compute gross rental yield per district.

🔗 More real estate scrapers by logiover

Building a cross-country property dataset? Pair Otodom with the rest of the European real-estate suite:

CountryActor
🇪🇸 SpainHabitaclia Scraper · Pisos.com Scraper
🇨🇿 CzechiaSreality.cz Scraper
🇬🇷 GreeceSpitogatos Scraper
🇮🇹 ItalyCasa.it Scraper · Subito Scraper
🇩🇪 GermanyImmobilienScout24 Scraper
🇵🇹 PortugalImovirtual Scraper
🇫🇷 FranceBien'ici Scraper
🇷🇴 RomaniaStoria.ro Scraper
🇳🇱 NetherlandsFunda Scraper
🇮🇪 IrelandMyHome.ie Scraper
🇩🇰 DenmarkBoliga Scraper
🇧🇬 BulgariaImot.bg Scraper

👉 Browse all logiover scrapers on Apify Store — 180+ actors across real estate, jobs, crypto, social media and B2B data.

⏰ Scheduling & integration

Schedule this Actor on Apify to track the Polish property market daily or weekly. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to Make, n8n or Zapier to build automated real-estate pipelines.

⭐ Support & feedback

Found a bug or need an extra field? Open an issue on the Issues tab — response is usually fast. If this Actor saves you time, a ★★★★★ review on the Store page genuinely helps and is hugely appreciated. 🙏

This Actor extracts only publicly available data and is intended for legitimate research, analytics and lead-generation use. You are responsible for complying with Otodom's terms of service, GDPR and any applicable local laws.


This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Otodom.pl; Otodom.pl and all other trademarks mentioned here are the property of their respective owners.

Otodom.pl scraping — frequently asked questions

Do I need a Otodom.pl API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

How do I export Otodom.pl data to CSV, Excel, JSON or Google Sheets?

Open the Storage tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

Can I schedule this Otodom.pl scraper to run daily or hourly?

Yes. Use the Schedules tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the listings you care about really do change that fast.

How many listings can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

This Actor collects only information that Otodom.pl publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

What happens if Otodom.pl blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run fails with the reason instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

📝 Changelog

2026-11-01

  • Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
  • README refreshed: 1 link to retired Actors removed; independence disclaimer added; documented 1 additional input field.

2026-10-15

  • Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
  • A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
  • A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
  • Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
  • The default used when the field is left out for timeBudgetSecs is now 1,200 (was 240).
  • The default used when the field is left out for maxPagesPerTask is now 50 (was 5).
  • The default used when the field is left out for maxListings is now 7,150 (was 200).

2026-09-23

  • Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
  • Output verified on a live run: 53 columns returned, 77.2% of cells populated.
  • Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
  • Input schema, output schema and pricing configuration reviewed.
  • Noted that 11 column(s) came back empty in this sample (shortDescription, terrainAreaSqm, totalFloors, postalCode, latitude, longitude and others); these are under review.

2026-09-01

  • Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
  • Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
  • No change to input, output fields or scraping logic.

2026-08-11

  • Maintenance release: refreshed the build and dependencies.
  • Re-verified live execution, non-empty structured output and dataset field/type integrity.
  • Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

2026-08-01

  • Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
  • Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

2026-07-06

  • ✨ README overhaul: richer output sample, ready-to-run example scenarios, cross-country real-estate suite links, and clearer quick-start.

2026-07-01

  • Maintenance pass: re-verified end-to-end on live data within the 5-minute quality window; sharpened Store SEO metadata and expanded the FAQ with high-intent long-tail questions.

2026-06-05

  • 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs complete cleanly even at high volume (thousands of results).

2026-06-01

  • Maintenance & reliability pass: rebuilt on the current base image; build verified.

*Maintained: last verified 2026-11-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).