Otodom Poland Real Estate Listings & Agent Contacts Scraper
Pricing
from $17.00 / 1,000 results
Otodom Poland Real Estate Listings & Agent Contacts Scraper
Scrape Otodom Poland property listings for sale or rent with price in PLN, price per m2, area, rooms, floor, district and city, geo coordinates and the advertiser agency, agent name and phone. Filter by transaction, property type and location. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Otodom Poland Real Estate Listings & Agent Contacts Scraper
Here is one real result, with every field the actor returns. The long Polish description and the images array are trimmed with a [trimmed] marker for readability; every value shown is real:
{"id": 68299615,"title": "3 pokoje | parking | ul. Grzybowska | metro","transaction": "sprzedaz","propertyType": "apartment","price": 980000,"priceCurrency": "PLN","rentPrice": 1300,"pricePerM2": 19809.99,"area": 49.47,"rooms": 3,"floor": 1,"floorLabel": "FIRST","city": "Warszawa","district": "Śródmieście","neighborhood": "Śródmieście Północne","province": "mazowieckie","street": "ul. Grzybowska","latitude": 52.236824,"longitude": 21.000046,"agencyName": "Eastate Agency","advertiserType": "AGENCY","agentName": "Katarzyna Ochrin","agentPhone": "+48536470831","agencyPhone": "+48535534245","phone": "+48536470831","agencyAddress": "Młynarska 7, 01-205, Warszawa, mazowieckie","buildYear": 1972,"buildingType": "block","buildingFloors": 15,"buildingMaterial": "other","market": "secondary","ownershipForm": "limited_ownership","constructionStatus": "ready_to_use","windowsType": "plastic","heating": "urban","energyCertificate": null,"additionalRent": 1300,"deposit": null,"equipment": ["furniture", "fridge", "oven", "dishwasher", "stove"],"amenities": ["garage", "lift", "basement"],"referenceId": "3316/19413/OMS","description": "Na sprzedaż ustawne, 3-pokojowe mieszkanie położone w ścisłym centrum Warszawy przy ul. Grzybowskiej , w okolicy Ronda ONZ oraz w odległości kilku minut od głównych punktów biznesowych Śródmieścia i Woli. [trimmed]","images": ["https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6IjI5aHdiYTdiaWV1YTEtRUNPU1lTVEVNIiwidyI6W3siZm4iOiJlbnZmcXFlMWF5NGsxLUFQTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.wX3YAMnNwiDtIrT9gPMgMR2B1Eu-VGjwMy79SRbJ2S4/image;s=2048x1536;q=80"],"isPrivateOwner": false,"isPromoted": false,"listingUrl": "https://www.otodom.pl/pl/oferta/3-pokoje-parking-ul-grzybowska-metro-ID4CzQH","dateCreated": "2026-08-10 16:23:12","source": "otodom","observedAt": "2026-08-10T14:31:10.924Z","searchLocation": "mazowieckie/warszawa/warszawa/warszawa"}
(The images array above is trimmed to 1 of its 15 real entries; the URL shown is the real, full signed Otodom CDN URL exactly as returned.)
The most complete Otodom Poland real estate scraper available. It returns every field an Otodom listing exposes, including price, price per m2, area, rooms, floor, full location down to neighborhood with exact map coordinates, building details (year, type, floors, material, heating, ownership form, construction status), equipment and amenities, the full Polish description and image gallery, and the advertiser and agent phone numbers, so you get both the property data and the contact leads in one run.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches Otodom, Poland's largest property portal, for the transaction, property type and locations you pass, paginates through the results, and writes one normalized record per listing to the run's dataset. Each record carries the full price and area breakdown, location down to the neighborhood, building attributes, equipment and amenities, the description and image gallery, and the listing URL. With contact enrichment on, the actor visits each listing to capture the advertiser and agent phone numbers and the exact map coordinates. Missing source values are returned as null.
Location slugs follow Otodom's own path format, from broad to narrow (province / county / commune / city), so you can target a single city or a whole province.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 Warsaw and Krakow apartments for sale, with phone and geo enrichment.
{"transaction": "sprzedaz","propertyType": "mieszkanie","locations": ["mazowieckie/warszawa/warszawa/warszawa", "malopolskie/krakow/krakow/krakow"],"enrichContacts": true,"maxListings": 10}
Switch transaction to wynajem for rentals, and propertyType to dom, pokoj, lokal or dzialka. Turn enrichContacts off for a faster, listings-only run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
transaction | enum | no | sprzedaz | sprzedaz (for sale) or wynajem (for rent). |
propertyType | enum | no | mieszkanie | mieszkanie (apartment), dom (house), pokoj (room), lokal (commercial), or dzialka (land). |
locations | string[] | no | Warsaw, Krakow | One or more Otodom location paths, broad to narrow, for example mazowieckie/warszawa/warszawa/warszawa (Warsaw) or mazowieckie (whole province). Every location is searched in one run. |
enrichContacts | boolean | no | true | Visit each listing to capture advertiser phone, agent phone and exact map coordinates. Off returns listings-only. |
maxListings | integer | no | 10 | Maximum listings to collect across all locations in this run. |
enrichContactsMax | integer | no | 50 | Cap how many results the enrichment add-on tries to enrich, to control cost. Free Apify accounts are capped at 3. |
Output reference
One dataset item per listing. Types: string, integer, number, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
id | integer | Otodom listing ID (unique). |
title | string | Listing title. |
transaction | string | sprzedaz (sale) or wynajem (rent). |
propertyType | string | Normalized property type, for example apartment, house. |
price | integer | Asking / sale price. |
priceCurrency | string | Price currency, for example PLN. |
rentPrice | integer | Monthly rent where applicable, or null. |
pricePerM2 | number | Price per square meter. |
area | number | Floor area in square meters. |
rooms | integer | Number of rooms. |
floor | integer | Floor number of the unit. |
floorLabel | string | Floor label, for example FIRST, GROUND. |
city | string | City. |
district | string | District, or null. |
neighborhood | string | Neighborhood, or null. |
province | string | Province (wojewodztwo). |
street | string | Street, or null. |
latitude | number | Map latitude (with enrichment). |
longitude | number | Map longitude (with enrichment). |
agencyName | string | Listing agency name, or null. |
advertiserType | string | AGENCY, PRIVATE, or DEVELOPER. |
agentName | string | Agent name, or null. |
agentPhone | string | Agent phone (with enrichment), or null. |
agencyPhone | string | Agency phone (with enrichment), or null. |
phone | string | Best contact phone (with enrichment), or null. |
agencyAddress | string | Agency address, or null. |
buildYear | integer | Year the building was built, or null. |
buildingType | string | Building type, for example block, tenement, apartment. |
buildingFloors | integer | Number of floors in the building, or null. |
buildingMaterial | string | Construction material, or null. |
market | string | primary or secondary. |
ownershipForm | string | Ownership form, for example limited_ownership, full_ownership. |
constructionStatus | string | Construction status, for example ready_to_use. |
windowsType | string | Window type, or null. |
heating | string | Heating type, for example urban, gas. |
energyCertificate | string | Energy certificate, or null. |
additionalRent | integer | Additional monthly fees (czynsz), or null. |
deposit | integer | Rental deposit, or null. |
equipment | string[] | Equipment list, for example furniture, fridge, oven. |
amenities | string[] | Amenities, for example garage, lift, basement. |
referenceId | string | Agency reference / offer number. |
description | string | Full listing description (Polish). |
images | string[] | Image gallery URLs (full signed Otodom CDN URLs). |
isPrivateOwner | boolean | true if a private advertiser. |
isPromoted | boolean | true if a promoted listing. |
listingUrl | string | Listing page URL. |
dateCreated | string | Listing creation timestamp. |
source | string | Always otodom. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
searchLocation | string | The location slug that produced this record. |
Example output record
See the hero record at the top of this page. It is a real Warsaw apartment for sale (Otodom listing 68299615, ul. Grzybowska) pulled from a live run with contact enrichment on (input {"transaction":"sprzedaz","propertyType":"mieszkanie","locations":["mazowieckie/warszawa/warszawa/warszawa","malopolskie/krakow/krakow/krakow"],"enrichContacts":true,"maxListings":10}), with the description and image gallery trimmed; every value shown is real.
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~otodom-poland-realestate-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"transaction":"wynajem","propertyType":"mieszkanie","locations":["malopolskie/krakow/krakow/krakow"],"maxListings":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~otodom-poland-realestate-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"transaction":"sprzedaz","propertyType":"dom","locations":["mazowieckie"],"enrichContacts":true,"maxListings":100}'
Apify CLI:
apify call scrapers_lat/otodom-poland-realestate-scraper \--input '{"transaction":"sprzedaz","propertyType":"mieszkanie","locations":["mazowieckie/warszawa/warszawa/warszawa"],"maxListings":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per listing returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 listings per run, and contact enrichment is capped at 3 listings. Upgrade for higher
maxListingsand full enrichment.
FAQ and troubleshooting
A run returned 0 records. Why? The location slug may be wrong, or no listings match the transaction and property type. Check the slug against an Otodom search URL and try a broader location. Zero-result runs are not charged.
How do I find the right location slug?
Open the location on otodom.pl and copy the path segment from the URL, from province down to city, for example mazowieckie/warszawa/warszawa/warszawa.
Do I get phone numbers?
Yes, with enrichContacts on (the default). The actor visits each listing to capture the advertiser and agent phone numbers. Free accounts enrich the first 3 listings per run.
The description contains Polish text and HTML entities. Is that normal?
Yes. The description is returned as Otodom stores it, in Polish. It may include entities like . Values are passed through as-is and never invented.
Is this an official Otodom tool? No. This actor is independent and has no affiliation with Otodom or OLX Group. It reads only data that is publicly available on Otodom listings. Use it in accordance with Otodom's terms.
Related scrapers
- Funda Netherlands Real Estate Scraper: Dutch property listings.
- Immoweb Belgium Real Estate Scraper: Belgian property listings.
- Daft Ireland Real Estate Scraper: Irish property listings.
- Domain Australia Real Estate Scraper: Australian property listings.
- Booking Hotels Scraper: hotel prices and availability.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Otodom or OLX Group. Accesses only publicly available Otodom listing data. Use in accordance with Otodom's terms of service.
