ImmoScout24 Scraper - Germany, Austria & Spain Property avatar

ImmoScout24 Scraper - Germany, Austria & Spain Property

Pricing

from $2.20 / 1,000 listings

Go to Apify Store
ImmoScout24 Scraper - Germany, Austria & Spain Property

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Security

Limited permissions

Share

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" or channel: "RENT" for a location search.
  • Detail enrichment: scrapeDetails is 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.

FieldDescriptionExample
idPortal listing identifier123456789
urlListing linkhttps://www.immobilienscout24.de/expose/123456789
sourcePortal identifierimmobilienscout24
countryCountry code; both Spanish portals return ESDE
marketSpanish portal, when applicablefotocasa
channelSale or rental categoryBUY
propertyTypeRequestedCategory requested in the inputapartment
realEstateTypeProperty type reported for the listingAPARTMENT_BUY
titleListing headlineExample apartment in Berlin
priceAmountNumeric advertised price396000
priceFormattedDisplay price text396.000 €
priceOnRequestWhether the listing withholds a numeric pricefalse
baseRentBase rent, when published1200
totalRentTotal rent, when published1450
roomsAdvertised room count3
livingSpaceArea in square metres; some categories use another published area75
cityCity or localityBerlin
zipCodePostal code10115
quarterDistrict or neighbourhoodMitte
addressStructured address; hidden parts remain empty{"locality":"Berlin","country":"DE"}
geoPublished coordinates, when available{"lat":52.52,"lng":13.405}
realtorCompanyNameAgency nameExample Agency
contactNamePublished contact nameJane Doe
phonesAvailable phone entries[{"value":"+1 555 0100","type":"mobile"}]
emailsAvailable email entries[{"value":"name@example.com","type":"contact"}]
descriptionListing description, when availableExample property description
constructionYearPublished year of construction1998
imagesListing image URLs[]
tagsListing features or labels[]
scrapedAtCollection timestamp2026-10-24T00:00:00+00:00

How to scrape ImmoScout24

  1. Open ImmoScout24 Scraper in Apify Console.
  2. Enter location, or paste links into startUrls. For a location outside Germany, select country too.
  3. Choose the sale/rental channel and property category. Set maxItems to 3 for a first run.
  4. Click Start and wait for completion.
  5. 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.

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

FieldWhat to enterDefault
startUrlsSearch or listing URLs, as strings or objects with urlEmpty
locationPlace to search when no search URL is suppliedEmpty; form prefill Berlin
countryDE, AT, ES, or HABITACLIADE
marketfotocasa or habitaclia for SpainFotocasa when country is ES
channelBUY or RENTBUY
propertyTypeCategory such as apartment, house, plot, or officeapartment
maxItemsRows per input, from 1 to 50070; form prefill 3
maxPagesCompatibility setting; does not cap paging1
scrapeDetailsAdd detail information to each listing rowtrue; always false for Habitaclia
requestDelayMillisDelay between page requests, in milliseconds, from 0 to 200002000

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
}
  • maxItems is the canonical row limit. maxResults, limit, and max_results are aliases. urls maps to startUrls; place and city map to location.
  • Close field-name misspellings can be corrected. Other unknown fields are ignored with a note. Invalid channel or propertyType filter 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 offending startUrls entry; not every error has the same prefix. The start fee still applies.
  • Each run writes INPUT_REPORT to its default key-value store, recording fields received, corrected, filled, or ignored. maxPages does not replace maxItems as 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 maxItems allowance, 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 planStart at 1024 MBPrice per rowPrice 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
  • maxItems applies to each start URL, or to the location when no URL is supplied. The default is 70; larger requests are collected in parts of at most 70, up to the input maximum of 500.
  • 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 maxTotalChargeUsd in 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 ApifyClient
client = 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

MethodRouteReturns
GET/Service information
GET/healthService status
GET/input-exampleSample Actor input
GET/openapi.jsonAPI 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

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.

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, and studio searches 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.

More real estate and property data scrapers from the same publisher:

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.