Otodom Property Scraper — Poland Sale + Rent · PLN/m² Market avatar

Otodom Property Scraper — Poland Sale + Rent · PLN/m² Market

Pricing

from $1.50 / 1,000 property extracteds

Go to Apify Store
Otodom Property Scraper — Poland Sale + Rent · PLN/m² Market

Otodom Property Scraper — Poland Sale + Rent · PLN/m² Market

Scrape Otodom.pl into clean structured data. Extract Polish sale and rental property listings by location, ZIP, coordinates, polygon, or search URL — with price, PLN per square meter, area, rooms, geo, built-in market KPIs, and optional owner/agent contact enrichment.

Pricing

from $1.50 / 1,000 property extracteds

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Otodom Property Scraper — Poland Sale + Rent · PLN/m² · Market KPIs

SIÁN Agency Store Related Actor

🎯 Extract Polish Sale + Rent Listings With Market KPIs in Seconds

Real estate investors, agents, market analysts, and data teams — get full Otodom listing data plus PLN/m² analytics and optional owner/agent contacts


📋 Overview

Pull Otodom.pl listings — both for-sale AND rentals — into clean structured data. Search anywhere in Poland by location name, ZIP code, coordinates, drawn polygon, or an Otodom search URL, and get back complete listings with price, price-per-square-metre, area, rooms, floor, geo, and photo metadata.

Why investors and agents choose us over the alternatives:

  • 📊 Analytics included, not just raw data: Auto-generated HTML market report with median price, PLN/m² distribution (min/median/avg/p90/max), top cities by inventory, and property-type breakdown — computed for you on every run
  • 🧭 Five search modes: location, ZIP, coordinates (+ radius), polygon, and search URL — the full Otodom geo-search surface, plus primary/secondary market and advertiser-type filters
  • Sale + Rent in one actor: One listingType toggle gets you sales, rentals, or both sides
  • 📇 Optional owner/agent contact enrichment: Owner or agent name + phone, agency contacts, plus build year, construction status, heating, and ownership — a lead-generation and due-diligence layer (PAID)
  • 🆓 FREE tier with full feature parity: 25 listings per run, no credit card, same KPIs and HTML report — just a smaller cap

✨ Features

  • 🏠 Both sides of the market — sale and rent via a single listingType toggle
  • 🧭 Five search modes — by location name, ZIP (NN-NNN), coordinates (+ radius), polygon, or Otodom search URL
  • 🔧 Rich server-side filters — property type, market (primary/secondary), advertiser type, sort order, price / area / rooms / year-built ranges, listed-within-days, photos-only
  • 📈 Market KPIs in HTML report — median price, PLN/m² distribution, top cities by inventory, property-type tally
  • 📇 Owner/agent contact enrichment — name, phone, agency, and full characteristics per listing (PAID toggle)
  • 📦 Bulk search — pass an array of locations, ZIP codes, or search URLs in one run (PAID)
  • 📱 Standard Apify exports — JSON, CSV, XLSX, RSS, HTML

🎬 Quick Start

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~otodom-property-scraper/runs?token=[YOUR_TOKEN]' \
-H 'Content-Type: application/json' \
-d '{"searchMode":"location","location":"Warszawa","listingType":"sale","maxResults":50}'

🚀 Getting Started (3 Simple Steps)

Step 1: Pick Sale, Rent, or Both

Set listingType to sale, rent, or both. Both runs each query twice (PAID — doubles the query count).

Step 2: Pick Your Search Mode

Choose a searchMode and provide its input:

  • locationlocation (e.g. "Warszawa")
  • zipzipCode (e.g. "00-950")
  • coordinateslatitude + longitude (+ optional radius)
  • polygonpolygon (a drawn map ring)
  • urlurl (an Otodom search-results URL)

Step 3: Run & Export

Hit Run. Listings stream into the dataset; an HTML market report lands in the key-value store. Export as JSON, CSV, or Excel.


📥 Input Configuration

FieldTypeRequiredDescription
listingTypestringNosale, rent, or both (default: sale). both is PAID-only.
searchModestringNolocation, zip, coordinates, polygon, or url (default: location).
locationstringIf searchMode=locationPolish place name (e.g. Warszawa).
locationsarrayNoMultiple place names in one run (PAID).
zipCodestringIf searchMode=zipPolish postal code, NN-NNN.
zipCodesarrayNoMultiple ZIP codes in one run (PAID).
latitude / longitudenumberIf searchMode=coordinatesSearch centre.
radiusintegerNoRadius in km around the centre.
polygonstringIf searchMode=polygonA lon lat,... ring.
urlstringIf searchMode=urlAn Otodom search-results URL.
urlsarrayNoMultiple search URLs in one run (PAID).
propertyTypestringNoFlat, House, Land, Commercial, Warehouse, Garage, Room, Investment.
marketstringNoAll, Primary, Secondary.
ownerTypestringNoAll, Agency, Private, Developer.
sortOrderstringNoRelevance, Newest, Price_Low_to_High, Price_High_to_Low, Price_Per_Meter_Low, Area_Large_to_Small.
minPrice / maxPriceintegerNoPrice range in PLN.
minArea / maxAreaintegerNoLiving-area range in m².
minRooms / maxRoomsintegerNoRoom-count range.
minYearBuilt / maxYearBuiltintegerNoConstruction-year range.
daysSinceCreatedintegerNoOnly listings created within the last N days.
hasPhotosbooleanNoOnly listings with at least one photo.
maxResultsintegerNoListings per query, 1–500 (default: 72). FREE tier capped at 25 per run.
includeDetailsbooleanNoFetch full detail + owner/agent contacts per listing — PAID only (default: false).

Example — Location sale search:

{
"listingType": "sale",
"searchMode": "location",
"location": "Kraków",
"propertyType": "Flat",
"maxResults": 100
}

Example — Coordinates rentals with radius:

{
"listingType": "rent",
"searchMode": "coordinates",
"latitude": 52.2297,
"longitude": 21.0122,
"radius": 5,
"maxResults": 50
}

Example — Bulk locations, both sides, with contact enrichment:

{
"listingType": "both",
"searchMode": "location",
"locations": ["Warszawa", "Wrocław", "Gdańsk"],
"maxResults": 200,
"includeDetails": true
}

📤 Output

Results land in the Apify dataset. Common fields on every listing:

FieldTypeDescription
propertyIdintegerUnique Otodom listing ID
propertyTitlestringListing headline
listingTypestringsale or rent
propertyTypestringFLAT, HOUSE, LAND, etc.
urlstringFull listing URL on otodom.pl
thumbnailUrlstringPreview image
pricingobjectprice, currency, pricePerSquareMeter, rentAdminFee, hidePrice
specsobjectareaInSquareMeters, terrainAreaInSquareMeters, rooms, floor
locationobjectcity, province, street, district, hierarchy
flagsobjectisPrivateOwner, isExclusiveOffer, isPromoted
agencyobjectSearch-card agency (null for private offers)
imagesarrayPhoto URLs
scrapedAtstringISO timestamp

Enriched fields (when includeDetails is on): propertyDescription, market, advertiserType, characteristics (build year, construction status, material, heating, ownership, floor), coordinates, and contact (owner/agent name + phone, agency name/URL/address/phones).

Sale example:

{
"propertyId": 68159688,
"listingType": "sale",
"propertyType": "FLAT",
"url": "https://www.otodom.pl/pl/oferta/mieszkanie-46-92-m-warszawa-ID4BZrO",
"pricing": { "price": 2000000, "currency": "PLN", "pricePerSquareMeter": 42626 },
"specs": { "areaInSquareMeters": 46.92, "rooms": 2, "floor": "3" },
"location": { "city": "Warszawa", "province": "mazowieckie", "district": "Śródmieście" }
}

💼 Use Cases

1. Polish Market Analysis

Pull median price, PLN/m², and city/type breakdowns across any Polish location for housing-market research and dashboards.

2. Property Comparables (Comps)

Extract deduped, structured sale or rent comps by location, ZIP, coordinates, polygon, or search URL for valuation and underwriting.

3. Agent & Owner Lead Generation

Enrich listings with owner/agent name, phone, and agency contacts for CRM building and outreach.

4. Investment Underwriting

Compare price and PLN/m² across primary vs secondary market and property types to source and price deals.

5. Real-Estate Data Pipelines

Feed clean Otodom listing data into AVMs, price-prediction models, and scheduled monitoring pipelines.


🔗 Integration Examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/otodom-property-scraper').call({
listingType: 'sale',
searchMode: 'location',
location: 'Warszawa',
maxResults: 100,
includeDetails: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/otodom-property-scraper').call(
run_input={
'listingType': 'rent',
'searchMode': 'zip',
'zipCode': '00-950',
'maxResults': 100
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~otodom-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"listingType":"sale","searchMode":"location","location":"Gdańsk","maxResults":150}'

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 listings per run — full feature parity, same data quality
  • 1 query per run
  • No credit card required
  • Unlimited listings and queries per run
  • listingType: "both" (sale + rent in one run)
  • Bulk location / ZIP / URL arrays
  • Owner/agent contact + full-detail enrichment
  • Pay-per-result: only charged for listings actually returned

💰 Transparent per-result pricing — a low per-listing rate for search results, with a separate charge only when you opt into full-detail contact enrichment. Every listing comes with structured pricing and the run produces a full HTML market report with median, distribution, and city breakdowns — no post-processing required.

🔗 View current pricing


❓ Frequently Asked Questions

Q: Does this cover rentals? A: Yes — set listingType: "rent" for rentals only, or listingType: "both" (PAID) to scrape sale + rent in a single run.

Q: How many listings can I extract? A: FREE tier: 25 per run. PAID tier: unlimited — each query auto-paginates the full result set.

Q: How do I get owner/agent phone numbers? A: Turn on includeDetails (PAID). Each listing is enriched with the owner or agent name + phone and any agency contacts.

Q: Which areas of Poland are covered? A: All of Poland — search by any city, district, or voivodeship name, by ZIP, by coordinates, by polygon, or by an Otodom search URL.

Q: What output formats are available? A: JSON, CSV, Excel — exported directly from the Apify dataset.


⚠️ Trademark Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Otodom, Grupa OLX sp. z o.o., or any of their subsidiaries. The name "Otodom" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.


Our actors are ethical and do not extract any private user data. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.


🤝 Support

Telegram Support


Built by SIÁN Agency | More Tools