# ImmoScout24 Scraper - German Real Estate (`benthepythondev/immobilienscout24-scraper`) Actor

Scrape ImmoScout24 (Germany's #1 property portal), for sale or to rent: price, living area, rooms, full address, coordinates, energy class, property type, photo and listing URL. Optional agent name and phone. Search by city name.

- **URL**: https://apify.com/benthepythondev/immobilienscout24-scraper.md
- **Developed by:** [ben](https://apify.com/benthepythondev) (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 $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## 🏠 ImmoScout24 Scraper - German Real Estate Data

Extract real-estate listings from **ImmoScout24 (immobilienscout24.de)**, Germany's #1 property portal, in clean structured form. Search any German city, district or region by name and pull apartments, houses, flat-share rooms, garages, plots and commercial units — for sale or to rent. For every listing you get the price, living area, number of rooms, full address, GPS coordinates, energy class, property type, photo and listing URL, plus an optional advertiser name, company and phone number for lead generation. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the ImmoScout24 Scraper?

The ImmoScout24 Scraper turns the live ImmoScout24 search into a structured dataset you can analyse, monitor or feed into your own app. Give it one or more German locations and a property type, and it returns the matching listings page by page. It is fast and reliable because it reads ImmoScout24's own mobile search service directly, so there is no brittle HTML parsing.

#### What data does it extract?

- **Listing identity** — listing **id** and the canonical **url** on immobilienscout24.de.
- **Pricing** — **price** (numeric) and **currency** (EUR).
- **Size & layout** — **area_sqm** (living area) and **rooms**.
- **Property details** — **title**, **property_type** (apartment/house/flat-share/…), **energy_class**, **listing_type**, **is_new**, **is_project**, **is_private** (private seller vs agent), **published** (how long it has been online).
- **Location** — full **address** line plus **latitude** and **longitude**.
- **Media** — a **image** URL (title photo).
- **Lead generation (optional)** — **agent_name**, **agent_company** and **agent_phone** when *Fetch agent contact* is enabled.

### ⬇️ Input

| Field | Type | Description |
|---|---|---|
| `locations` | array | German city/district/region names, e.g. `"Berlin"`, `"München"`. Resolved automatically. |
| `realEstateType` | string | `apartmentrent`, `apartmentbuy`, `houserent`, `housebuy`, `flatshareroom`, `garagerent`, `officerent`, … |
| `maxResults` | integer | Max listings to return per location (default 50). |
| `fetchAgentContact` | boolean | Also fetch advertiser name, company and phone per listing (slower). |
| `geocodes` | array | Advanced: ready-made geocode slugs like `"/de/berlin/berlin"`. |
| `useResidentialProxy` | boolean | Route through Apify residential German IPs (usually not needed). |

#### Example input

```json
{
  "locations": ["Berlin", "München"],
  "realEstateType": "apartmentrent",
  "maxResults": 50,
  "fetchAgentContact": false
}
````

### ⬆️ Output

Each item in the dataset looks like this:

```json
{
  "id": "168052908",
  "url": "https://www.immobilienscout24.de/expose/168052908",
  "title": "Naturverbunden wohnen in kompakter 2-Zimmer-Gartenwohnung",
  "contract": "rent",
  "property_type": "apartmentrent",
  "price": 362,
  "currency": "EUR",
  "area_sqm": 52,
  "rooms": 2,
  "energy_class": "B",
  "address": "Hellersdorfer Straße 91, 12619 Berlin, Kaulsdorf (Hellersdorf)",
  "latitude": 52.52485,
  "longitude": 13.58695,
  "is_private": false,
  "is_new": false,
  "is_project": false,
  "listing_type": "XL",
  "published": "vor 7 Tagen",
  "image": "https://pictures.immobilienscout24.de/listings/7059e813-...-format/jpg/quality/80",
  "agent_name": "Ihr Beratungsteam",
  "agent_company": "Casa Nova RE GmbH",
  "agent_phone": "+49 30 26475768",
  "query": "Berlin"
}
```

When *Fetch agent contact* is off, `agent_name`, `agent_company` and `agent_phone` are `null`.

### 💡 Use cases

- 🏙️ **Market & rent analysis** — track asking prices, €/m² and supply across German cities over time.
- 📈 **Investment sourcing** — surface new for-sale listings the day they appear and filter by price, size and energy class.
- 📇 **Lead generation** — build prospect lists of agents and private sellers with name, company and phone for outreach.
- 🔁 **Aggregators & apps** — power a portal, alerting bot or CRM with fresh, normalised German listings on a schedule.

### ❓ FAQ

**Which portal does this scrape?** ImmoScout24 / immobilienscout24.de, the largest real-estate marketplace in Germany.

**Can I search by city name?** Yes. Type any German city, district or region (e.g. `Berlin`, `München`, `Hamburg - Niendorf`) and it is resolved automatically. Advanced users can pass exact geocode slugs instead.

**Can it scrape both rentals and sales?** Yes — choose `apartmentrent`/`houserent` for rentals or `apartmentbuy`/`housebuy` for sales, plus flat-shares, garages, plots and commercial types.

**Does it return agent phone numbers?** Yes, when *Fetch agent contact* is enabled. It adds the advertiser's name, company and phone to each listing (one extra request per listing).

**How many listings can I get?** As many as the search exposes; set `maxResults` per location. Results are paginated automatically.

**In what formats can I export?** JSON, CSV, Excel, HTML or via the Apify API. You can also push straight into Make, Zapier, n8n, Google Sheets or a database.

**Do I need a proxy?** Usually not — the source responds reliably from Apify's servers. A residential German proxy option is included for resilience if you ever get blocked.

**Can I run it on a schedule?** Yes. Use Apify Schedules to run it hourly or daily and capture new listings automatically.

**Is it legal?** The scraper only collects publicly available listing information that anyone can view on ImmoScout24, and does not bypass logins or paywalls. You are responsible for using the data lawfully — in particular, when handling any personal data of advertisers, comply with the GDPR (and local marketing/e-privacy rules) and respect ImmoScout24's terms. Use the contact data only for legitimate, lawful purposes.

### ⚙️ How it works

The actor resolves each location name to ImmoScout24's region path via the site's public gazetteer, then queries the ImmoScout24 mobile search service for that region and property type, paging through results until your `maxResults` is reached. Requests use a real Chrome TLS fingerprint for reliability, and each listing is normalised to flat, predictable fields. When agent-contact lookup is enabled, it additionally reads each listing's detail endpoint for the advertiser's name, company and phone.

### 🔗 You might also like

- 🏠 Immowelt Scraper - German Real Estate Listings
- 🏙️ Kleinanzeigen Immobilien Scraper - German Real Estate
- 🇩🇪 Willhaben & DACH property scrapers
- 🌍 Immobiliare.it, Funda, Rightmove, OLX, Otodom and more on benthepythondev

**Keywords:** immobilienscout24 scraper, immoscout24 scraper, immoscout api, germany real estate scraper, german property data, scrape immobilienscout24, immobilien scraper, apartments for rent germany, houses for sale germany, real estate lead generation germany, property listings api, rent price data germany, DACH real estate, immobilien API, immoscout24 export csv, real estate dataset germany, makler kontakt scraper, wohnung mieten daten, immobilien marktanalyse.

# Actor input Schema

## `locations` (type: `array`):

German city, district or region names to search, e.g. 'Berlin', 'München', 'Hamburg - Niendorf'. Each name is resolved automatically to the matching ImmoScout24 region.

## `realEstateType` (type: `string`):

Which kind of listing to scrape. 'apartmentrent' = apartments to rent, 'apartmentbuy' = apartments for sale, 'houserent'/'housebuy' = houses, 'flatshareroom' = flat-share rooms, 'garagerent' = garages, etc.

## `maxResults` (type: `integer`):

Maximum number of listings to return per location.

## `fetchAgentContact` (type: `boolean`):

Also fetch the advertiser's name, company and phone number for each listing (one extra request per listing, so runs are slower). Great for lead generation.

## `geocodes` (type: `array`):

Optional ready-made ImmoScout24 geocode slugs, e.g. '/de/berlin/berlin' or '/de/bayern/muenchen'. Use this instead of (or together with) Locations when you already know the exact region path.

## `useResidentialProxy` (type: `boolean`):

Route requests through Apify residential German IPs. The site usually responds fine without a proxy; only enable this if you start getting blocked (uses proxy quota).

## Actor input object example

```json
{
  "locations": [
    "Berlin"
  ],
  "realEstateType": "apartmentrent",
  "maxResults": 10,
  "fetchAgentContact": false,
  "geocodes": [],
  "useResidentialProxy": false
}
```

# 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 = {
    "locations": [
        "Berlin"
    ],
    "realEstateType": "apartmentrent",
    "maxResults": 10,
    "geocodes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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 = {
    "locations": ["Berlin"],
    "realEstateType": "apartmentrent",
    "maxResults": 10,
    "geocodes": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "Berlin"
  ],
  "realEstateType": "apartmentrent",
  "maxResults": 10,
  "geocodes": []
}' |
apify call benthepythondev/immobilienscout24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=benthepythondev/immobilienscout24-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ImmoScout24 Scraper - German Real Estate",
        "description": "Scrape ImmoScout24 (Germany's #1 property portal), for sale or to rent: price, living area, rooms, full address, coordinates, energy class, property type, photo and listing URL. Optional agent name and phone. Search by city name.",
        "version": "1.0",
        "x-build-id": "0OeqRDg59PN5zaVLy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~immobilienscout24-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-immobilienscout24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/benthepythondev~immobilienscout24-scraper/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-immobilienscout24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/benthepythondev~immobilienscout24-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-immobilienscout24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "German city, district or region names to search, e.g. 'Berlin', 'München', 'Hamburg - Niendorf'. Each name is resolved automatically to the matching ImmoScout24 region.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "realEstateType": {
                        "title": "Property type",
                        "enum": [
                            "apartmentrent",
                            "apartmentbuy",
                            "houserent",
                            "housebuy",
                            "flatshareroom",
                            "garagerent",
                            "garagebuy",
                            "livingrentsite",
                            "livingbuysite",
                            "officerent",
                            "officebuy"
                        ],
                        "type": "string",
                        "description": "Which kind of listing to scrape. 'apartmentrent' = apartments to rent, 'apartmentbuy' = apartments for sale, 'houserent'/'housebuy' = houses, 'flatshareroom' = flat-share rooms, 'garagerent' = garages, etc.",
                        "default": "apartmentrent"
                    },
                    "maxResults": {
                        "title": "Max results per location",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of listings to return per location.",
                        "default": 50
                    },
                    "fetchAgentContact": {
                        "title": "Fetch agent contact (name + phone)",
                        "type": "boolean",
                        "description": "Also fetch the advertiser's name, company and phone number for each listing (one extra request per listing, so runs are slower). Great for lead generation.",
                        "default": false
                    },
                    "geocodes": {
                        "title": "Geocode slugs (advanced)",
                        "type": "array",
                        "description": "Optional ready-made ImmoScout24 geocode slugs, e.g. '/de/berlin/berlin' or '/de/bayern/muenchen'. Use this instead of (or together with) Locations when you already know the exact region path.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "useResidentialProxy": {
                        "title": "Use residential proxy (DE)",
                        "type": "boolean",
                        "description": "Route requests through Apify residential German IPs. The site usually responds fine without a proxy; only enable this if you start getting blocked (uses proxy quota).",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
