Sreality Palindrom Scraper
Pricing
Pay per usage
Sreality Palindrom Scraper
Scrape property listings from Sreality.cz - Czech Republic's largest real estate portal. Paste a search URL with filters and get structured JSON of every listing.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
SilentService, s.r.o.
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 minutes ago
Last modified
Categories
Share
Extract structured property listings from Sreality.cz - Czech Republic's largest real estate portal - straight from a search URL.
Paste the URL of any Sreality search (with all your filters applied) and this Actor returns a clean JSON dataset of every matching listing. The actor uses Sreality's own JSON API directly, so it does not parse HTML or rely on DOM selectors. That makes it resilient to cosmetic redesigns - if Sreality changes how their search URL maps to filters, the actor still picks up the change automatically because it reads Sreality's own filter state from the page. The actor will need an update only if Sreality replaces or renames their JSON API.
What does Sreality Palindrom Scraper do?
- Reads the search URL you paste (e.g.
https://www.sreality.cz/hledani/prodej/byty/praha?cena-do=8000000). - Detects all your filters automatically (offer type, category, locality, price range, disposition, year built, energy class, etc.) by reading Sreality's own filter state.
- Paginates the JSON API to extract every matching listing.
- Optionally fetches each listing's detail page for description, full attributes, broker contact, and the complete image gallery.
- Outputs everything to an Apify Dataset that you can download as JSON, CSV, Excel, HTML, or stream via the Apify API.
Why use Sreality Palindrom Scraper?
- Real estate market analysis - track price/m² across Prague districts, watch supply per disposition, monitor new-build vs. resale ratios.
- Investment screening - pull every 2+kk under 6 M Kč in Brno, filter by yield, get broker contacts in one CSV.
- Lead generation for agencies - extract listings from competitors and identify private sellers.
- Comparable sales / valuations - feed listings into your appraisal model with consistent fields.
- Schedule it - run the scraper hourly/daily on Apify and pipe results to Google Sheets, Slack, or your CRM via webhooks.
How to use Sreality Palindrom Scraper
- Open Sreality.cz and apply your filters in the search UI (location, price, disposition, etc.).
- Copy the URL from your browser address bar.
- Paste it into this Actor's Sreality search URL input.
- (Optional) Set Max number of listings (
0= unlimited) and toggle Fetch detail pages if you need full descriptions and contacts. - Click Start. The dataset populates as listings are scraped.
Input
The actor accepts a JSON input with the following fields. The Apify Console renders these as a friendly form.
Provide one of: searchUrl, apiParams, or city.
| Field | Type | Default | Notes |
|---|---|---|---|
searchUrl | string | - | Any Sreality search URL - filters detected automatically. |
city | string | - | Free-text city/district/street (e.g. Praha, Praha 6, Brno-Bystrc). Resolved via Sreality's suggest API; accents and spelling variants handled automatically. Combine with category and offerType. |
category | string | "" | Enum: byty, domy, pozemky, komercni, ostatni. Used with city. |
offerType | string | "" | Enum: prodej, pronajem, drazba. Used with city. |
apiParams | object | - | Advanced: snake_case Sreality API params (e.g. {"category_main_cb":1,"locality_region_id":10}). Skips the HTML bootstrap entirely - saves ~725 KB and one HTTP request per run. Ideal for cron-driven repeat polls of a known filter. |
sort | string | "" | Override search ordering. One of -date (newest first), +date, -price_norm (most expensive first), +price_norm. Empty keeps the existing ordering. |
maxResults | integer | 100 | Hard cap. 0 = unlimited (capped internally at 100 000 for safety). |
includeDetails | boolean | false | Adds description, full attributes, broker contact, POI distances. Slower and more bandwidth. |
pageSize | integer | 500 | Search-page size. 500 is Sreality's max. |
detailConcurrency | integer | 10 | Parallel detail-page requests when includeDetails is on. |
resumeFromLastRun | boolean | false | Persist {page, scraped} to the actor's key-value store after every page. A subsequent run with the same filter resumes from the next unscraped page. Recommended for runs of 10 000+ listings. |
proxyConfiguration | object | Apify residential | Standard Apify proxy picker. |
useDecodoProxy | boolean | false | Bring-your-own Decodo / Smartproxy. |
decodoEndpoint | string (secret) | - | Full proxy URL http://user:pass@host:port. URL-encode special characters. |
Example input:
{"searchUrl": "https://www.sreality.cz/hledani/prodej/byty/praha?cena-od=3000000&cena-do=8000000","maxResults": 1000,"includeDetails": false}
Output
Each listing becomes one record in the dataset. Example (search-only mode):
{"id": 1580314700,"url": "https://www.sreality.cz/detail/prodej/byt/2+kk/praha-modrany-pirinska/1580314700","apiUrl": "https://www.sreality.cz/api/cs/v2/estates/1580314700","title": "Prodej bytu 2+kk 41 m²","priceCzk": 6990000,"priceUnit": "","priceText": "Celková cena","priceHidden": false,"pricePerSqm": 170488,"areaM2": 41,"category": "byty","subtype": "2+kk","subtypeId": 4,"offerType": "prodej","localityRaw": "Pirinská 12, Praha 4 - Modřany","street": "Pirinská","houseNumber": "12","city": "Praha 4","district": "Modřany","gps": { "lat": 50.007881, "lon": 14.426118 },"image": "https://d18-a.sdn.cz/.../430b.jpeg?fl=res,400,300,3|jpg,90","images": ["https://...", "https://..."],"imageCount": 15,"hasVideo": false,"hasPanorama": false,"hasFloorPlan": true,"isAuction": false,"isNew": false,"labels": ["panel", "elevator"],"agentName": "Myšák reality","agentId": 21763,"agentLogo": "https://d48-a.sdn.cz/.../wAZCcY.png","agentUrl": "https://www.sreality.cz/adresar/mysak-reality/21763","scrapedAt": "2026-05-06T08:10:07.066Z"}
With includeDetails: true, the record additionally contains:
{"description": "Nabízíme k prodeji světlý byt 2+kk ...","attributes": {"Stavba": "Cihlová","Stav objektu": "Velmi dobrý","Energetická náročnost budovy": "B - Velmi úsporná","Vlastnictví": "Osobní","Užitná plocha": "41 m²","Sklep": true,"Výtah": true},"sellerName": "Jiří Maštálka","sellerPhones": [{"code": "420", "type": "MOB", "number": "608444111"}],"sellerEmail": "jiri@example.cz","poiTransportDistanceM": 64,"poiSchoolDistanceM": 326,"poiGroceryDistanceM": 420,"poiDoctorsDistanceM": 362,"poiRestaurantDistanceM": 192,"poiLeisureDistanceM": 601}
You can download the dataset in JSON, CSV, Excel, or HTML directly from the Apify Console, or fetch it via the Apify API.
Data fields
| Field | Type | Description |
|---|---|---|
id | integer | Sreality's permanent listing ID. |
url | string | Public Sreality listing URL. |
title | string | Listing headline (auto-generated by Sreality). |
priceCzk | integer or null | Price in CZK. null if the broker hides it ("price on request"). |
priceUnit | string | "" for sales (total price), "za měsíc" for rentals. Always check this when scraping rentals - the number alone is monthly, not total. |
priceText | string | Sreality's display label for the price (usually "Celková cena"). |
priceHidden | boolean | True when the broker hides the price. |
pricePerSqm | integer or null | Precomputed priceCzk / areaM2 (rounded). null when price is hidden or area is unknown. |
areaM2 | integer or null | Area in m² parsed from the title. |
category | string | byty, domy, pozemky, komercni, ostatni. |
subtype | string | Human-readable subtype: "2+kk", "rodinný dům", "vila", "sklad", etc. |
subtypeId | integer | Sreality's numeric category_sub_cb for programmatic queries. |
offerType | string | prodej, pronajem, or drazba. |
gps | object | { lat, lon }. |
images | array | Full image gallery (public CDN URLs). |
agentName | string or null | Realtor name when listing is brokered. |
agentUrl | string or null | Public link to the agency profile (sreality.cz/adresar/<slug>/<id>). |
houseNumber | string or null | Parsed from the street component (Mostecká 12 -> 12). Handles letters (12a) and slash forms (3/5). |
description | string | (details mode) Full listing description. |
attributes | object | (details mode) All structured attributes shown on detail page. |
sellerPhones | array | (details mode) Broker phone numbers. |
poiTransportDistanceM | integer or null | (details mode) Closest public-transport stop in meters. |
poiSchoolDistanceM | integer or null | (details mode) Closest school/kindergarten in meters. |
poiGroceryDistanceM | integer or null | (details mode) Closest grocery store in meters. |
poiDoctorsDistanceM | integer or null | (details mode) Closest medical facility in meters. |
poiRestaurantDistanceM | integer or null | (details mode) Closest restaurant in meters. |
poiLeisureDistanceM | integer or null | (details mode) Closest leisure-time POI in meters. |
Pricing - how much does it cost to scrape Sreality?
Measured on a real run (2026-05-06, pageSize=60 and sequential details; the v0.2 defaults of pageSize=500 and detailConcurrency=10 are faster):
| Mode | Bandwidth / 1k | Time / 1k | Apify CU / 1k @ 1 GB | Total cost / 1k (Apify proxy) |
|---|---|---|---|---|
| Search-only | ~7 MB | ~17 s | 0.005 CU | ~$0.06 |
| With details | ~76 MB | ~6.5 min (sequential) | 0.11 CU | ~$0.62 |
The actor accepts your own Decodo / Smartproxy endpoint if you want to bypass Apify's residential proxy and pay your own per-GB rate (typically $3 / GB for Decodo vs $8 / GB for Apify residential).
Tips and advanced options
- Filter at the URL level, not after scraping. Sreality has 60+ filter fields (energy class, year built, ownership type, points-of-interest distance) - every one is supported automatically because the actor reads Sreality's own filter state.
- Skip details for bulk runs. With
includeDetails: falsethe actor is ~10× faster and ~10× cheaper. Only enable details when you actually need descriptions or broker contacts. - Cap the run with
maxResultswhile you're iterating on filters to avoid burning credits on test runs. - Use
apiParamsfor cron polling. Once you've nailed your filter, capture the API params from a normal run's logs and paste them intoapiParamsfor subsequent scheduled runs. The actor then skips the 725 KB HTML bootstrap and goes straight to the JSON API - lower bandwidth, one fewer HTTP request, faster start. - Skip the URL entirely with
city. For non-tech users: paste a city name (Praha,Brno-Bystrc,Plzeň) into thecityfield, pickcategoryandofferTypefrom the dropdowns, and you're done - no Sreality URL syntax to learn. The actor uses Sreality's own suggest API to resolve the locality. - Enable
resumeFromLastRunfor big jobs. A 100 000-listing run takes ~30 minutes; if Apify aborts it mid-flight, the next invocation with the same filter picks up where it stopped instead of restarting from page 1. - Schedule the actor on Apify (every 6 h, daily, weekly) to track new listings and price changes over time. Combine with Apify webhooks to push deltas to your CRM, Slack, or Google Sheets.
FAQ, disclaimers, and support
Is scraping Sreality.cz legal? The actor reads only publicly accessible listings (no login, no paywall, no personal data outside what Sreality publishes itself). Use the data in compliance with Sreality's Terms of Service and applicable data-protection law (GDPR). The actor is provided as-is.
Does it scrape historical / removed listings? No - only listings currently visible in your search.
Does it scrape detail-page photos in full resolution?
The images array contains the same CDN URLs Sreality serves to its own UI; you can request larger sizes by adjusting the URL fl=res,W,H parameter.
Why are some agentName / sellerPhones fields null?
Private sellers route contact via Sreality's anonymous form - Sreality does not expose their phone/email through the API, and neither does this actor.
Found a bug or have a feature request? Open an issue on the actor's Issues tab on Apify Store, or contact the author directly.
Need a custom solution? This actor focuses on standard Sreality search results. For custom requirements (Slovakia, Bazos.cz, multi-portal aggregation, change tracking, custom output format) reach out - happy to build it.