Otodom.pl Scraper — No Login · Price per m² avatar

Otodom.pl Scraper — No Login · Price per m²

Pricing

$4.00 / 1,000 listing scrapeds

Go to Apify Store
Otodom.pl Scraper — No Login · Price per m²

Otodom.pl Scraper — No Login · Price per m²

Scrape Otodom.pl Polish real estate listings: price, price per m², area, rooms, agency name and private-seller flag. No login required. $0.004 per listing.

Pricing

$4.00 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Gio

Gio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

14 days ago

Last modified

Share

Structured data from Otodom.pl, Poland's largest real estate portal, for sale and rental listings anywhere in the country. No account, no browser automation on your side. Point it at any Otodom search-result URL and get back clean JSON with price, price per square meter, room count, agency name and a private-seller flag for every listing.

Why use this scraper

Otodom lists apartments and houses across every Polish city and region, but like most classifieds sites it has no public API and no bulk export. Anyone comparing apartment prices across Warsaw districts, tracking a neighborhood's rental market, or building a lead list of private sellers (who are often more open to direct negotiation than agencies) today has to scrape the HTML by hand, which breaks whenever Otodom reworks its front-end.

This actor solves that with one input: any Otodom.pl search-result URL for a city, district or filtered search. It returns the numeric price, a pre-computed price-per-square-meter figure, room count, area, agency name (or a flag showing the listing is from a private owner), the listing's photo and its canonical URL.

Overview

Input is one or more Otodom.pl search-result URLs, for example a city-level sale search like otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa, or any filtered search Otodom's own UI generates (price range, number of rooms, district). Output is one JSON record per listing: ad ID, title, price, currency, price per square meter, area, room count, transaction type, property type, street (when shown), agency name, a private-owner flag, image and URL. A run against a city-level search with maxResults: 100 typically finishes in under a minute.

Supported inputs

  • City or region search URL — e.g. https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa, swept for every listing on the result pages.
  • Filtered search URL — any URL Otodom generates from its own filters (price range, room count, district, property type) works as-is; copy it from the browser address bar.
  • Multiple start URLs — pass an array to combine cities, districts or sale/rental searches in one run.
  • Result and retry caps — maxResults caps the total across all start URLs (default 100, max 5,000); maxRetries controls how many times the actor retries a blocked page (default 3).

Use cases

  • Apartment buyers — compare price per square meter across Warsaw, Kraków or Wrocław districts before making an offer.
  • Rental market research — track asking rents and vacancy volume in a specific district over weeks or months.
  • Lead generation for agencies — filter for isPrivateOwner: true listings, which are typically open to being approached directly by a buyer's agent.
  • Investment analysis — pull price-per-m² figures across multiple cities to spot under-priced markets.
  • Classifieds aggregators — mirror Otodom search results into a broader Polish property search index.
  • Relocation and expat services — build a shortlist of rental options in a target city before a client arrives, filtered by room count and budget.

How it works

The actor reads Otodom's own listing data as rendered for each search page, the same structured data the website itself uses to populate its results grid, rather than guessing at numbers from visible text. That is why price, pricePerSqm and area come back as clean numbers ready to sort or chart, instead of strings that need parsing on your end. Pagination follows Otodom's own result pages until the configured maxResults is reached or retries are exhausted.

Input configuration

Sweep a city sale search (Warsaw apartments):

{
"startUrls": ["https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa"],
"maxResults": 100
}

Filtered search (adjust retry budget for a slower connection):

{
"startUrls": ["https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa"],
"maxResults": 50,
"maxRetries": 5
}

Combine multiple cities in one run:

{
"startUrls": [
"https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa",
"https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/krakow"
],
"maxResults": 200
}

Output sample

Real output from a live run against otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa:

[
{
"adId": 66348985,
"title": "2-pokojowe mieszkanie 38m2 + loggia Bez Prowizji",
"price": 878000,
"currency": "PLN",
"pricePerSqm": 23062.78,
"area": 38.07,
"rooms": "TWO",
"transactionType": "SELL",
"propertyType": "FLAT",
"street": "Sowińskiego 28",
"agencyName": "Matexi Polska",
"isPrivateOwner": false,
"imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/...",
"url": "https://www.otodom.pl/pl/oferta/2-pokojowe-mieszkanie-38m2-loggia-bez-prowizji-ID4uooW"
},
{
"adId": 68224429,
"title": "NOWOŚĆ !! Bezczynszowe Dwupoziomowe Apartamenty",
"price": 849000,
"currency": "PLN",
"pricePerSqm": 7273.82,
"area": 116.72,
"rooms": "FIVE",
"transactionType": "SELL",
"propertyType": "FLAT",
"street": null,
"agencyName": null,
"isPrivateOwner": true,
"imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/...",
"url": "https://www.otodom.pl/pl/oferta/nowosc-bezczynszowe-dwupoziomowe-apartamenty-pow-uzytkowa-116-72-ID4Cgi1"
}
]

Key output fields

FieldTypeDescription
adIdintegerOtodom's internal listing ID
titlestringListing headline as written by the seller or agency
priceintegerAsking price (sale) or monthly rent (rental listings)
currencystringAlways PLN
pricePerSqmnumberPrice divided by area, pre-computed for direct comparison
areanumberFloor area in square meters
roomsstringRoom count as published (ONE through FIVE_AND_MORE)
transactionTypestringSELL or RENT
propertyTypestringFLAT, HOUSE, or other Otodom property category
streetstring or nullStreet name, when Otodom shows one
agencyNamestring or nullListing agency, when the listing is agency-managed
isPrivateOwnerbooleanTrue when the listing has no agency attached
imageUrlstringURL of the listing's primary photo
urlstringCanonical Otodom.pl URL for the listing

Pricing

Pay-per-event, charged only for listings actually returned:

EventPrice
Listing scraped$0.004 per listing

At $0.004/listing, 1,000 listings cost $4.00. Minimum charge per run is $0.05.

What makes this richer than the competition

Several Otodom scrapers are live on the Apify Store. trev0n/otodom-scraper ("Otodom.pl Scraper | 2$/1k") is the highest-traffic option at $0.002/listing, half this actor's price; fatihtahta/otodom-pl-scraper ("Otodom.PL Scraper | Enterprise Grade") runs in the same price tier as this actor. Where this actor differs from both is isPrivateOwner: a boolean computed directly from whether an agency name is attached to the listing, which lets a buyer's agent or investor filter straight to private sellers without reading every agencyName field by hand. pricePerSqm is likewise computed in the actor itself rather than left for the buyer to calculate from price and area.

Notes & limitations

  • street is only populated when Otodom itself displays a street-level address on the search result card; many listings only show the district or city.
  • agencyName is null for private-owner listings by design; check isPrivateOwner rather than treating a null agency name as missing data.
  • The actor reads the search-result grid, not each listing's individual detail page, so fields like floor number, heating type or photos beyond the primary image are not included.
  • Results reflect the live site at run time; Otodom listings are added, edited and removed continuously, so two runs minutes apart on a busy city search can return a slightly different mix of adId values.
  • Very large sweeps (maxResults in the thousands) take proportionally longer and consume more retries if Otodom temporarily rate-limits requests.
  • rooms is returned as Otodom's own category label (ONE, TWO, THREE, FOUR, FIVE_AND_MORE) rather than a plain integer; map it in your own pipeline if you need a numeric room count.

FAQ

Does this need an Otodom account or login? No. Every field comes from the public search-result page; no login or cookies are required.

Can I scrape rentals, not just sales? Yes. Pass any Otodom.pl rental search URL (/pl/oferty/wynajem/...) as a start URL the same way you would a sale search.

How do I filter by price range, room count or district? Build the filtered search on otodom.pl itself using its own filters, then paste the resulting URL into startUrls. The actor reads whatever that URL returns.

What does isPrivateOwner: true mean exactly? It means the listing has no agency name attached on Otodom, which in practice means the listing was posted by the property owner rather than an estate agency.

Can I compare price per square meter across cities in one run? Yes, pass multiple city search URLs in startUrls and compare the pricePerSqm field across the combined results.

Does it return sold or expired listings? No, only listings currently live on the search page you point it at.

Can I run this on a schedule to track price changes? Yes, scheduling the actor daily or weekly against the same search URL and diffing price or pricePerSqm by adId is a common way to track price drops or increases over time.

For AI Agents & LLM Apps

This actor is available over the Apify MCP server (mcp.apify.com) for direct use from Claude, Cursor or any MCP-compatible agent, and over the plain REST API for scripted pipelines.

Synchronous call that returns dataset items directly, no polling required:

curl "https://api.apify.com/v2/acts/gio21~otodom-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"startUrls": ["https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/warszawa"], "maxResults": 50}'

Disclaimer

This actor is not affiliated with, endorsed by, or sponsored by Otodom.pl or OLX Group. "Otodom" is a trademark of its respective owner. The actor only collects data that is publicly visible on otodom.pl search-result pages at the time of the run.

SEO Keywords

Otodom scraper, Otodom.pl API, Poland real estate data, Warsaw apartment prices scraper, Polish property listings scraper, price per square meter Poland.