Otodom Scraper — Poland Property, Prices & Agencies avatar

Otodom Scraper — Poland Property, Prices & Agencies

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Otodom Scraper — Poland Property, Prices & Agencies

Otodom Scraper — Poland Property, Prices & Agencies

Scrape Otodom, Poland's largest property portal: sale price or rent, price per m², area, rooms, floor, full address with district, and the advertiser split into agency name or private owner. Flats, houses, land. Keyless. JSON, CSV or Excel.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

🇵🇱 Otodom Scraper — Poland Property Data, Prices & Agent Leads

Export every Otodom listing — price, area, rooms, district and the agency or private owner — to JSON, CSV or Excel. Keyless, no login.

data login pricing proxy

Otodom Scraper turns Poland's largest property portal into a structured dataset. Scrape thousands of apartments, houses and land plots for sale or rent across Warsaw, Kraków, Wrocław, Gdańsk and the whole country — with typed prices, price per m², and the advertiser split cleanly into estate agency or private owner. A no-code Otodom API alternative that runs on Apify.

📋 At a glance

Sourceotodom.pl (Poland's #1 property portal)
CoverageAll Poland — every city & voivodeship
VolumeTens of thousands of listings per search
DataSale & rent · flats, houses, land, commercial
Lead fieldAgency name or private-owner flag
OutputJSON, CSV, Excel, HTML table
LoginNot required

❓ What is Otodom Scraper?

Otodom is Poland's leading real-estate marketplace. This scraper reads Otodom's own structured search data, so prices arrive as real numbers with a currency, area as a number, and the listing's advertiser is separated into agency versus private owner. The room count is translated from Otodom's internal wording to an integer, and the district is lifted out of the nested location tree into its own column — so you can filter by district without parsing an object.

⭐ Why use this scraper?

  • ✅ Agency vs private owner on every row — build agency lead lists or filter to owner-direct deals
  • ✅ Typed prices — total price and price per m² as numbers, not text
  • ✅ District, city and province broken out for clean filtering
  • ✅ Sale and rent, across flats, houses, land and commercial
  • ✅ Huge volume — tens of thousands of listings per region
  • ✅ Keyless & browserless — no login, no API key, low cost per row

📦 What data can you extract?

Every row is a clean, structured record you can push straight into a spreadsheet, database or AI pipeline:

FieldDescription
listingIdUnique Otodom listing ID
titleListing headline
listingUrlDirect link to the offer
transactionTypesale or rent
propertyTypeFLAT / HOUSE / land / commercial
priceAmountPrice as a number
currencyPLN
pricePerSqmPrice per square metre
areaSqmFloor area in m²
roomsRoom count (integer)
floorFloor
street / district / city / provinceFull address hierarchy
isPrivateOwnerTrue for owner-direct listings
agencyNameEstate agency name (lead field)
shortDescriptionAdvert summary
imageUrlCover photo
dateCreatedWhen it was listed

Additional output fields

These fields are also present in the dataset:

FieldTypeDescription
landAreaSqmnumberLand m²
roomsLabelstringRooms label
advertiserTypestringAdvertiser
agencyIdstringAgency ID
isPromotedbooleanPromoted
isExclusivebooleanExclusive
developmentTitlestringDevelopment
imageCountnumberImages
firstListedstringFirst listed
scrapedAtstringScraped at

🎯 Use cases

  • Build an estate-agency lead list for a Polish city, with agency names
  • Compare asking price per m² across Warsaw districts
  • Track owner-direct (no-agency) listings for direct outreach
  • Monitor new-development supply and pricing
  • Feed a property portal or valuation model with a Poland feed

🚀 How to use it

  1. Choose sale (sprzedaz) or rent (wynajem) and a property type.
  2. Paste a region path from an Otodom search URL — cala-polska for all Poland, or a city path like mazowieckie/warszawa/warszawa/warszawa.
  3. Set Maximum results and click Start.
  4. Export the dataset to JSON, CSV or Excel, or pull it via the Apify API.

Input example

{
"transaction": "sprzedaz",
"propertyType": "mieszkanie",
"regionPath": "mazowieckie/warszawa/warszawa/warszawa",
"maxResults": 1000
}

💳 Pricing

This scraper runs on a pay-per-result model with Apify Store volume discounts — the more your plan tier, the lower the price per row. You only pay for the records actually delivered. Start on the free tier, no credit card needed to try it.

This scraper collects publicly available data only. You are responsible for how you use the exported data, including under GDPR and local regulations when the data concerns businesses or individuals. Nothing behind a login is accessed.

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

❔ FAQ



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


Other Actors from the same collection:

Scheduling and integrations

Run this Actor on a schedule — hourly, daily or weekly — and have every run append to the same dataset, which is how you turn a one-off export into a time series. Results can be pushed straight into Google Sheets, Slack, Zapier, Make, Airtable or any Webhook.

How much Otodom data can you extract in one run?

A single run returned 70 listings in 5 seconds on the example input. That example is deliberately narrow; the result limit and the input list are both yours to widen. That is roughly 700 listings a minute.

There is no hard ceiling built into this Actor. What bounds a run is the result limit you set, the breadth of the input you give it, and how much Otodom itself publishes. Because billing is per result, a wider run costs proportionally more and a narrow one costs almost nothing — so it is worth starting small and scaling once the output looks right.

Otodom scraping — frequently asked questions

Do I need a Otodom 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 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 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 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 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: independence disclaimer added; documented 10 additional output fields.

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.
  • Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
  • Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.

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.
  • Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
  • Input schema, output schema and pricing configuration reviewed.

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.