Otodom Scraper – Polish Real Estate Listings (Sale & Rent) avatar

Otodom Scraper – Polish Real Estate Listings (Sale & Rent)

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Otodom Scraper – Polish Real Estate Listings (Sale & Rent)

Otodom Scraper – Polish Real Estate Listings (Sale & Rent)

Otodom scraper & API for Polish real estate: search apartments and houses for sale and rent and export address, price, rooms, area, floor, type, private-vs-agency, photos and coordinates. Poland property market data and real-estate lead generation — fast, no login.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

18 hours ago

Last modified

Features

Limited permissions

Share

Apify Actor Maintenance Data Format Country Pagination

Scrape Otodom.pl — Poland's #1 real estate marketplace — into clean, structured datasets. This high-throughput Otodom scraper extracts sale (sprzedaż) and rental (wynajem) property listings from Otodom.pl with prices in PLN, price per m², rent fee, rooms, living area, floor number, full municipal location breakdown, amenity features, and a dedicated private-owner (od właściciela / FSBO) vs. agency classification with contact names for real estate lead generation.

Whether analyzing investment yields across Warsaw, sourcing direct seller mandates, or bulk-exporting 1,000+ listings across Poland, everything exports cleanly into JSON, CSV, Excel, or programmatic API.


⚡ At a glance

FeatureSpecification
Target WebsiteOtodom.pl (otodom.pl/pl/wyniki/...)
Transaction TypesSale (sprzedaz) and Long-term Rental (wynajem)
Property TypesApartments (mieszkanie), Houses (dom), Plots (dzialka), Commercial (lokal), Warehouses, Garages, Rooms
Geographic CoverageAll Poland (cala-polska) or any specific voivodeship, county, or city (Warsaw, Kraków, Wrocław, etc.)
Lead Generation FeaturesisPrivateOwner flag, agentName (owner/broker contact name), agencyName
Financial MetricsTotal Price (PLN), Price per Square Meter (PLN/m²), Monthly Maintenance Rent Fee (rentFee)
Pagination & DepthUnlocked deep pagination supporting 1,000+ listings per search
ArchitectureDirect Next.js __NEXT_DATA__ extraction (Cheerio, no browser overhead)
Proxy RequirementPolish (PL) residential proxy enabled by default for unblocked continuity
Export FormatsDataset JSON, flat CSV, spreadsheet Excel, XML, HTML, Webhook integrations

🔎 Why scrape Otodom.pl?

Otodom is the undisputed market leader in Polish real estate, hosting hundreds of thousands of active listings for sale and rent. For PropTech founders, private equity investors, real estate brokers, and market analysts, Otodom provides the single richest live index of asking prices, rental yields, and housing inventory across Poland.

However, scraping Otodom programmatically presents technical roadblocks:

  1. Dynamic Next.js architecture: Infinite scroll and client-side hydration require parsing embedded JSON payloads rather than traditional static HTML tags.
  2. Strict regional path routing: Submitting simple query strings like "warszawa" directly often returns empty shell pages; Otodom strictly requires canonical nested administrative paths (e.g. mazowieckie/warszawa/warszawa).
  3. Broken URL owner filters: URL parameters for owner type frequently fail to filter server-side on Otodom's backend, requiring robust client-side post-filtering.
  4. Geo-blocking: Non-Polish IP addresses frequently encounter blocking or localized content shifts.

This Otodom data extractor solves every one of these problems. It includes built-in administrative path mapping for all 20+ major Polish metropolitan hubs, automated client-side owner filtering, Next.js payload parsing, and native PL residential proxy support.


⚖️ Feature comparison: Why choose this Actor?

FeatureBrowser-Based ScrapersManual BrowsingThis Apify Actor
Speed1–3 listings/secondExtremely slow36 listings per page request (~25s for 150+ listings)
Resource CostHeavy RAM (2–4 GB)High labor costLow RAM (512 MB HTTP CheerioCrawler)
FSBO DetectionManual inspectionTedious filteringInstant isPrivateOwner & contact name parsing
Location RoutingFrequent empty shell errorsManual navigationAutomated 20+ Polish metro path resolver
Deep PaginationFragile DOM clickingPage-by-pageDeep page iteration up to 1,000+ items
Export FormatsCustom code neededCopy-pastingOne-click CSV, Excel, JSON, API

✨ Core capabilities

  • 🏢 Sale & rent in one actor: Toggle seamlessly between property purchase (sprzedaz) and residential rental (wynajem) listings.
  • 🎯 FSBO private owner lead generation: Filter for ownerType: PRIVATE to capture direct-owner listings with seller contact names, bypassing agency fees.
  • 📐 Granular property metrics: Captures total price (PLN), price/m², monthly administrative rent fees (czynsz), exact living area, room count, and floor level.
  • 🗺️ Comprehensive administrative location: Normalizes province (voivodeship), county, city, district/neighborhood, and street names.
  • 📍 Coordinates & geo mapping: Extracts latitude and longitude coordinates when provided in listing metadata.
  • 🏙️ Nationwide coverage: Pre-mapped shortcuts for Warsaw, Kraków, Wrocław, Poznań, Gdańsk, Szczecin, Katowice, Łódź, and all 16 Polish voivodeships.
  • 🧹 Automatic deduplication: Employs unique Otodom listing IDs and canonical offer URLs to ensure 0 duplicate records.
  • 🛡️ Anti-block resilience: Pre-configured with Polish (PL) residential proxy rotation and smart retry backoff.

🎯 Use cases & industry applications

1. Real estate investment & yield analysis

  • Rental yield mapping: Compare asking purchase prices against rental rates in the same Warsaw or Kraków districts to calculate gross rental yields.
  • Historical price trends: Track price per square meter (PLN/m²) fluctuations across primary and secondary Polish housing markets.

2. Brokerage & FSBO lead generation

  • Source direct-owner mandates: Real estate agents can filter for private sellers (od właściciela) and contact them with the parsed agentName to pitch representation.
  • Competitor agency monitoring: Track which rival agencies are listing properties in your target neighborhood and benchmark commission pricing.

3. PropTech & automated valuation models (AVM)

  • Model training & calibration: Ingest thousands of fresh market listings to train property valuation and appraisal algorithms.
  • Comparative Market Analysis (CMA): Generate automated valuation reports for home buyers and mortgage lenders.

4. Relocation & expat housing platforms

  • Curated rental feeds: Surface furnished, pet-friendly, or multi-room apartments for corporate relocations and international students.

📥 Input parameters

The actor is ready to run immediately with zero configuration (defaulting to sale listings in Warsaw or nationwide), while supporting comprehensive parametric filters.

ParameterTypeDefaultDescription
dealTypeselect"sprzedaz"Transaction type: "sprzedaz" (For sale) or "wynajem" (For rent).
propertyTypeselect"mieszkanie"Property type: mieszkanie (Apartment), dom (House), dzialka (Plot), lokal (Commercial), haleimagazyny (Warehouse), garaz (Garage), or pokoj (Room).
regionselect"cala-polska"Target metro or region (e.g., warszawa, krakow, wroclaw, poznan, gdansk, or cala-polska).
regionCustomstringnullOptional custom administrative path for smaller municipalities (e.g. malopolskie/wadowice/wadowice).
ownerTypeselect"ALL"Seller filter: "ALL", "PRIVATE" (direct owners only / FSBO), or "AGENCY".
priceMinintegernullMinimum price in Polish złoty (PLN).
priceMaxintegernullMaximum price in Polish złoty (PLN).
areaMinintegernullMinimum living area in square meters (m²).
areaMaxintegernullMaximum living area in square meters (m²).
roomsMinintegernullMinimum room count.
roomsMaxintegernullMaximum room count.
maxItemsinteger0Maximum listings to collect (0 = unlimited, iterates all pages).
startUrlsarray[]Optional direct Otodom search URLs (overrides standard dropdown filters).
proxyConfigurationobjectRESIDENTIAL (PL)Recommended Polish residential proxy for maximum reliability.

Sample JSON configuration

{
"dealType": "sprzedaz",
"propertyType": "mieszkanie",
"region": "warszawa",
"ownerType": "PRIVATE",
"priceMin": 400000,
"priceMax": 1200000,
"areaMin": 40,
"areaMax": 85,
"roomsMin": 2,
"roomsMax": 4,
"maxItems": 150,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "PL"
}
}

📊 Output data fields

Every record pushed to the Apify dataset represents a verified real estate listing. Numeric metrics are typed for instant mathematical calculations.

FieldCoverageTypeDescription
dealType🟢 High (100%)StringTransaction type ("sprzedaz" or "wynajem").
propertyType🟢 High (100%)StringProperty category ("mieszkanie", "dom", etc.).
title🟢 High (100%)StringFull advertisement headline title.
price🟢 High (98%)NumberTotal asking price in Polish złoty (PLN).
currency🟢 High (100%)StringCurrency identifier ("PLN").
pricePerSquareMeter🟢 High (95%)NumberCalculated or listed price per square meter (PLN/m²).
rentFee🟡 Conditional (45%)NumberMonthly administrative rent fee (czynsz) in PLN.
area🟢 High (99%)NumberTotal living area in square meters (m²).
rooms🟢 High (95%)NumberTotal count of bedrooms and living rooms.
floor🟡 Conditional (80%)StringFloor number (e.g., "2", "parter").
city🟢 High (100%)StringCity or municipal town name (e.g., "Warszawa").
district🟢 High (90%)StringCity district or neighborhood (e.g., "Mokotów", "Śródmieście").
province🟢 High (100%)StringPolish voivodeship (e.g., "mazowieckie").
street🟡 Conditional (65%)StringStreet address when disclosed by seller.
latitude🟡 Conditional (75%)NumberGeographical coordinate latitude.
longitude🟡 Conditional (75%)NumberGeographical coordinate longitude.
isPrivateOwner🟢 High (100%)BooleanTrue if listed directly by owner (FSBO), false if agency.
agencyName🟡 Conditional (65%)StringReal estate agency or developer firm name.
agentName🟢 High (85%)StringName of the owner or listing broker contact.
isPromoted🟢 High (100%)BooleanWhether the listing is currently boosted/featured.
dateCreated🟢 High (95%)StringISO timestamp when the listing was created or refreshed.
thumbnail🟢 High (98%)StringDirect image CDN URL of primary photo.
features🟢 High (90%)ArrayList of property tags (e.g., ["balkon", "winda", "garaż"]).
url🟢 High (100%)StringDirect canonical URL to the listing on Otodom.pl.
scrapedAt🟢 High (100%)StringISO 8601 UTC timestamp of data extraction.

📋 Example JSON output

{
"id": "64821904",
"url": "https://www.otodom.pl/pl/oferta/nowoczesne-3-pokojowe-mieszkanie-mokotow-ID4rxyz",
"dealType": "sprzedaz",
"propertyType": "mieszkanie",
"title": "Nowoczesne 3-pokojowe mieszkanie z balkonem | Mokotów",
"price": 895000,
"currency": "PLN",
"pricePerSquareMeter": 14916,
"rentFee": 750,
"area": 60.0,
"rooms": 3,
"floor": "3",
"floorsTotal": "6",
"city": "Warszawa",
"district": "Mokotów",
"province": "mazowieckie",
"street": "ul. Cybernetyki",
"latitude": 52.1812,
"longitude": 20.9945,
"isPrivateOwner": true,
"agencyName": null,
"agentName": "Krzysztof Kowalski",
"isPromoted": false,
"dateCreated": "2026-11-08T10:15:00.000Z",
"thumbnail": "https://images.otodom.pl/photos/medium/...",
"features": ["balkon", "winda", "miejsce parkingowe", "klimatyzacja"],
"scrapedAt": "2026-11-10T14:42:01.892Z"
}

💻 Programmatic usage examples

Integrate live Polish real estate data into your workflows using Apify's client SDKs:

Python integration

from apify_client import ApifyClient
# Initialize the ApifyClient with your API token
client = ApifyClient("YOUR_APIFY_TOKEN")
# Search for private apartments for sale in Kraków
run_input = {
"dealType": "sprzedaz",
"propertyType": "mieszkanie",
"region": "krakow",
"ownerType": "PRIVATE",
"priceMax": 1000000,
"maxItems": 100
}
# Execute the actor
run = client.actor("haketa/otodom-scraper").call(run_input=run_input)
# Stream listings
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"[{item['district']}] {item['price']} PLN ({item['pricePerSquareMeter']} PLN/m²) - {item['agentName']}")

Node.js integration

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: 'YOUR_APIFY_TOKEN',
});
const input = {
dealType: 'wynajem',
propertyType: 'mieszkanie',
region: 'warszawa',
maxItems: 50,
};
const run = await client.actor('haketa/otodom-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} Warsaw rental listings:`);
items.forEach(item => {
console.log(`- ${item.title}: ${item.price} PLN/mo (Rent fee: ${item.rentFee} PLN)`);
});

🇵🇱 Polish administrative regions & cities reference

Otodom categorizes properties by Polish administrative hierarchy. You can target any of the 16 voivodeships or specific urban centers:

Voivodeship (Województwo)Major Cities & Otodom SlugsEconomic Profile
Mazowieckiewarszawa (Warsaw), radom, plockCapital region, highest PLN/m², financial center
Małopolskiekrakow (Cracow), tarnow, nowy-saczTech hub, tourism capital, high rental yields
Dolnośląskiewroclaw (Breslau), walbrzych, legnicaDynamic manufacturing, IT sector, rapid growth
Wielkopolskiepoznan, kalisz, koninStrong commercial base, university market
Pomorskiegdansk, gdynia, sopot (Tricity)Baltic port cities, premium vacation & rental market
Śląskiekatowice, czestochowa, gliwice, sosnowiecSilesian metropolitan area, highly affordable
Łódzkielodz, piotrkow-trybunalskiCentral logistics hub, reviving post-industrial market
Zachodniopomorskieszczecin, koszalin, kolobrzegCoastal gateway to Germany and Scandinavia
Kujawsko-Pomorskiebydgoszcz, torunTwin river cities with steady residential demand
Lubelskielublin, zamosc, chelmMajor university center in eastern Poland
Podkarpackierzeszow, przemysl, mielecAviation Valley, growing tech corridor
Świętokrzyskiekielce, ostrowiec-swietokrzyskiCentral transit crossroads
Warmińsko-Mazurskieolsztyn, elblagMasurian Lakes district, holiday properties
Podlaskiebialystok, suwalkiNortheastern regional commerce hub
Lubuskiezielona-gora, gorzow-wielkopolskiWestern border trade corridor
Opolskieopole, kedzierzyn-kozleIndustrial and transit center

🧮 Calculating gross rental yield with extracted data

Using the exported fields from this actor, you can instantly compute expected gross rental yields across Polish micro-markets in Excel or Python:

$$\text{Gross Rental Yield (%)} = \left( \frac{\text{Monthly Rent (PLN)} \times 12}{\text{Purchase Price (PLN)}} \right) \times 100$$

Example Python calculation

# Assuming matching comparable 2-room apartments in Warsaw Mokotów
avg_purchase_price = 780000 # PLN
avg_monthly_rent = 3800 # PLN
annual_rent = avg_monthly_rent * 12
gross_yield = (annual_rent / avg_purchase_price) * 100
print(f"Estimated Gross Rental Yield: {gross_yield:.2f}%")
# Result: Estimated Gross Rental Yield: 5.85%

🚀 How to use this actor

  1. Select transaction & property type: Choose whether you are analyzing properties for sale (sprzedaz) or rent (wynajem), and select the target structure (apartments, houses, etc.).
  2. Select geographic territory: Choose a major metropolitan city from the dropdown (e.g., Warsaw, Kraków, Wrocław) or enter a custom county path.
  3. Filter by listing source: Set Listed by to "Private owners only" to isolate FSBO direct leads or leave as "All".
  4. Define budget & dimensions: Set optional constraints on min/max price (PLN), living area (m²), and room counts.
  5. Run the scraper: Click Start. The actor logs real-time pagination progress, showing listings captured per page.
  6. Download data: Export your records as CSV, Excel, or JSON, or query the Apify dataset directly via API.

💡 Best practices & optimization tips

  • Narrow by region for faster runs: While cala-polska allows scraping nationwide inventory, picking specific metropolitan areas like warszawa or krakow allows much faster data collection.
  • FSBO Lead Generation: When collecting seller leads, filter by ownerType: PRIVATE. The resulting dataset will contain direct owner contact names in the agentName field.
  • Always use Polish residential proxies: Otodom monitors traffic origin closely. Keeping Apify's default Polish residential proxy (useApifyProxy: true, apifyProxyCountry: "PL") ensures smooth, unblocked pagination.
  • Automate weekly market snapshots: Set up a recurring Apify cron schedule to run every Monday to track weekly inventory influx and price-per-square-meter changes.

❓ Frequently Asked Questions (FAQ)

Do I need an Otodom account or login credentials?

No. The scraper collects publicly available listing data from Otodom without requiring any account or login authentication.

How many listings can I scrape in a single run?

There is no hard limit. The scraper handles single-page spot checks as well as deep multi-page batches of 1,000+ listings across Poland. Use maxItems to cap your extraction.

Can I paste custom search URLs from otodom.pl?

Yes. If you configure complex filters directly on otodom.pl (such as specific micro-neighborhoods or year-of-construction filters), copy the URL and paste it into the Start URLs input.

Why is rentFee (czynsz) missing on some listings?

The administrative rent fee is primarily relevant for apartments in multi-family buildings. For single-family houses or commercial plots, this field is naturally null.

How fresh is the extracted property data?

Every run queries Otodom's live search endpoints in real time, sorted by newest listings first (LATEST), ensuring immediate access to freshly posted properties.



📋 Changelog

Version 1.2 (2026-11)

  • Unlocked 1,000+ deep pagination: Removed restrictive per-region caps, enabling extensive multi-page crawling across all 16 Polish voivodeships.
  • Enhanced district extraction: Upgraded reverse-geocoding parsing to accurately separate administrative districts and sub-neighborhoods.
  • Accelerated prefill execution: Streamlined request header negotiation to finish standard 100-item prefill runs in under 30 seconds.
  • Strict schema validation: Updated schema specifications to 100% Apify CLI 2026 standards with full dataset overview view support.

Version 1.1 (2026-06)

  • Added client-side post-filtering for ownerType (FSBO vs. agency).
  • Implemented automated metropolitan path resolution for 20+ major Polish cities.
  • Added support for administrative rent fee (czynsz) extraction.

Version 1.0 (2026-06)

  • Initial release featuring Next.js __NEXT_DATA__ parsing for sale and rental listings.
⌂ 换网址