Immoscout24 Scraper (Real Estate)
Pricing
Pay per usage
Immoscout24 Scraper (Real Estate)
Extract property listings from ImmoScout24.de – Germany's #1 real estate portal. Filter by city, price, rooms & area. Returns structured JSON with price, address, GPS, energy rating & photos. Built-in WAF bypass ensures reliable results. Perfect for market analysis and more.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

ninhothedev
Actor stats
0
Bookmarked
2
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
ImmoScout24 Scraper
Extract structured real estate data from ImmoScout24.de – Germany's largest property portal with over 500,000 active listings. Get apartments, houses, and plots for sale or rent, filtered exactly to your needs.
Works reliably. Built-in WAF bypass using a GPTBot user-agent technique that is explicitly permitted in ImmoScout24's
robots.txt. Cookie persistence between runs for consistent performance.
What you get
Each listing is returned as a clean JSON record with up to 35 fields:
| Field | Type | Description |
|---|---|---|
title | String | Listing headline |
price | Number | Base price in € (Kaltmiete or Kaufpreis) |
price_type | String | kauf (buy) or miete (rent) |
property_type | String | wohnung, haus, or grundstueck |
rooms | Number | Number of rooms |
area_sqm | Number | Living area in m² |
plot_sqm | Number | Plot area in m² (houses/plots) |
additional_costs | Number | Nebenkosten / Betriebskosten in € |
heating_costs | Number | Heizkosten in € |
deposit | Number | Kaution in € |
total_rent | Number | Warmmiete / Gesamtmiete in € |
city | String | City name |
zip_code | String | German postal code |
district | String | City district / Stadtteil |
state | String | German Bundesland |
address | String | Full street address (when available) |
latitude | Number | GPS latitude |
longitude | Number | GPS longitude |
year_built | Number | Year of construction |
energy_rating | String | Energy class: A+, A, B, C, D … H |
energy_kwh | Number | Energy consumption in kWh/m²/year |
heating_type | String | Heating system type |
condition | String | Property condition |
floor | Number | Floor level (apartments) |
total_floors | Number | Total floors in the building |
has_balcony | Boolean | Has balcony or terrace |
has_garden | Boolean | Has garden |
has_garage | Boolean | Has garage or parking space |
has_elevator | Boolean | Has elevator |
has_cellar | Boolean | Has cellar |
is_commission_free | Boolean | No broker commission |
commission | String | Commission details (if applicable) |
thumbnail_url | String | Main listing photo URL |
images | Array | All photo URLs (detail mode only) |
description | String | Full expose text (detail mode only) |
url | String | Direct link to the listing |
external_id | String | ImmoScout24 expose ID |
Input options
| Parameter | Type | Default | Description |
|---|---|---|---|
city | String | Berlin | City to search (e.g. München, Hamburg, Köln) — leave empty for nationwide |
propertyType | Select | wohnung | wohnung, haus, or grundstueck |
priceType | Select | kauf | kauf (buy) or miete (rent) |
priceMin | Number | — | Minimum price in € |
priceMax | Number | — | Maximum price in € |
roomsMin | Number | — | Minimum number of rooms |
roomsMax | Number | — | Maximum number of rooms |
areaMin | Number | — | Minimum living area in m² |
areaMax | Number | — | Maximum living area in m² |
zipCode | String | — | Search by postal code instead of city name |
radiusKm | Number | — | Search radius in km around city/zip |
yearBuiltMax | Number | — | Maximum year of construction |
hasBalcony | Boolean | — | Filter for listings with balcony |
hasElevator | Boolean | — | Filter for listings with elevator |
hasCellar | Boolean | — | Filter for listings with cellar |
hasGarage | Boolean | — | Filter for listings with garage/parking |
commissionFree | Boolean | — | Filter for commission-free listings only |
energyClassMax | String | — | Maximum energy class (e.g. C includes A+, A, B, C) |
maxPages | Number | 5 | Pages to scrape (~20 listings per page) |
enrichDetails | Boolean | false | Visit each expose page for full description & all photos |
proxyConfiguration | Proxy | — | Apify Proxy settings (Residential recommended) |
Example — Apartments for sale in Berlin
{"city": "Berlin","propertyType": "wohnung","priceType": "kauf","priceMin": 200000,"priceMax": 600000,"roomsMin": 2,"areaMin": 60,"maxPages": 10,"enrichDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Expected output: ~200 listings with price, rooms, area, address, GPS, energy rating, and photos.
Example — Rental apartments in Munich
{"city": "München","propertyType": "wohnung","priceType": "miete","priceMax": 2000,"roomsMin": 2,"maxPages": 5}
Tips for best results
- Residential proxies significantly improve success rates — select
RESIDENTIALin the proxy configuration - Each page returns approximately 20 listings;
maxPages: 10= ~200 results - Enable
enrichDetailsonly when you need full property descriptions or all photos — it multiplies runtime and proxy usage - For nationwide searches, leave
cityempty - Cookie state is saved between runs for faster warm-up on repeat runs
Use cases
Real estate professionals Monitor competitor listings, track price changes, and generate buyer leads automatically.
Investors & analysts Build price heatmaps, analyze market trends by district, and identify undervalued properties at scale.
PropTech & developers Feed property data into your own app, CRM, or machine learning pipeline without managing your own scraper.
Researchers Study the German housing market, rental vs. purchase trends, energy efficiency distribution, or urban development patterns.
Property alert services Check for new listings matching specific criteria and send automated alerts to users.
Output example
{"title": "Helle 3-Zimmer-Wohnung mit Balkon in Prenzlauer Berg","price": 485000,"price_type": "kauf","property_type": "wohnung","rooms": 3,"area_sqm": 82.5,"city": "Berlin","zip_code": "10437","district": "Prenzlauer Berg (Pankow)","address": "10437 Berlin","latitude": 52.5388,"longitude": 13.4244,"year_built": 1998,"additional_costs": 220,"heating_costs": 95,"deposit": 2910,"total_rent": null,"state": "Berlin","floor": 3,"total_floors": 6,"energy_rating": "C","energy_kwh": 112,"heating_type": "Fernwärme","condition": "Gepflegt","has_balcony": true,"has_garden": false,"has_garage": false,"is_commission_free": false,"thumbnail_url": "https://img.immobilienscout24.de/...","url": "https://www.immobilienscout24.de/expose/164224938","external_id": "164224938"}
FAQ
Does this work without proxies? Yes, but using Residential proxies reduces the chance of rate limiting on large runs. For small searches (1–3 pages), no proxy is usually fine.
How many listings can I scrape? ImmoScout24 shows up to 50 pages per search (~1,000 listings). For more, split searches by city or price range.
Will it break if ImmoScout24 changes their website? The scraper extracts data from an embedded JSON object in the page source — this approach is significantly more stable than HTML parsing. Updates will be pushed as needed.
What's the difference between standard and detail mode?
Standard mode scrapes search result pages only (~0.5s per listing). Detail mode (enrichDetails: true) additionally visits each individual listing page to extract the full description, all photos, and extended feature data (~3–5s per listing).
Legal
This actor is intended for legitimate research, analysis, and data aggregation. Users are responsible for complying with ImmoScout24's Terms of Service and applicable data protection laws (GDPR). Do not use scraped data for spam, unauthorized commercial solicitation, or any illegal purpose.