ImmoScout24 Property Listings Scraper
Pricing
from $1.00 / 1,000 results
ImmoScout24 Property Listings Scraper
Scrape German property listings from ImmoScout24 by city and type: price, living space, rooms, price per m², address with coordinates, agent, energy class and photos. No login, no browser.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Scrape German property listings from ImmoScout24 by city and property type: price, living space, rooms, price per m², address with coordinates, energy efficiency class, photos and listing flags. Ten property types from apartments to retail space. No login, no browser.
Input
| Field | Type | Default | Description |
|---|---|---|---|
places | array | — | German place names — Berlin, München, Hamburg-Altona. Resolved to region codes automatically |
geocodes | array | — | Raw ImmoScout24 region codes, if you have them |
realEstateTypes | array | apartment-rent | apartment-rent, apartment-buy, house-rent, house-buy, flatshare-room, garage-rent, garage-buy, office, store-rent, investment |
maxItemsPerSearch | integer | 200 | One search = one region × one type. 50 listings per request |
Output
{"_input": "Berlin / apartment-rent","_source": "S1-is24-mobile-api","_scrapedAt": "2026-09-12T10:22:04Z","listingId": "153605035","url": "https://www.immobilienscout24.de/expose/153605035","title": "Home & Co – Easy Living | Fully Furnished Living","realEstateType": "apartment-rent", "listingType": "STANDARD","price": 569.0, "currency": "EUR","livingSpaceSqm": 16.0,"rooms": 1.0,"pricePerSqm": 35.56,"addressLine": "Clayallee 336, 14169 Berlin, Zehlendorf","latitude": 52.43719, "longitude": 13.26222,"addressIsIncomplete": false,"realtorLogoUrl": "https://pictures.immobilienscout24.de/usercontent/….PNG/…","isPrivate": false, "isNewObject": false, "isProject": false,"energyEfficiencyClass": "E","liveVideoTourAvailable": false, "listedOnlyOnIs24": true,"publishedLabel": "Published today", "tags": [],"titlePictureUrl": "…", "pictureCount": 12,"page": 1}
Four things worth knowing
Price, size and rooms arrive with no labels. The API returns
attributes: [{label: "", value: "€569"}, {label: "", value: "16 m²"}, {label: "", value: "1 rms"}]
— every label an empty string. The order was consistent across 97 real listings, but this actor
matches on the unit inside the value (€, m², rms) rather than the position, because the
one entry that broke the pattern turned out not to be a listing at all.
Not everything in results is a property. Nine entries in 200 were house-construction group
cards: no id, an isNewHomeBuilder flag, and a single attribute holding a builder's name. Read
positionally, that puts "Build with massa haus – Nancy Ehrhard-Richter" into the price column.
They are skipped, and the run log says how many.
A missing coordinate is explained, not mysterious. ImmoScout24 marks addresses the seller left
vague with a literal (incomplete address) suffix, and those are precisely the listings with no
lat/lon. In one Munich run the correlation was exact: 18 incomplete addresses, 0 with
coordinates; 82 complete addresses, 82 with coordinates. addressIsIncomplete carries that so an
empty latitude reads as a fact about the listing rather than a bug in the scraper.
There is no agent name in the search response. The realtor object holds a logo URL and a brand
colour — on every listing checked — and nothing else. The agency name lives only on the listing's
own detail page. Rather than emit a permanently-null realtorName, this actor ships
realtorLogoUrl, which is what the API actually returns.
The locale is pinned, deliberately
The same listing renders as €569 / 1 rms under en-US and 569 € / 1 Zi. under de-DE —
and German number formatting swaps the meaning of . and ,, so 4.115 € and €4,115 are the
same number written two incompatible ways. The requests pin en-US so the parser has one contract
instead of two. Prices are always euros regardless.
How it works
Two hosts. www.immobilienscout24.de/geoautocomplete/v3/locations.json turns a place name into the
numeric region code the search needs (berlin → 1276003001). api.mobile.immobilienscout24.de/search
returns the listings, 50 per page, and answers JSON only for the mobile app's client identifier —
without it the same path returns a 200 with a zero-byte body rather than an error.
Errors
_error | Meaning |
|---|---|
invalid_input | An empty place name |
place_not_found | The geocode autocomplete matched no region |
no_results | The search ran and this region has none of that property type |
blocked | The API refused, or returned a 200 that was not usable |
network_error | Never reached the server |
If every search fails, the run itself fails rather than reporting success over an empty dataset.