# Sreality - Czech Republic Real Estate (`swerve/sreality-scraper`) Actor

Scrape Sreality.cz, Czech Republic's #1 real estate portal. Rent & buy listings with prices, area, rooms, amenities, photos, and location data.

- **URL**: https://apify.com/swerve/sreality-scraper.md
- **Developed by:** [Swerve](https://apify.com/swerve) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 80 total users, 14 monthly users, 71.8% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Real Estate Scraper

Scrape real estate listings (rent & buy) from [Sreality.cz](https://www.sreality.cz), Czech Republic's #1 property portal with 100,000+ active listings.

### Why This Scraper?

Sreality.cz is the dominant property marketplace in the Czech Republic, aggregating listings from all major agencies and private sellers. This scraper gives you structured access to its full catalog without browser automation or headless rendering -- it talks directly to the Sreality REST API.

- **No proxy needed** -- the public API works without residential proxies or session management
- **Fast** -- list mode returns ~60 listings/second; `fetchDetails` adds full descriptions and amenity data at ~15 listings/second
- **Structured output** -- every listing comes with GPS coordinates, room layout (Czech 2+kk / 3+1 format), amenities, images, and agency info

### Features

- **80+ Czech cities** pre-mapped across all 14 regions
- **Rent & Buy** -- scrape rental or purchase listings
- **Property types** -- apartments, houses, land, commercial
- **Full details** -- optionally fetch complete listing details (description, all amenities, high-res images)
- **Filters** -- filter by price, area, parking, elevator, balcony, and exclude agencies
- **No proxy needed** -- uses Sreality's public REST API
- **Czech diacritics** -- accepts both "Praha" and "praha", "Plzen" and "Plzen"

### Use Cases

- **Real estate investors** sourcing buy-to-let apartments in Praha, Brno, and Ostrava with full amenity and condition data to rank deals
- **Relocation services** helping expats and corporate transferees find rentals in Prague neighbourhoods like Vinohrady, Smichov, and Karlin
- **PropTech startups** building Czech-market valuation tools, AVMs, and comparables databases on top of Sreality's 100k+ listing inventory
- **Property flippers** scanning for "after reconstruction" and "needs work" listings in specific Prague districts for renovation plays
- **Market analysts** tracking rent vs. buy price trends, ownership type mix (personal vs. cooperative), and building type (panel vs. brick) across all 14 Czech regions
- **Real estate agencies** monitoring competitor listings, price drops, and new inventory to pitch buyers before listings go stale

### Input

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | **Required.** City name (e.g. "Praha", "Brno", "Ostrava", "Plzen") |
| `dealType` | string | `"rent"` or `"buy"` (default `"rent"`) |
| `propertyType` | string | `"apartment"`, `"house"`, `"land"`, `"commercial"` (default `"apartment"`) |
| `maxItems` | integer | Optional cap on listings to scrape. Leave blank to scrape all matching listings (big cities can return thousands). |
| `minPrice` | integer | Min price in CZK (optional) |
| `maxPrice` | integer | Max price in CZK (optional) |
| `minArea` | integer | Min area in sqm (optional) |
| `maxArea` | integer | Max area in sqm (optional) |
| `fetchDetails` | boolean | Fetch full listing details -- slower but includes description, floor, building type, condition, ownership, and all images (default `false`) |
| `excludeAgents` | boolean | Exclude agency listings, show only private sellers (default `false`) |
| `requireParking` | boolean | Only include listings with parking (default `false`) |
| `requireElevator` | boolean | Only include listings with an elevator (default `false`) |
| `requireBalcony` | boolean | Only include listings with a balcony (default `false`) |

#### Example Input

```json
{
  "location": "Praha",
  "dealType": "rent",
  "propertyType": "apartment",
  "maxItems": 50,
  "maxPrice": 25000,
  "fetchDetails": true
}
```

### Output

#### Sample Output

```json
{
  "listingId": "3218476108",
  "url": "https://www.sreality.cz/detail/pronajem/byt/2+kk/praha-vinohrady/3218476108",
  "title": "Rent of apartment 2+kk, 52 m2, Praha 2 - Vinohrady",
  "dealType": "rent",
  "propertyType": "apartment",
  "locality": "Slezska 1847/9, Praha 2 - Vinohrady",
  "city": "Praha 2",
  "district": "Vinohrady",
  "latitude": 50.0753,
  "longitude": 14.4388,
  "price": 22000,
  "priceUnit": "per month",
  "currency": "CZK",
  "rooms": "2+kk",
  "floor": "3rd floor",
  "areaSqm": 52,
  "buildingType": "Brick",
  "condition": "After reconstruction",
  "ownership": "Personal",
  "hasBalcony": true,
  "hasElevator": true,
  "hasParking": false,
  "hasGarage": false,
  "hasCellar": true,
  "isFurnished": false,
  "images": [
    "https://d18-a.sdn.cz/d_18/c_img_gZ_o/abc123.jpg",
    "https://d18-a.sdn.cz/d_18/c_img_gZ_o/def456.jpg"
  ],
  "listingDescription": "Spacious 2+kk apartment on a quiet street in Vinohrady...",
  "agencyName": "RE/MAX Czech Republic",
  "labels": ["balcony", "cellar", "elevator"],
  "scrapedAt": "2026-03-26T10:30:00.000Z"
}
```

#### Output Fields

| Field | Type | Description | Requires `fetchDetails` |
|-------|------|-------------|:-----------------------:|
| `listingId` | string | Unique listing hash ID from Sreality | |
| `url` | string | Direct link to the listing on Sreality.cz | |
| `title` | string | Listing title | |
| `dealType` | string | `"rent"` or `"buy"` | |
| `propertyType` | string | `"apartment"`, `"house"`, `"land"`, `"commercial"` | |
| `locality` | string | Full address with district | |
| `city` | string | City name (e.g. "Praha 5") | |
| `district` | string | District name (e.g. "Smichov") | |
| `latitude` | number | GPS latitude | |
| `longitude` | number | GPS longitude | |
| `price` | number | Price in CZK | |
| `priceUnit` | string | `"per month"` for rent, `"total"` for buy | |
| `currency` | string | Always `"CZK"` | |
| `rooms` | string | Room layout in Czech format (1+kk, 2+1, 3+kk, etc.) | |
| `floor` | string | Floor info (e.g. "3rd floor") | Yes |
| `areaSqm` | number | Usable area in square meters | |
| `buildingType` | string | Brick, panel, etc. | Yes |
| `condition` | string | Property condition (new, reconstructed, etc.) | Yes |
| `ownership` | string | Personal, cooperative, etc. | Yes |
| `hasBalcony` | boolean | Has balcony | |
| `hasElevator` | boolean | Has elevator | |
| `hasParking` | boolean | Has parking | |
| `hasGarage` | boolean | Has garage | |
| `hasCellar` | boolean | Has cellar/basement | |
| `isFurnished` | boolean | Is furnished | |
| `images` | array | Image URLs (more with `fetchDetails`) | |
| `listingDescription` | string | Full description text | Yes |
| `agencyName` | string | Real estate agency name | |
| `labels` | array | Feature labels (e.g. "elevator", "balcony", "new building") | |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was scraped | |

Fields marked with "Yes" return `null` in list mode and are populated when `fetchDetails` is enabled.

### Supported Cities & Regions

All 14 Czech regions are covered. Both Czech names with diacritics and ASCII equivalents are accepted (e.g. "Plzen" or "Plzen").

| Region | Cities |
|--------|--------|
| **Praha** | Praha (Prague) |
| **Stredocesky** | Kladno, Mlada Boleslav, Kolin, Pribram, Kutna Hora, Beroun, Nymburk, Melnik, Benesov, Rakovnik |
| **Jihocesky** | Ceske Budejovice, Cesky Krumlov, Tabor, Pisek, Strakonice, Jindrichuv Hradec, Prachatice |
| **Plzensky** | Plzen (Pilsen), Klatovy, Rokycany, Domazlice, Tachov |
| **Karlovarsky** | Karlovy Vary, Cheb, Sokolov |
| **Ustecky** | Usti nad Labem, Decin, Teplice, Most, Chomutov, Litomerice, Louny |
| **Liberecky** | Liberec, Jablonec nad Nisou, Ceska Lipa, Semily |
| **Kralovehradecky** | Hradec Kralove, Trutnov, Nachod, Jicin, Rychnov nad Kneznou |
| **Pardubicky** | Pardubice, Chrudim, Svitavy, Usti nad Orlici |
| **Vysocina** | Jihlava, Havlickuv Brod, Trebic, Zdar nad Sazavou, Pelhrimov |
| **Jihomoravsky** | Brno, Znojmo, Breclav, Hodonin, Vyskov, Blansko |
| **Olomoucky** | Olomouc, Prostejov, Prerov, Sumperk, Jesenik |
| **Zlinsky** | Zlin, Vsetin, Kromeriz, Uherske Hradiste |
| **Moravskoslezsky** | Ostrava, Opava, Frydek-Mistek, Karvina, Novy Jicin, Bruntal |

Cities not in the pre-mapped list are resolved automatically via the Sreality suggest API.

### Tips

- **Start without `fetchDetails`** to quickly scan available listings. Enable it when you need descriptions, floor info, building type, and full image sets.
- **Use filters together** -- combine `maxPrice` with `requireBalcony` to narrow results before scraping.
- **Room format** -- Czech listings use layouts like 2+kk (2 rooms + kitchenette) and 3+1 (3 rooms + separate kitchen).

### Also Available

Looking for property data in other Central European markets?

- **[Otodom.pl Scraper](https://apify.com/store)** -- Scrape rental and sale listings from Otodom.pl, Poland's largest property portal. Same structured output format.

### Keywords

Sreality scraper, Czech real estate API, Prague apartments data, Sreality.cz scraper, Czech property listings, Brno real estate, Czech Republic rental data, Praha property scraper, Czech housing market, Ostrava apartments, Czech real estate API, Plzen property listings

# Actor input Schema

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

City or region name (e.g. "Praha", "Brno", "Ostrava", "Plzeň"). Use Czech or English names.

## `dealType` (type: `string`):

Type of deal: rent or buy

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

Type of property to search for

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

Optional cap on how many listings to scrape. Leave blank to scrape ALL matching listings for your search (recommended). Big cities like Praha can return thousands of results, so set a number here only if you want to limit cost or run time. Examples: 15 for a quick sample, 500 for a mid-size pull, blank for everything.

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

Minimum price filter in CZK (optional)

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

Maximum price filter in CZK (optional)

## `minArea` (type: `integer`):

Minimum area in square meters (optional)

## `maxArea` (type: `integer`):

Maximum area in square meters (optional)

## `fetchDetails` (type: `boolean`):

Currently disabled by default. Sreality's detail pages were migrated to Next.js in May 2026 and now bounce non-logged-in requests through a Seznam autologin / anti-bot loop. The list view already returns price, area, room count, city, district, images, and agency name. Toggle this on if you want to retry detail enrichment, but expect most detail fetches to fail until we wire a logged-in session.

## `excludeAgents` (type: `boolean`):

Exclude listings posted by agencies (show only private sellers)

## `requireParking` (type: `boolean`):

Only include listings that have parking

## `requireElevator` (type: `boolean`):

Only include listings that have an elevator

## `requireBalcony` (type: `boolean`):

Only include listings that have a balcony

## Actor input object example

```json
{
  "location": "Praha",
  "dealType": "rent",
  "propertyType": "apartment",
  "fetchDetails": false,
  "excludeAgents": false,
  "requireParking": false,
  "requireElevator": false,
  "requireBalcony": false
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("swerve/sreality-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 = { "location": "Praha" }

# Run the Actor and wait for it to finish
run = client.actor("swerve/sreality-scraper").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 '{
  "location": "Praha"
}' |
apify call swerve/sreality-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/yRA8cohM1AmYdyftP/builds/VtVNLNRtTALonnvDX/openapi.json
