# Sreality Scraper (`crawlerbros/sreality-scraper`) Actor

Scrape sreality.cz - the Czech Republic's largest real-estate portal. Search flats, houses, land, commercial space and auctions by deal type, location, price and area, or fetch full listing details (description, seller contact, building specs) by URL.

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

## Pricing

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

Scrape real-estate listings from [sreality.cz](https://www.sreality.cz) — the Czech Republic's largest property portal, covering flats, houses, land, commercial space and auctions nationwide.

### What does this actor do?

Sreality Scraper searches sreality.cz by deal type, property category, location, price and area, returning structured listing data — no login, no API key, no captcha-solving required. You can also fetch full details (description, seller contact, building specs) for specific listings by pasting their URL.

### Output data

Each result is a JSON record with (where available):

**Search mode**

- `estateId`, `title`, `dealType` (sale/rent/auction/shares), `category`, `subCategory` (e.g. `2+1`)
- `price`, `pricePerSqm`, `priceCurrency` (`CZK`), `priceNote`
- `usableAreaSqm` (parsed from the listing title)
- `city`, `cityPart`, `district`, `region`, `street`, `houseNumber`, `zip`, `country`
- `latitude`, `longitude`
- `imageUrls`, `hasVideo`, `hasMatterport`
- `agencyName`, `agencyLogoUrl`, `sourceUrl`

**Detail mode (`byUrls`) — everything above plus:**

- `description`, `sellerName`, `sellerEmail`, `sellerPhone`
- `floorNumber`, `totalFloors`, `buildingType`, `buildingCondition`, `ownership`, `energyPerformanceCertificate`, `furnishing`
- `hasBalcony`/`balconyAreaSqm`, `hasCellar`/`cellarAreaSqm`, `hasGarage`, `hasTerrace`/`terraceAreaSqm`, `hasLoggia`/`loggiaAreaSqm`, `hasParking`, `isLowEnergy`, `hasElevator`, `isBarrierFree`
- `listedSince`, `lastEdited`, `readyDate`, `isExclusiveListing`

Every record also carries `recordType` and `scrapedAt` (UTC ISO timestamp). Fields that sreality.cz doesn't provide for a given listing are simply omitted — you'll never see `null` or empty placeholders.

### Input options

| Field | Description |
|---|---|
| `mode` | `search` (filter-based search) or `byUrls` (fetch specific listings) |
| `dealType` | `sale`, `rent`, `auction`, or `shares` (fractional/co-ownership sale) |
| `category` | `flat`, `house`, `land`, `commercial`, or `other` |
| `locationQuery` | Free-text Czech place name — city, district, or region (e.g. `Praha`, `Brno`, `Praha 9`). Takes priority over `region`. |
| `region` | One of the 14 Czech administrative regions (kraje) — used only when `locationQuery` is empty |
| `roomCount` | (category=`flat`) Exact room layout, e.g. `2+kk`, `3+1`, `6 and more`, `Atypical` |
| `priceMin` / `priceMax` | Price range in CZK |
| `areaMin` / `areaMax` | Usable-area range in m² |
| `keyword` | Only keep listings whose title/city/district contains this text |
| `buildingCondition` | Building condition (e.g. `newBuild`, `good`, `underReconstruction`) — applied server-side |
| `ownership` | Ownership type — `private`, `cooperative`, or `municipal` — applied server-side |
| `amenities` | One or more amenities (elevator, balcony, terrace, loggia, cellar, garage, parking, barrier-free, garden) — applied server-side, verified for `category=flat` |
| `detailUrls` | (mode=`byUrls`) Full sreality.cz listing URLs to fetch |
| `maxItems` | Maximum number of listings to return |

### Example input

```json
{
  "mode": "search",
  "dealType": "sale",
  "category": "flat",
  "locationQuery": "Praha",
  "priceMax": 10000000,
  "maxItems": 30
}
```

### Example: fetch specific listings

```json
{
  "mode": "byUrls",
  "detailUrls": [
    "https://www.sreality.cz/detail/prodej/byt/2+1/praha-prosek-veltruska/1791086668"
  ]
}
```

### Use cases

- **Market research** — track average sale/rent prices per city or district over time.
- **Investment screening** — filter by price and area to find undervalued properties.
- **Lead generation** — pull agency/seller contact details for outreach.
- **Portfolio monitoring** — re-fetch specific listing URLs to detect price changes.

### FAQ

**Does this require a sreality.cz account or API key?**
No. The actor reads sreality.cz's public listing pages directly.

**Can I search outside the Czech Republic?**
No — sreality.cz only covers properties within the Czech Republic.

**Why is `sellerEmail` / `sellerPhone` sometimes missing?**
Some listings are posted without public contact details, or the agency only shows a contact form. The actor never invents data — a missing field means sreality.cz didn't publish it.

**How many listings can I get per run?**
Up to `maxItems` (default 30, max 2000). Large `maxItems` values will take longer since sreality.cz paginates at ~22 listings per page.

# Actor input Schema

## `mode` (type: `string`):

Search listings by filters, or fetch full details for specific listing URLs.

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

Sale, rent, auction, or fractional-ownership-share listings.

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

Type of property to search.

## `locationQuery` (type: `string`):

Free-text Czech place name to narrow results, e.g. `Praha`, `Brno`, `Praha 9`, `Jihomoravský kraj`. Takes priority over `region` if both are set. Leave empty (and `region` unset) to search nationwide.

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

Restrict results to one of the 14 Czech administrative regions. Ignored if `locationQuery` is set. Leave both empty to search nationwide.

## `roomCount` (type: `string`):

Only keep flat listings with this exact room layout, e.g. `2+kk`. Only applies to `category=flat`; ignored for other categories.

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

Minimum total price in Czech korunas.

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

Maximum total price in Czech korunas.

## `areaMin` (type: `integer`):

Minimum usable floor area in square meters.

## `areaMax` (type: `integer`):

Maximum usable floor area in square meters.

## `keyword` (type: `string`):

Only keep listings whose title/city/district contains this text (case-insensitive).

## `buildingCondition` (type: `string`):

Restrict results to a single building condition, applied server-side by sreality.cz.

## `ownership` (type: `string`):

Restrict results to a single ownership type, applied server-side by sreality.cz.

## `amenities` (type: `array`):

Only keep listings with all of the selected amenities, applied server-side by sreality.cz. Verified against sreality's own `category=flat` filter chips; may not affect other categories.

## `detailUrls` (type: `array`):

Full sreality.cz listing-detail URLs, e.g. `https://www.sreality.cz/detail/prodej/byt/2+1/praha-prosek-veltruska/1791086668`.

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

Maximum number of listings to scrape.

## Actor input object example

```json
{
  "mode": "search",
  "dealType": "sale",
  "category": "flat",
  "locationQuery": "Praha",
  "amenities": [],
  "detailUrls": [],
  "maxItems": 30
}
```

# Actor output Schema

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

Dataset containing all scraped sreality.cz listings.

# 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 = {
    "mode": "search",
    "dealType": "sale",
    "category": "flat",
    "locationQuery": "Praha",
    "detailUrls": [],
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/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 = {
    "mode": "search",
    "dealType": "sale",
    "category": "flat",
    "locationQuery": "Praha",
    "detailUrls": [],
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/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 '{
  "mode": "search",
  "dealType": "sale",
  "category": "flat",
  "locationQuery": "Praha",
  "detailUrls": [],
  "maxItems": 30
}' |
apify call crawlerbros/sreality-scraper --silent --output-dataset

```

## MCP server setup

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