# Sreality Scraper: Czech Property Prices & Market Report (`precious_bathmat/czech-property-market`) Actor

Scrape Sreality.cz flats, houses, land and commercial property for sale or rent anywhere in Czechia: price, CZK/m², layout (2+kk), area, city part, coordinates, distances to transport and schools. Plus a market report. No login.

- **URL**: https://apify.com/precious_bathmat/czech-property-market.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Real estate, Business
- **Stats:** 2 total users, 1 monthly users, 62.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 listings

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Sreality Scraper: Czech Property Prices & Market Report

Scrape **Sreality.cz**, Czechia's biggest property portal, with no login and no API key, and get a **market report for every town, district or region**:

- **Every listing**: price, **CZK per m²**, layout (1+kk, 2+kk, 3+1...), usable and plot area, city, city part, district, region, street, map position, **distances to public transport, schools, kindergartens, shops, metro and doctors**, discount, photos, video and 3D tour, link
- **Flats, houses, land or commercial property**, for sale or to rent, anywhere in Czechia: "Praha", "Brno", "Praha 5", "Jihomoravský kraj", or all of Czechia
- **Filters**: layouts, price range
- **Past the 10,000-listing limit**: big searches are split into price bands, each read in proportion to its share
- **Market report per location**: median price and CZK per m² with the middle half, by layout, city, city part and district, price on request, private sellers, **share within 500 m of public transport, 1 km of a school or metro**, **best-value homes** (under 80% of their city part's CZK per m²)

### What does this Sreality scraper do?

```
Sreality · Praha · flats for sale · 5,704 listings
 Median 9,838,000 CZK (7,960,000 – 13,350,000) · 172,364 CZK/m² · 56 m²
 1+kk 6.17M · 2+kk 9.0M · 3+kk 12.7M
 Smíchov 209,043 CZK/m² · Karlín 255,941 CZK/m²
 97% within 500 m of public transport
```

1. Enter **Czech towns, districts or regions** (or none for all of Czechia).
2. Pick **for sale or to rent**, **property type**, **layouts**, **price range**.
3. You get **one row per listing** and **one market report per location**.

```mermaid
flowchart LR
    A[Towns, districts,<br/>regions] --> C[Sreality search]
    B[Filters<br/>type, layout, price] --> C
    C --> D[Listings<br/>price, CZK/m², layout,<br/>city part, distances]
    D --> E[Market report<br/>by layout and area,<br/>transport, best value]
```

### Who is it for?

- **Property investors**: CZK per m² by city part and layout, and homes priced under their area
- **Agencies and developers**: supply and pricing across Czech cities and districts
- **Buyers and tenants**: fair prices and rents before you view
- **Proptech, banks and valuers**: fresh Czech asking prices and rents with coordinates and amenity distances
- **Analysts and journalists**: price levels across Czech cities and regions

### What data do you get?

**Listings** (dataset, one row per listing)

| Field | What it tells you |
|---|---|
| `id`, `url`, `title`, `operation`, `propertyType`, `layout` | The listing |
| `price`, `pricePeriod`, `priceOnRequest`, `pricePerSqm`, `discount` | Price in CZK (monthly when renting) and per m² |
| `usableAreaSqm`, `plotAreaSqm` | Size |
| `city`, `cityPart`, `district`, `region`, `street`, `latitude`, `longitude` | Where |
| `distances` | Metres to public transport, school, kindergarten, shop, doctor, restaurant, train, metro, playground, post office, ATM |
| `sellerType`, `photos`, `hasVideo`, `has3dTour` | Agency or private, media |
| `vsAreaPercent`, `comparedWith`, `areaMedianPricePerSqm`, `bestValue` | CZK per m² against the city part (or city) median |

**Report** (`REPORTS`, one per location)

| Field | What it tells you |
|---|---|
| `totalListings`, `listingsRead` | Sreality's count for the search, and how many were read |
| `medianPrice`, `price25`, `price75`, `medianPricePerSqm`, `pricePerSqm25`, `pricePerSqm75`, `medianUsableAreaSqm` | Prices |
| `byLayout`, `byCity`, `byCityPart`, `byDistrict` | Median price and CZK per m² by group |
| `priceOnRequestPercent`, `privateSellerPercent`, `discountedPercent` | The market's make-up |
| `within500mOfPublicTransportPercent`, `within1kmOfSchoolPercent`, `within1kmOfMetroPercent` | Access |
| `bestValue`, `bestValueCount` | Homes under 80% of their area's CZK per m² |

### Example: 4 October 2026

Four cities, flats for sale, 300 listings each: **1,200 listings and 4 reports in 20 seconds**.

| City | Flats for sale | Median price (middle half) | CZK per m² | 2+kk median |
|---|---|---|---|---|
| Praha | 5,704 | 9,838,000 (7,960,000 – 13,350,000) | 172,364 | 8,996,000 |
| Brno | 1,375 | 8,347,000 (6,492,500 – 11,332,204) | 137,166 | 7,441,000 |
| Plzeň | 436 | 5,790,000 (4,835,525 – 6,737,500) | 95,932 | 6,025,000 |
| Ostrava | 732 | 4,045,000 (3,367,500 – 4,990,000) | 70,588 | 4,090,000 |

- **All of Czechia, 12,000 flats in 3 minutes 55 seconds**: median 6,500,000 CZK, 105,970 CZK per m², past the 10,000-listing cap.

### Pricing

**$0.001 per listing** and **$0.02 per report**.

- 300 listings with a report: **$0.32**
- The run above (1,200 listings, 4 reports): **$1.28**

Turn off reports to pay for listings only.

### Good to know

- **Layouts** use the Czech convention: rooms + kitchen ("2+1") or rooms with a kitchenette ("2+kk").
- **The report covers the listings read**; `totalListings` is Sreality's count for the whole search.
- **Price on request** listings have no price and are left out of price statistics.
- **Best value** = CZK per m² under 80% of the median of the same city part (or city, or the whole search) with at least 5 listings to compare.
- **Privacy**: agencies are not named (their Sreality names can include an agent's own name); only agency vs private seller is kept. No contact details are collected.
- Data comes from **Sreality.cz's public listings**. **Not affiliated with Sreality or Seznam.cz.**

### Input

| Field | Meaning |
|---|---|
| **Locations** | Czech towns, districts or regions; empty = all of Czechia |
| **For sale or to rent** | Prodej or pronájem |
| **Property type** | Flats, houses, land, commercial |
| **Layouts** | 1+kk to 6+, atypical (flats) |
| **Price from / to** | CZK (monthly when renting) |
| **Listings per location** | 1 to 20,000 (default 300) |
| **Reports** | On by default |

### Integrations

Export to JSON, CSV, Excel or Google Sheets, or connect through the Apify API, webhooks, Make, Zapier and n8n. **Schedule it weekly** to track prices in your cities.

# Actor input Schema

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

Czech towns, districts or regions, e.g. "Praha", "Brno", "Ostrava", "Plzeň", "Praha 5", "Jihomoravský kraj". Empty = all of Czechia.

## `operation` (type: `string`):

For sale or to rent (rents per month).

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

What to search for.

## `layouts` (type: `array`):

Optional, flats only: e.g. 2+kk (two rooms with a kitchenette), 3+1 (three rooms and a kitchen).

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

Only listings priced at least this (monthly rent when renting).

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

Only listings priced at most this.

## `maxListingsPerSearch` (type: `integer`):

Most listings to read per location (60 per request).

## `includeReports` (type: `boolean`):

One market report per location: median price and CZK per m², by layout, city, city part and district, price on request, private sellers, distance to transport, schools and metro, best-value homes.

## Actor input object example

```json
{
  "locations": [
    "Praha"
  ],
  "operation": "sale",
  "propertyType": "flat",
  "maxListingsPerSearch": 300,
  "includeReports": true
}
```

# Actor output Schema

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

One row per listing: price, CZK per m², layout, usable and plot area, city, city part, district, coordinates, distances to transport and schools, link.

## `reports` (type: `string`):

Per location: median price and CZK per m², by layout, city part and district, transport access, best-value homes.

## `reportsCsv` (type: `string`):

One flat row per location.

## `summary` (type: `string`):

Requests, problems and the limits of the data.

# 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 = {
    "locations": [
        "Praha"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/czech-property-market").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 = { "locations": ["Praha"] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/czech-property-market").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 '{
  "locations": [
    "Praha"
  ]
}' |
apify call precious_bathmat/czech-property-market --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/czech-property-market"
        }
    }
}
```

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/VnGsmYoLboLTZ5sTf/builds/yn6veaW7oOGREdym1/openapi.json
