Sreality Scraper - Czech Property Listings & Prices
Pricing
from $1.32 / 1,000 property searches
Sreality Scraper - Czech Property Listings & Prices
Scrape Sreality.cz, the Czech Republic's biggest property portal. Prices in CZK and per m2, disposition, usable area, floor, panel or brick, energy label, GPS and agency.
Pricing
from $1.32 / 1,000 property searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Sreality Scraper — Czech Property Listings & Prices 🏠
🎉 Every listing on Sreality with the fields a Czech buyer actually filters on: cena za m², disposition, panel or brick, and the energy label
Built for property analysts, realitní kanceláře, proptech teams and investors tracking the Czech market
🔎 What is the Sreality Scraper — and when should you use it?
The Sreality Scraper turns public Czech property listings from Sreality.cz, the country's largest portal into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: apartments, houses, land or commercial property anywhere in the Czech Republic, for sale, rent or auction. Every row carries the asking price in CZK, the price per square metre, the disposition in Czech layout notation (1+kk, 2+1, 3+kk), usable area, the full address with GPS, photos and the listing agency. Switch on full detail and you also get the floor, panel or brick construction, building condition, personal or cooperative ownership, the energy label, the amenities and the named agent with a phone and email.
Use something else when: the property is not on Sreality.cz. Use ImmobilienScout24 Property Scraper for German residential listings, the neighbouring market Czech cross-border buyers compare against. Use Otodom Property Scraper for Polish listings, the other large Central European portal on the same buyer's shortlist. Use Smart Idealista Scraper for Spanish, Italian and Portuguese listings for a southern-Europe comparison set. This actor covers Sreality's public listings. Sold prices are not published anywhere on Sreality, so no column here reports what a property actually transacted for, and Czech stock that is only on Bezrealitky or Reality iDNES is out of scope.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/sreality-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want Czech property listings and prices from Sreality.cz using the Apify Actor `sian.agency/sreality-property-scraper`.Use it when I need: apartments, houses, land or commercial property anywhere in the Czech Republic, for sale, rent or auction. Every row carries the asking price in CZK, the price per square metre, the disposition in Czech layout notation (1+kk, 2+1, 3+kk), usable area, the full address with GPS, photos and the listing agency. Switch on full detail and you also get the floor, panel or brick construction, building condition, personal or cooperative ownership, the energy label, the amenities and the named agent with a phone and email.Don't use it when: the property is not on Sreality.cz — use immobilienscout24-property-scraper or otodom-property-scraper or smart-idealista-scraper instead.How to call it: give `propertyType` (`byty`, `domy`, `pozemky`, `komercni`, `ostatni`) and `transaction` (`prodej`, `pronajem`, `drazby`), then put Czech region or district names in `regions` (`Praha`, `Jihomoravsky kraj`, `Brno-mesto`, `Olomouc` — accents optional, empty means the whole country). Narrow with `dispositions`, `minPrice`, `maxPrice`, `minArea`, `maxArea`, `buildingTypes`, `ownership` and `maxAgeDays`. `includeDetails` adds the full record and the agent's contact details for an extra charge per property. To expand listings you already have, set `operation` to `detail` and pass `propertyUrls`; to reuse a search you built on sreality.cz, paste it into `searchUrls`.Start with this input:{"operation": "search","propertyType": "byty","transaction": "prodej","regions": ["Hlavní město Praha"],"dispositions": ["2+kk","3+kk"],"maxResults": 200}Ask me which Czech region or district and whether they want sale or rent, and whether they need the agent contact details that full detail adds, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every 2+kk and 3+kk flat for sale in Prague and rank them by price per square metre.
- Find brick-built flats in Brno-mesto with personal ownership, listed in the last three days, and give me the agency for each.
- Compare asking rents against sale prices for 1+kk flats across all 14 Czech regions so I can see gross yield by region.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/sreality-property-scraper.md.
📋 Overview
Sreality.cz is the portal Czech buyers actually use. Around 100,000 live listings, and usually the first place an agency posts a new instruction. This Actor reads it the way an analyst wants it read: one row per property, typed values, no HTML.
What you get:
- ✅ The Czech fields that decide a deal: price in koruna and price per square metre, disposition in local notation (1+kk, 2+1, 3+kk) and usable area on every row. Switch on full detail and the floor, panelová or cihlová construction, the energy label and the ownership type come with it.
- ⚡ 200 properties per request: a whole region in a single run, and 200 rows arrive in under three seconds.
- 🎯 Typed values, not scraped text: price arrives as 9490000, not "9 490 000 Kč". Latitude and longitude are floats. Usable area is a number.
- 💰 No charge for failures: you pay per property returned. Error rows cost nothing.
- 💎 Region names, not numeric ids: type Praha, Jihomoravský kraj or Brno-město. Areas resolve against Sreality's own live codebook, so a renamed district works the same day.
- ❓ Honest prices: a listing marked "info o ceně" comes back flagged, with an empty price rather than a zero that would poison every average you compute.
✨ Features
- 🔍 Search all 14 regions and 86 districts: by name or SEO slug, accents optional. Leave the field empty for the whole country.
- 🏘️ Every section of the portal: apartments, houses, land, commercial and other — for sale, for rent or at auction.
- 🚪 Czech disposition filters: 1+kk through 5+1, plus "6 a více" and Atypický, using the same labels the site does.
- 🧱 Panel versus brick: the construction filter Czech buyers apply most, alongside personal or cooperative ownership.
- 🛡️ A filter it cannot honour stops the run: a mistyped disposition or building type returns an error row naming the accepted values, and costs nothing. It is never dropped, which would hand you the wider unfiltered set and bill you for all of it.
- 📐 Area and price bands: usable area in m² and price in CZK, each with a floor and a ceiling you set.
- 🗓️ Listed in the last N days: run it daily on a one-day window and pay only for what is new.
- 📄 Optional full detail: one switch adds the description, floor, energy label, amenities, view count, agency and named agent.
- 🌐 Paste any Sreality search URL: the deal type, property type and area in the path are read straight off it.
- 📍 GPS on every row: map it, geofence it, join it to your own boundaries.
- 🔢 A hard row budget: set the maximum and the run stops there. No surprise bills.
🎬 Quick Start
Pick a property type and a deal type, name an area, press Start. The Actor paginates, parses and writes one row per property to your dataset — then saves an HTML run report next to it.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~sreality-property-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation":"search","propertyType":"byty","transaction":"prodej","regions":["Praha"],"maxResults":200}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose what and how
Pick a property type — Apartments, Houses, Land, Commercial or Other — and a deal type: For sale, For rent or Auction.
Step 2: Name your areas
Type Czech region, district or city names the way you say them: Praha, Jihomoravský kraj, Brno-město, Olomouc. Accents are optional. Add several and each one runs its own query in the same run.
Step 3: Set a row budget and run
Max properties caps the whole run. Turn on Fetch full detail if you need the floor, the energy label or the agent's contact details.
That's it! In under a minute, you'll have:
- One clean row per property, ready for CSV or Excel
- Price and price per square metre as numbers you can sort on
- An HTML report showing exactly what you were charged for
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search (default) or detail |
propertyType | string | No | byty, domy, pozemky, komercni, ostatni |
transaction | string | No | prodej, pronajem, drazby |
regions | array | No | Czech region, district or city names, e.g. ["Praha","Brno-město"]. Empty means the whole country |
dispositions | array | No | 1+kk, 2+1, 3+kk, 6 a více, Atypický … |
minPrice / maxPrice | integer | No | Price bounds in CZK (monthly rent for rentals). 0 means no bound |
minArea / maxArea | integer | No | Usable area bounds in m². 0 means no bound |
buildingTypes | array | No | Panelová, Cihlová, Dřevostavba, Smíšená … (panel and brick also accepted) |
ownership | string | No | any, osobni, druzstevni, statni |
maxAgeDays | integer | No | Only listings published within this many days. 0 means any age |
sort | string | No | -date, price_asc, price_desc |
maxResults | integer | No | Whole-run row budget (default 100) |
includeDetails | boolean | No | Add description, floor, energy label, amenities, agency and agent |
propertyUrls | array | No | Listing URLs or bare numeric IDs, for the detail operation |
searchUrls | array | No | Sreality search URLs to read filters from |
Example — flats for sale in Prague, 2+kk and 3+kk, under 9 million:
{"operation": "search","propertyType": "byty","transaction": "prodej","regions": ["Hlavní město Praha"],"dispositions": ["2+kk", "3+kk"],"maxPrice": 9000000,"sort": "price_asc","maxResults": 500}
Example — brick-built rentals in Brno listed in the last three days, with full detail:
{"operation": "search","propertyType": "byty","transaction": "pronajem","regions": ["Brno-město"],"buildingTypes": ["Cihlová"],"maxAgeDays": 3,"includeDetails": true,"maxResults": 100}
Example — full detail for listings you already have:
{"operation": "detail","propertyUrls": ["https://www.sreality.cz/detail/prodej/byt/3+1/praha-prosek-vysocanska/3046166604","3046166604"]}
📤 Output
Results are saved to the Apify dataset with 45+ fields including:
| Field | Type | Description |
|---|---|---|
estateId | number | Sreality's own listing ID |
estateUrl | string | Canonical listing URL |
listingName | string | The listing headline, e.g. "Prodej bytu 3+1 69 m²" |
priceCzk | number | Asking price in CZK, or the monthly rent |
priceOnRequest | boolean | True when the listing says "info o ceně" |
priceCzkPerSqM | number | Price per square metre — the Czech comparison metric |
disposition | string | 1+kk, 2+1, 3+kk … |
usableArea | number | Usable floor area in m² |
region / district / city / cityPart | string | Administrative area, down to the quarter |
street / houseNumber / zip | string | Street address (detail rows carry the fullest form) |
latitude / longitude | number | Coordinates |
floorNumber / totalFloors | number | Floor, and floors in the building (detail rows) |
buildingType | string | Panelová, Cihlová, Smíšená … (detail rows) |
ownershipType | string | Osobní, Družstevní, Státní (detail rows) |
energyRating | string | Czech energy label, e.g. "D - Méně úsporná" (detail rows) |
agencyName / agencyUrl | string | Listing agency and its website (detail rows) |
agentName / agentEmail / agentPhones | string, array | Named agent and published contacts (detail rows) |
isPrivateSeller | boolean | True when no agency is behind the listing |
imageUrls | array | Every photo on the listing |
poiDistances | object | Metres to the metro, tram, school, doctor, shop and ten more |
Example row (full detail):
{"estateId": 3046166604,"estateUrl": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-prosek/3046166604","listingName": "Prodej bytu 3+1 69 m²","propertyType": "Byty","transaction": "Prodej","disposition": "3+1","priceCzk": 9490000,"priceOnRequest": false,"priceCzkPerSqM": 137536,"priceUnit": "za nemovitost","usableArea": 69,"region": "Hlavní město Praha","district": "Praha 9","city": "Praha","cityPart": "Prosek","street": "Vysočanská","zip": "19000","latitude": 50.121445989,"longitude": 14.494135218,"floorNumber": 1,"totalFloors": 12,"buildingType": "Panelová","buildingCondition": "Velmi dobrý","ownershipType": "Osobní","energyRating": "D - Méně úsporná","furnished": "Částečně","publishedAt": "2026-08-06","updatedAt": "2026-08-29","viewCount": 3598,"agencyName": "M&M Reality","agencyUrl": "https://www.mmreality.cz/","agencyReviewScore": 4.1,"agencyReviewCount": 5215,"agentName": "Hajžmanová Denisa","agentEmail": "info@mmreality.cz","agentPhones": ["+420296399006", "+420731404040"],"isPrivateSeller": false,"imageCount": 12,"status": "success"}
💼 Use Cases & Examples
1. Czech Housing Market & Price Analytics
An analyst tracking asking prices by region and disposition.
Input: one property type, one deal type, a list of regions, on a weekly schedule Output: price, price per m², usable area and disposition on every row Use: compare Praha 4 against Brno-město on one schema. Both numbers are typed, so a median is a spreadsheet formula rather than a parsing job.
2. Estate Agency & Broker Lead Generation
An agency selling services to Czech realitní kanceláře.
Input: a region with full detail switched on Output: the listing agency, its website, its Sreality rating and review count, plus the named agent with the phone and email published on the listing Use: group by agency to rank who is winning instructions in that district, then work the list.
3. Private-Seller and FSBO Discovery
A buying agent or investor looking for owners who have not hired anyone.
Input: any search — the private-seller flag is on every row Output: listings with no agency behind them Use: filter to those rows and you have the part of the Czech market that never reaches an agency's own feed.
4. Investment & Yield Screening
A landlord sizing up a Czech district.
Input: the same area run twice, once for sale and once for rent, with the same disposition filter Output: both halves of a gross-yield calculation for the same streets Use: join on district and disposition. Switch on full detail and the ownership type comes too, which is what decides whether a flat is mortgageable at all.
5. New-Listing Alerts
A buyer who wants to see new instructions the morning they land.
Input: one region, listed in the last 1 day, on a daily schedule Output: only what appeared since yesterday Use: a region drops from thousands of listings to a few dozen, so the run costs pennies and every row is genuinely new.
6. Energy Label and Retrofit Targeting
An insulation, window or heat-pump business building a prospect list.
Input: a region with full detail switched on Output: every property with its energy label and construction type Use: filter to labels D through G in panelová buildings — the stock facing the biggest efficiency gap.
7. Proptech and AI Agent Data Feeds
A product that needs live Czech listings behind it.
Input: the API or MCP call, on demand Output: typed JSON with coordinates, ZIP and district Use: the district and ZIP join straight to Czech statistical and cadastral datasets.
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/sreality-property-scraper').call({operation: 'search',propertyType: 'byty',transaction: 'prodej',regions: ['Hlavní město Praha'],dispositions: ['2+kk', '3+kk'],maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/sreality-property-scraper').call(run_input={'operation': 'search','propertyType': 'byty','transaction': 'pronajem','regions': ['Brno-město'],'maxAgeDays': 3,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['listingName'], item['priceCzk'], item['priceCzkPerSqM'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~sreality-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","propertyType":"domy","transaction":"prodej","regions":["Jihomoravský kraj"],"maxResults":300}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule
- HTTP Request: call the Actor with
maxAgeDays: 1 - Process: filter the returned rows on your own price-per-m² threshold
- Action: write to a sheet, post to Slack, or start an outreach sequence
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 properties per run — every field, every filter, same quality
- No credit card required
- Enough to check the output shape against your own pipeline
PAID Tier (Production Ready)
- Unlimited properties per run
- 200 properties per request — a 1,000-row sweep finishes in seconds
- Pay-per-result: charged per property returned, never for an error row
💰 You are charged for what you receive. Full detail is a separate, optional add-on — leave the switch off and you pay for search rows only.
❓ Frequently Asked Questions
Q: Do I need an API key, a proxy or a login? A: No. Pick a property type, name an area and press Start.
Q: Is there a public Sreality API I could call myself? A: There was, and it is gone. The endpoint every older tutorial and several Store scrapers still reference returns HTTP 404. The portal moved to another path that paginates differently, and this Actor tracks the live one. Some competing tools still point at the dead one and return nothing at all.
Q: How many listings can one search return? A: About 10,000 per query. That ceiling belongs to Sreality, not to this Actor. To go wider, add regions or districts — each one runs its own query in the same run — or split by disposition or price band.
Q: Which area names work? A: All 14 regions, all 86 districts and the cities and quarters underneath them, by name or by the slug Sreality uses in its own URLs. Accents are optional, so Brno-mesto finds Brno-město. An unrecognised name returns a clear error row rather than silently scraping the whole country.
Q: What happens to listings marked "info o ceně"? A: They come back with the price-on-request flag set and an empty price, so a numeric zero never lands in your averages. They are roughly three percent of the sale market. Setting a minimum or maximum price excludes them, because Sreality's own filter does.
Q: Does it return the agent's phone number and email? A: Yes, on agency-marketed listings with full detail switched on. Those are the contacts Sreality publishes on the listing page itself. Private-seller listings carry no agency and are flagged as such on every row.
Q: What does "Fetch full detail" cost? A: It reads each listing's own record, so it bills one Property Detail event per property on top of the search row. It is the only way to get the floor, the energy label, the ownership type and the agent's contacts.
Q: Can I get sold prices or price history? A: No. Sreality publishes asking prices. What a Czech property actually transacted for is recorded by the cadastre, and no column here reports it.
Q: Can I paste a Sreality search URL? A: Yes. Put it in Search URLs and the deal type, property type and the region or district in the path are read off it.
Q: What output formats are available? A: JSON, CSV and Excel — export directly from the Apify dataset.
🐛 Troubleshooting
"is not a Czech region or district on Sreality"
- Use the region, district or city name as Sreality writes it: Praha, Jihomoravský kraj, Brno-město, Olomouc.
- Accents are optional, but a partial name that matches two areas is reported rather than guessed. Give the full name.
"is not a Sreality disposition for this property type"
- Dispositions differ by section: 3+kk exists for apartments, and houses use their own sub-types instead.
- The error row lists the values this property type accepts. Fix the spelling or clear the field — nothing is charged for a rejected filter.
A search returns fewer rows than the site's counter claims
- Every query stops at an offset of roughly 10,000 rows. The counter above it will happily read 21,188.
- Split the query: add regions or districts, narrow the price band, or filter by disposition.
Floor, energy label or ownership are empty
- Those live on the listing's own record. Turn on Fetch full detail.
- Some advertisers simply do not supply them. A missing value comes back empty rather than as a fake one.
The price column is empty on some rows
- Those listings say "info o ceně" and carry the price-on-request flag. Sreality publishes no number for them.
The run stopped before my row budget
- On the FREE tier a run stops at 25 properties. Add credits for unlimited rows.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Sreality.cz is a trademark of Seznam.cz, a.s. This actor is not affiliated with, endorsed by, or sponsored by Seznam.cz.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools