
Otodom Scraper
hipersoft/otodom-scraper
Scrape Polish property listings from Otodom.pl: apartments, houses, plots, rooms and commercial for sale or rent. Price, price per m², rent (czynsz), area, rooms, floor, voivodeship, city, district, street, features, agency or private owner, photos, dates. Export CSV/JSON.
Total users
2Monthly users
1Total runs
6Per listing
$0.0025Last rebuilt
Oct 26, 2026Overview
Otodom Scraper extracts property listings from Otodom.pl, Poland's leading real estate portal, covering apartments (mieszkania), houses (domy), plots (działki), rooms (pokoje), commercial premises (lokale), halls and garages, for sale (sprzedaż) or rent (wynajem) in Warszawa, Kraków, Wrocław, Gdańsk, Poznań, Łódź, Katowice and all of Poland. For every listing you get the title, link, transaction, property type, total price, price per m², additional rent (czynsz), area, plot area, number of rooms, floor, voivodeship, city, district, sub-district, street, features (balcony, parking, lift, garden, air conditioning…), advertiser type (private owner or agency), agency name, development, exclusive flag, photo count, main photo, creation and refresh dates. Filter by price and area, or paste any Otodom search link. Export to CSV, Excel or JSON. Ideal for investors, real estate agents, developers, relocation services and Polish housing market research.
What does Otodom Scraper do?
- 🇵🇱 All of Poland: big cities, districts and smaller towns.
- 🏠 Sale and rent: apartments, houses, plots, rooms, commercial, halls, garages.
- 💰 Price, price per m² and czynsz (monthly rent / service charge).
- 📐 Area, rooms and floor.
- 📍 Voivodeship, city, district, sub-district and street.
- ✅ Features: balcony, parking spot, lift, garden, AC, secure building…
- 🏢 Private owner or agency and development name.
What data can you scrape from Otodom?
| Field | Description |
|---|---|
| Listing | ID, link, title, transaction, property type, exclusive flag |
| Price | Total price, currency, price per m², rent (czynsz) |
| Size | Area, plot area, rooms, floor |
| Location | Voivodeship, city, district, sub-district, street |
| Features | Feature tags |
| Advertiser | Private or business, agency, development |
| Media & dates | Photo count, main photo, created, refreshed |
Use cases for Polish real estate data
- Investors: compare prices per m² and rental yields across districts.
- Agents and developers: monitor competing listings and new supply.
- Relocation services: find rentals for clients by budget and size.
- Market research: track asking prices and supply across Polish cities.
How to scrape Otodom
- Click Try for free to open Otodom Scraper in Apify Console.
- Choose sale or rent and the property type.
- Pick cities (or location paths / search links) and optional price and area limits.
- Click Start and download the listings as CSV, Excel or JSON.
Input
Example input
{
"transaction": "wynajem",
"propertyType": "mieszkanie",
"cities": ["Kraków", "Warszawa"],
"maxPrice": 4000,
"minArea": 30,
"maxItems": 500
}
| Field | Description |
|---|---|
| Transaction | sprzedaz (sale) or wynajem (rent). |
| Property type | mieszkanie, dom, dzialka, lokal, pokoj, haleimagazyny, garaz. |
| Cities | Preset Polish cities. |
| Location paths | Any Otodom location path. |
| Search links | Paste results links. |
| Min / max price, area | Filters. |
| Max listings | 0 = no limit. |
Output
Listing example
{
"listingId": 68474295,
"url": "https://www.otodom.pl/pl/oferta/mieszkanie-do-wynajecia-krakow-gorka-narodowa-2-pokoje-tramwaj-ID4Dji7",
"title": "Mieszkanie do wynajęcia Kraków Górka Narodowa | 2 pokoje | Tramwaj",
"transaction": "RENT",
"estate": "FLAT",
"price": 2600,
"currency": "PLN",
"rent": 600,
"areaM2": 34,
"rooms": 2,
"floor": 5,
"voivodeship": "małopolskie",
"city": "Kraków",
"district": "Prądnik Biały",
"features": ["BALCONY", "PARKING_SPOT", "SECURE_BUILDING"],
"advertiserType": "business",
"createdAt": "2026-09-29T18:42:39+00:00"
}
Output schema
| Field | Type | Description |
|---|---|---|
listingId, url, title, transaction, estate, isExclusive |
mixed | Listing. |
price, currency, pricePerM2, rent |
number | Price. |
areaM2, terrainAreaM2, rooms, floor, floorText |
mixed | Size. |
voivodeship, city, district, subdistrict, street |
string | Location. |
features |
array | Features. |
advertiserType, agency, development |
string | Advertiser. |
imageCount, imageUrl, createdAt, refreshedAt |
mixed | Media and dates. |
Names of individual agents and private owners are not collected.
How much does it cost?
Otodom Scraper uses pay-per-listing pricing: a small fixed price per listing, with automatic discounts on higher Apify plans. See the Pricing tab for the exact price.
More real estate data
- Ohne-Makler Scraper: German private property listings.
- BureauxLocaux Scraper: French commercial real estate.
- RE/MAX Portugal Scraper: Portuguese listings.
FAQ
How do I search a district or small town? Copy the location part of an Otodom results URL (e.g. mazowieckie/warszawa/warszawa/warszawa/mokotow) into Location paths, or paste the whole link.
What is czynsz? The monthly building/service charge (or additional rent) shown on Polish listings.
What formats can I export? CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.
Can I integrate Otodom Scraper with other apps? Otodom Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JS/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Is it legal to scrape Otodom? The scraper only collects publicly visible listing information and no personal contact data. You are responsible for using the data in line with Otodom's terms and GDPR.
Notes
Original clean-room implementation. Returns only public data. Not affiliated with Otodom or OLX Group.
Input
| Field | Type | Description |
|---|---|---|
transactionTransaction | string · sprzedaz, wynajem | Sale or rent. Default: "sprzedaz" |
propertyTypeProperty type | string · mieszkanie, dom, dzialka, lokal, pokoj, haleimagazyny… | Type of property. Default: "mieszkanie" |
citiesCities | array | Polish cities: Warszawa, Kraków, Wrocław, Gdańsk, Gdynia, Poznań, Łódź, Katowice, Szczecin, Lublin, Białystok, Rzeszów, Toruń, Bydgoszcz, Kielce, Olsztyn, Opole. For other places use Location paths or paste Otodom links. |
locationPathsLocation paths (advanced) | array | Otodom location paths from the site URL, e.g. mazowieckie/warszawa/warszawa/warszawa/mokotow or pomorskie/sopot/sopot/sopot. |
startUrlsOtodom search links | array | Optional Otodom results links with any filters (overrides the fields above). |
minPriceMinimum price (PLN) | integer | Minimum total price or rent. |
maxPriceMaximum price (PLN) | integer | Maximum total price or rent. |
minAreaMinimum area (m²) | integer | Minimum area. |
maxAreaMaximum area (m²) | integer | Maximum area. |
maxItemsMax listings | integer | Stop after this many listings (0 = no limit). Default: 200 |
proxyConfigurationProxy configuration | object | Not needed in most cases. Default: {"useApifyProxy": false} |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~otodom-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cities": [
"Warszawa"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/otodom-scraper").call(run_input={
"cities": [
"Warszawa"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/otodom-scraper').call({
"cities": [
"Warszawa"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Listing Charged per property listing returned | $0.0025 | $0.0013 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
CNN Fear & Greed Index Scraper
Scrape the CNN Fear & Greed Index: current market-sentiment score and rating, a full historical timeline, and all seven component indicators. Clean structured JSON, CSV or Excel for trading signals, backtesting, dashboards and alerting.
547 runs · 6 users · $0.003 / item scrapedDivar Scraper
Scrape classified ads from Divar, Iran's largest marketplace: title, price (Toman), category, city, district, images and the listing URL. Search any Iranian city with an optional keyword and export one clean row per ad as JSON, CSV or Excel. For market research, price tracking and n8n.
224 runs · 22 users · $0.003 / listing scrapedAirbnb Scraper
Search Airbnb by location and scrape listings: name, property type, price, rating, reviews, coordinates, photos, badges and link. For short-term rental, pricing and market research.
122 runs · 2 users · $0.005 / listing scrapedSingapore HDB Property Information Scraper
Export master data for every HDB block in Singapore (~13,300 blocks): address, town, year completed, max floor, total units, unit mix by flat type (sold & rental) and amenities (market/hawker, carpark, commercial, pavilion). Filter by town, street, year. Public open data, no setup.
113 runs · 1 users · $0.002 / block scrapedPropertyGuru Singapore Scraper
Scrape PropertyGuru Singapore property listings: price, beds, baths, size, address, property type, agent and URL. For property research and lead generation.
106 runs · 3 users · $0.004 / listing scrapedEdgeProp Singapore Property Scraper
Scrape EdgeProp Singapore property listings for sale and rent: price, address, beds, baths, size, PSF and URL.
105 runs · 1 users · $0.004 / listing scrapedSend the site and the fields. We build it and you get it first.