# Otodom Scraper | Poland Real Estate Sale Rent (`lentic_clockss/otodom-scraper`) Actor

Scrape Otodom.pl Poland sale, rent & developer listings. Extract prices (PLN), rooms, size, agencies & URLs — Otodom API alternative.

- **URL**: https://apify.com/lentic\_clockss/otodom-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Otodom Scraper — Poland Real Estate Sale, Rent & Developers

**Scrape Otodom.pl property listings for sale and rent in Poland — plus developer company pages — then download structured data as Excel, CSV, or JSON.**

This Actor is a practical **Otodom API alternative** for property research, market monitoring, agency lead gen, and investment pipelines on [otodom.pl](https://www.otodom.pl/). Enter a city (or voivodeship / nationwide), pick sale or rent (or a developer page), and get clean Dataset rows with listing IDs, prices in PLN, rooms, size, agencies, and direct Otodom URLs.

- Pull **for-sale** (`sprzedaż`) and **for-rent** (`wynajem`) listings from Otodom
- Filter by **primary / secondary market** (`PRIMARY` / `SECONDARY`) and estate type (`mieszkanie`, `dom`, `inwestycja`, …)
- Search by **city**, **voivodeship**, **full location path**, **nationwide**, or multiple `locations[]`
- Scrape **developer entity** pages (`/pl/firmy/deweloperzy/...`) with portfolio listings
- Optionally **enrich listing details** with guest-visible LDP fields (characteristics, energy cert, build year, and more)
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or Apify MCP / API
- **Pay per event** — Actor start + each Dataset result; platform compute is included (you do not pay separate Apify usage)

---

### What does the Otodom Scraper do?

Otodom Scraper lets you **extract structured Poland real-estate data from Otodom** without maintaining your own CloudFront / browser farm. Give it a location and channel (or a developer URL / listing detail URLs), then start a run.

Under the hood, the Actor:

1. Validates your input (channel, market, location / developer, filters)
2. Calls a managed Cloud Run worker that fetches Otodom pages with Polish residential egress
3. Parses guest-visible Next.js SSR (`__NEXT_DATA__` → `searchAds` / `pageProps.ad` / developer `owner`)
4. Pushes Dataset rows with preview fields (`name`, `type`, `status`, `country`, `authority`)
5. Writes `RUN_SUMMARY` (and `ERROR_SUMMARY` on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.

---

### What Otodom data can I extract?

| Data | Sale / Rent | Developer |
| --- | :---: | :---: |
| Listing / developer title | ✅ | ✅ |
| Listing ID + slug ID token | ✅ | ✅ |
| Price (PLN) + display | ✅ | — |
| Rooms / floor / area (m²) | ✅ | — |
| Estate / property type | ✅ | — |
| Market (primary / secondary) | ✅ | — |
| City / address locality | ✅ | ✅ |
| Agency / private owner | ✅ | — |
| Direct Otodom URL | ✅ | ✅ |
| Images | ✅ | ✅ |
| LDP characteristics (enrich) | ✅* | — |
| Developer portfolio ads | — | ✅ |

\*With `enrichDetails: true` or detail URLs via `detailUrls`.

Every listing row includes `contentDepth=guest_preview` (public / guest-visible content — phone unlock / reCAPTCHA CTAs are out of scope).

---

### Why scrape Otodom?

[Otodom](https://www.otodom.pl/) is one of Poland’s largest real-estate portals (OLX Group), covering sale, rent, investments, and developers nationwide. Teams scrape Otodom to:

- Build custom Poland property databases for research or lead gen
- Track sale / rent inventory by city, voivodeship, and property type
- Separate **primary** vs **secondary** market supply
- Monitor **investment** (`inwestycja`) and developer portfolios
- Feed CRM workflows, dashboards, or enrichment pipelines with structured listing URLs and PLN prices

---

### More Actors like this

Need another property portal or a different vertical? Use a **dedicated Actor** below for structured fields. Stay on **Otodom Scraper** for Polish Otodom sale and rent listings.

#### Similar real estate scrapers
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [Funda Scraper](https://apify.com/lentic_clockss/funda-scraper)
- [ImmoScout24 Scraper](https://apify.com/lentic_clockss/immobilienscout24-scraper)
- [Immobiliare.it Scraper](https://apify.com/lentic_clockss/immobiliare-property-scraper)
- [SeLoger Scraper](https://apify.com/lentic_clockss/seloger-property-scraper)
- [FINN.no Scraper](https://apify.com/lentic_clockss/finn-scraper)
- [Daft.ie Scraper](https://apify.com/lentic_clockss/daft-property-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Realtor.ca Scraper](https://apify.com/lentic_clockss/realtor-ca-scraper)

#### Prefer another specialized scraper?
If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

**Jobs & Freelance**
- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)

**E-commerce**
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)

**Travel & Stays**
- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

**Social & Content**
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)

**Ads Intelligence**
- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

**Local & Maps**
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

#### General tools
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ See the full catalog in [Related Actors](#related-actors) below, or browse [apify.com/lentic_clockss](https://apify.com/lentic_clockss).

---

### How to scrape Otodom (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [Otodom Scraper](https://apify.com/lentic_clockss/otodom-scraper)
3. Choose a **channel** (`sale`, `rent`, or `developer`)
4. For listings: enter a **location** (e.g. `warszawa`, `mazowieckie`, or `national`); for developers: enter **developerUrl**
5. Optionally set **market**, `propertyType`, filters, `maxResults`, and `enrichDetails`
6. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

Start with `maxResults: 5–10` to verify the query, then scale up.

---

### How much does it cost to scrape Otodom?

This Actor uses **pay-per-event** pricing. You are charged for:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$3.00 / 1,000** results (**$0.003** each) |

**Platform usage costs are included** — you do **not** pay separate Apify compute/proxy usage for this Actor on top of the event prices above.

#### Example cost estimates

| Results collected | Approx. event cost* |
| --- | ---: |
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |

\*Assumes one Actor start at default memory billing for start events, plus `$0.003` per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one).

Free Apify trial credit can cover a small test run — try `maxResults: 5` first.

---

### Input

Open the **Input** tab for the full form. Common fields:

| Field | Description |
| --- | --- |
| `channel` | `sale` / `rent` / `developer` |
| `location` | City (`warszawa`), voivodeship (`mazowieckie`), full path, or `national` / `polska` |
| `locations` | Extra geos; results merged and deduped |
| `propertyType` | `mieszkanie`, `dom`, `dzialka`, `lokal`, `pokoj`, `garaz`, `inwestycja`, … |
| `market` | `ALL` / `PRIMARY` / `SECONDARY` |
| `minPrice` / `maxPrice` / `minArea` / `maxArea` | SERP filters |
| `rooms` / `privateOnly` / `sortBy` | Extra filters |
| `developerUrl` / `developerId` / `developerSlug` | Required for `channel=developer` |
| `detailUrls` | Listing (`/pl/oferta/...`) or developer URLs |
| `maxResults` | Cap on Dataset rows (1–500) |
| `maxPages` | `?page=N` pagination (~36 cards/page on SERP) |
| `enrichDetails` | Fetch LDP and merge characteristics / JSON-LD |

#### Example: Warsaw apartments for sale (primary market)

```json
{
  "location": "warszawa",
  "channel": "sale",
  "propertyType": "mieszkanie",
  "market": "PRIMARY",
  "maxResults": 20,
  "maxPages": 1
}
````

#### Example: multi-city rent listings

```json
{
  "locations": ["warszawa", "krakow", "wroclaw"],
  "channel": "rent",
  "propertyType": "mieszkanie",
  "maxResults": 50,
  "maxPages": 2
}
```

#### Example: investment listings

```json
{
  "location": "warszawa",
  "channel": "sale",
  "propertyType": "inwestycja",
  "maxResults": 30,
  "maxPages": 1
}
```

#### Example: developer portfolio

```json
{
  "channel": "developer",
  "developerUrl": "https://www.otodom.pl/pl/firmy/deweloperzy/develia-ID10556359",
  "maxResults": 20
}
```

#### Example: enrich listing details

```json
{
  "location": "warszawa",
  "channel": "sale",
  "maxResults": 10,
  "enrichDetails": true
}
```

***

### Output sample

Each Dataset item includes preview fields plus listing attributes:

```json
{
  "name": "2-pokojowe mieszkanie z balkonem",
  "type": "listing",
  "status": "For Sale",
  "country": "PL",
  "authority": "otodom.pl",
  "listingId": "68241709",
  "listingIdToken": "ID4CkMJ",
  "channel": "sale",
  "market": "PRIMARY",
  "estate": "FLAT",
  "price": 610000,
  "priceDisplay": "610000 PLN",
  "currency": "PLN",
  "rooms": 2,
  "sqm": 48.5,
  "city": "Warszawa",
  "agencyName": "Example Agency",
  "listingUrl": "https://www.otodom.pl/pl/oferta/....-ID4CkMJ",
  "imageUrl": "https://ireland.apollo.olxcdn.com/...",
  "contentDepth": "guest_preview"
}
```

Diagnostics are stored in the key-value store as `INPUT_ECHO`, `RUN_SUMMARY`, and `ERROR_SUMMARY`.

***

### Tips for better Otodom scrapes

- Prefer **city slugs** or full Otodom location paths when you need a district (e.g. `mazowieckie/warszawa/warszawa/warszawa/bemowo`)
- Use `market=PRIMARY` for new-build / primary market inventory
- Use `propertyType=inwestycja` for investment-style ads
- Keep `enrichDetails` off for faster SERP-only runs; turn it on when you need LDP characteristics
- Developer SSR pages return a short first page of portfolio ads — raise expectations with `maxResults` carefully

***

### Integrations and API

- [Apify API](https://docs.apify.com/api/v2) — start runs and fetch Dataset items programmatically
- [Apify MCP](https://mcp.apify.com/) — use this Actor from AI agents
- Make / Zapier / n8n — schedule exports into Sheets, CRMs, or warehouses
- Python / Node.js clients — `apify-client` for batch pipelines

***

### FAQ

#### Is this an official Otodom API?

No. This Actor scrapes **public guest-visible** Otodom pages and normalizes them into Dataset rows. It is designed as a practical Otodom data / API alternative for research and automation.

#### Does it unlock phone numbers?

No. Phone unlock / reCAPTCHA contact CTAs are out of scope. Rows are marked `contentDepth=guest_preview`.

#### Which locations work?

Known cities (e.g. Warszawa, Kraków), all 16 voivodeships, full Otodom location paths, `national` / `polska`, and multi-geo via `locations[]`.

#### Can I scrape developers?

Yes — set `channel=developer` and provide `developerUrl` (or slug/id). You get one developer profile row plus portfolio listing rows from the SSR payload.

***

### Legal and ethical use

Scraping public web pages may be subject to Otodom’s terms, robots rules, and local law. Use this Actor responsibly, respect rate limits, and only process data you have a lawful basis to use. You are responsible for how you use the output.

***

### Support

Questions or feature requests? Open an issue on the Actor page or contact the developer via Apify.

***

### Related Actors

All **77** public Actors from \[[lentic\_clockss](https://apify.com/lentic_clockss)]. Click a name to open the Store detail page.

#### Jobs & Freelance

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Freelancer.com Scraper](https://apify.com/lentic_clockss/freelancer-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Himalayas Jobs Scraper](https://apify.com/lentic_clockss/himalayas-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Jobicy Remote Jobs Scraper](https://apify.com/lentic_clockss/jobicy-remote-jobs-scraper)
- [RemoteOK Jobs Scraper](https://apify.com/lentic_clockss/remoteok-all-jobs-scraper)
- [SEEK Jobs Scraper](https://apify.com/lentic_clockss/seek-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)

#### Real Estate

- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [99.co Scraper](https://apify.com/lentic_clockss/ninetynine-co-sg-scraper)
- [Realtor.com Agents Scraper](https://apify.com/lentic_clockss/realtor-com-agents-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Bayut Scraper](https://apify.com/lentic_clockss/bayut-uae-scraper)
- [Craigslist Housing Scraper](https://apify.com/lentic_clockss/craigslist-housing-scraper)
- [Daft.ie Scraper](https://apify.com/lentic_clockss/daft-property-scraper)
- [Dot Property Scraper](https://apify.com/lentic_clockss/dot-property-th-scraper)
- [FINN.no Scraper](https://apify.com/lentic_clockss/finn-scraper)
- [Funda Scraper](https://apify.com/lentic_clockss/funda-scraper)
- [Hepsiemlak Scraper](https://apify.com/lentic_clockss/hepsiemlak-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [Immobiliare.it Scraper](https://apify.com/lentic_clockss/immobiliare-property-scraper)
- [ImmoScout24 Scraper](https://apify.com/lentic_clockss/immobilienscout24-scraper)
- [Naver Land Scraper](https://apify.com/lentic_clockss/naver-land-scraper)
- [OpenSooq Scraper](https://apify.com/lentic_clockss/opensooq-real-estate-scraper)
- [Otodom Scraper](https://apify.com/lentic_clockss/otodom-scraper)
- [Property Finder Scraper](https://apify.com/lentic_clockss/property-finder-uae-scraper)
- [PropertyGuru Scraper](https://apify.com/lentic_clockss/propertyguru-sg-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Realtor.ca Scraper](https://apify.com/lentic_clockss/realtor-ca-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [SeLoger Scraper](https://apify.com/lentic_clockss/seloger-property-scraper)
- [SUUMO Scraper](https://apify.com/lentic_clockss/suumo-property-scraper)
- [Zillow Group Scraper](https://apify.com/lentic_clockss/zillow-group-scraper)

#### E-commerce

- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [E-commerce Scraper](https://apify.com/lentic_clockss/ecommerce-scraper)
- [1688 Global Product Search Scraper](https://apify.com/lentic_clockss/1688-global-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [ASOS Product Scraper](https://apify.com/lentic_clockss/asos-scraper)
- [Cdiscount Product Scraper](https://apify.com/lentic_clockss/cdiscount-scraper)
- [Costco Product Scraper](https://apify.com/lentic_clockss/costco-scraper)
- [Coupang Product Scraper](https://apify.com/lentic_clockss/coupang-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [Lazada Scraper](https://apify.com/lentic_clockss/lazada-ph-search-results-collector)
- [MercadoLibre Scraper](https://apify.com/lentic_clockss/mercadolibre-scraper)
- [Mercari Japan Scraper](https://apify.com/lentic_clockss/mercari-scraper)
- [Rakuten Japan Scraper](https://apify.com/lentic_clockss/rakuten-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)

#### Travel & Stays

- [Booking.com & Airbnb Scraper](https://apify.com/lentic_clockss/booking-airbnb-scraper)
- [Agoda Scraper](https://apify.com/lentic_clockss/agoda-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Despegar Scraper](https://apify.com/lentic_clockss/despegar-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [Traveloka Scraper](https://apify.com/lentic_clockss/traveloka-scraper)
- [Travelstart Flights Scraper](https://apify.com/lentic_clockss/travelstart-scraper)
- [Trip.com Scraper](https://apify.com/lentic_clockss/trip-com-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

#### Social & Content

- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [Hacker News Scraper](https://apify.com/lentic_clockss/hacker-news-scraper)

#### Ads Intelligence

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [Google Ads Transparency VN](https://apify.com/lentic_clockss/google-ads-transparency-center-vn)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

#### Local & Maps

- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

#### General Tools

- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ Browse the full profile: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

# Actor input Schema

## `location` (type: `string`):

City (warszawa), voivodeship (mazowieckie), full path, or national/polska.

## `locations` (type: `array`):

Additional geos; results merged and deduped with location.

## `channel` (type: `string`):

sale / rent listings, or developer entity page.

## `propertyType` (type: `string`):

Otodom estate path: mieszkanie, dom, inwestycja, …

## `market` (type: `string`):

ALL / PRIMARY (pierwotny) / SECONDARY (wtórny).

## `sortBy` (type: `string`):

DEFAULT, PRICE, AREA, DATE.

## `sortDirection` (type: `string`):

ASC or DESC when sortBy is set.

## `minPrice` (type: `integer`):

Minimum listing price filter (PLN).

## `maxPrice` (type: `integer`):

Maximum listing price filter (PLN).

## `minArea` (type: `number`):

Minimum living area in square meters.

## `maxArea` (type: `number`):

Maximum living area in square meters.

## `rooms` (type: `string`):

1–6 or ONE–SIX (client-side filter if site query ignored).

## `privateOnly` (type: `boolean`):

When true, keep private-owner listings (ownerTypeSingleSelect=PRIVATE).

## `developerUrl` (type: `string`):

Required for channel=developer unless developerSlug/Id set. e.g. /pl/firmy/deweloperzy/develia-ID10556359

## `developerId` (type: `string`):

Numeric developer id (used with developerSlug).

## `developerSlug` (type: `string`):

Developer URL slug without ID suffix, or slug-IDnnnn form.

## `maxResults` (type: `integer`):

Maximum rows to return.

## `maxPages` (type: `integer`):

Maximum SERP pages to fetch (~36 listings per page).

## `detailUrls` (type: `array`):

Otodom /pl/oferta/… or developer URLs.

## `enrichDetails` (type: `boolean`):

Fetch LDP pageProps.ad (+ JSON-LD fill) for each listing.

## `includeRaw` (type: `boolean`):

Attach raw SSR payloads under raw.

## `workerBaseUrl` (type: `string`):

Optional override for Cloud Run worker HTTPS base URL.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Actor-run proxy passwords are not forwarded to Cloud Run.

## Actor input object example

```json
{
  "location": "warszawa",
  "locations": [],
  "channel": "sale",
  "propertyType": "mieszkanie",
  "market": "ALL",
  "sortBy": "",
  "sortDirection": "",
  "rooms": "",
  "privateOnly": false,
  "developerUrl": "",
  "developerId": "",
  "developerSlug": "",
  "maxResults": 36,
  "maxPages": 1,
  "detailUrls": [],
  "enrichDetails": false,
  "includeRaw": false,
  "workerBaseUrl": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Normalized Otodom listing records.

## `runSummary` (type: `string`):

Run outcome summary.

## `inputEcho` (type: `string`):

Normalized non-secret input.

## `errorSummary` (type: `string`):

Structured failure details.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": "warszawa",
    "locations": [],
    "channel": "sale",
    "propertyType": "mieszkanie",
    "market": "ALL",
    "sortBy": "",
    "sortDirection": "",
    "rooms": "",
    "privateOnly": false,
    "developerUrl": "",
    "developerId": "",
    "developerSlug": "",
    "maxResults": 36,
    "maxPages": 1,
    "detailUrls": [],
    "enrichDetails": false,
    "includeRaw": false,
    "workerBaseUrl": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/otodom-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": "warszawa",
    "locations": [],
    "channel": "sale",
    "propertyType": "mieszkanie",
    "market": "ALL",
    "sortBy": "",
    "sortDirection": "",
    "rooms": "",
    "privateOnly": False,
    "developerUrl": "",
    "developerId": "",
    "developerSlug": "",
    "maxResults": 36,
    "maxPages": 1,
    "detailUrls": [],
    "enrichDetails": False,
    "includeRaw": False,
    "workerBaseUrl": "",
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/otodom-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "warszawa",
  "locations": [],
  "channel": "sale",
  "propertyType": "mieszkanie",
  "market": "ALL",
  "sortBy": "",
  "sortDirection": "",
  "rooms": "",
  "privateOnly": false,
  "developerUrl": "",
  "developerId": "",
  "developerSlug": "",
  "maxResults": 36,
  "maxPages": 1,
  "detailUrls": [],
  "enrichDetails": false,
  "includeRaw": false,
  "workerBaseUrl": ""
}' |
apify call lentic_clockss/otodom-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lentic_clockss/otodom-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Otodom Scraper | Poland Real Estate Sale Rent",
        "description": "Scrape Otodom.pl Poland sale, rent & developer listings. Extract prices (PLN), rooms, size, agencies & URLs — Otodom API alternative.",
        "version": "0.1",
        "x-build-id": "6mhLHgAwWw60mXKxT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~otodom-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-otodom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lentic_clockss~otodom-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-otodom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lentic_clockss~otodom-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-otodom-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "location": {
                        "title": "City / location",
                        "maxLength": 240,
                        "type": "string",
                        "description": "City (warszawa), voivodeship (mazowieckie), full path, or national/polska.",
                        "default": "warszawa"
                    },
                    "locations": {
                        "title": "Extra locations",
                        "type": "array",
                        "description": "Additional geos; results merged and deduped with location.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "channel": {
                        "title": "Channel",
                        "enum": [
                            "sale",
                            "rent",
                            "developer"
                        ],
                        "type": "string",
                        "description": "sale / rent listings, or developer entity page.",
                        "default": "sale"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "mieszkanie",
                            "dom",
                            "dzialka",
                            "lokal",
                            "pokoj",
                            "garaz",
                            "inwestycja"
                        ],
                        "type": "string",
                        "description": "Otodom estate path: mieszkanie, dom, inwestycja, …",
                        "default": "mieszkanie"
                    },
                    "market": {
                        "title": "Market",
                        "enum": [
                            "ALL",
                            "PRIMARY",
                            "SECONDARY"
                        ],
                        "type": "string",
                        "description": "ALL / PRIMARY (pierwotny) / SECONDARY (wtórny).",
                        "default": "ALL"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "",
                            "DEFAULT",
                            "PRICE",
                            "AREA",
                            "DATE"
                        ],
                        "type": "string",
                        "description": "DEFAULT, PRICE, AREA, DATE.",
                        "default": ""
                    },
                    "sortDirection": {
                        "title": "Sort direction",
                        "enum": [
                            "",
                            "ASC",
                            "DESC"
                        ],
                        "type": "string",
                        "description": "ASC or DESC when sortBy is set.",
                        "default": ""
                    },
                    "minPrice": {
                        "title": "Min price (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum listing price filter (PLN)."
                    },
                    "maxPrice": {
                        "title": "Max price (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum listing price filter (PLN)."
                    },
                    "minArea": {
                        "title": "Min area (m²)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Minimum living area in square meters."
                    },
                    "maxArea": {
                        "title": "Max area (m²)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Maximum living area in square meters."
                    },
                    "rooms": {
                        "title": "Rooms",
                        "type": "string",
                        "description": "1–6 or ONE–SIX (client-side filter if site query ignored).",
                        "default": ""
                    },
                    "privateOnly": {
                        "title": "Private owners only",
                        "type": "boolean",
                        "description": "When true, keep private-owner listings (ownerTypeSingleSelect=PRIVATE).",
                        "default": false
                    },
                    "developerUrl": {
                        "title": "Developer URL",
                        "type": "string",
                        "description": "Required for channel=developer unless developerSlug/Id set. e.g. /pl/firmy/deweloperzy/develia-ID10556359",
                        "default": ""
                    },
                    "developerId": {
                        "title": "Developer ID",
                        "type": "string",
                        "description": "Numeric developer id (used with developerSlug).",
                        "default": ""
                    },
                    "developerSlug": {
                        "title": "Developer slug",
                        "type": "string",
                        "description": "Developer URL slug without ID suffix, or slug-IDnnnn form.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum rows to return.",
                        "default": 36
                    },
                    "maxPages": {
                        "title": "Max pages",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum SERP pages to fetch (~36 listings per page).",
                        "default": 1
                    },
                    "detailUrls": {
                        "title": "Detail URLs",
                        "type": "array",
                        "description": "Otodom /pl/oferta/… or developer URLs.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "enrichDetails": {
                        "title": "Enrich details",
                        "type": "boolean",
                        "description": "Fetch LDP pageProps.ad (+ JSON-LD fill) for each listing.",
                        "default": false
                    },
                    "includeRaw": {
                        "title": "Include raw",
                        "type": "boolean",
                        "description": "Attach raw SSR payloads under raw.",
                        "default": false
                    },
                    "workerBaseUrl": {
                        "title": "Worker base URL",
                        "type": "string",
                        "description": "Optional override for Cloud Run worker HTTPS base URL.",
                        "default": ""
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Actor-run proxy passwords are not forwarded to Cloud Run.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
