# ImmobilienScout24 Scraper — Germany Listings, Rents & Prices (`crawloop/immobilienscout24-scraper`) Actor

Scrape ImmobilienScout24.de apartments and houses for rent and sale. Get price, m2, rooms, energy class, GPS, photos, and private vs Makler. Paste a search or expose URL. ImmobilienScout24 API alternative for Python, Node.js, and MCP.

- **URL**: https://apify.com/crawloop/immobilienscout24-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## ImmobilienScout24 Scraper — Germany Listings, Rents & Prices

> **Disclaimer:** This is an unofficial integration developed independently. It is not affiliated with, sponsored by, or endorsed by Immobilien Scout GmbH or any of its subsidiaries.
>
> **ImmobilienScout24**, **ImmoScout24**, and related names are trademarks of their respective owners. Data is read from publicly accessible ImmobilienScout24 Germany listings. No ImmobilienScout24 account login is required.
>
> This Actor is provided **for informational, research, lead-generation, and market monitoring purposes**. You are solely responsible for complying with applicable laws (including GDPR), ImmobilienScout24's terms of use, and your organization's policies when processing listing and agent data.

Scrape **ImmobilienScout24** (`immobilienscout24.de`) into clean JSON: apartments and houses for **rent (mieten)** and **sale (kaufen)** with price, €/m², rooms, living space, energy class, GPS, photos, **private owner vs Makler**, and optional full expose details (costs, energy certificate, description, agent company). This **ImmobilienScout24 scraper** / **ImmoScout24 scraper** works as a German real-estate **API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP** / AI assistants — paste any `/Suche/` or `/expose/` URL.

**Best for:** Germany rent and sale comps, PropTech pipelines, FSBO / private-seller leads, energy-class screening, and dataset export (JSON / CSV) via Apify.

| Actor | Role |
| :--- | :--- |
| ImmobilienScout24 Scraper ◄── you are here | Germany IS24 listings (rent & buy) |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain Idealista listings + agency leads |
| [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | German classifieds + monitor alerts |
| [mobile.de Scraper](https://apify.com/crawloop/mobile-de-scraper) | German vehicle listings |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | French classifieds |

### When to use this Actor

- **ImmobilienScout24 scraper for search pages** — Copy a filtered browser URL (city, radius, price, rooms, Wohnung/Haus, mieten/kaufen) into Start URLs.
- **Wohnung mieten / Haus kaufen datasets** — Berlin, München, Hamburg, Köln, or any `/Suche/de/...` region; export JSON/CSV for comps and pipelines.
- **Private-seller (FSBO) lead lists** — Enable **Private sellers only** to keep `isPrivate: true` rows and skip Makler inventory.
- **Full expose details** — Keep details on for Kaltmiete / Warmmiete, Nebenkosten, Kaution, energy certificate, description, and agent company.
- **Scheduled monitoring** — Re-run the same search and emit only **new** or **price-changed** listings.
- **Coverage past web SERP caps** — The mobile JSON API paginates the full result set (not the ~20-page website window). If a query still hits a page ceiling, the Actor splits by price bands.

### When not to use this Actor

- **Austria / Switzerland portals** — This Actor targets **immobilienscout24.de (Germany)**. Austrian and Swiss Scout24 sites use different URL schemes and backends.
- **Makler profile crawl (`/anbieter/profil/`)** — Paste search or expose URLs. Agency portfolio scraping is not in this version.
- **Hidden contact reveal** — Public agent name/company and visible phones are included when the expose JSON already has them. The Actor does not solve contact-unlock walls.
- **Authenticated actions** — No login, messaging, or saved-search inbox.

### Key features

- **Mobile JSON API** — Reads `api.mobile.immobilienscout24.de` (the same backend as the IS24 apps). No headless browser, 128–512 MB RAM.
- **Search + expose URLs** — One Actor handles result lists and single listing IDs.
- **Search builder** — City name or `/de/...` geocode path, rent vs buy, apartment vs house, price / rooms / m² filters when you do not have a URL.
- **Private vs agency** — `isPrivate` / `advertiserType` on every row; optional private-only filter.
- **Price-drop tags** — `priceReduced` when the card or expose shows a Preissenkung.
- **Monitor mode** — Key-value store remembers listing IDs and prices across runs.
- **Residential DE proxy** — Recommended on Apify Cloud so datacenter IPs are not blocked.

### Input

| Field | What it does |
| :--- | :--- |
| **Start URLs** | Search (`/Suche/...`) or expose (`/expose/{id}`) links. Filters in the URL are kept. |
| **Region** | Builder only. `Berlin`, `Munich`, `Köln`, or `/de/bayern/muenchen`. |
| **Rent or buy** / **Property type** | Builder only. Wohnung vs Haus, mieten vs kaufen. |
| **Min/max price, rooms, m²** | Builder filters in euros / Zimmer / Wohnfläche. |
| **Max listings** | Cap on dataset rows. |
| **Scrape full expose details** | Default on. Off = search-card fields only (faster). |
| **Private sellers only** | Drop Makler listings. |
| **Monitor mode** | Save new and price-changed rows only. |
| **Proxy** | Apify Residential, country DE. |

```json
{
  "startUrls": [
    { "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }
  ],
  "maxItems": 50,
  "includeDetails": true,
  "onlyPrivate": false,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

Radius example (in a Start URL):

```json
{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/radius/wohnung-mieten?centerofsearchaddress=Berlin;10115;;;;;&geocoordinates=52.532;13.383;5.0"
    }
  ],
  "maxItems": 100
}
```

### Output

One dataset row per listing. Search-card fields are always present; the rest fill in when details are on.

| Field | Description |
| :--- | :--- |
| `id` | Scout-ID |
| `url` | Expose URL |
| `title` | Headline |
| `realEstateType` | `apartmentrent`, `apartmentbuy`, `houserent`, `housebuy`, … |
| `price` | Warm rent, cold rent, or purchase price (€) |
| `baseRent` / `totalRent` / `serviceCharge` | Kaltmiete, Warmmiete, Nebenkosten |
| `deposit` | Kaution (text as shown) |
| `livingSpaceValue` / `roomsValue` | m² and Zimmer |
| `energyEfficiencyClass` | A+–H |
| `yearBuilt` / `condition` / `heatingType` | Building and energy block |
| `features` | Balkon, Aufzug, Einbauküche, Garten, … |
| `isPrivate` / `advertiserType` | Private owner vs agency |
| `address` / `zipCode` / `city` / `latitude` / `longitude` | Location |
| `agentName` / `agentCompany` / `agentPhones` | Public advertiser fields |
| `pictures` | Image URLs |
| `priceReduced` | Preissenkung flag |
| `description` | Objektbeschreibung |
| `scrapedAt` | ISO timestamp |

```json
{
  "id": "170073864",
  "url": "https://www.immobilienscout24.de/expose/170073864",
  "title": "Vollmöbliertes Design-Apartment inkl. Einbauküche & Terrasse",
  "realEstateType": "apartmentrent",
  "price": 1070,
  "baseRent": 1070,
  "totalRent": 1195,
  "serviceCharge": 125,
  "livingSpaceValue": 32.93,
  "roomsValue": 1,
  "energyEfficiencyClass": "B",
  "isPrivate": false,
  "advertiserType": "agency",
  "address": "Biedenkopfer Straße 54 13507 Tegel, Berlin",
  "zipCode": "13507",
  "city": "Berlin",
  "latitude": 52.5798,
  "longitude": 13.28542,
  "yearBuilt": 2024,
  "features": ["Balkon/Terrasse", "Keller", "Personenaufzug", "Einbauküche", "Garten"],
  "agentCompany": "Comood GmbH",
  "pictures": ["https://pictures.immobilienscout24.de/listings/..."],
  "scrapedAt": "2026-08-17T11:00:00+00:00"
}
```

### Use cases

- **Agents** — Watch competing inventory by Bezirk; filter to private sellers for new mandates.
- **Investors / PropTech** — City-level rent and €/m² snapshots, energy class mix, GPS for maps.
- **Relocation / HR** — Warm rent + deposit + available-from for employee housing shortlists.
- **Market research** — Schedule daily runs in monitor mode and store only new ads and price cuts.

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/immobilienscout24-scraper').call({
  startUrls: [{ url: 'https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten' }],
  maxItems: 50,
  includeDetails: true,
  proxyConfiguration: {
    useApifyProxy: true,
    apifyProxyGroups: ['RESIDENTIAL'],
    apifyProxyCountry: 'DE',
  },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]?.id, items[0]?.price, items[0]?.livingSpaceValue);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("crawloop/immobilienscout24-scraper").call(
    run_input={
        "startUrls": [
            {"url": "https://www.immobilienscout24.de/Suche/de/bayern/muenchen/wohnung-kaufen"}
        ],
        "maxItems": 50,
        "includeDetails": True,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "DE",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("id"), item.get("price"), item.get("isPrivate"))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~immobilienscout24-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url": "https://www.immobilienscout24.de/Suche/de/hamburg/hamburg/haus-kaufen"}],
    "maxItems": 20,
    "includeDetails": true,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"],
      "apifyProxyCountry": "DE"
    }
  }'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name (`crawloop/immobilienscout24-scraper`).

Example prompts:

- "Run ImmobilienScout24 Scraper for Wohnung mieten in Berlin, max 30, and return id, warm rent, m², rooms, energy class as JSON"
- "Scrape ImmobilienScout24 Munich apartments for sale under €600,000 with full details and summarize private vs Makler share"
- "Pull ImmobilienScout24 Hamburg rentals, then compare the field set with Idealista Scraper for a DACH vs Spain pipeline"

### Suite next step

After Germany IS24 comps, add Spain coverage with [Idealista Scraper](https://apify.com/crawloop/idealista-scraper), or monitor German classified spillover on [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper).

### FAQ

**Is this an official ImmobilienScout24 API?**\
No. It is an unofficial **ImmobilienScout24 scraper** / API alternative that reads the public mobile listing JSON used by the IS24 apps. It is not affiliated with Immobilien Scout GmbH. You can call it from **Python**, **Node.js**, **cURL**, or **MCP**.

**Can I scrape Wohnung mieten in Berlin (or another city)?**\
Yes. Paste a Berlin `/Suche/.../wohnung-mieten` URL, or use the builder with region `Berlin`, rent, and apartment. The same pattern works for München, Hamburg, Köln, and other German cities.

**Why residential proxies?**\
Apify datacenter IPs are often blocked. Residential DE is the supported setup on Cloud.

**Can I paste a browser search URL?**\
Yes. Apply filters on the site, copy the `/Suche/` URL, paste into Start URLs. Radius, rooms, price, and property type in the path/query are translated to the mobile API.

**Does it stop at 1,000 results like the website?**\
The website result list is capped; the mobile search endpoint paginates much further (50 listings per page). If a query still hits a page ceiling, the Actor splits the price range automatically.

**Do you scrape Austria and Switzerland?**\
Not in this Actor. Germany (`immobilienscout24.de`) only.

**Are phone numbers included?**\
Only when the expose JSON already lists them (`agentPhones`). Private contact-unlock flows are not automated.

### Related Actors

| Actor | What it covers |
| :--- | :--- |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain sale/rent listings + agency phones |
| [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | German classifieds monitor |
| [mobile.de Scraper](https://apify.com/crawloop/mobile-de-scraper) | German used cars |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | France classifieds |
| [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) | Dutch marketplace |

# Actor input Schema

## `startUrls` (type: `array`):

Paste ImmobilienScout24 search-result URLs or individual expose URLs. Filters in the search URL (city, price, rooms, radius, property type) are applied automatically.

## `geocodes` (type: `string`):

Used only when Start URLs are empty. City name (Berlin, Munich, Hamburg, Köln, …) or an IS24 geocode path such as /de/bayern/muenchen.

## `transactionType` (type: `string`):

Builder only. Rent (mieten) or buy (kaufen).

## `propertyType` (type: `string`):

Builder only. Apartment (Wohnung) or house (Haus).

## `minPrice` (type: `integer`):

Minimum monthly rent or purchase price in euros. Builder only, or ignored when the Start URL already has a price filter.

## `maxPrice` (type: `integer`):

Maximum monthly rent or purchase price in euros.

## `minRooms` (type: `number`):

Minimum room count (Zimmer), e.g. 2.

## `maxRooms` (type: `number`):

Maximum room count (Zimmer), e.g. 4.

## `minLivingSpace` (type: `integer`):

Minimum Wohnfläche in square metres.

## `maxLivingSpace` (type: `integer`):

Maximum Wohnfläche in square metres.

## `maxItems` (type: `integer`):

Maximum number of listings to save per run.

## `includeDetails` (type: `boolean`):

Fetch each listing's expose JSON for costs, energy certificate, description, features, agent name/company, and price-drop fields. Turn off for faster search-card output.

## `onlyPrivate` (type: `boolean`):

Keep only private-owner listings (isPrivate=true). Useful for FSBO lead generation.

## `monitorMode` (type: `boolean`):

On scheduled re-runs, save only listings that are new or whose price changed since the last run on this Actor.

## `maxConcurrency` (type: `integer`):

How many expose requests to run in parallel. Default 8.

## `proxyConfiguration` (type: `object`):

Apify Proxy. Germany RESIDENTIAL is recommended for stable access to the ImmobilienScout24 mobile API on Apify Cloud.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
    }
  ],
  "transactionType": "rent",
  "propertyType": "apartment",
  "maxItems": 10,
  "includeDetails": true,
  "onlyPrivate": false,
  "monitorMode": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items — one ImmobilienScout24 listing per row.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
        }
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/immobilienscout24-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/immobilienscout24-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
    }
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call crawloop/immobilienscout24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/immobilienscout24-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1QPu4liApn86WVZ7v/builds/F6aBoacHgL9CV4D6T/openapi.json
