# Otodom.pl Property Scraper — Poland Sale & Rent (`yadroo/otodom-pl`) Actor

Otodom.pl scraper for analysts, agents and AI agents: flats, studios, houses, plots, commercial, rooms and new developments for sale or rent anywhere in Poland.

- **URL**: https://apify.com/yadroo/otodom-pl.md
- **Developed by:** [Samat Makatov](https://apify.com/yadroo) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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.pl Scraper — Poland Real Estate for Sale & Rent

Structured listings from **otodom.pl**, Poland's largest property portal (OLX Group): flats, studios, houses, plots, commercial premises, warehouses, garages, rooms and new-build developments, for sale or rent, in any city, district or voivodeship. Every search supports otodom's own filters (price, zł/m², area, rooms, primary/secondary market, private/agency/developer, build year, floor, building type and material, extras…). Each item has price per m², advertiser type and publish dates. `detail: true` adds GPS coordinates, full description, building data and business contact details.

Reads the page's embedded JSON. No browser, no proxies, no API key.

### Use cases

- **Lead generation for agencies**: `ownerType: "PRIVATE"` + your city + `sinceHours: 24` on a daily schedule gives owner-listed flats that no agency has picked up yet.
- **Price per m² benchmarks**: pull 1 000 flats in Warszawa or Kraków, group by `district`, `market`, `buildYear` and compute the median `pricePerM2`.
- **Rental yield screening**: run the same city and rooms once with `transaction: "sprzedaz"` and once with `"wynajem"`, then divide rent by price per district.
- **Developer & new-build intelligence**: `market: "PRIMARY"` + `ownerType: "DEVELOPER"` shows which developers sell where, at what zł/m²; `estate: "inwestycja"` lists whole projects.
- **Commercial property sourcing**: `estate: "lokal"` or `"haleimagazyny"` with area ranges, for investors and franchise expansion.
- **Valuation & due diligence**: comparable listings with coordinates (`detail: true`) around an address using `district` + `distanceRadius`.

### Input

All fields are optional. Filters that don't apply to the estate type are dropped with a warning in the log.

| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
| `transaction` | string | `sprzedaz` | `sprzedaz` (sale), `wynajem` (rent) |
| `estate` | string | `mieszkanie` | `mieszkanie`, `kawalerka`, `dom`, `inwestycja` (sale only), `pokoj` (rent only), `dzialka`, `lokal`, `haleimagazyny`, `garaz` |
| `location` | string | `mazowieckie/warszawa/warszawa/warszawa` | City name (see **Reference**), voivodeship slug, `cala-polska`, or a raw otodom location path |
| `district` | string | – | District of the city, e.g. `mokotow`, `praga-poludnie`, `podgorze` |
| `distanceRadius` | integer | – | `0`, `5`, `10`, `15`, `25`, `50`, `75` km around the location |
| `priceMin` / `priceMax` | integer | – | zł (monthly rent for `wynajem`) |
| `pricePerMeterMin` / `pricePerMeterMax` | integer | – | zł/m² |
| `areaMin` / `areaMax` | integer | – | m² |
| `terrainAreaMin` / `terrainAreaMax` | integer | – | m², `dom` and `dzialka` |
| `roomsNumber` | string\[] | `[]` | `ONE`, `TWO`, `THREE`, `FOUR`, `FIVE`, `SIX_OR_MORE`. Numbers (`"2"`, `"6+"`) and the v0.1 comma string (`"TWO,THREE"`) also work. |
| `market` | string | `ALL` | `ALL`, `PRIMARY`, `SECONDARY` |
| `ownerType` | string | `ALL` | `ALL`, `PRIVATE`, `AGENCY`, `DEVELOPER` |
| `buildYearMin` / `buildYearMax` | integer | – | |
| `floors` | string\[] | `[]` | `CELLAR`, `GROUND`, `FIRST` … `TENTH`, `ABOVE_TENTH`, `GARRET` (numbers `0`–`10` work too) |
| `floorsNumberMin` / `floorsNumberMax` | integer | – | Floors in the building |
| `buildingType` | string\[] | `[]` | `BLOCK`, `TENEMENT`, `HOUSE`, `INFILL`, `RIBBON`, `APARTMENT`, `LOFT` |
| `buildingMaterial` | string\[] | `[]` | `BRICK`, `WOOD`, `BREEZEBLOCK`, `HYDROTON`, `CONCRETE_PLATE`, `CONCRETE`, `SILIKAT`, `CELLULAR_CONCRETE`, `REINFORCED_CONCRETE`, `OTHER` |
| `extras` | string\[] | `[]` | `BALCONY`, `TERRACE`, `GARDEN`, `GARAGE`, `BASEMENT`, `LIFT`, `SEPARATE_KITCHEN`, `TWO_STOREY` |
| `keyword` | string | – | Text searched in the description |
| `hasPhotos` / `hasMovie` / `hasOpenDay` / `hasRemoteServices` | boolean | `false` | |
| `sort` | string | `relevance` | `relevance`, `newest`, `price_asc`, `price_desc`, `area_asc`, `area_desc` |
| `sinceHours` | integer | – | Ads added or refreshed in the last N hours (otodom day filter + exact client check) |
| `excludeInvestments` | boolean | `false` | Drop whole-project development tiles from flat searches |
| `maxItems` | integer | `50` | 1–5000, 72 per page |
| `maxPages` | integer | `30` | Safety cap |
| `detail` | boolean | `false` | Open each offer page (+1 request per listing) |
| `dedupe` | boolean | `true` | Drop repeated ids |
| `fields` | string\[] | `[]` | Output only these fields |
| `extraParams` | object | `{}` | Other otodom query parameters from a URL |

The actor verified each filter value against the live site (the result count changes). Values otodom silently ignores (`AIR_CONDITIONING`, `USABLE_ROOM`, `PETS`…) are dropped with a warning instead of producing a misleading "filtered" dataset.

### Reference

#### Voivodeships (`location`)

`dolnoslaskie`, `kujawsko--pomorskie`, `lubelskie`, `lubuskie`, `lodzkie`, `malopolskie`, `mazowieckie`, `opolskie`, `podkarpackie`, `podlaskie`, `pomorskie`, `slaskie`, `swietokrzyskie`, `warminsko--mazurskie`, `wielkopolskie`, `zachodniopomorskie`. Otodom writes a hyphen inside a name as a double hyphen (`--`).

#### Cities (`location`: the name, with or without Polish diacritics)

| City | otodom path |
|---|---|
| Warszawa | `mazowieckie/warszawa/warszawa/warszawa` |
| Kraków | `malopolskie/krakow/krakow/krakow` |
| Wrocław | `dolnoslaskie/wroclaw/wroclaw/wroclaw` |
| Łódź | `lodzkie/lodz/lodz/lodz` |
| Poznań | `wielkopolskie/poznan/poznan/poznan` |
| Gdańsk / Gdynia / Sopot | `pomorskie/gdansk/gdansk/gdansk`, `pomorskie/gdynia/gdynia/gdynia`, `pomorskie/sopot/sopot/sopot` |
| Szczecin | `zachodniopomorskie/szczecin/szczecin/szczecin` |
| Bydgoszcz / Toruń / Włocławek | `kujawsko--pomorskie/bydgoszcz/…`, `kujawsko--pomorskie/torun/…`, `kujawsko--pomorskie/wloclawek/…` |
| Lublin | `lubelskie/lublin/lublin/lublin` |
| Białystok | `podlaskie/bialystok/bialystok/bialystok` |
| Katowice, Gliwice, Sosnowiec, Bielsko-Biała, Częstochowa, Zabrze, Bytom, Tychy, Rybnik | `slaskie/<city>/<city>/<city>` (Bielsko-Biała → `bielsko--biala`) |
| Kielce | `swietokrzyskie/kielce/kielce/kielce` |
| Olsztyn, Elbląg | `warminsko--mazurskie/olsztyn/…`, `warminsko--mazurskie/elblag/…` |
| Opole | `opolskie/opole/opole/opole` |
| Zielona Góra, Gorzów Wielkopolski | `lubuskie/zielona-gora/…`, `lubuskie/gorzow-wielkopolski/…` |
| Rzeszów, Przemyśl | `podkarpackie/rzeszow/…`, `podkarpackie/przemysl/…` |
| Radom, Płock, Pruszków, Piaseczno | `mazowieckie/radom/…`, `mazowieckie/plock/…`, `mazowieckie/pruszkowski/pruszkow/pruszkow`, `mazowieckie/piaseczynski/piaseczno/piaseczno` |
| Tarnów, Nowy Sącz, Zakopane | `malopolskie/tarnow/…`, `malopolskie/nowy-sacz/…`, `malopolskie/tatrzanski/zakopane/zakopane` |
| Wałbrzych, Legnica, Jelenia Góra | `dolnoslaskie/walbrzych/…`, `dolnoslaskie/legnica/…`, `dolnoslaskie/jelenia-gora/…` |
| Kalisz | `wielkopolskie/kalisz/kalisz/kalisz` |
| Koszalin, Świnoujście | `zachodniopomorskie/koszalin/…`, `zachodniopomorskie/swinoujscie/…` |
| Słupsk | `pomorskie/slupsk/slupsk/slupsk` |
| Piotrków Trybunalski | `lodzkie/piotrkow-trybunalski/…` |

Any other town works as a raw path copied from an otodom URL (the part after `/pl/wyniki/sprzedaz/mieszkanie/`). A wrong path fails with a clear 404 error.

**Warsaw districts** (`district`): `bemowo`, `bialoleka`, `bielany`, `mokotow`, `ochota`, `praga-polnoc`, `praga-poludnie`, `rembertow`, `srodmiescie`, `targowek`, `ursus`, `ursynow`, `wawer`, `wesola`, `wilanow`, `wlochy`, `wola`, `zoliborz`.

#### Estate types

| Slug | Meaning | Sale | Rent |
|---|---|---|---|
| `mieszkanie` | Flats | ✓ | ✓ |
| `kawalerka` | Studio flats | ✓ | ✓ |
| `dom` | Houses | ✓ | ✓ |
| `inwestycja` | New-build development projects | ✓ | – |
| `pokoj` | Rooms | – | ✓ |
| `dzialka` | Plots | ✓ | ✓ |
| `lokal` | Commercial premises | ✓ | ✓ |
| `haleimagazyny` | Halls & warehouses | ✓ | ✓ |
| `garaz` | Garages | ✓ | ✓ |

### Examples

**Agency lead list: owner-listed flats in Kraków from the last 24 h**

```json
{ "location": "Kraków", "ownerType": "PRIVATE", "sinceHours": 24, "sort": "newest", "maxItems": 200 }
```

**Market report: 2–3 room resale flats in Warsaw Mokotów with building data**

```json
{ "location": "Warszawa", "district": "mokotow", "market": "SECONDARY", "roomsNumber": ["TWO", "THREE"], "excludeInvestments": true, "detail": true, "maxItems": 300 }
```

**Rental yield: flats for rent in Wrocław under 4 000 zł**

```json
{ "transaction": "wynajem", "location": "Wrocław", "priceMax": 4000, "areaMin": 35, "maxItems": 500, "fields": ["id", "price", "rentAdditional", "area", "rooms", "district", "url"] }
```

**Developer intelligence: primary-market flats in Gdańsk, cheapest per listing**

```json
{ "location": "Gdańsk", "market": "PRIMARY", "ownerType": "DEVELOPER", "sort": "price_asc", "maxItems": 500 }
```

**Warehouse sourcing: halls for rent around Poznań, 500+ m²**

```json
{ "transaction": "wynajem", "estate": "haleimagazyny", "location": "Poznań", "distanceRadius": 25, "areaMin": 500, "detail": true }
```

### Output

Example item (`location: "Kraków"`, `detail: true`, trimmed):

```json
{
  "id": "68412264",
  "url": "https://www.otodom.pl/pl/oferta/rodzinne-mieszkanie-z-widokiem-na-park-kobierzynska-ID4D39C",
  "title": "Rodzinne mieszkanie z widokiem na park. Kobierzyńska",
  "estate": "FLAT",
  "transaction": "SELL",
  "price": 950000,
  "currency": "PLN",
  "priceType": "total",
  "rentAdditional": 700,
  "pricePerM2": 12686.97,
  "area": 74.88,
  "rooms": 3,
  "floor": 2,
  "province": "małopolskie",
  "city": "Kraków",
  "district": "Dębniki",
  "residential": "Ruczaj",
  "advertiserType": "private",
  "isPrivateOwner": true,
  "isPromoted": true,
  "tags": ["BALCONY", "STORAGE_ROOM", "PARKING_SPOT", "SECURE_BUILDING"],
  "publishedAt": "2026-09-12T20:37:11.000Z",
  "firstPublishedAt": "2026-09-12T20:34:03.000Z",
  "imagesCount": 11,
  "searchTotal": 13,
  "fetchedAt": "2026-09-13T08:34:20.669Z",
  "descriptionFull": "-- Bez prowizji od kupującego --\nSprzedam przestronne mieszkanie…",
  "market": "secondary",
  "latitude": 50.015842,
  "longitude": 19.903831,
  "buildYear": 2006,
  "buildingFloors": 3,
  "buildingType": "block",
  "heating": "gas",
  "windows": "plastic",
  "extras": ["balcony", "usable_room", "garage"],
  "equipment": ["furniture", "washing_machine", "dishwasher"],
  "freeFrom": "2026-10-01",
  "ownerName": "Bogna Smug",
  "ownerPhones": [],
  "detailFetched": true
}
```

| Field | Description |
|---|---|
| `id`, `url`, `title` | otodom ad id (stable), offer URL, title |
| `estate`, `transaction` | `FLAT`, `HOUSE`, `INVESTMENT`, `TERRAIN`, … / `SELL`, `RENT` |
| `price`, `currency`, `priceType` | Total price (sale) or monthly rent (rent); `on_request` when hidden |
| `rentAdditional` | Monthly administrative fee (czynsz) in zł, if given |
| `pricePerM2`, `priceFromPerM2` | From otodom, or computed as price / area; "from" price for developments |
| `area`, `terrainArea`, `rooms`, `roomsCode`, `floor`, `floorCode` | Size and layout (`floor`: -1 cellar, 0 ground, 11 = above 10) |
| `province`, `city`, `district`, `residential`, `street`, `locationPath` | Location |
| `advertiserType`, `isPrivateOwner`, `agencyName`, `agencyId`, `agencyUrl` | `private` / `agency` / `developer` |
| `developmentId`, `developmentTitle`, `developmentUrl` | Parent new-build project |
| `isPromoted`, `isExclusiveOffer`, `hidePrice`, `tags` | |
| `publishedAt`, `firstPublishedAt`, `pushedUpAt` | Last added/refreshed, first appearance, paid bump (ISO UTC) |
| `shortDescription`, `image`, `imagesCount`, `searchTotal`, `searchUrl`, `fetchedAt` | |
| `descriptionFull`, `market`, `latitude`, `longitude`, `buildYear`, `buildingFloors`, `buildingType`, `buildingMaterial`, `constructionStatus`, `ownership`, `heating`, `windows`, `extras`, `equipment`, `security`, `media`, `deposit`, `freeFrom`, `ownerName`, `ownerAddress`, `ownerPhones`, `agencyUrl`, `status`, `createdAt`, `modifiedAt`, `photos`, `characteristics`, `detailFetched`, `detailError` | `detail: true` only. Phones and address are included only for agencies and developers, never for private owners. |

### Use it from code / agents

**Apify API (curl)**

```bash
curl -X POST "https://api.apify.com/v2/acts/yadroo~otodom-pl/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"location":"Gdańsk","ownerType":"PRIVATE","sinceHours":24}'
```

**JavaScript (`apify-client`)**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/otodom-pl').call({ location: 'Warszawa', district: 'wola', market: 'PRIMARY', maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python (`apify-client`)**

```python
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/otodom-pl").call(run_input={"transaction": "wynajem", "location": "Kraków", "priceMax": 3500})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

**AI agents (MCP)**: connect `https://mcp.apify.com?actors=yadroo/otodom-pl` to Claude, Cursor or any MCP client. The input schema is written for agents: every enum has readable titles and every filter explains its unit.

### Pricing

Pay per event: **$0.005 per run start + $0.002 per listing** in the dataset.

- 50 listings (default): $0.105
- 1 000-listing city snapshot: $2.005
- Daily alert returning about 30 new owner listings: about $0.065 per day

`detail: true` doesn't change the price. It is slower, about 1.2 s per listing.

### Limits & FAQ

- **Speed**: 72 listings per search page, about 1 request per second. 1 000 listings take about 20 s without detail pages.
- **Promoted and development tiles**: otodom mixes promoted ads and `INVESTMENT` tiles into flat searches. Dedupe removes repeats; `excludeInvestments` removes project tiles.
- **Dates**: `publishedAt` is when the ad was last added or refreshed (this is what otodom's "added in the last N days" filter uses). For truly new ads, compare `firstPublishedAt`.
- **Blocks & errors**: 429/5xx are retried with backoff. A bot challenge on a search page fails the run with a clear message. If only offer pages get blocked, the run keeps list data and marks items with `detailError`.
- **Personal data**: phone numbers and addresses of private owners are never collected.
- **Roadmap**: price-change tracking between runs, a developer-project mode (units per `inwestycja`).

***

Made by **Yadroo**. Sibling actors: [Willhaben.at (Austria)](https://apify.com/yadroo/willhaben-at) · [Kleinanzeigen.de (Germany)](https://apify.com/yadroo/kleinanzeigen-de) · [Rightmove UK](https://apify.com/yadroo/rightmove-uk) · [Krisha.kz](https://apify.com/yadroo/krisha-kz) · [Marktplaats.nl](https://apify.com/yadroo/marktplaats-nl) · [AutoScout24 cars](https://apify.com/yadroo/autoscout24-cars)

# Actor input Schema

## `transaction` (type: `string`):

sprzedaz = for sale, wynajem = for rent (monthly).

## `estate` (type: `string`):

otodom estate slug. pokoj exists only for rent, inwestycja (new development projects) only for sale.

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

A city name (Warszawa, Kraków, Wrocław, Łódź, Poznań, Gdańsk, Gdynia, Szczecin, Katowice, Lublin, Białystok… — 47 cities built in, diacritics optional), a voivodeship (mazowieckie, malopolskie, slaskie…), "cala-polska" for all Poland, or any raw otodom location path copied from a URL (e.g. mazowieckie/warszawa/warszawa/warszawa/mokotow). Full list: README → Reference.

## `district` (type: `string`):

Optional district of the city, e.g. mokotow, srodmiescie, praga-poludnie (Warsaw), stare-miasto, podgorze (Kraków). Appended to the city path.

## `distanceRadius` (type: `integer`):

Extend the search around the location by N km. otodom accepts 0, 5, 10, 15, 25, 50 or 75.

## `priceMin` (type: `integer`):

Total price (sale) or monthly rent (rent).

## `priceMax` (type: `integer`):

Total price (sale) or monthly rent (rent).

## `pricePerMeterMin` (type: `integer`):

No description

## `pricePerMeterMax` (type: `integer`):

No description

## `areaMin` (type: `integer`):

No description

## `areaMax` (type: `integer`):

No description

## `terrainAreaMin` (type: `integer`):

Houses and plots only.

## `terrainAreaMax` (type: `integer`):

Houses and plots only.

## `roomsNumber` (type: `array`):

Room counts to include. Numbers ("2", "6+") and a comma-separated string ("TWO,THREE", v0.1 format) are accepted via API too.

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

Primary vs secondary market (flats and houses).

## `ownerType` (type: `string`):

Who posted the ad.

## `buildYearMin` (type: `integer`):

No description

## `buildYearMax` (type: `integer`):

No description

## `floors` (type: `array`):

Floors to include.

## `floorsNumberMin` (type: `integer`):

Number of floors in the building.

## `floorsNumberMax` (type: `integer`):

No description

## `buildingType` (type: `array`):

No description

## `buildingMaterial` (type: `array`):

No description

## `extras` (type: `array`):

All selected must be present.

## `keyword` (type: `string`):

Free text searched in the ad description, e.g. "metro", "widok", "pompa ciepła".

## `hasPhotos` (type: `boolean`):

No description

## `hasMovie` (type: `boolean`):

No description

## `hasOpenDay` (type: `boolean`):

No description

## `hasRemoteServices` (type: `boolean`):

No description

## `sort` (type: `string`):

Sort order. otodom offers no price-per-m² sort; sort the dataset by pricePerM2 instead.

## `sinceHours` (type: `integer`):

Only ads added/refreshed in the last N hours. Sent to otodom as its day filter (1, 2, 3, 7, 14, 30 days) and re-checked on the exact time. firstPublishedAt tells you when the ad first appeared.

## `excludeInvestments` (type: `boolean`):

Flat searches also return INVESTMENT tiles (whole new-build projects, usually without price or area). Enable to keep only individual units.

## `maxItems` (type: `integer`):

Stop after this many listings (72 per page).

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

Safety cap on search pages.

## `detail` (type: `boolean`):

+1 request per listing: full description, GPS coordinates, market (primary/secondary), build year, building floors/type/material, heating, windows, ownership, construction status, extras, equipment, security, media, deposit, extra rent, available-from date, advertiser name, all photos. Phone/address only for agencies and developers. If otodom blocks offer pages the run keeps list data and marks items with detailError.

## `dedupe` (type: `boolean`):

Drop repeated ids across pages.

## `fields` (type: `array`):

Keep only these fields per item, e.g. \["id","price","pricePerM2","area","rooms","district","url"]. Empty = all.

## `extraParams` (type: `object`):

Other otodom query parameters copied from a search URL, e.g. {"isExclusiveOffer": true}.

## Actor input object example

```json
{
  "transaction": "sprzedaz",
  "estate": "mieszkanie",
  "location": "mazowieckie/warszawa/warszawa/warszawa",
  "roomsNumber": [],
  "market": "ALL",
  "ownerType": "ALL",
  "floors": [],
  "buildingType": [],
  "buildingMaterial": [],
  "extras": [],
  "hasPhotos": false,
  "hasMovie": false,
  "hasOpenDay": false,
  "hasRemoteServices": false,
  "sort": "relevance",
  "excludeInvestments": false,
  "maxItems": 50,
  "maxPages": 30,
  "detail": false,
  "dedupe": true,
  "fields": [],
  "extraParams": {}
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `overview` (type: `string`):

No description

# 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 = {
    "roomsNumber": [],
    "floors": [],
    "buildingType": [],
    "buildingMaterial": [],
    "extras": [],
    "fields": [],
    "extraParams": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("yadroo/otodom-pl").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 = {
    "roomsNumber": [],
    "floors": [],
    "buildingType": [],
    "buildingMaterial": [],
    "extras": [],
    "fields": [],
    "extraParams": {},
}

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

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

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

```

## CLI example

```bash
echo '{
  "roomsNumber": [],
  "floors": [],
  "buildingType": [],
  "buildingMaterial": [],
  "extras": [],
  "fields": [],
  "extraParams": {}
}' |
apify call yadroo/otodom-pl --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yadroo/otodom-pl"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/47pkb5aSb7FFpDSeo/builds/zdT7TwLgJnLFDXtAJ/openapi.json
