ImmoScout24 Scraper - Germany, Austria & Spain Property
Pricing
from $2.20 / 1,000 listings
ImmoScout24 Scraper - Germany, Austria & Spain Property
Collect property listings from ImmoScout24 Germany and Austria, Fotocasa, and Habitaclia in Spain. Get prices, rooms, areas, agency details, and photos; pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 listings
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Security
Limited permissionsShare
ImmoScout24 Scraper
Extract property listings from Germany, Austria, and Spain as rows you can export, compare, or add to a property database.
- Sale and rental listings from ImmobilienScout24.de, ImmobilienScout24.at, Fotocasa, and Habitaclia.
- Prices, rooms, floor areas, location details, agency information, and photos when available.
- Searches by location or by links you supply.
- Pay for delivered rows: $3.00 per 1,000 rows on the Free plan, plus a start fee.
What does ImmoScout24 Scraper do?
ImmoScout24 Scraper collects public property listings from four portals in three countries. Each dataset row represents one listing. Use the rows for price comparisons, investment screening, agency research, or scheduled snapshots of a local market.
- Germany:
country: "DE"selects ImmobilienScout24.de. - Austria:
country: "AT"selects ImmobilienScout24.at. - Spain:
country: "ES"selects Fotocasa;country: "HABITACLIA"selects Habitaclia. - Sale or rent: choose
channel: "BUY"orchannel: "RENT"for a location search. - Detail enrichment:
scrapeDetailsis on by default for Germany, Austria, and Fotocasa. It adds information to the same listing row, without extra billed rows. Habitaclia uses search results only and forces this setting off.
What data can you extract from ImmoScout24?
Fields depend on the portal and listing. Empty values mean the information was not available; a row does not guarantee a complete address or contact details.
| Field | Description | Example |
|---|---|---|
id | Portal listing identifier | 123456789 |
url | Listing link | https://www.immobilienscout24.de/expose/123456789 |
source | Portal identifier | immobilienscout24 |
country | Country code; both Spanish portals return ES | DE |
market | Spanish portal, when applicable | fotocasa |
channel | Sale or rental category | BUY |
propertyTypeRequested | Category requested in the input | apartment |
realEstateType | Property type reported for the listing | APARTMENT_BUY |
title | Listing headline | Example apartment in Berlin |
priceAmount | Numeric advertised price | 396000 |
priceFormatted | Display price text | 396.000 € |
priceOnRequest | Whether the listing withholds a numeric price | false |
baseRent | Base rent, when published | 1200 |
totalRent | Total rent, when published | 1450 |
rooms | Advertised room count | 3 |
livingSpace | Area in square metres; some categories use another published area | 75 |
city | City or locality | Berlin |
zipCode | Postal code | 10115 |
quarter | District or neighbourhood | Mitte |
address | Structured address; hidden parts remain empty | {"locality":"Berlin","country":"DE"} |
geo | Published coordinates, when available | {"lat":52.52,"lng":13.405} |
realtorCompanyName | Agency name | Example Agency |
contactName | Published contact name | Jane Doe |
phones | Available phone entries | [{"value":"+1 555 0100","type":"mobile"}] |
emails | Available email entries | [{"value":"name@example.com","type":"contact"}] |
description | Listing description, when available | Example property description |
constructionYear | Published year of construction | 1998 |
images | Listing image URLs | [] |
tags | Listing features or labels | [] |
scrapedAt | Collection timestamp | 2026-10-24T00:00:00+00:00 |
How to scrape ImmoScout24
- Open ImmoScout24 Scraper in Apify Console.
- Enter
location, or paste links intostartUrls. For a location outside Germany, selectcountrytoo. - Choose the sale/rental channel and property category. Set
maxItemsto3for a first run. - Click Start and wait for completion.
- Download the dataset or read it through the API.
An empty input starts a three-row example: apartments for sale in Berlin. This example is billed normally. If you select another country without a target, the example uses Wien for Austria or Madrid for Spain. Filling one target field selects the corresponding search approach automatically; there is no mode field.
Location search
Enter a city, region, or district with its city in location, such as Berlin, Bayern, or Kreuzberg, Berlin. The Actor uses country, market, channel, and propertyType to choose the search. Existing location paths such as berlin/berlin are also accepted.
Search and listing URLs
Use startUrls for portal search links or supported listing links. A search URL takes precedence over location and supplies its own search filters. The link's portal determines the market. Keep each run's links on one portal; do not assume a mixed-country list creates separate country searches. For Habitaclia, use search URLs rather than individual listing pages.
What to fill in
| Field | What to enter | Default |
|---|---|---|
startUrls | Search or listing URLs, as strings or objects with url | Empty |
location | Place to search when no search URL is supplied | Empty; form prefill Berlin |
country | DE, AT, ES, or HABITACLIA | DE |
market | fotocasa or habitaclia for Spain | Fotocasa when country is ES |
channel | BUY or RENT | BUY |
propertyType | Category such as apartment, house, plot, or office | apartment |
maxItems | Rows per input, from 1 to 500 | 70; form prefill 3 |
maxPages | Compatibility setting; does not cap paging | 1 |
scrapeDetails | Add detail information to each listing row | true; always false for Habitaclia |
requestDelayMillis | Delay between page requests, in milliseconds, from 0 to 20000 | 2000 |
Germany, sale:
{"location": "Berlin","channel": "BUY","maxItems": 3}
Austria, rent:
{"country": "AT","location": "Wien","channel": "RENT","maxItems": 3}
Spain, Fotocasa:
{"country": "ES","location": "Madrid","maxItems": 3}
Spain, Habitaclia:
{"country": "HABITACLIA","location": "Barcelona","scrapeDetails": false,"maxItems": 3}
Search URL:
{"startUrls": [{"url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"}],"maxItems": 3}
maxItemsis the canonical row limit.maxResults,limit, andmax_resultsare aliases.urlsmaps tostartUrls;placeandcitymap tolocation.- Close field-name misspellings can be corrected. Other unknown fields are ignored with a note. Invalid
channelorpropertyTypefilter values can fall back to defaults; check the input report. - Out-of-range numeric settings are adjusted to their allowed range with a warning. Invalid country settings or unsupported category combinations fail before listing rows are charged, with errors such as
INVALID_INPUT: country — invalid value; see the input schema for the allowed values and range. Unsupported URLs name the offendingstartUrlsentry; not every error has the same prefix. The start fee still applies. - Each run writes
INPUT_REPORTto its default key-value store, recording fields received, corrected, filled, or ignored.maxPagesdoes not replacemaxItemsas the row limit.
Output example
This illustrative row shows a German sale listing. Values are examples, not a current property offer.
{"id": "123456789","url": "https://www.immobilienscout24.de/expose/123456789","source": "immobilienscout24","country": "DE","channel": "BUY","propertyTypeRequested": "apartment","realEstateType": "APARTMENT_BUY","title": "Example apartment in Berlin","priceAmount": 396000,"priceFormatted": "396.000 €","rooms": 3,"livingSpace": 75,"city": "Berlin","realtorCompanyName": "Example Agency","contactName": "Jane Doe","phones": [],"emails": [],"images": [],"scrapedAt": "2026-10-24T00:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. OUTPUT and RUN_SUMMARY contain counts and warnings; ERROR_SUMMARY describes collection failures.
Why use this ImmoScout24 scraper?
- Pay per delivered row. Listing charges apply to rows written to the dataset, not pages attempted.
- Keep partial results. When a stopped or timed-out collection returns partial rows, the Actor delivers and bills those rows. Rows already in the dataset remain available; a forced termination cannot guarantee delivery of unsaved work.
- Compare consistent fields. Use identifiers, prices, locations, and timestamps in spreadsheets or recurring comparisons.
- Leave gaps visible. Unavailable fields stay empty rather than becoming invented prices or contacts.
- Use several inputs. Supply multiple links, each with its own
maxItemsallowance, within the run's cost limit. - No proxy setup. You do not need to set up proxies.
How much does it cost to scrape ImmoScout24?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of selected memory, with at least one event. At the default 1024 MB, a start costs $0.005. Platform usage is included in these prices.
| Apify plan | Start at 1024 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
maxItemsapplies to each start URL, or to the location when no URL is supplied. The default is70; larger requests are collected in parts of at most 70, up to the input maximum of500.- Free Apify plan runs are capped at 200 rows total. This Actor also limits Free-plan users to 10 runs total.
- The whole run stops at Maximum cost per run, set through
maxTotalChargeUsdin the API. Several inputs share this cost ceiling. - Detail enrichment updates existing rows and has no separate row charge.
Example: three search URLs delivering 50 rows each produce 150 rows. On the Free plan, one start at 1024 MB costs 150 × $0.003 + $0.005 = $0.455. Fewer delivered rows mean fewer row charges.
What happens when the run timeout is too short
Some searches need more time than the timeout you chose. When automatic resumption is accepted, the run pauses with a message such as "Queued on the collection backend; this run will resume automatically when results are ready (about Ns)." It temporarily shows ABORTED, rather than a collection failure.
When results are ready, the same run resumes automatically, reports "Resumed: delivering N rows.", writes to the same dataset, and finishes as SUCCEEDED. Previously delivered rows are not delivered or charged again. No manual restart is needed for this pause.
- Automatic pauses are limited to three per run. Keep the default 3600-second timeout to reduce interruptions.
- Synchronous API endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds. They can return an empty dataset while the run is paused. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.
Use with AI agents and the API
Apify MCP server
Add this remote server in Claude, ChatGPT, Cursor, VS Code, or another compatible MCP client:
https://mcp.apify.com?tools=lentic_clockss/immobilienscout24-scraper
Sign in through Apify OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns the run and dataset IDs; the agent reads rows using get-dataset-items. Clients without remote-server support can use npx @apify/actors-mcp-server --tools lentic_clockss/immobilienscout24-scraper with APIFY_TOKEN set.
Example prompt: "Find three apartments for rent in Wien using ImmoScout24 Scraper. Set country to AT, channel to RENT, and maxItems to 3. Return prices, areas, and listing URLs."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/immobilienscout24-scraper").call(run_input={"location": "Berlin", "maxItems": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/immobilienscout24-scraper').call({ location: 'Berlin', maxItems: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP access, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~immobilienscout24-scraper/runs with an Authorization: Bearer header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Standby HTTP endpoint
Base URL: https://lentic-clockss--immobilienscout24-scraper.apify.actor
| Method | Route | Returns |
|---|---|---|
GET | / | Service information |
GET | /health | Service status |
GET | /input-example | Sample Actor input |
GET | /openapi.json | API route definitions |
These are information endpoints, not collection endpoints. Start scraping through the normal Actor API; this HTTP surface has no POST /v1/collect route or asynchronous collection response.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your webhook. Apify Schedules can start recurring runs.
Auf Deutsch
Dieser Actor sammelt öffentliche Immobilienangebote aus Deutschland und Österreich sowie von Fotocasa und Habitaclia in Spanien. Tragen Sie einen Ort in location ein oder übergeben Sie Suchlinks mit startUrls. Mit country wählen Sie das Land, mit channel Kauf oder Miete. maxItems begrenzt die Zahl der Ergebniszeilen je Eingabe. Zum Ausprobieren reichen drei Angebote. Preise, Zimmerzahl, Fläche und Kontaktdaten erscheinen nur, soweit sie verfügbar sind. Bei Habitaclia werden keine zusätzlichen Detailinformationen abgerufen. Abgerechnet wird jede gelieferte Zeile; hinzu kommt die Startgebühr. Die Ergebnisse lassen sich als CSV, Excel oder JSON herunterladen. Prüfen Sie vor der Nutzung die jeweiligen Nutzungsbedingungen und den Datenschutz.
FAQ
Is it legal to scrape ImmoScout24?
Collect only public data you are entitled to use. You are responsible for the portal's terms and applicable data-protection law. Publicly visible personal data still needs a lawful basis for collection and use.
Why did my run end as ABORTED?
An automatic pause can temporarily show ABORTED while awaiting results. Check the status message: if it says the run will resume, wait. A manual abort or other failure is not the same situation.
How many results can I get?
Request 1–500 rows per input with maxItems. Actual delivery depends on matching inventory, available pages, time, and your cost limit. The Free plan caps the whole run at 200 rows and allows 10 runs of this Actor.
Why are some fields empty?
Listings may hide addresses or omit contacts, rooms, or prices. Commercial properties may lack residential measurements. Detail enrichment can add fields but does not guarantee them. Compare priceOnRequest, baseRent, and totalRent before treating prices as equivalent.
Which countries and transaction types are supported?
Germany, Austria, and Spain support sale and rental searches. Fotocasa is the default Spanish portal. Category availability differs: foreclosure is Germany-only and sale-only; short_term is Germany-only and rental-only.
Why does Habitaclia skip detail pages?
The Actor uses Habitaclia search listings only. It overrides scrapeDetails: true to false, so expect the fields available in those results rather than additional detail information.
Can I request Habitaclia garages or shared rooms?
The garage, parking, and shared_room categories are not supported for Habitaclia. Choose a supported category or Fotocasa instead. An unsupported category selection is still checked when you supply URLs.
Does maxPages limit the search?
No. It is retained for compatibility. Use maxItems to control rows; the Actor follows available pages until the row target or another limit is reached.
Limitations
- Only the four named portals are supported; other real-estate sites require a different scraper.
- Habitaclia does not provide detail enrichment through this Actor.
- Categories do not map identically across markets. For example, German and Austrian
penthouse,duplex, andstudiosearches use the broader apartment category. - Missing or unpublished contact information cannot be guaranteed. Property counts, prices, and listing availability can change between runs.
- No historical inventory or complete-market coverage is promised. An empty matching search can finish successfully with zero rows; the start fee still applies.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.