Short answer: developers have successfully requested Sreality listing data through endpoints documented by community projects, but the evidence does not establish a supported, public read API from Seznam. Treat the endpoints as undocumented observations, verify they still work, and obtain permission before storing, republishing or monetizing listings, descriptions or photographs.
What “Sreality API” means in practice
A GitHub guide describes https://www.sreality.cz/api/v1 as an unofficial REST API. Its examples use a filter endpoint and a search endpoint:
GET https://www.sreality.cz/api/v1/estates/filter_page?lang=csfor reference values.GET https://www.sreality.cz/api/v1/estates/searchfor listing searches.
A separate Scrapy project reports using https://www.sreality.cz/api/cs/v2/estates and collecting identifiers, descriptions, prices, coordinates, images and company details. That corroborates that implementations have existed; it does not prove that the path is supported, permanent or approved for your use.
Seznam’s terms effective 8 April 2026 describe account-related and selected import interfaces, but the located terms do not document a public read API for arbitrary listing collection. Before deployment, ask Seznam which interface and use case are authorized.
#1 Best Overall
Check permission before writing a crawler
Sreality’s own site states: “Jakékoliv užití obsahu internetového serveru www.sreality.cz, včetně převzetí, šíření či dalšího zpřístupňování inzerátů a fotografií, je bez souhlasu Seznam.cz, a.s. zakázáno.” In English, use of content—including taking over, distributing or making listings and photographs available—is prohibited without Seznam.cz consent.
That restriction is separate from whether an HTTP request technically succeeds. Decide what you will do with the response before collecting it:
- Private research: document your purpose, minimize retained fields and set a deletion schedule.
- Internal product: obtain written permission covering collection, storage, refresh frequency and user access.
- Public portal, resale or aggregation: do not proceed on the assumption that an endpoint grants rights. The terms also restrict an intermediary from merely reselling, displaying other parties’ listings or aggregating them in one place in the stated intermediary context.
Recheck the current terms, robots and endpoint behavior immediately before launch. A successful response is not authorization.
Discover filter and category values
The community guide’s filter request is intended to expose reference values. Start with a simple request and inspect the JSON rather than hard-coding labels:
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutecurl -G "https://www.sreality.cz/api/v1/estates/filter_page"
--data-urlencode "lang=cs"
Use the returned identifiers for region, property category and transaction category. The guide describes categories covering flats, houses, land, commercial property and other types, and transaction values for sale and rent. Exact identifiers and response shapes can change, so log the response schema and fail safely when a value disappears.
Build a search request
The documented search pattern accepts region, property category, transaction category, page size, offset and language. A representative request is:
curl -G "https://www.sreality.cz/api/v1/estates/search"
--data-urlencode "region=YOUR_REGION_ID"
--data-urlencode "category=YOUR_CATEGORY_ID"
--data-urlencode "category_main_cb=YOUR_TRANSACTION_ID"
--data-urlencode "limit=50"
--data-urlencode "offset=0"
--data-urlencode "lang=cs"
Parameter names and category fields in community examples are not a contract. Confirm them against the current response and the project version you are following. If the service returns a validation error, remove one optional parameter at a time and compare the request with the guide’s current example.
Python example with bounded pagination
import time
import requests
BASE = "https://www.sreality.cz/api/v1/estates/search"
params = {
"region": "YOUR_REGION_ID",
"category": "YOUR_CATEGORY_ID",
"category_main_cb": "YOUR_TRANSACTION_ID",
"limit": 50,
"lang": "cs",
}
session = requests.Session()
offset = 0
while True:
params["offset"] = offset
response = session.get(BASE, params=params, timeout=30)
response.raise_for_status()
payload = response.json()
items = payload.get("_embedded", {}).get("estates", [])
if not items:
break
for item in items:
# Store only fields your permission covers.
print(item.get("hash_id"), item.get("name"), item.get("price"))
offset += len(items)
if len(items) < params["limit"]:
break
time.sleep(0.5) # A delay suggested by one community guide, not a policy.
Node.js example
const endpoint = 'https://www.sreality.cz/api/v1/estates/search';
const params = new URLSearchParams({
region: 'YOUR_REGION_ID',
category: 'YOUR_CATEGORY_ID',
category_main_cb: 'YOUR_TRANSACTION_ID',
limit: '50',
offset: '0',
lang: 'cs'
});
const res = await fetch(`${endpoint}?${params}`);
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(data);
Pagination, limits and large collections
The guide reports a maximum offset of 10,000 and recommends splitting large jobs by region and, when needed, category. Attribute both points to that community guide: they are not confirmed service guarantees. A robust collector should:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #3
- Page with a modest
limitand advance by the number of records actually returned. - Stop on an empty page or a short page, while recording the final offset.
- Partition by region and category before approaching the reported offset ceiling.
- Keep a checkpoint so a failure resumes without replaying the entire collection.
- Use exponential backoff for transient 429, 502, 503 or network errors; do not turn retries into a high-rate loop.
The same guide suggests a 0.5-second delay and retry handling. Those are repository-specific implementation notes, not safe-request limits or permission to scrape. Start slower, monitor responses and stop when the service signals overload.
Understand the returned listing object
The guide’s sample response shows these kinds of fields:
| Group | Examples shown in the sample | How to use safely |
|---|---|---|
| Identity | Listing ID and name | Use the ID as a deduplication key; do not assume it is permanent. |
| Price and classification | Price, property category, transaction type | Preserve currency and any “from” or fee wording returned. |
| Location | Locality, region and district identifiers, coordinates | Coordinates can be sensitive; apply access controls and precision reduction where appropriate. |
| Agency and premises | Company, agency or premise fields | Expect missing or changed fields between records. |
| Proximity | Nearby-place or distance fields | Store units and source context with the value. |
| Media | Image flags and image URLs | Do not copy or republish photographs without consent. |
These are fields visible in one sample, not a guarantee that every current response contains them. Parse defensively with nullable fields, preserve the raw response only when your authorization permits it, and record retrieval time and endpoint version for auditability.
Reliability and operational safeguards
- Schema drift: validate required keys, quarantine unexpected payloads and alert on a sharp drop in item counts.
- Endpoint changes: keep the base URL configurable; do not bury paths in many modules.
- Duplicates: deduplicate by the listing identifier plus source, then handle identifier reuse as a separate review case.
- Stale records: mark records inactive after an authorized refresh indicates removal; never infer deletion from one timeout.
- Privacy: restrict coordinates, contact details and descriptions to staff who need them, and encrypt authorized exports.
- Load: schedule jobs, cap concurrency and honor explicit blocks or error responses.
Common failures and fixes
404 or an HTML page instead of JSON
The undocumented path may have moved, or a redirect may require a different URL. Inspect the final URL and Content-Type, compare with the current community implementation, and stop rather than scraping the HTML fallback blindly.
Recommended Free Tools
400 or empty results
Check that region, category and transaction identifiers came from the filter response and that lang, limit and offset are valid. Test one filter at a time and log the complete query without credentials.
429, 403 or repeated timeouts
Reduce concurrency, increase the delay, honor Retry-After when present and stop the job if blocking continues. Do not rotate identities to evade controls; seek an authorized interface.
Fields disappear or change type
Treat the response as unversioned. Use nullable parsing, retain a schema version in your own database and quarantine records that fail validation for manual review.
Offset returns overlapping or missing records
Listings can change while you page. Partition smaller queries, checkpoint each partition and deduplicate by identifier. For reproducible analytics, store retrieval timestamps and report that the source is a moving index.
Best Value
Or skip the browser setup
If your deliverable is a screenshot or PDF of an authorized page—not a substitute for permission to copy Sreality content—ScreenshotNeo provides a single HTTP request. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets; each step can be disabled. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server lets Claude, Cursor and other MCP clients call take_screenshot, get_page_info and capture_pdf.
See the ScreenshotNeo API documentation for all options, including full-page and selector captures, device and retina settings, PDF controls, custom headers and cookies, waits, blocking rules, caching, signed links, asynchronous webhooks and bulk capture.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
There is a free allowance of 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is on every plan. Create a free ScreenshotNeo account.
Decision checklist before deployment
- Have you confirmed that your intended collection and downstream use are authorized by Seznam?
- Are you using the current documented interface available to your account, rather than relying on an old community path?
- Can you delete listings, descriptions, coordinates and photos on request or at the end of the approved period?
- Do your rate limits, checkpoints and retries prevent avoidable load?
- Does your parser tolerate missing fields and endpoint changes?
- Have you separated internal analysis from any public display or redistribution?
Frequently Asked Questions
Does Sreality provide an official public read API for arbitrary searches?
The sources reviewed do not establish one. Community projects document working endpoints, while Seznam’s located terms describe selected account and import interfaces rather than a general public read API.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesCan I republish photos returned by an endpoint?
Not without the required consent. Sreality’s site expressly conditions taking over, distributing or otherwise making listings and photographs available on Seznam.cz consent.
Is the 10,000 offset a guaranteed limit?
No. It is a limit reported by one community guide and should be rechecked against current behavior.
What should I do if I need authorized bulk data?
Contact Seznam, explain the fields, volume, retention and display purpose, and use the interface or agreement they approve.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




