# Changelog of Otodom.pl Property Listings Scraper (Poland) (`nice_dev/otodom-real-estate-scraper`) Actor

- **URL**: https://apify.com/nice_dev/otodom-real-estate-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/nice_dev/otodom-real-estate-scraper.md

## Changelog

### 1.0 — October 2026: zone market statistics as an option

- **Add zone market statistics** (`"includeMarketStats": true`, off by default): the run also writes a `MARKET_STATS` record to its key-value store (linked in the Output tab) with, for each zone — city, district, property type, sale or rent — the median price per m² and its quartiles, the median price and area, the number of listings and the 5 cheapest listings per m² with their gap to the median. Worked out from the listings the run delivers: no page is read, nothing is added to the dataset.
- Charged per zone delivered as **Zone market statistics**: up to 20 zones a run, the biggest first, a zone needs 5 listings with a price per m², and a zone the run's maximum cost cannot pay is not delivered.

### 1.0 — October 2026: price changes as an option

- **Report price changes** (`"includePriceChanges": true`, off by default, needs **Only new listings**): a listing you already have comes back, as a whole row, when its price moved — with four new fields, `previousPrice`, `priceChange`, `priceChangePct` and `priceChangedAt` (`null` on every other row, 111 fields in all). Charged as **Price change** on top of the listing; a listing whose price did not move is still skipped and costs nothing.
- The memory keeps the last price of every listing: the first run after you tick it learns the prices and reports no change. A hidden price is never a change.
- The search is read to its end (an old listing can change its price), so a run takes longer than **Only new listings** alone. Each listing already known and re-checked for a price change past the point where **Only new listings** alone would stop (72 known listings in a row) is charged a **Price check**; the first 72, new listings and changed listings are not.

### 1.0 — October 2026: phone numbers as an option

- **Phone numbers** (`phones`) are now an option: tick **Include phone numbers** (`"includePhones": true`, off by default). It is charged as **Phone number found**, once per listing delivered with at least one number; a listing without a number costs nothing extra, and the price of **Listing details** does not change.
- Left off, `phones` is an empty list on every listing (the contact's name and photo are unchanged). The numbers come from the listing page: tick **Extract details** as well — Otodom rarely prints a number on its results page.
- **Include private sellers' name and phone** keeps its role: a private seller hidden by it has no number, so nothing is charged for it.

### 1.0 — September 2026: listing details priced on their own

- **Listing details** (the listing page: GPS coordinates, full description, build year, building details, features, floor plans, every photo, the seller's contact name and phone numbers) are now a separate **Listing details** event, charged on top of the listing.
- **Extract details is off by default**: a run you do not touch pays for the listing alone and returns the results-card fields (price, price per m², area, rooms, floor, address, city, main photo, seller type and agency, dates, tags), 2-3× faster.
- **To get the listing page too**, tick **Extract details** (`"extractDetails": true`): the same 107 fields as before, charged as the listing plus its details.
- A listing URL pasted in **Start URLs** is always read on its page, so it is charged with its details.
- Details are charged only once the listing is saved in your dataset, and the run's maximum cost is respected: a run stops before it would save a listing whose details it can no longer pay for.
