ImmobilienScout24 Property Listings Scraper

Extract public ImmobilienScout24 real estate listing data for market research, lead generation, and price monitoring.

Data fields

FieldTypeDescription
listingIdstringValue exported as listingId.
urlstringValue exported as url.
sourceUrlstringValue exported as sourceUrl.
titlestring | nullValue exported as title.
realEstateTypestring | nullValue exported as realEstateType.
listingTypestring | nullValue exported as listingType.
pricenumber | nullValue exported as price.
priceRawstring | nullValue exported as priceRaw.

Input preview

startUrlsSearch URLs
geocodesGeocodes
realEstateTypeReal estate type
maxItemsMaximum listings
pageSizePage size

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

ImmobilienScout24 scraper for extracting public property search results into a structured Apify dataset. This ImmobilienScout24 API workflow uses the proven mobile search route to collect listing IDs, prices, location, coordinates, attributes, images, flags, and pagination metadata for German real-estate research and monitoring.

At a glance

  • Primary job: Export ImmobilienScout24 search listings without manually paging through the website.
  • Input: ImmobilienScout24 search URLs or mobile API geocode paths such as /de/berlin/berlin.
  • Output: One dataset row per unique property listing.
  • Best for: Rental and sales market research, price monitoring, location analysis, and listing deduplication.

Input recipes

Berlin apartment rentals

{
  "startUrls": [{ "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }],
  "maxItems": 50
}

Munich apartment rentals by geocode

{
  "geocodes": ["/de/bayern/muenchen"],
  "realEstateType": "apartmentrent",
  "maxItems": 50
}

House purchases

{
  "geocodes": ["/de/brandenburg/potsdam"],
  "realEstateType": "housebuy",
  "maxItems": 100
}

Output: what data can you extract?

Field Description
listingId Stable ImmobilienScout24 expose ID for deduplication.
url Public listing URL.
sourceUrl Search URL or generated API source for the row.
title Listing headline.
realEstateType, listingType Search/listing type values exposed by the source.
price, priceRaw Parsed numeric price and original price text.
livingAreaSqm, livingAreaRaw Parsed living area and original area text.
rooms, roomsRaw Parsed room count and original room text.
address, city, postalCode Public address line and parsed locality fields.
latitude, longitude Listing coordinates when exposed.
published Source-published label.
energyEfficiencyClass Energy class when present in search results.
isProject, isPrivate, isNewObject, liveVideoTourAvailable, listOnlyOnIs24 Listing flags exposed by the mobile result.
attributes, tags Additional result attributes and badges.
imageUrls, titlePictureUrl, realtorLogoUrl Public image/logo URLs from the search result.
reportUrl Source report URL when available.
searchPageNumber, searchTotalResults Pagination context.
scrapedAt ISO timestamp when the row was saved.

Tips for best results

  • Start with maxItems: 10 or 50 to validate the region and type.
  • Use specific city/region search URLs or geocodes for faster, cleaner output.
  • Schedule repeated runs and compare listingId, price, and scrapedAt for monitoring.

Limits and caveats

  • Search results do not expose every detail-page field. Phone numbers, agent names, and full descriptions are intentionally not guessed.
  • Very broad searches can span many pages; use maxItems to control runtime and spend.
  • Source data can change, disappear, or become temporarily unavailable.

Who is it for?

  • Real-estate analysts tracking rental or sales inventory by German city.
  • PropTech teams enriching dashboards with listing IDs, coordinates, and price fields.
  • Agencies and investors monitoring market supply and listing changes over time.
  • Automation builders who need CSV, Excel, JSON, API, or MCP access to ImmobilienScout24 property listings.

API usage

Node.js:

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/immobilienscout24-property-listings-scraper").call({
  geocodes: ["/de/berlin/berlin"],
  realEstateType: "apartmentrent",
  maxItems: 50
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/immobilienscout24-property-listings-scraper").call(run_input={
    "geocodes": ["/de/berlin/berlin"],
    "realEstateType": "apartmentrent",
    "maxItems": 50,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~immobilienscout24-property-listings-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"geocodes":["/de/berlin/berlin"],"realEstateType":"apartmentrent","maxItems":50}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/immobilienscout24-property-listings-scraper"
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/immobilienscout24-property-listings-scraper"
    }
  }
}

Example prompts:

  • "Run ImmobilienScout24 Property Listings Scraper for Berlin apartment rentals and summarize average price from the dataset."
  • "Export 20 Munich ImmobilienScout24 listings and list IDs with coordinates for monitoring."

Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, and actual output.

Common questions

Questions and answers reused from the canonical actor README.

Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

Why are some fields empty?

ImmobilienScout24 search results expose different fields per listing. Empty optional fields mean the source did not provide that value in the search response.