ImmoScout24 (AT) Real Estate Scraper
Pricing
from $3.50 / 1,000 results
ImmoScout24 (AT) Real Estate Scraper
Austria real estate scraper for ImmoScout24.at β apartments, houses, land & commercial, rent or sale β same output schema as willhaben-scraper, plus delta mode.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
immoscout24-at-scraper
Scrapes real estate listings from ImmoScout24.at (apartments, houses, land, commercial β rent or sale) via ImmoScout24's own internal Apollo GraphQL API, not HTML scraping.
Contents
- Key features
- Output
- Input
- Input examples
- Incremental (delta) mode
- How to scrape ImmoScout24.at
- How much does it cost
- You might also like
- FAQ
π Key features
- Real-estate specialist, not a jack-of-all-trades. Built for ImmoScout24's real-estate categories specifically, rather than spreading thin across cars, jobs, and marketplace listings too.
- No URL wrangling. Pick a category and an Austrian province from a dropdown β no need to know ImmoScout24's internal region codes yourself.
- Delta mode built in. Every run classifies each listing as
new,changed,unchanged, ordelistedagainst a persisted baseline. Run it on a schedule and you're not paying for a full re-scrape every time β just what actually changed. It's also what makes price-history tracking possible at all. - Full category coverage, including the categories many scrapers skip β land/plots and commercial, not just apartments.
- Same output schema as willhaben-scraper β a second, independent Austrian real-estate source with field names and value spellings that match, so results from both actors merge or cross-check directly instead of needing a reconciliation step.
- Privacy-aware by construction.
agency_nameis populated for professional listings only (company name) and leftnullfor private sellers β no private-seller personal data leaves the dataset.
π Output
One dataset item per listing, with a normalized schema (see
.actor/dataset_schema.json for the full field list) plus a
change_type field: new, changed, unchanged, or delisted (see
Incremental mode below).
Example job record:
{"source": "immoscout24_at","external_id": "123456789","url": "https://www.immobilienscout24.at/expose/123456789","country": "AT","state": "Wien","district": "Donaustadt","city": "Wien","postal_code": "1220","latitude": 48.2333,"longitude": 16.4667,"price_eur": 1390.0,"price_per_sqm_eur": 18.53,"living_area_sqm": 75.0,"estate_size_sqm": 75.0,"rooms": 3,"listing_type": "rent","property_class": "apartment","agency_name": "Muster Immobilien GmbH","published_at": "2026-08-01T09:12:00.000Z","change_type": "new"}
Every record also carries property_type, condition, year_built, energy_class,
has_balcony, has_garden, and has_parking β omitted from the example above because they're
currently always null (see known gaps below). district is populated for Vienna listings only
(as shown); elsewhere it's null for now.
Results can be downloaded as JSON, CSV, or Excel from the Console's Output tab, or pulled via the Apify API/dataset endpoint.
Known gaps: property_type, condition, year_built, energy_class, has_balcony,
has_garden, and has_parking are always null β ImmoScout24's search hit doesn't carry them.
district is populated for Vienna only (postcode heuristic); elsewhere it needs a
region-code-to-name gazetteer that doesn't exist yet.
βοΈ Input
See .actor/input_schema.json for the full JSON schema. Key parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
category | String (required) | β | One of 7 categories: apartment_rent, apartment_sale, house_rent, house_sale, land, commercial_rent, commercial_sale β the same 7 keys willhaben-scraper uses. |
region | String | all | One of Austria's 9 provinces (e.g. wien, steiermark), or all for the whole country. Changing this between runs starts a fresh incremental-mode baseline for the category. |
mode | String | auto | auto (recommended): full scan on the first run, incremental after. full: always push every listing and refresh the baseline. incremental: always push only new/changed listings. See Incremental mode. |
maxItems | Integer | 50 | Stop after pushing this many dataset items. Defaults to a fast, cheap preview (also what keeps an unconfigured run within Apify's automated 5-minute QA check). Raise it or clear it (set to null) for a full run β note a capped run never updates the incremental baseline (see below), so any real tracking run needs this cleared. |
maxPages | Integer | (none) | Safety cap on search pages fetched per internal region slice (an all-Austria run is automatically split into per-province slices under the hood). A capped run can't detect delistings and won't update the incremental baseline. |
delaySeconds | Number | 3 | Politeness delay between consecutive search-page requests. |
proxyConfiguration | Object | {"useApifyProxy": false} | Apify Proxy config. Off by default β confirmed by testing that ImmoScout24 returns HTTP 401 to Apify's shared datacenter proxy pool on the very first request, while a direct connection works fine. |
impersonate | String | (none) | Optional curl_cffi TLS-impersonation target (e.g. chrome124), used only if ImmoScout24 starts blocking plain requests. |
π§ͺ Input examples
Quick preview β Wien apartments for rent, default 50-item cap:
{"category": "apartment_rent","region": "wien"}
Full-country scan β every land/plot listing in Austria, capped for a quick preview:
{"category": "land","region": "all","maxItems": 100}
Scheduled tracking run β full, uncapped run (maxItems cleared β required for the baseline to
save and delistings to be detected, see Incremental mode):
{"category": "apartment_rent","region": "wien","mode": "incremental","maxItems": null}
π Incremental (delta) mode
Every run classifies each listing as new, changed (price moved), unchanged, or delisted,
using a state baseline persisted in a named Apify Key-Value Store scoped to category + region.
mode: auto(default) β first run for a scope pushes everything (full); later runs push onlynew/changed/delisted(incremental).- A province-scoped run (anything but "All of Austria") is not a full scan and never updates
the baseline or reports delistings β same rule as a page-capped run. Recommended setup: schedule
a frequent Task on
autowithregion: all, plus a periodic (e.g. weekly) Task explicitly onmode: fullto force a full resync.
Full design: ../../docs/incremental-mode.md.
π How to scrape ImmoScout24.at
- Open the ImmoScout24 (AT) Real Estate Scraper in Apify Console and go to the Input tab.
- Pick a category (e.g. "Apartments β rent") and a region (e.g. "Wien"), or leave region at "All of Austria" for full country coverage.
maxItemsdefaults to 50 (a quick preview) β clear it (set tonull) along withmaxPagesfor a full, uncapped run.- Click Start.
- When the run finishes, browse results in the Output tab, or download as JSON/CSV/Excel, or fetch them via the API.
- To track a market over time instead of scraping once: create a Schedule with
mode: autoandregion: allβ the first run does a full scan, every run after only bills the listings that actually changed.
π° How much does it cost
Pricing: $3.50 per 1,000 results (pay-per-result), plus a fixed, negligible per-run start fee. No cost for pages that return zero results.
Example: Wien's apartment-rent inventory is confirmed at roughly 3,685 listings (live-verified
against the site). A full scan of that scope costs roughly $12.90. Because of built-in delta
mode, a scheduled re-run afterwards only bills for listings that are actually new, changed, or
delisted β not the full ~3,685 again β so ongoing monitoring costs a fraction of the initial scan
once the baseline is established.
π You might also like
- Willhaben.at Real Estate Scraper β a second, independent Austrian real-estate source with the identical output schema by design, so results from both merge directly for cross-checking coverage or de-duplicating listings posted on both sites.
β FAQ
Is it legal to scrape ImmoScout24.at? It's legal to collect publicly available listing data such as prices, descriptions, and locations. Results may contain limited personal data (agency names for professional listings only β see Key features); scrape it only with a legitimate purpose under GDPR.
How do I get only new/changed listings? Use mode: auto (or incremental) on a schedule β see
Incremental mode.
Why are some fields always null? property_type, condition, year_built, energy_class,
and the has_balcony/has_garden/has_parking flags are always null, and district is
Vienna-only β see Output for why.
Search keywords
immoscout24 scraper, immoscout24.at scraper, immobilienscout24 austria scraper, austria real estate scraper, austrian property scraper, immobilien scraper wien, apartment scraper austria, house scraper austria, immoscout24 api, immoscout24 graphql scraper, real estate delta scraper, real estate price tracking, austria property data feed