Sreality Listings Scraper avatar

Sreality Listings Scraper

Pricing

from $1.79 / 1,000 results

Go to Apify Store
Sreality Listings Scraper

Sreality Listings Scraper

Scrape public Sreality search results for apartments, houses, land, commercial properties or other listings, for sale or rent. Records include titles, layouts, areas, prices, location fields, coordinates and image URLs.

Pricing

from $1.79 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Sreality Property Scraper

Returns: one row per Sreality listing with id, title, offerType, layout, areaM2, priceCzk, city and sourceUrl. Input: {"offerType": "rent", "category": "apartments", "region": "praha", "maxItems": 25, "includeDetails": false} Best for: rent and price monitoring, property market research, lead lists of agencies and listings.

{
"id": "1724305484",
"title": "Pronájem bytu 2+kk 54 m²",
"offerType": "rent",
"layout": "2+kk",
"areaM2": 54,
"priceCzk": 41800,
"city": "Praha",
"sourceUrl": "https://www.sreality.cz/detail/pronajem/byt/2+kk/praha-vinohrady-namesti-jiriho-z-podebrad/1724305484"
}

What does Sreality Property Scraper do?

Sreality Property Scraper collects property listings from Sreality, the Czech property portal. You choose whether you want listings for sale or for rent, pick a category (apartments, houses, land, commercial or other), and optionally narrow the search to a region or city. The Actor then reads the public search result pages and returns one clean record per listing, ready for a spreadsheet, a database or a data pipeline.

Each record contains the listing title, offer type, category, layout or subtype, floor area, plot area, asking price in Czech crowns, price per square metre, the full location breakdown (city, city part, district, region, street), GPS coordinates, the agency that published the ad and the photo URLs. If you switch on detail pages, the Actor also opens every listing and adds the full Czech description, the agency name and a set of building parameters such as condition, construction type and ownership.

The Actor needs no login and no account. It reads only the public pages that anybody can open in a browser. Seller contact details such as phone numbers and personal names are deliberately not collected.

Typical uses include market research on asking prices and rents, scheduled runs to build a price history, feeding a property dashboard or valuation model, and mapping supply from the coordinates of each listing.

This Actor is an independent tool. It is not affiliated with or endorsed by Sreality or its operator.

What data can you get?

Every record has an id and a sourceUrl. The table lists all fields. Fields marked "details" are filled only when includeDetails is on. The propertyType field is filled only when AI enrichment is on and succeeded.

FieldTypeDescription
idstringSreality listing identifier, unique within a run
sourceUrlstringDetail page URL of the listing
titlestringListing title as shown on the site, in Czech
offerTypestringsale or rent
categorystringapartments, houses, land, commercial or other
layoutstringLayout such as 2+kk, or the subtype such as Rodinný or Pole
areaM2numberArea in square metres, taken from the listing title
plotAreaM2numberPlot area in square metres for houses and land
priceCzknumberAsking price in CZK; monthly rent for rentals; empty when the price is on request
priceUnitstringWhat the price covers, for example za měsíc or za nemovitost
pricePerM2CzknumberPrice per square metre in CZK as given by the site
citystringCity or municipality
cityPartstringCity part or neighbourhood
districtstringDistrict
regionstringRegion (kraj)
streetstringStreet name when the listing shows one
latitudenumberLatitude of the listing
longitudenumberLongitude of the listing
agencyIdnumberAgency identifier
agencySlugstringAgency URL slug
agencyNamestringAgency name (details)
imageUrlsarrayPhoto URLs of the listing
hasVideobooleanWhether the listing has a video
descriptionstringFull listing description in Czech (details)
previousPriceCzknumberEarlier price when the listing shows a price drop (details)
matterportUrlstring3D tour link when present (details)
listedSincestringDate the listing was first published (details)
lastEditedstringDate the listing was last edited (details)
agencyRatingnumberAgency review score on Sreality (details)
agencyWebsitestringAgency website (details)
buildingParamsobjectSelected building parameters such as condition, construction type, ownership, floor and elevator (details)
propertyTypestringAI estimate: investment, family, starter, luxury or other

Some fields are empty for some listings because the listing itself does not provide them. Street names, for example, are often hidden for houses in villages, and some agencies do not publish a price. A price shown as "price on request" is returned as empty rather than as a placeholder number.

How to use

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Pick the offer type (sale or rent) and the category.
  3. Optionally type a region or city slug. The slug is the last part of a Sreality search address, for example praha or jihomoravsky-kraj.
  4. Set maxItems to the number of listings you need.
  5. Press Start. Results appear in the Output tab as soon as the first page has been read, and you can download them as JSON, CSV, Excel or XML.

If you already have a Sreality search address that includes the filters you want, paste it into Start URLs instead. The Actor then follows that search and ignores the offer type, category and region fields. You can also supply /detail/ listing addresses. These targets always include available detail fields. Filters apply to search targets, not individual listings.

Large result sets are best split by region. Sreality limits how deep a single search can page, so running one search per region gives you more complete coverage than one national search.

The Actor is polite to the site: it keeps to about one request per second with low concurrency, and it retries temporary failures with a growing delay. A run of 50 listings without detail pages takes a few seconds. With detail pages every listing needs one extra request, so the run is slower.

New in this version

  • Price filters minPrice and maxPrice narrow generated searches and /hledani/ start URLs. A start URL that already contains its own cena-od or cena-do keeps those values.

Start URLs may also be single /detail/ listing URLs. Each is fetched with full details and saved as one record. Detail records fill previousPriceCzk, matterportUrl, listedSince, lastEdited, agencyRating and agencyWebsite when the listing shows them; otherwise these stay empty.

Input

FieldTypeDefaultDescription
startUrlsarraynoneOptional search URLs (/hledani/), listing URLs (/detail/) as URL objects. Overrides offer type, category and region
offerTypestringsalesale or rent
categorystringapartmentsapartments, houses, land, commercial or other
regionstringemptyRegion or city slug, for example praha
minPriceinteger0Minimum price in CZK (monthly rent or sale price); 0 means no minimum
maxPriceinteger0Maximum price in CZK; 0 means no maximum
maxItemsinteger50Shared maximum unique listings across all targets, 1 to 10000
includeDetailsbooleanfalseOpen each detail page for description, agency name and building parameters
enableAiEnrichmentbooleantrueAdd the propertyType estimate
proxyConfigurationobjectno proxyApify Proxy settings

Example input:

{
"offerType": "rent",
"category": "apartments",
"region": "praha",
"maxItems": 25,
"includeDetails": false
}

Example input with a search address:

{
"startUrls": [{ "url": "https://www.sreality.cz/hledani/prodej/domy/jihomoravsky-kraj" }],
"maxItems": 25
}

If a search returns no records, check the region URL slug, widen the price range, or try a known public search URL. For an unavailable listing, replace its detail URL. If requests remain blocked, select an available Apify Proxy group or try later. Empty and blocked targets do not produce placeholder records and end successfully with an explanation.

The maxItems limit is shared across all targets and exact: a run with maxItems set to 7 returns exactly 7 listings when at least 7 exist, and only those 7 are billed.

Output

Each run writes one dataset item per listing. Here is a shortened real item from a run with the first example input:

{
"id": "1724305484",
"sourceUrl": "https://www.sreality.cz/detail/pronajem/byt/2+kk/praha-vinohrady-namesti-jiriho-z-podebrad/1724305484",
"title": "Pronájem bytu 2+kk 54 m²",
"offerType": "rent",
"category": "apartments",
"layout": "2+kk",
"areaM2": 54,
"plotAreaM2": null,
"priceCzk": 41800,
"priceUnit": "za měsíc",
"pricePerM2Czk": 774,
"city": "Praha",
"cityPart": "Vinohrady",
"district": "Praha 3",
"region": "Hlavní město Praha",
"street": "náměstí Jiřího z Poděbrad",
"latitude": 50.078582,
"longitude": 14.449973,
"agencyId": 20262,
"agencySlug": "prime-property",
"agencyName": null,
"imageUrls": ["https://d18-a.sdn.cz/d_18/c_img_qE_A/nO573v8MsNBK7ALGmsHbP2a4/3c99.jpeg"],
"hasVideo": false,
"description": null,
"buildingParams": null,
"previousPriceCzk": null,
"matterportUrl": null,
"listedSince": null,
"lastEdited": null,
"agencyRating": null,
"agencyWebsite": null,
"propertyType": null
}

With includeDetails on, agencyName, description and buildingParams are filled, for example {"buildingCondition": "Velmi dobrý", "buildingType": "Cihlová", "floors": 1, "furnished": "Ano"}. Explicit boolean values are preserved: "balcony": false means the source reports no balcony; an absent key means the source did not supply a usable value. A numeric floorNumber of zero is preserved, while zero-valued area placeholders and unselected enum options are omitted. The data is returned in Czech, exactly as published, so titles, descriptions and condition names are not translated.

How much does it cost?

The Actor is charged per result: each listing saved to the dataset counts as one result. When AI enrichment is on and succeeds for a listing, that listing also counts as an enriched result. If enrichment fails or is switched off, no enrichment charge applies. See the Pricing tab of the Actor for the current rates, which can change over time. Setting a low maxItems is the simplest way to control the cost of a run, and a run stops as soon as that many listings have been saved.

Use with AI agents (MCP)

You can call this Actor from any MCP-compatible AI assistant through the Apify MCP server. Add it to your client configuration like this:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=axiomworks/sreality-property-scraper"
}
}
}

Example prompts:

  1. "Find 30 apartments for rent in Prague on Sreality and list the cheapest ones per square metre."
  2. "Get houses for sale in the South Moravian region and group them by district."
  3. "Collect 20 commercial listings for rent in Praha with descriptions and agency names."

The input field descriptions are written so that an agent can choose the right values without extra help.

Integrations and API

You can run the Actor from code and read the results through the Apify API.

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("axiomworks/sreality-property-scraper").call(
run_input={"offerType": "sale", "category": "apartments", "region": "praha", "maxItems": 50}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["priceCzk"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('axiomworks/sreality-property-scraper').call({
offerType: 'rent',
category: 'houses',
region: 'jihomoravsky-kraj',
maxItems: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
process.stdout.write(`${items.length} items\n`);

cURL:

curl -X POST "https://api.apify.com/v2/acts/axiomworks~sreality-property-scraper/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"offerType":"sale","category":"land","maxItems":20}'

You can also schedule runs, send results to Google Sheets, Slack or a webhook, or connect the Actor to automation tools using the integrations built into the platform.

FAQ

How many listings can I get in one run? Up to 10000 per run, limited by what the search returns. Sreality caps how deep one search can page, so for complete coverage run one search per region.

Why are some prices empty? Some listings are published as "price on request". The Actor returns an empty price for them instead of a placeholder.

Why is the area missing for some listings? The area is read from the listing title. If the title does not state an area, the field is empty.

Do I need a proxy? Usually not. Requests go direct by default. If the site blocks a request or answers it with an error, the Actor retries on a fresh Apify Proxy session, first datacenter and then residential, and uses the successful route for later pages in the same run. You can also pick a proxy group in the input to always use one.

Is the text translated? No. Titles, descriptions and parameter names are in Czech, as published.

Does the Actor collect seller phone numbers or names? No. Seller contact details are personal data and are not collected. The record contains only the agency identifier, slug and, with detail pages, the agency name.

What does the AI enrichment do? It adds a propertyType estimate based on layout, area, price and description. Enrichment uses a third-party AI processor. You can switch it off with enableAiEnrichment.

What happens with a wrong region or a dead URL? The run finishes quickly with zero results and a warning in the log. No placeholder items are written.

The Actor reads publicly available listing pages without logging in and without bypassing any protection. Property listing data is generally public information, but you are responsible for how you use it. Check the site's terms of use and the rules that apply to you, including database rights and data protection law such as the GDPR. Do not use the data to contact private individuals in ways the law does not allow. This Actor does not collect seller contact details. If you are unsure about your use case, ask a lawyer.

Feedback

If a field is missing, a region does not work or the site layout changes, open an issue on the Actor page in Apify Console and describe the input you used. Reports with an example run link are the quickest to fix.