# reality.idnes.cz Scraper — Czech Property & Prices (`logiover/reality-idnes-cz-scraper`) Actor

Scrape reality.idnes.cz Czech property listings: price in CZK, Czech layout code (3+1, 2+kk) and floor area as separate columns, address, property type and deal type. Sale, rent and auctions, any region. Keyless. JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/reality-idnes-cz-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, Lead generation
- **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.
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

## reality.idnes.cz Scraper — Czech Property & Prices

Export property listings from **reality.idnes.cz**, the real-estate portal of iDNES — price in CZK, Czech layout code, floor area and address — to JSON, CSV or Excel. Keyless, no login.

### What does reality.idnes.cz Scraper do?

reality.idnes.cz carries a broad mix of agency and developer stock across the whole country, and renders results server-side, so this Actor reads them without a browser.

The detail worth knowing about is the **layout code**. Czech listings describe a property as 3+1 or 2+kk — rooms plus a separate or kitchenette-style kitchen — and that code is the field Czech buyers actually filter on. The site glues it into one title line together with the floor area: "bytu 3+1 118 m²". This Actor splits them into a `layout` column and a numeric `areaSqm` column.

That split needs care, and it is a good example of why: Czech numbers use a space as the thousands separator, so "3+1 118 m²" reads as the single number 1 118 unless the layout is removed from the string first. Get that wrong and every three-room flat in the export appears to be a thousand square metres.

Property type and deal type are taken from the listing URL, which is built from them, rather than from display text that changes with the interface language.

### Who is it for?

- **Estate agencies** tracking competitor stock and pricing by region.
- **Investors** comparing price per m² and by layout across Czech cities.
- **Analysts** measuring supply, asking prices and auction volume.
- **Portal builders** who need a structured Czech feed.
- **Relocation services** monitoring rental supply in Prague and Brno.

### Use cases

- Pull every 2+kk apartment for sale in Prague with price and area.
- Compare price per m² between Prague, Brno and Ostrava.
- Track rental supply by layout in a single district.
- Monitor auction listings separately from ordinary sales.
- Watch new supply weekly on a schedule.

### Why use this Actor?

- **Layout and area as separate columns**, correctly split.
- **Price as a real number** in CZK, with "price on request" left empty rather than faked as zero.
- **Deal and property type from the URL**, so they stay stable.
- **Sale, rent and auctions** from one dropdown.
- **Keyless and browserless** — no login, no headless Chrome, low cost per row.

### What data can you extract?

Every row carries the listing ID, title and URL, deal type, property type and its slug, the Czech layout code, floor area in m², address, price as label and number with currency, any promotional badge, and the cover image.

### How to use it

1. Choose the **deal type** — sale, rent or auction.
2. Pick a **property type**.
3. Enter a **region slug** from a search URL: `praha`, `brno`, `ostrava`, `jihomoravsky-kraj`.
4. Optionally set a price band, then set **Maximum results** and run.

### Input example

```json
{
  "deal": "prodej",
  "propertyType": "byty",
  "region": "brno",
  "minPrice": 3000000,
  "maxPrice": 9000000,
  "maxResults": 1000
}
```

### Notes and limits

- Prices are asking prices. Some listings publish "cena na dohodě" (price by agreement); those keep the label and leave the numeric price empty.
- The card carries no agency name — that is on the detail page, not the search result — so it is not exported rather than guessed.
- Addresses are street and district level, which is what the portal publishes; there are no coordinates on the result cards.
- The badge column is sparse by design: it only appears on promoted listings.
- Listings are agency and owner content; check the site's terms and applicable law for how you reuse them.

### FAQ

**Do I need an account?**
No. Search results are public and the Actor needs nothing from you.

**What does 2+kk mean?**
Two rooms plus a kitchenette. 3+1 means three rooms plus a separate kitchen. It is the standard Czech way of describing a flat's layout.

**Where do I get the region slug?**
Run a search on the site and copy the segment after the property type in the URL.

**Are auctions included?**
Yes — choose "Auctions" as the deal type.

**How am I charged?**
Pay per result — you pay for the listings delivered.

# Actor input Schema

## `deal` (type: `string`):

Sale, rental or auction listings.

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

Which kind of property to list.

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

Region or city slug from the search URL, e.g. praha, brno, ostrava, jihomoravsky-kraj. Leave as praha to start.

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

Only return listings at or above this price. 0 disables the filter.

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

Only return listings at or below this price. 0 disables the filter.

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

Stop after this many listings. The site renders about 25 per page and the Actor walks pages until the target is met.

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

The site renders its listings server-side; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "deal": "prodej",
  "propertyType": "byty",
  "region": "praha",
  "minPrice": 0,
  "maxPrice": 0,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listingId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `listingUrl` (type: `string`):

No description

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

No description

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

No description

## `propertyTypeSlug` (type: `string`):

No description

## `layout` (type: `string`):

No description

## `areaSqm` (type: `string`):

No description

## `address` (type: `string`):

No description

## `priceLabel` (type: `string`):

No description

## `priceAmount` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `badge` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `country` (type: `string`):

No description

## `source` (type: `string`):

No description

## `scrapedAt` (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 = {
    "deal": "prodej",
    "propertyType": "byty",
    "region": "praha",
    "minPrice": 0,
    "maxPrice": 0,
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/reality-idnes-cz-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 = {
    "deal": "prodej",
    "propertyType": "byty",
    "region": "praha",
    "minPrice": 0,
    "maxPrice": 0,
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/reality-idnes-cz-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 '{
  "deal": "prodej",
  "propertyType": "byty",
  "region": "praha",
  "minPrice": 0,
  "maxPrice": 0,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/reality-idnes-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/reality-idnes-cz-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/tYfPvQ4puoymnO1ug/builds/VRO8pmF3TiQyg8lhD/openapi.json
