# Sreality Scraper - Czech Real Estate Listings (`studio-amba/sreality-scraper`) Actor

Scrape real estate listings from Sreality.cz -- Czech Republic's #1 property portal with 100K+ listings. Search apartments, houses, and land for sale or rent. Get prices, areas, rooms, locations, images, and agency details. No login needed.

- **URL**: https://apify.com/studio-amba/sreality-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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

Extract real estate listings from [Sreality.cz](https://www.sreality.cz) -- Czech Republic's largest property portal with over 100,000 active listings -- into structured JSON with prices, areas, room layouts, locations, images, and agency details.

### What is Sreality Scraper?

**Sreality Scraper** extracts structured property data from Sreality.cz, helping you monitor the Czech real estate market, compare prices across cities, and automate property research -- all without manual browsing or login.

- **Track property prices by city and district:** extract listings with prices, area in m2, and room layouts to build price maps across Prague, Brno, Ostrava, and every Czech city
- **Monitor new listings automatically:** schedule daily runs and catch new apartments or houses the moment they appear on Sreality
- **Build property datasets for analysis:** export thousands of listings with GPS coordinates, agency info, and property details for valuation models, academic research, or investment screening
- **Compare sale vs. rental markets:** switch between prodej (sale) and pronajem (rent) to analyse yield gaps and rental demand across Czech regions
- **Feed your CRM or dashboard:** export structured data to Google Sheets, Airtable, or any BI tool via Apify integrations

Sreality.cz has **no public API and no bulk export**. This scraper reads Sreality's internal JSON API to deliver clean, structured data at scale. No login, no cookies, no browser extensions needed.

### What data does Sreality Scraper extract?

Each listing includes the following fields:

- **propertyTitle** -- listing title in Czech, e.g. "Prodej bytu 2+kk 58 m2"
- **propertyType** -- apartment, house, or land
- **transactionType** -- sale or rent
- **price** -- asking price in CZK (Czech Koruna)
- **currency** -- always "CZK"
- **area** -- usable living area in square meters
- **rooms** -- room layout (e.g. "2+kk", "3+1", "4+kk")
- **location** -- city or locality name
- **district** -- district or neighbourhood
- **address** -- street address when available
- **description** -- listing description text
- **imageUrl** -- main property photo URL
- **imageUrls** -- all property photos
- **url** -- direct link to the listing on Sreality.cz
- **latitude / longitude** -- GPS coordinates for mapping
- **agencyName** -- the real estate agency marketing the property
- **agencyUrl** -- link to the agency profile
- **isNew** -- whether the listing is newly added
- **isExclusive** -- whether the listing is an exclusive offer
- **pricePerSqm** -- calculated price per square meter in CZK
- **estateArea** -- land/estate area in m2 (for houses and land)
- **scrapedAt** -- ISO 8601 timestamp

### How to scrape Sreality data

The input is simple: choose your **property type**, **transaction type**, and optional filters, then hit run. You can configure the scraper through the Apify Console UI or programmatically via the API.

#### Input fields

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| **propertyType** | String | `"byty"` | `"byty"` (apartments), `"domy"` (houses), or `"pozemky"` (land) |
| **transactionType** | String | `"prodej"` | `"prodej"` (sale) or `"pronajem"` (rent) |
| **searchQuery** | String | -- | Filter by keyword in title/locality, e.g. `"Praha"`, `"3+kk"` |
| **location** | String | -- | Czech city or region, e.g. `"Praha"`, `"Brno"`, `"Ostrava"` |
| **priceFrom** | Integer | -- | Minimum price in CZK |
| **priceTo** | Integer | -- | Maximum price in CZK |
| **maxResults** | Integer | `50` | Maximum listings to return (0 = unlimited) |
| **proxyConfiguration** | Object | -- | Proxy settings (Czech residential recommended) |

#### Tips for best results

- **Default input works out of the box** -- running with empty `{}` input returns apartments for sale across all of Czech Republic
- **Use `location` for city-level filtering** -- set it to `"Praha"` or `"Brno"` to narrow results geographically
- **Use `searchQuery` for text filtering** -- combine with location for precise results, e.g. `searchQuery: "3+kk"` to find only 3+kk apartments
- **Use price filters for budget ranges** -- set `priceFrom` and `priceTo` to focus on your target segment
- **Czech residential proxy recommended** -- Sreality works best with Czech IP addresses. The default proxy config handles this automatically on Apify
- **Start small** -- test with `maxResults: 10` first, then scale up once you verify the output matches your needs

### Output

Results are stored in a **dataset** that you can download in JSON, CSV, Excel, XML, or HTML format directly from the Apify Console.

#### JSON example

```json
{
    "propertyTitle": "Prodej bytu 2+kk 58 m2",
    "propertyType": "apartment",
    "transactionType": "sale",
    "price": 4850000,
    "currency": "CZK",
    "area": 58,
    "rooms": "2+kk",
    "location": "Praha 5",
    "district": "Smichov",
    "address": "Stefanikova",
    "description": "Prodej bytu 2+kk v osobnim vlastnictvi o celkove vymere 58 m2...",
    "imageUrl": "https://d18-a.sdn.cz/d_18/c_img_QP_Jf/abc123.jpg",
    "imageUrls": [
        "https://d18-a.sdn.cz/d_18/c_img_QP_Jf/abc123.jpg",
        "https://d18-a.sdn.cz/d_18/c_img_QP_Jf/abc456.jpg"
    ],
    "url": "https://www.sreality.cz/detail/prodej/byt/2+kk/praha-5-smichov/1234567890",
    "latitude": 50.0755,
    "longitude": 14.4028,
    "agencyName": "RE/MAX Czech Republic",
    "agencyUrl": null,
    "isNew": false,
    "isExclusive": true,
    "pricePerSqm": 83621,
    "estateArea": null,
    "scrapedAt": "2026-06-09T10:00:00.000Z"
}
```

### How much does it cost to scrape Sreality?

Sreality Scraper reads directly from Sreality's internal JSON API -- no browser rendering needed. This makes it fast and very affordable.

| Scenario | Est. cost | Time |
|----------|-----------|------|
| 50 listings | ~$0.05 | ~30 sec |
| 500 listings | ~$0.25 | ~2 min |
| 5,000 listings | ~$1.50 | ~10 min |

### Can I integrate Sreality Scraper with other apps?

Yes. Sreality Scraper connects with any tool through [Apify integrations](https://apify.com/integrations):

- **Google Sheets** -- automatically export property data to a spreadsheet
- **Slack / Email** -- get notified when new listings match your criteria
- **Zapier / Make** -- trigger workflows when data is ready
- **Airtable** -- build a searchable property database
- **REST API** -- call the scraper programmatically from any language
- **Webhooks** -- get notified when a run finishes

### Can I use Sreality Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) to run Sreality Scraper programmatically.

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/sreality-scraper").call(run_input={
    "propertyType": "byty",
    "transactionType": "prodej",
    "location": "Praha",
    "maxResults": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['propertyTitle']} -- CZK {item['price']:,} -- {item['location']}")
```

**JavaScript:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/sreality-scraper').call({
    propertyType: 'byty',
    transactionType: 'prodej',
    location: 'Praha',
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Check the [API tab](https://apify.com/studio-amba/sreality-scraper/api) for full documentation.

### FAQ

#### What is Sreality.cz?

Sreality.cz is Czech Republic's largest and most-visited real estate portal, operated by Seznam.cz (Czech Republic's leading internet company). It lists over 100,000 active properties including apartments (byty), houses (domy), and land (pozemky) for both sale (prodej) and rent (pronajem) across all Czech regions.

#### How does Sreality Scraper work?

It reads directly from Sreality's internal JSON API (`/api/cs/v2/estates`) using HTTP requests -- no browser needed. This gives clean, structured data without needing to parse HTML. The scraper handles pagination automatically and detects the API loop that Sreality uses to prevent deep crawling.

#### What property types can I scrape?

Three types: **byty** (apartments -- the most common), **domy** (houses), and **pozemky** (land/plots). Set the `propertyType` input to filter.

#### Can I scrape both sale and rental listings?

Yes. Set `transactionType` to `"prodej"` for sales or `"pronajem"` for rentals.

#### Can I filter by price range?

Yes. Use `priceFrom` and `priceTo` to set a CZK price range. For example, apartments between 3M and 6M CZK: `priceFrom: 3000000, priceTo: 6000000`.

#### Is it legal to scrape Sreality?

This scraper extracts publicly available listing data that Sreality.cz displays to all visitors. The data is factual (prices, addresses, property specifications) and does not contain private personal information. As with any scraping tool, use the data responsibly and in compliance with applicable laws.

### Limitations

- **Czech Republic only.** Sreality.cz covers exclusively Czech real estate.
- **API pagination limit.** Sreality's API loops after approximately 100 pages on broad filters. Use price range or location filters to get full coverage of saturated markets.
- **Czech residential proxy required.** Sreality's API requires Czech IP addresses. The default proxy configuration handles this automatically on Apify.
- **Some fields may be null.** Not all sellers provide complete information -- `description`, `estateArea`, or `address` may be missing on some listings.

### Other European real estate scrapers

Combine Sreality Scraper with these actors for comprehensive European property market coverage:

- [Immoweb Scraper](https://apify.com/studio-amba/immoweb-scraper) -- Belgian real estate listings
- [Immovlan Scraper](https://apify.com/studio-amba/immovlan-scraper) -- Belgian property listings (VTM/DPG)
- [ImmoScout24 Scraper](https://apify.com/studio-amba/immoscout24-scraper) -- German real estate
- [Immowelt Scraper](https://apify.com/studio-amba/immowelt-scraper) -- German property listings
- [Immobiliare Scraper](https://apify.com/studio-amba/immobiliare-scraper) -- Italian real estate
- [Zimmo Scraper](https://apify.com/studio-amba/zimmo-scraper) -- Belgian property portal

### Your feedback

Found a bug or have a feature request? Please open an issue on the [Issues tab](https://apify.com/studio-amba/sreality-scraper/issues). We actively maintain this scraper and respond to all reports.

# Actor input Schema

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

Type of property to search for. 'byty' = apartments, 'domy' = houses, 'pozemky' = land/plots.

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

Type of listing. 'prodej' = for sale, 'pronajem' = for rent.

## `searchQuery` (type: `string`):

Filter results by keyword in title or locality, e.g. 'Praha', 'Brno', '3+kk'. Applied as text filter on API results.

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

Location to search in (Czech city or region name), e.g. 'Praha', 'Brno', 'Ostrava', 'Plzen'. Sent to Sreality API locality filter.

## `priceFrom` (type: `integer`):

Minimum price in CZK. For sales: e.g. 2000000. For rent: e.g. 10000.

## `priceTo` (type: `integer`):

Maximum price in CZK. For sales: e.g. 8000000. For rent: e.g. 30000.

## `maxResults` (type: `integer`):

Maximum number of listings to return. Set to 0 for unlimited.

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

Proxy settings. Czech residential proxy recommended for best results.

## Actor input object example

```json
{
  "propertyType": "byty",
  "transactionType": "prodej",
  "searchQuery": "Praha",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}
```

# 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 = {
    "propertyType": "byty",
    "transactionType": "prodej",
    "searchQuery": "Praha",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/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 = {
    "propertyType": "byty",
    "transactionType": "prodej",
    "searchQuery": "Praha",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/sreality-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 '{
  "propertyType": "byty",
  "transactionType": "prodej",
  "searchQuery": "Praha",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}' |
apify call studio-amba/sreality-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/sreality-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/LBl6REpfF83erXzJy/builds/fvN96DBHQEMVSiAOb/openapi.json
