# Sreality.cz Scraper — Czech Real Estate Data Extractor (`logiover/sreality-cz-scraper-czech-real-estate-data`) Actor

Scrape real estate listings from Sreality.cz — Czech Republic's #1 property portal. Extract apartments, houses, land and commercial properties by region, price (CZK), area and subtype. Direct JSON API access (no browser): price, m², GPS, locality, agency, image gallery and exclusivity flags per ad.

- **URL**: https://apify.com/logiover/sreality-cz-scraper-czech-real-estate-data.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Sreality.cz Real Estate Scraper

Extract property listings from **[sreality.cz](https://www.sreality.cz)** — Czech Republic's #1 real estate portal (Seznam.cz). Scrape apartments, houses, land, commercial space and other property categories by region, transaction type (sale / rent / auction), subtype, price (CZK), surface area and land area.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com)
[![Direct API](https://img.shields.io/badge/Engine-Direct%20JSON%20API-brightgreen)]()

---

### How It Works

Sreality exposes a public, undocumented JSON API at `/api/cs/v2/estates`. The actor fetches it directly via `got-scraping`, paginates by `page` + `per_page`, and maps the embedded `estates[]` array into flat records. **No HTML, no browser, no cheerio** — purely structured JSON in/out.

GET https://www.sreality.cz/api/cs/v2/estates
?category_main_cb={1=apt|2=house|3=land|4=commercial|5=other}
&category_type_cb={1=sale|2=rent|3=auction}
&category_sub_cb={pipe|sep|sub|codes}
&locality_country_id=10001
&locality_region_id={1..14}
&czk_price_from=&czk_price_to=
&usable_area_from=&usable_area_to=
&estate_area_from=&estate_area_to=
&per_page=60&page={N}&sort={0|1|2}

Sreality's API does not deploy heavy bot defense (no DataDome / Reese84 / Akamai). Datacenter Apify Proxy works at low volume; **RESIDENTIAL with `country=CZ` is recommended for sustained scraping.**

---

### Input

```json
{
  "regionIds": ["10"],
  "transaction": "sale",
  "category": "apartment",
  "subtypeCodes": ["4", "5", "6", "7"],
  "priceMin": 3000000,
  "priceMax": 8000000,
  "usableAreaMin": 40,
  "usableAreaMax": 120,
  "estateAreaMin": 0,
  "estateAreaMax": 0,
  "sort": "newest",
  "perPage": 60,
  "maxListings": 500,
  "maxPagesPerTask": 20,
  "requestDelay": 600,
  "maxRetries": 3,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "CZ" }
}
````

#### Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `regionIds` | string\[] | required | `locality_region_id` values. Each becomes its own task. |
| `transaction` | enum | `sale` | `sale` / `rent` / `auction` (maps to `category_type_cb`) |
| `category` | enum | `apartment` | `apartment` / `house` / `land` / `commercial` / `other` (maps to `category_main_cb`) |
| `subtypeCodes` | string\[] | `[]` | Optional `category_sub_cb` codes (pipe-joined in request) |
| `priceMin` / `priceMax` | int | `0` | CZK range (0 = no bound) |
| `usableAreaMin` / `usableAreaMax` | int | `0` | Usable m² range |
| `estateAreaMin` / `estateAreaMax` | int | `0` | Land/plot m² range |
| `sort` | enum | `newest` | `newest` / `price_asc` / `price_desc` |
| `perPage` | int | `60` | Page size (max 100, 60 safest) |
| `maxListings` | int | `200` | Total cap across all region tasks (0 = unlimited) |
| `maxPagesPerTask` | int | `10` | Pages per region. Sreality loops at ~page 100 on broad filters. |
| `requestDelay` | int (ms) | `600` | Delay between page fetches |
| `maxRetries` | int | `3` | Retries on HTTP errors (rotates proxy IP) |
| `proxyConfiguration` | object | `RESIDENTIAL`+`CZ` | RESIDENTIAL recommended; datacenter usually OK at low volume |

***

### Region IDs (`locality_region_id`)

| Region | ID |
|---|---|
| Hlavní město Praha | `10` |
| Středočeský kraj | `11` |
| Jihočeský kraj | `13` |
| Plzeňský kraj | `5` |
| Karlovarský kraj | `2` |
| Ústecký kraj | `9` |
| Liberecký kraj | `4` |
| Královéhradecký kraj | `3` |
| Pardubický kraj | `6` |
| Kraj Vysočina | `14` |
| Jihomoravský kraj | `1` |
| Olomoucký kraj | `12` |
| Zlínský kraj | `15` |
| Moravskoslezský kraj | `7` |

> The above IDs are best-effort based on community references. To verify any ID, open sreality.cz, pick the region in the filter, and inspect the network tab — the request URL contains `locality_region_id={ID}`.

***

### Subtype Codes (`category_sub_cb`)

#### Apartments (category=`apartment`, `category_main_cb=1`)

| Code | Subtype |
|---|---|
| 2  | 1+kk |
| 3  | 1+1 |
| 4  | 2+kk |
| 5  | 2+1 |
| 6  | 3+kk |
| 7  | 3+1 |
| 8  | 4+kk |
| 9  | 4+1 |
| 10 | 5+kk |
| 11 | 5+1 |
| 12 | 6 a více |
| 16 | atypický |

#### Houses (category=`house`, `category_main_cb=2`)

| Code | Subtype |
|---|---|
| 33 | rodinný (family) |
| 35 | vila |
| 37 | chalupa (cottage) |
| 39 | chata (chalet) |
| 40 | na klíč |
| 43 | usedlost (homestead) |
| 47 | zemědělská usedlost |
| 48 | památka (heritage) |

#### Land (category=`land`, `category_main_cb=3`)

| Code | Subtype |
|---|---|
| 18 | bydlení (residential) |
| 19 | komerční |
| 20 | pole (field) |
| 21 | louka (meadow) |
| 22 | les (forest) |
| 23 | rybník (pond) |
| 24 | sad (orchard) |
| 25 | zahrada (garden) |
| 26 | ostatní |

#### Commercial (category=`commercial`, `category_main_cb=4`)

| Code | Subtype |
|---|---|
| 27 | kanceláře (offices) |
| 28 | sklady (warehouses) |
| 29 | výroba (production) |
| 30 | obchodní prostory (retail) |
| 31 | ubytování (accommodation) |
| 32 | restaurace |
| 41 | zemědělský objekt |
| 50 | činžovní dům |
| 51 | ostatní |

#### Other (category=`other`, `category_main_cb=5`)

| Code | Subtype |
|---|---|
| 13 | garáž |
| 14 | vinný sklep |
| 15 | půdní prostor |
| 17 | ostatní |

***

### Output

Example record:

```json
{
  "adId": "2614321500",
  "detailUrl": "https://www.sreality.cz/detail/prodej/byt/2%2Bkk/praha-5-smichov-stroupeznickeho/2614321500",
  "apiUrl": "https://www.sreality.cz/api/cs/v2/estates/2614321500",
  "title": "Prodej bytu 2+kk 50 m²",
  "category": "apartment",
  "categoryCode": 1,
  "transactionType": "sale",
  "transactionCode": 1,
  "subtype": "2+kk",
  "subtypeCode": 4,
  "price": 5500000,
  "priceText": "5 500 000 Kč",
  "priceUnit": "Kč",
  "priceNote": null,
  "currency": "CZK",
  "pricePerSqm": 110000,
  "usableArea": 50,
  "estateArea": null,
  "locality": "Praha 5 - Smíchov, Stroupežnického",
  "region": null,
  "district": "Praha 5 - Smíchov",
  "city": "Praha",
  "latitude": 50.0729,
  "longitude": 14.4083,
  "mainImageUrl": "https://d18-a.sdn.cz/d_18/c_img.../image.jpg",
  "imageUrls": ["https://d18-a.sdn.cz/.../1.jpg", "https://d18-a.sdn.cz/.../2.jpg"],
  "imageCount": 12,
  "hasFloorPlan": true,
  "hasVideo": false,
  "has3dTour": false,
  "agentId": "1234",
  "agentName": "Reality XYZ s.r.o.",
  "agentLogoUrl": "https://d18-a.sdn.cz/.../logo.png",
  "agentUrl": "https://www.sreality.cz/firma/reality-xyz/1234",
  "isExclusive": true,
  "isNew": false,
  "isAuction": false,
  "isTopped": false,
  "labels": ["EXCLUSIVE_OFFER"],
  "seoLocality": "smichov-praha-5",
  "searchRegionId": 10,
  "searchCategory": "apartment",
  "searchTransaction": "sale",
  "searchSubtypes": [4],
  "scrapedAt": "2026-05-04T13:00:00.000Z"
}
```

#### Notes

- **`adId`** is sreality's stable `hash_id` (numeric, but stored as string).
- **`detailUrl`** is built from `seo.{category_type_cb,category_main_cb,category_sub_cb,locality}` + `hash_id`. If any slug is missing the URL will still resolve — sreality redirects on hash\_id alone.
- **`apiUrl`** is the JSON detail endpoint — useful for v1.1 enrichment (`fetchDetails` flag, planned).
- **`pricePerSqm`** is computed (`price / usableArea`); not provided by the API directly.
- **`region` / `district` / `city`** are best-effort parsed from the `locality` string. For full administrative hierarchy use the detail endpoint (planned).
- **`labels`** contain raw API labels like `EXCLUSIVE_OFFER`, `NEW`, `LOWERED_PRICE`, `RECOMMENDED`.

***

### Use Cases

- **Market research** — CZK/m² heatmaps by region, district and subtype
- **Investment screening** — yield = monthly rent / sale price per area
- **Lead generation** — discover all active agencies via `agentId` cluster
- **Price tracking** — re-run periodically and diff against prior datasets
- **Auction monitoring** — set `transaction: auction` to track foreclosure inventory
- **Land scouting** — `category: land` + `estateAreaMin/Max` for plot search
- **New-listings feed** — `sort: newest` + `maxPagesPerTask: 1` for daily delta

***

### Cost & Performance

- **Architecture:** pure HTTP + JSON parse. No browser, no DOM, no images downloaded.
- **Throughput:** 60 listings per page, ≈ 1-2 pages/sec at default `requestDelay=600`. ≈ 200 listings in 4-8s.
- **Memory:** 256MB minimum.
- **Compute Units:** ~0.002 CU per 100 listings.

***

### Limitations

- **Listing-level data only** in v1.0. Detail-only fields (full description, energy class, floor number, year built, full amenities list, all images at full resolution) require a second per-item API call — planned for v1.1 behind a `fetchDetails` flag.
- **Pagination ceiling** — sreality's API loops at ~100 pages on broad filters (returns the same first page repeatedly). The actor detects this loop (compares the first `hash_id` across pages) and stops. **Narrow with `priceMin/Max` or `usableAreaMin/Max` for full coverage of saturated regions.**
- **Subtype codes** are documented best-effort. If a code returns 0 results you may need to verify it via DevTools on a live filter.
- **Locality parsing** (city / district) uses heuristics on the free-text `locality` field; for guaranteed accuracy use the structured locality IDs from the detail endpoint (planned for v1.1).

***

### Changelog

| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05-04 | Initial release — direct JSON API scraping via `/api/cs/v2/estates`, 14 regions, 5 categories, 3 transaction types, 40+ subtype codes, full pagination with loop detection, image gallery extraction, agency embedding, structured price/area/GPS output. |

# Actor input Schema

## `regionIds` (type: `array`):

Czech kraj IDs used by sreality's API as `locality_region_id`. Each ID becomes its own scraping task. To find a region ID: open sreality.cz, pick a region in the filter, and inspect the network tab for a request to `/api/cs/v2/estates` — the `locality_region_id` query param is the value. Common IDs are listed in the README.

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

Sale (`prodej`), Rent (`pronajem`) or Auction (`drazby`). Maps to `category_type_cb`.

## `category` (type: `string`):

Top-level category. Maps to `category_main_cb`.

## `subtypeCodes` (type: `array`):

Optional list of `category_sub_cb` IDs to narrow the category. Different codes per category (apartments: 2=1+kk, 3=1+1, 4=2+kk, 5=2+1, 6=3+kk, 7=3+1, 8=4+kk, 9=4+1, 10=5+kk, 11=5+1, 12=6+, 16=atypical; houses: 33=family, 35=villa, 37=cottage, 39=chalet, 47=farm; land: 18=residential, 19=commercial, 20=field, 22=forest, 25=garden; commercial: 27=office, 28=warehouse, 29=production, 30=retail, 31=accommodation, 32=restaurant). See README for the full table.

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

Minimum price in Czech crowns. 0 = no minimum.

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

Maximum price in Czech crowns. 0 = no maximum.

## `usableAreaMin` (type: `integer`):

Minimum usable area (apartments, houses). 0 = no minimum.

## `usableAreaMax` (type: `integer`):

Maximum usable area. 0 = no maximum.

## `estateAreaMin` (type: `integer`):

Minimum land/plot area. Mostly relevant for houses & land. 0 = no minimum.

## `estateAreaMax` (type: `integer`):

Maximum land/plot area. 0 = no maximum.

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

Result ordering. Maps to `sort` query param.

## `perPage` (type: `integer`):

Page size. 60 is the safest large value; 100 sometimes works but can be inconsistent.

## `maxListings` (type: `integer`):

Total cap across all region tasks (0 = unlimited).

## `maxPagesPerTask` (type: `integer`):

Pagination depth per region. Sreality's API loops at ~page 100 on broad filters — narrow with price/area to reach deeper inventory.

## `requestDelay` (type: `integer`):

Delay between sequential page requests.

## `maxRetries` (type: `integer`):

Retries per request on HTTP errors (rotates proxy IP).

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

Apify Proxy is recommended. Sreality's API does not deploy heavy bot defense — datacenter proxy works at low volume; RESIDENTIAL with country=CZ is safest for sustained scraping.

## Actor input object example

```json
{
  "regionIds": [
    "10"
  ],
  "transaction": "sale",
  "category": "apartment",
  "subtypeCodes": [],
  "priceMin": 0,
  "priceMax": 0,
  "usableAreaMin": 0,
  "usableAreaMax": 0,
  "estateAreaMin": 0,
  "estateAreaMax": 0,
  "sort": "newest",
  "perPage": 60,
  "maxListings": 200,
  "maxPagesPerTask": 10,
  "requestDelay": 600,
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}
```

# Actor output Schema

## `adId` (type: `string`):

Sreality numeric hash\_id

## `detailUrl` (type: `string`):

Full URL to the listing page

## `apiUrl` (type: `string`):

Direct API URL for full detail JSON

## `title` (type: `string`):

Listing name (e.g. 'Prodej bytu 2+kk 50 m²')

## `category` (type: `string`):

apartment / house / land / commercial / other

## `categoryCode` (type: `string`):

Numeric category\_main\_cb (1-5)

## `transactionType` (type: `string`):

sale / rent / auction

## `transactionCode` (type: `string`):

Numeric category\_type\_cb (1-3)

## `subtype` (type: `string`):

Subtype slug (e.g. '2+kk', 'family', 'villa')

## `subtypeCode` (type: `string`):

Numeric category\_sub\_cb

## `price` (type: `string`):

Numeric price

## `priceText` (type: `string`):

Formatted price text from API

## `priceUnit` (type: `string`):

'Kč', 'Kč/měsíc' (rent), etc.

## `priceNote` (type: `string`):

Extra price note (e.g. 'on request', commission)

## `currency` (type: `string`):

Always CZK

## `pricePerSqm` (type: `string`):

Computed when price & usableArea both available

## `usableArea` (type: `string`):

Usable surface area

## `estateArea` (type: `string`):

Land / plot area

## `locality` (type: `string`):

Full locality string from API

## `region` (type: `string`):

Parsed region (kraj)

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

Parsed district (okres / Praha 5 / etc.)

## `city` (type: `string`):

Parsed city

## `latitude` (type: `string`):

GPS latitude

## `longitude` (type: `string`):

GPS longitude

## `mainImageUrl` (type: `string`):

First image (cover photo)

## `imageUrls` (type: `string`):

All listing image URLs

## `imageCount` (type: `string`):

Total photo count reported by API

## `hasFloorPlan` (type: `string`):

Listing includes floor plan

## `hasVideo` (type: `string`):

Listing includes video

## `has3dTour` (type: `string`):

Listing includes 3D walkthrough

## `agentId` (type: `string`):

Embedded company / agent ID

## `agentName` (type: `string`):

Agency display name

## `agentLogoUrl` (type: `string`):

Agency logo image

## `agentUrl` (type: `string`):

Agency profile URL

## `isExclusive` (type: `string`):

Marked as exclusively listed by one agency

## `isNew` (type: `string`):

Marked as newly added

## `isAuction` (type: `string`):

Auction listing

## `isTopped` (type: `string`):

Promoted / topped listing

## `labels` (type: `string`):

Labels array from API

## `seoLocality` (type: `string`):

URL slug from API's seo block

## `searchRegionId` (type: `string`):

locality\_region\_id used in search

## `searchCategory` (type: `string`):

Category used in search

## `searchTransaction` (type: `string`):

Transaction used in search

## `searchSubtypes` (type: `string`):

category\_sub\_cb codes used in search

## `scrapedAt` (type: `string`):

ISO timestamp

# 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 = {
    "regionIds": [
        "10"
    ],
    "subtypeCodes": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/sreality-cz-scraper-czech-real-estate-data").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 = {
    "regionIds": ["10"],
    "subtypeCodes": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/sreality-cz-scraper-czech-real-estate-data").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 '{
  "regionIds": [
    "10"
  ],
  "subtypeCodes": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}' |
apify call logiover/sreality-cz-scraper-czech-real-estate-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/sreality-cz-scraper-czech-real-estate-data",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Sreality.cz Scraper — Czech Real Estate Data Extractor",
        "description": "Scrape real estate listings from Sreality.cz — Czech Republic's #1 property portal. Extract apartments, houses, land and commercial properties by region, price (CZK), area and subtype. Direct JSON API access (no browser): price, m², GPS, locality, agency, image gallery and exclusivity flags per ad.",
        "version": "0.0",
        "x-build-id": "ugRrvIduvMJj24tI3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~sreality-cz-scraper-czech-real-estate-data/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-sreality-cz-scraper-czech-real-estate-data",
                "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/logiover~sreality-cz-scraper-czech-real-estate-data/runs": {
            "post": {
                "operationId": "runs-sync-logiover-sreality-cz-scraper-czech-real-estate-data",
                "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/logiover~sreality-cz-scraper-czech-real-estate-data/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-sreality-cz-scraper-czech-real-estate-data",
                "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",
                "required": [
                    "regionIds"
                ],
                "properties": {
                    "regionIds": {
                        "title": "Region IDs (locality_region_id)",
                        "type": "array",
                        "description": "Czech kraj IDs used by sreality's API as `locality_region_id`. Each ID becomes its own scraping task. To find a region ID: open sreality.cz, pick a region in the filter, and inspect the network tab for a request to `/api/cs/v2/estates` — the `locality_region_id` query param is the value. Common IDs are listed in the README.",
                        "default": [
                            "10"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "transaction": {
                        "title": "Transaction Type",
                        "enum": [
                            "sale",
                            "rent",
                            "auction"
                        ],
                        "type": "string",
                        "description": "Sale (`prodej`), Rent (`pronajem`) or Auction (`drazby`). Maps to `category_type_cb`.",
                        "default": "sale"
                    },
                    "category": {
                        "title": "Property Category",
                        "enum": [
                            "apartment",
                            "house",
                            "land",
                            "commercial",
                            "other"
                        ],
                        "type": "string",
                        "description": "Top-level category. Maps to `category_main_cb`.",
                        "default": "apartment"
                    },
                    "subtypeCodes": {
                        "title": "Subtype Codes (category_sub_cb)",
                        "type": "array",
                        "description": "Optional list of `category_sub_cb` IDs to narrow the category. Different codes per category (apartments: 2=1+kk, 3=1+1, 4=2+kk, 5=2+1, 6=3+kk, 7=3+1, 8=4+kk, 9=4+1, 10=5+kk, 11=5+1, 12=6+, 16=atypical; houses: 33=family, 35=villa, 37=cottage, 39=chalet, 47=farm; land: 18=residential, 19=commercial, 20=field, 22=forest, 25=garden; commercial: 27=office, 28=warehouse, 29=production, 30=retail, 31=accommodation, 32=restaurant). See README for the full table.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "priceMin": {
                        "title": "Min Price (CZK)",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Minimum price in Czech crowns. 0 = no minimum.",
                        "default": 0
                    },
                    "priceMax": {
                        "title": "Max Price (CZK)",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Maximum price in Czech crowns. 0 = no maximum.",
                        "default": 0
                    },
                    "usableAreaMin": {
                        "title": "Min Usable Area (m²)",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Minimum usable area (apartments, houses). 0 = no minimum.",
                        "default": 0
                    },
                    "usableAreaMax": {
                        "title": "Max Usable Area (m²)",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Maximum usable area. 0 = no maximum.",
                        "default": 0
                    },
                    "estateAreaMin": {
                        "title": "Min Estate Area (m²)",
                        "minimum": 0,
                        "maximum": 100000000,
                        "type": "integer",
                        "description": "Minimum land/plot area. Mostly relevant for houses & land. 0 = no minimum.",
                        "default": 0
                    },
                    "estateAreaMax": {
                        "title": "Max Estate Area (m²)",
                        "minimum": 0,
                        "maximum": 100000000,
                        "type": "integer",
                        "description": "Maximum land/plot area. 0 = no maximum.",
                        "default": 0
                    },
                    "sort": {
                        "title": "Sort Order",
                        "enum": [
                            "newest",
                            "price_asc",
                            "price_desc"
                        ],
                        "type": "string",
                        "description": "Result ordering. Maps to `sort` query param.",
                        "default": "newest"
                    },
                    "perPage": {
                        "title": "Listings per Page",
                        "minimum": 20,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Page size. 60 is the safest large value; 100 sometimes works but can be inconsistent.",
                        "default": 60
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Total cap across all region tasks (0 = unlimited).",
                        "default": 200
                    },
                    "maxPagesPerTask": {
                        "title": "Max Pages per Task",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Pagination depth per region. Sreality's API loops at ~page 100 on broad filters — narrow with price/area to reach deeper inventory.",
                        "default": 10
                    },
                    "requestDelay": {
                        "title": "Request Delay (ms)",
                        "minimum": 0,
                        "maximum": 30000,
                        "type": "integer",
                        "description": "Delay between sequential page requests.",
                        "default": 600
                    },
                    "maxRetries": {
                        "title": "Max Retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Retries per request on HTTP errors (rotates proxy IP).",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify Proxy is recommended. Sreality's API does not deploy heavy bot defense — datacenter proxy works at low volume; RESIDENTIAL with country=CZ is safest for sustained scraping."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
