Polish Real Estate Multi-Portal Aggregator avatar

Polish Real Estate Multi-Portal Aggregator

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Polish Real Estate Multi-Portal Aggregator

Polish Real Estate Multi-Portal Aggregator

Scrape Otodom and Morizon in one run. Automatic cross-portal deduplication, unified schema, incremental mode. $2.50/1,000 results.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Wiktor

Wiktor

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape Otodom and Morizon — Poland's two largest real estate portals — in a single run. Get a unified, deduplicated dataset of property listings across all major cities, property types, and transaction types. No coding required.

What does Polish Real Estate Multi-Portal Aggregator do?

This Actor simultaneously collects property listings from multiple Polish real estate portals and merges them into one clean dataset. It handles sale and rental listings for apartments, houses, plots, and commercial spaces across any Polish city. Cross-portal duplicates are automatically removed using an MD5 fingerprint, so you never pay for or process the same listing twice.

Results are available as structured JSON via the Apify dataset API, downloadable as CSV or Excel, and ready for integration with any tool or workflow.

Why choose this over single-portal scrapers?

Most Apify Store scrapers target one portal at a time. That means you need to:

  • Run and pay for two or three separate Actors
  • Merge datasets manually with custom code
  • Deduplicate listings yourself — the same property often appears on all major portals simultaneously
  • Maintain separate schedules, inputs, and API calls

This Actor solves all of that in one run.

Single-portal scraper × 2This Actor
Portals covered1 eachOtodom + Morizon (Gratka coming soon)
DeduplicationManualAutomatic (MD5 fingerprint)
Unified schemaNoYes
Incremental modeRarelyBuilt-in
Cost for 2,000 results~$5–8$5.00
Setup complexityHighOne input form

Why use Polish Real Estate Multi-Portal Aggregator?

  • Automatic cross-portal deduplication — listings appearing on both Otodom and Morizon are fingerprinted using MD5(address + area + price) and stored only once, giving you a true count of unique properties on the market.
  • Incremental mode — on repeated runs, only listings not seen in the previous run are saved. Perfect for daily monitoring without re-processing the entire market.
  • Unified output schema — every listing has the same fields regardless of source portal. Your downstream pipeline never needs portal-specific logic.
  • Fast HTTP crawling — uses CheerioCrawler (no browser) for Otodom and Morizon, processing pages 10× faster than Playwright-based scrapers.
  • Use cases: market price analysis, investment scouting, agency lead generation, automated new-listing alerts, academic research, competitive intelligence dashboards.

How to use Polish Real Estate Multi-Portal Aggregator

  1. Open the Actor on Apify Console and click Try for free.
  2. In the Input tab, set your search criteria: city, property type, transaction type, and optional price/area filters.
  3. Set maxListings to limit results per portal per run (default: 100).
  4. Click Start. A typical run collecting 100 listings takes under 2 minutes.
  5. Open the Output tab to preview results, or download as JSON, CSV, or Excel.
  6. Use the API tab to pull results into your application, spreadsheet, or BI tool.

For recurring monitoring, schedule the Actor via the Apify Scheduler and enable incrementalMode to receive only new listings each time.

Input

All fields have sensible defaults. Only location is required for a meaningful run.

FieldTypeDefaultDescription
portalsarray["otodom","morizon"]Portals to scrape. Supported values: "otodom", "morizon"
transactionTypestring"sprzedaz""sprzedaz" (for sale) or "wynajem" (for rent)
propertyTypestring"mieszkanie""mieszkanie" (apartment), "dom" (house), "dzialka" (plot), "lokal" (commercial)
locationstring"warszawa"Polish city name, lowercase, no diacritics (e.g. "krakow", "wroclaw", "gdansk")
priceMinintegerMinimum total price in PLN
priceMaxintegerMaximum total price in PLN
areaMinintegerMinimum area in m²
maxListingsinteger100Maximum listings to collect per portal per run
incrementalModebooleanfalseWhen true, only listings not seen in the previous run are saved
proxyConfigurationobjectApify proxy settings. Recommended for high-volume production runs

Example input — apartments for sale in Kraków, 400k–800k PLN:

{
"portals": ["otodom", "morizon"],
"transactionType": "sprzedaz",
"propertyType": "mieszkanie",
"location": "krakow",
"priceMin": 400000,
"priceMax": 800000,
"areaMin": 40,
"maxListings": 100,
"incrementalMode": false
}

Output

Each item in the dataset represents one unique property listing. Duplicates across portals are removed before saving. You can download the dataset in various formats such as JSON, CSV, or Excel.

Example output item:

{
"id": "otodom-66174382",
"portal": "otodom",
"url": "https://www.otodom.pl/pl/oferta/nowoczesne-mieszkanie-3-pokoje-kazimierz-66174382",
"title": "Nowoczesne mieszkanie 3 pokoje, Kazimierz, widok na Wisłę",
"priceTotal": 649000,
"priceCurrency": "PLN",
"pricePerM2": 12980,
"areaM2": 50.0,
"rooms": 3,
"floor": 2,
"totalFloors": 5,
"isPrivate": false,
"agencyName": "Kraków Premium Nieruchomości",
"street": "Józefa",
"district": "Kazimierz",
"city": "Kraków",
"lat": 50.0516,
"lng": 19.9476,
"photos": [
"https://ireland.apollo.olxcdn.com/v1/files/abc123/image;s=1080x720",
"https://ireland.apollo.olxcdn.com/v1/files/def456/image;s=1080x720"
],
"datePosted": "2025-05-10T08:22:00.000Z",
"scrapedAt": "2025-05-21T10:34:22.000Z"
}

Data table

FieldTypeDescription
idstringUnique listing ID, prefixed by portal (e.g. otodom-12345, morizon-67890)
portalstringSource portal: otodom or morizon
urlstringDirect URL to the full listing page
titlestringListing title as displayed on the portal
priceTotalintegerTotal asking price in PLN
priceCurrencystringAlways "PLN"
pricePerM2integerPrice per square metre in PLN
areaM2floatTotal usable area in m²
roomsintegerNumber of rooms (not including kitchen/bathroom)
floorintegerFloor number (0 = ground floor, null if not specified)
totalFloorsintegerTotal number of floors in the building
isPrivatebooleantrue = private owner listing, false = agency
agencyNamestringName of the listing agency, or null for private listings
streetstringStreet name
districtstringDistrict or neighbourhood
citystringCity
latfloatLatitude (GPS)
lngfloatLongitude (GPS)
photosarrayArray of photo URLs (up to 3 per listing)
datePostedISO 8601Date the listing was originally published
scrapedAtISO 8601Timestamp when the listing was collected

Pricing

$2.50 per 1,000 results — cheaper than running two separate single-portal scrapers.

ScenarioListingsEstimated cost
Quick city snapshot200 (2 portals × 100)~$0.50
Standard market scan1,000~$2.50
Full dual-portal sweep2,000$5.00
Daily incremental monitor20–50 new listings/day<$0.15/day

Incremental mode is the most cost-efficient setup for ongoing monitoring: only genuinely new listings are saved each run, so you are never charged for data you already have.

Tips and advanced options

Use incremental mode for daily alerts — set incrementalMode: true and schedule the Actor to run each morning. You will only receive listings that appeared since the previous run. Pair with an Apify webhook to push new results directly to Slack, email, or your CRM.

Set realistic maxListings values — in major cities like Warsaw or Kraków there can be thousands of listings. Start with 100500 to validate your filters before running a full scan.

Use proxies for high-volume runs — configuring proxyConfiguration with Apify Residential Proxies prevents rate limiting when collecting thousands of listings. For runs under ~200 pages this is usually not necessary.

Combine with Google Sheets or Airtable — use Apify Integrations to automatically sync new results into a spreadsheet after each run, with zero code.

Filter aggressively to reduce cost — combining priceMin, priceMax, and areaMin narrows results to exactly your target segment, reducing both run time and compute units consumed.

FAQ, disclaimers, and support

Is scraping Otodom and Morizon legal? This Actor collects publicly available listing data in the same way a user would browse the sites. Always review each portal's Terms of Service before using data for commercial purposes. The Actor implements rate limiting and respects robots.txt to avoid placing undue load on target servers.

Why are some fields null? Not all portals expose every data point. GPS coordinates and datePosted are reliably available on Otodom but may be absent on Morizon for certain listing types.

When is Gratka.pl support coming? Gratka.pl requires a JavaScript-capable crawler (Playwright) because its listing pages are rendered client-side. This is actively in development and will be added in an upcoming release.

The Actor returned fewer results than maxListings. Why? This can happen if the portal has fewer listings than requested for your search criteria, or if some pages were blocked and retries were exhausted. Try enabling proxyConfiguration for more reliable results.

I need a custom solution or have a feature request. Open an issue on the ../../issues. For enterprise use cases or custom portal integrations, contact us directly.