# Sreality.cz Property Scraper - Czech Real Estate Listings (`ahmed_jasarevic/sreality-cz-property-scraper`) Actor

Scrape Czech property listings from sreality.cz: price, area, rooms, location, seller/agency contact, photos, property type and publish date. Pure HTTP (**NEXT\_DATA** parsing), no browser needed

- **URL**: https://apify.com/ahmed\_jasarevic/sreality-cz-property-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** Real estate, Developer tools, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.

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.

- **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

## Sreality.cz Property Scraper — Czech Real Estate Listings

Scrape **Czech real estate listings from [sreality.cz](https://www.sreality.cz)** — the largest property portal in the Czech Republic (Seznam.cz group). This Actor extracts listing details, **price, price/m², area, rooms, location, seller & agency contact info, photos, property type and publish date** for apartments, houses, land, commercial and other properties — for sale or rent, across the whole country or a specific region/city.

It runs as a **pure HTTP scraper** (no browser) by parsing the site's server-rendered `__NEXT_DATA__` payloads, which makes it **fast and cheap** — roughly 10× cheaper than browser-based scrapers. Runs on the Apify platform with built-in proxy rotation, scheduling, API access and monitoring.

### Why use this Actor?

- **For Czech real estate agencies & brokers** — monitor competitor listings, prices and agency contact leads.
- **For investors & market analysts** — build price-per-m² datasets by region, track publish dates and listing velocity.
- **For relocation services** — collect apartments/houses for sale or rent with full seller/agency contact details.
- **Full contact data** — seller name, email, phone numbers, agency name, ICO, website and review score.
- **Cheap at scale** — pure HTTP, no browser compute units.

### How to use

1. Open the Actor in Apify Console and click **Start**.
2. Choose the **transaction type** (sale / rent / both), **property category** (apartments / houses / land / commercial / other) and optionally a **region or city** (e.g. `praha`, `brno`, `plzen`).
3. Set **Maximum items** and **Maximum search pages** (22 listings per page).
4. Keep **Include full details** enabled to get descriptions, seller contacts, area and publish dates.
5. Run it — results land in the **Dataset**, downloadable as JSON, CSV, Excel, HTML or XML.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `categoryType` | select | `prodej` | `prodej` (sale), `pronajem` (rent) or `both` |
| `categoryMain` | select | `byty` | `byty`, `domy`, `pozemky`, `komercni`, `ostatni` or `all` |
| `region` | string | empty | SEO region/city slug, e.g. `praha`, `brno`, `stredocesky-kraj`. Empty = whole CZ |
| `maxItems` | integer | 100 | Max listings to scrape (1–10000) |
| `maxPages` | integer | 10 | Max search pages to crawl (1–100) |
| `includeDetails` | boolean | true | Fetch detail pages for full data (description, contacts, area, publish date) |
| `startUrls` | array | — | Optional custom sreality.cz search/detail URLs |
| `proxy` | proxy | RESIDENTIAL | Apify proxy configuration |

### Output

Each dataset item is a JSON object. Example (full-detail mode):

```json
{
  "id": 1933373516,
  "url": "https://www.sreality.cz/detail/prodej/byt/1+kk/praha-jinonice-radlicka/1933373516",
  "name": "Prodej bytu 1+kk 28 m²",
  "propertyType": "Byty",
  "roomsLayout": "1+kk",
  "transactionType": "Prodej",
  "priceCzk": 7264000,
  "pricePerSqmCzk": 259429,
  "areaSqm": 28,
  "publishDate": "2026-06-21",
  "lastEdited": "2026-08-16",
  "location": {
    "city": "Praha", "cityPart": "Jinonice", "district": "Praha 5",
    "region": "Hlavní město Praha", "street": "Radlická", "zip": 15800,
    "latitude": 50.0485673312, "longitude": 14.3591669343
  },
  "seller": {
    "name": "Jan Mahdal", "email": "prodej@sekyragroup.cz",
    "phones": ["+420800304050"]
  },
  "agency": {
    "name": "Sekyra Group", "seoName": "sekyra-group", "ico": 63998611,
    "webUrl": "https://sekyragroup.cz", "reviewScore": null
  },
  "building": {
    "buildingType": "Skeletová", "buildingCondition": "Ve výstavbě",
    "elevator": "Ano", "floorNumber": 4, "floors": 5,
    "energyEfficiencyRating": "B - Velmi úsporná"
  },
  "photos": ["https://d18-a.sdn.cz/d_18/c_img_qE_A/..."]
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field | Description |
|---|---|
| `id` | Sreality.cz listing ID |
| `url` | Canonical listing URL |
| `name` | Listing title (e.g. "Prodej bytu 2+kk 47 m²") |
| `propertyType` | Byty / Domy / Pozemky / Komercni / Ostatni |
| `roomsLayout` | Room layout (1+1, 2+kk, 3+1, …) |
| `transactionType` | Prodej (sale) / Pronájem (rent) |
| `priceCzk`, `pricePerSqmCzk` | Price and price per m² in CZK |
| `areaSqm` | Usable area in m² |
| `publishDate`, `lastEdited` | Listing publish / last-edit dates |
| `location` | City, district, region, street, ZIP, GPS coordinates |
| `seller` | Seller name, email, phones, photo |
| `agency` | Agency name, ICO, website, review score, address |
| `building` | Building type, condition, elevator, floors, energy rating |
| `features` | Balcony, cellar, garage, terrace, heating, water, sewer |
| `photos` | Array of photo URLs |
| `description` | Full listing description (full-detail mode) |

### How much does it cost to scrape sreality.cz?

The Actor is a **pure HTTP scraper** — no browser compute units. A typical run of 100 listings with full details costs well under **$0.10** on Apify. Free Apify users get a capped preview of 10 items per run; paid users get unlimited runs up to the configured `maxItems`.

### Tips & advanced options

- **Speed vs depth**: disable `includeDetails` for a fast search-level snapshot (price, location, photos) — roughly 20× faster.
- **Whole-country runs**: leave `region` empty and set `categoryMain` to `all` to cover every category.
- **Fresh data**: schedule the Actor daily/weekly and compare `publishDate` / `lastEdited` to track new listings.
- **Rate limiting**: the Actor is deliberately gentle (max concurrency 4, retries 3, per-request timeout 60s) to avoid hammering the target.

### FAQ, disclaimers & support

- **Is scraping sreality.cz legal?** Scraping publicly available data for personal or analytical use is generally acceptable, but always respect sreality.cz's Terms of Service and applicable Czech/EU law. This Actor is provided as-is for legitimate use cases.
- **Known limitations**: the site's edge occasionally redirects requests into Seznam.cz's login/consent flow; the Actor sends a generic `Accept` header to avoid this, which works reliably. Listing availability and prices change frequently — data is a point-in-time snapshot.
- **Support**: open an issue on the Actor's Issues tab, or contact us for custom modifications (e.g. extra fields, different output formats, scheduled monitoring).

# Actor input Schema

## `categoryType` (type: `string`):

Which transaction type to scrape: sale (prodej), rent (pronajem) or both.

## `categoryMain` (type: `string`):

Which property category to scrape.

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

Optional region or city filter, e.g. 'praha', 'brno', 'plzen', 'stredocesky-kraj'. Leave empty for the whole Czech Republic.

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

Maximum number of listings to scrape.

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

Maximum number of search result pages to crawl (22 listings per page).

## `includeDetails` (type: `boolean`):

Fetch each listing's detail page for full data (description, seller/agency contact, area, publish date, building info). Disable for a faster, lighter run with search-level data only.

## `startUrls` (type: `array`):

Optional custom sreality.cz search or detail URLs to scrape instead of the category/region settings above.

## `proxy` (type: `object`):

Apify Proxy with Residential IPs is recommended to avoid blocking.

## Actor input object example

```json
{
  "categoryType": "prodej",
  "categoryMain": "byty",
  "region": "praha",
  "maxItems": 100,
  "maxPages": 10,
  "includeDetails": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/sreality-cz-property-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 = { "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/sreality-cz-property-scraper").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 '{
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call ahmed_jasarevic/sreality-cz-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/sreality-cz-property-scraper"
        }
    }
}

```

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/puHbsbQBiftKa5dMq/builds/B5gyraApRMrfIqptZ/openapi.json
