# Bezrealitky.cz Scraper (`solidcode/bezrealitky-ck-scraper`) Actor

\[💰 $0.045 / 1K] Scrape direct-owner (no-agency) property listings from Bezrealitky.cz — prices, area, layout, location, GPS, photos, and seller details. Filter by sale/rent, type, layout, price, and area, or paste search URLs.

- **URL**: https://apify.com/solidcode/bezrealitky-ck-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 10 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Bezrealitky.cz Scraper

Pull direct-owner property listings from Bezrealitky.cz — the Czech Republic's largest "without real-estate-agency" (FSBO) marketplace — for both sale and rent, with prices in CZK, GPS coordinates, PENB energy ratings, and full photo galleries. Around 88% of results are posted straight by the private owner — 90% once you count the owner's own property sold through Bezrealitky's assisted-sale service — and every row says which, so you can keep only the ones with no middleman. Built for real-estate investors, market researchers, and lead-generation teams who need fresh, direct-from-owner Czech property data without agency markup or stale portal exports.

### Why This Scraper?

- **Every row labelled by who is actually selling** — `sellerType` is read off the listing itself, not assumed: `owner` for the 87.8% posted straight by the private owner, and `owner_via_bezrealitky` (90.3% cumulative), `developer`, `property_manager`, or `partner` for the rest. Filter to `owner` and you have a pure no-middleman list.
- **6 property types covered** — flats/apartments, houses, land, commercial/office, garages, and cottages/recreational, across both **for-sale and for-rent** markets.
- **8 land categories, so building plots stay separate from farmland** — filter land to `Building plot`, `Commercial plot`, `Field (arable)`, `Meadow`, `Forest`, `Pond / water`, `Garden`, or `Other`. Bulk agricultural parcels dominate an unfiltered land search and drag its median down to 80 CZK/m²; filter to building plots and the measured median jumps to 2,854 CZK/m² — a 35× difference.
- **Full Czech apartment-layout filtering** — match exact dispositions from `1+kk` and `1+1` through `5+kk`, `5+1`, plus `6 and more`, `Atypical`, `Single room`, and `Other` — the native Czech "X+kk / X+1" room-layout system.
- **GPS coordinates on every listing** — `latitude` and `longitude` ready for mapping, geospatial valuation, and proximity analysis.
- **PENB energy-performance rating (class A–G)** — the official Czech building energy certificate, extracted from each detail page for compliance and valuation work.
- **Complete photo gallery** — up to ~20 images per listing plus a dedicated `mainImage`, not just a single thumbnail.
- **Pricing in CZK with rental utilities split out** — sale price or monthly rent, plus a separate `charges` field for monthly utilities/fees on rentals.
- **3 output languages** — Czech, English, and Slovak localized titles, addresses, and tags from one run.
- **Paste-a-URL or build-a-search** — drop in any Bezrealitky search URL and its filters are honored, or compose a search from location, layout, price, and area filters covering the entire Czech Republic.

### Use Cases

**Real-Estate Investment & Deal Sourcing**

- Surface direct-from-owner deals before they reach agency channels
- Track new (`isNew`) and reserved (`isReserved`) listings to spot fresh inventory
- Build buy-side pipelines filtered by region, layout, and budget

**Market Research & Price Analysis**

- Analyze CZK sale-price and monthly-rent trends by region and apartment layout
- Compare price-per-m² across `1+kk` studios versus `3+1` family flats
- Monitor inventory volume by property type across the whole country

**Lead Generation**

- Reach property owners directly — zero estate-agency listings across 945 measured rows, and every row carries its own `sellerType` and `listingSource`
- Segment leads by transaction type, location, and price band
- Feed structured CZK listings straight into your CRM

**Relocation & Rental Search**

- Filter rentals by exact layout, floor area in m², and monthly budget
- Pull English or Slovak listing text for non-Czech-speaking renters
- Use GPS coordinates to shortlist by commute and neighborhood

**Proptech & Data Products**

- Power map-based search with per-listing `latitude`/`longitude`
- Enrich valuation models with PENB energy class and floor/land area
- Ingest photo galleries for listing-quality and computer-vision pipelines

### Getting Started

#### Flats for Sale in Prague

```json
{
  "transactionType": "sale",
  "propertyType": "flat",
  "location": "Praha",
  "maxResults": 50
}
```

#### Filtered Rental Search by Layout and Budget

```json
{
  "transactionType": "rent",
  "propertyType": "flat",
  "location": "Brno",
  "dispositions": ["2+kk", "2+1"],
  "priceTo": 25000,
  "areaFrom": 45,
  "language": "en",
  "maxResults": 200
}
```

#### Building Plots Only (Excluding Farmland)

```json
{
  "transactionType": "sale",
  "propertyType": "land",
  "landType": "building",
  "maxResults": 100
}
```

#### Paste a Bezrealitky Search URL

```json
{
  "startUrls": [
    "https://www.bezrealitky.cz/vyhledat/prodej-byt"
  ],
  "includeDetails": true,
  "maxResults": 0
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | `["https://www.bezrealitky.cz/vyhledat/prodej-byt"]` | One or more Bezrealitky search or listing URLs. Any filters already in the URL — type, price, layout, location — are applied automatically. When provided, the search filters below are ignored. |

#### Build a Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `transactionType` | string | `For Sale` | Whether to find properties `For Sale` or `For Rent`. |
| `propertyType` | string | `Flat / Apartment` | Property kind: `Flat / Apartment`, `House`, `Land`, `Commercial / Office`, `Garage`, or `Cottage / Recreation`. |
| `landType` | string | *(all land)* | Land category, used only when `propertyType` is `Land`: `Building plot`, `Commercial plot`, `Field (arable)`, `Meadow`, `Forest`, `Pond / water`, `Garden`, or `Other`. Leave empty to include every kind of land. |
| `location` | string | *(empty)* | City, district, or region name (e.g. `Praha`, `Brno`, `Jihomoravský kraj`). Leave empty to search the whole Czech Republic. |
| `dispositions` | array | *(all)* | Czech apartment layouts to include: `1+kk`, `1+1`, `2+kk`, `2+1`, `3+kk`, `3+1`, `4+kk`, `4+1`, `5+kk`, `5+1`, `6 and more`, `Atypical`, `Single room`, `Other`. Select one or more, or leave empty for all. |

#### Price & Size

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `priceFrom` | integer | *(none)* | Lowest price to include, in CZK. For rentals this is the monthly rent. |
| `priceTo` | integer | *(none)* | Highest price to include, in CZK. For rentals this is the monthly rent. |
| `areaFrom` | integer | *(none)* | Smallest area to include, in square metres. Floor area for flats, houses, cottages, garages and commercial units; plot size for land. |
| `areaTo` | integer | *(none)* | Largest area to include, in square metres. Floor area for flats, houses, cottages, garages and commercial units; plot size for land. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum number of listings to return across all URLs and searches. Set to `0` for no limit. |
| `includeDetails` | boolean | `true` | Open each listing's detail page for the full description, all photos, energy rating, and seller details where available. Slower but much richer. |
| `language` | string | `Czech` | Language for listing text and labels: `Czech`, `English`, or `Slovak`. |

### Output

```json
{
  "id": "1032685",
  "url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/1032685-nabidka-prodej-bytu-praha",
  "title": "Prodej bytu 2+kk, 58 m², Praha 5 - Smíchov",
  "transactionType": "sale",
  "propertyType": "flat",
  "disposition": "2+kk",
  "address": "Nádražní, Praha 5 - Smíchov",
  "city": "Praha",
  "region": "Praha",
  "price": 7900000,
  "currency": "CZK",
  "charges": null,
  "area": 58,
  "landArea": null,
  "latitude": 50.0688,
  "longitude": 14.4071,
  "energyRating": "C",
  "images": [
    "https://img.bezrealitky.cz/1032685/photo-1.jpg",
    "https://img.bezrealitky.cz/1032685/photo-2.jpg"
  ],
  "mainImage": "https://img.bezrealitky.cz/1032685/photo-1.jpg",
  "isNew": true,
  "isReserved": false,
  "tags": ["balcony", "elevator", "cellar"],
  "description": "Nabízíme k prodeji světlý byt 2+kk o výměře 58 m²...",
  "sellerName": null,
  "sellerType": "owner",
  "listingSource": null,
  "scrapedAt": "2026-06-10T09:14:00.000Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique Bezrealitky listing identifier. |
| `url` | string | Direct link to the listing's detail page. |
| `title` | string | Listing headline (localized to the chosen language). |
| `transactionType` | string | `sale` or `rent`. |
| `propertyType` | string | `flat`, `house`, `land`, `commercial`, `garage`, or `cottage`. |
| `disposition` | string | Czech layout code (e.g. `2+kk`). `null` for land, garages, and commercial. |
| `tags` | array | Feature tags such as balcony, elevator, or cellar (localized). |
| `description` | string | Full listing description. Populated when `includeDetails` is on. |
| `isNew` | boolean | Whether the listing is flagged as newly added. |
| `isReserved` | boolean | Whether the listing is currently reserved. |
| `scrapedAt` | string | UTC timestamp of when the record was collected. |

#### Location & GPS

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Street-level address of the property. |
| `city` | string | City name, localized to the chosen language. Always populated. |
| `region` | string | Administrative region (Czech *kraj*), e.g. `Jihomoravský kraj`, `Středočeský kraj`, or `Praha`. Localized to the chosen language. |
| `latitude` | number | GPS latitude for mapping and proximity analysis. |
| `longitude` | number | GPS longitude for mapping and proximity analysis. |

#### Pricing & Size

| Field | Type | Description |
|-------|------|-------------|
| `price` | integer | Sale price, or monthly rent for rentals. |
| `currency` | string | Currency of the price (`CZK`). |
| `charges` | integer | Monthly utilities/service fees, rentals only. `null` on sales, and on rentals where the owner did not state them (some list them in the description text instead). |
| `area` | number | Floor area in m². |
| `landArea` | number | Land area in m². Populated only for land and houses; otherwise `null`. |
| `energyRating` | string | PENB energy-performance class (A–G). Populated when `includeDetails` is on. |

#### Media & Seller

| Field | Type | Description |
|-------|------|-------------|
| `mainImage` | string | URL of the primary listing photo. |
| `images` | array | Full photo gallery (up to ~20 image URLs with details on). |
| `sellerType` | string | Who is selling: `owner` (posted by the private owner, 87.8% of measured rows), `owner_via_bezrealitky` (the owner's property, listed through Bezrealitky's paid assisted-sale service), `developer` (new-build project), `agency`, `property_manager`, or `partner` (a named third-party feed). |
| `listingSource` | string | The named feed a listing came from, e.g. `BZR_COMFORT`, `EBM_GROUP`, `HEIMSTADEN`, `FLATIO`. `null` when the owner posted it on Bezrealitky directly. |
| `sellerName` | string | Seller's name where available. Commonly `null` (login-gated by the site). |

### Tips for Best Results

- Keep **Include Full Listing Details** on to get the PENB energy rating, the complete photo gallery, and the full description — with it off, only the lighter search-result fields are returned.
- Use the **Layout (disposition)** filter to match exact Czech apartment layouts: pick `2+kk` and `2+1` together to capture both kitchenette and separate-kitchen variants of the same room count.
- Searching land? Set **Land Category** to `Building plot`. Left empty, a land search returns the whole plot market, and the bulk agricultural listings that dominate it will drag your median price-per-m² down by roughly 35× (80 CZK/m² unfiltered versus 2,854 CZK/m² for building plots). On a land search the **Minimum/Maximum Area** filters measure plot size, so `areaFrom: 500` + `areaTo: 2000` gives you buildable-sized parcels rather than hectare-scale fields.
- Start with a `maxResults` of 20–50 to validate your filters, then raise it (or set `0` for unlimited) once the output looks right.
- Filter the output on `sellerType == "owner"` if you want strictly no-middleman leads — that drops the 12.2% of rows coming from developer, partner, manager and assisted-sale feeds — closer to a quarter on rental searches, where rental-manager portfolios are most common.
- Search URLs always win over the search filters — when you paste a `startUrls` entry, set the filters aside and let the URL drive the query.
- For non-Czech audiences, set **Language** to `English` or `Slovak` to get localized titles, addresses, and tags in a single run.
- Type any Czech place name in **Location** — a city, district, or region — and it resolves to the right area automatically; leave it empty to sweep the whole country.
- For market studies, combine `priceFrom`/`priceTo` and `areaFrom`/`areaTo` to band listings into comparable price-per-m² cohorts before you export.

### Pricing

**From $0.045 per 1,000 results** — among the most affordable ways to monitor the entire Czech direct-owner property market. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.0054 | $0.0051 | $0.0048 | $0.0045 |
| 1,000 | $0.054 | $0.051 | $0.048 | $0.045 |
| 10,000 | $0.54 | $0.51 | $0.48 | $0.45 |
| 100,000 | $5.40 | $5.10 | $4.80 | $4.50 |

A "result" is one property listing returned to your dataset. **No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.**

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This scraper collects publicly available property listing data for legitimate purposes such as market research, investment analysis, and lead generation. You are responsible for using the data in compliance with Bezrealitky.cz's terms of service, applicable data-protection laws (including the GDPR), and any local regulations governing real-estate data and direct outreach. Do not use collected personal data for unsolicited contact that violates consent requirements, and respect the rights of listing owners.

# Actor input Schema

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

Paste one or more Bezrealitky search or listing URLs (e.g. https://www.bezrealitky.cz/vyhledat/prodej-byt). Any filters already in the URL — type, price, layout, location — are applied automatically. When you provide URLs, the search filters below are ignored.

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

Whether to find properties for sale or for rent. Only applies when no Search URLs are provided above.

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

The kind of property to find. Only applies when no Search URLs are provided.

## `landType` (type: `string`):

Which kind of land to find — building plots, farmland, forest, and so on. Only applies when Property Type is set to Land (it is ignored for flats, houses and the rest). Leave empty to include every kind of land, which is mostly bulk agricultural parcels. Only applies when no Search URLs are provided.

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

City, district, or region to search in (e.g. 'Praha', 'Brno', 'Jihomoravský kraj'). Leave empty to search the whole Czech Republic. Only Czech properties are returned either way. Only applies when no Search URLs are provided.

## `dispositions` (type: `array`):

Czech apartment layouts to include (e.g. 2+kk means two rooms plus a kitchenette). Select one or more, or leave empty for all. Mostly relevant for flats and houses.

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

Lowest price to include, in CZK. For rentals this is the monthly rent. Leave empty for no minimum.

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

Highest price to include, in CZK. For rentals this is the monthly rent. Leave empty for no maximum.

## `areaFrom` (type: `integer`):

Smallest area to include, in square metres. For flats, houses, cottages, garages and commercial units this is the floor area; for Land it is the plot size. Leave empty for no minimum.

## `areaTo` (type: `integer`):

Largest area to include, in square metres. For flats, houses, cottages, garages and commercial units this is the floor area; for Land it is the plot size. Leave empty for no maximum.

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

Maximum number of listings to return across all URLs and searches. Set to 0 for no limit. Tip: start with 20–50 to test, then increase.

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

Open each listing's detail page for the full description, all photos, energy rating, and seller contact where available. Slower but much richer. When off, only the data visible in search results is returned.

## `language` (type: `string`):

Language for listing text and labels. Bezrealitky offers Czech, English, and Slovak.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.bezrealitky.cz/vyhledat/prodej-byt"
  ],
  "transactionType": "sale",
  "propertyType": "flat",
  "dispositions": [],
  "maxResults": 100,
  "includeDetails": true,
  "language": "cs"
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped property listings with key fields.

# 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 = {
    "startUrls": [
        "https://www.bezrealitky.cz/vyhledat/prodej-byt"
    ],
    "transactionType": "sale",
    "propertyType": "flat",
    "location": "",
    "dispositions": [],
    "maxResults": 100,
    "includeDetails": true,
    "language": "cs"
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/bezrealitky-ck-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 = {
    "startUrls": ["https://www.bezrealitky.cz/vyhledat/prodej-byt"],
    "transactionType": "sale",
    "propertyType": "flat",
    "location": "",
    "dispositions": [],
    "maxResults": 100,
    "includeDetails": True,
    "language": "cs",
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/bezrealitky-ck-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 '{
  "startUrls": [
    "https://www.bezrealitky.cz/vyhledat/prodej-byt"
  ],
  "transactionType": "sale",
  "propertyType": "flat",
  "location": "",
  "dispositions": [],
  "maxResults": 100,
  "includeDetails": true,
  "language": "cs"
}' |
apify call solidcode/bezrealitky-ck-scraper --silent --output-dataset

```

## MCP server setup

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