# ImmobilienScout24 Scraper — German Real Estate (`studio-amba/immoscout24-scraper`) Actor

Scrape real estate listings from immobilienscout24.de — apartments, houses, prices, photos, and details for the German property market. Supports sale and rental listings.

- **URL**: https://apify.com/studio-amba/immoscout24-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Features:** Limited permissions
- **Stats:** 12 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ImmobilienScout24 Scraper

Extract rental and sale listings from [ImmobilienScout24.de](https://www.immobilienscout24.de) — Germany's #1 real estate portal with over 1.5 million active properties — into structured JSON with prices, GPS coordinates, floor plans, energy ratings, and agent contacts.

### What is ImmobilienScout24 Scraper?

**ImmobilienScout24 Scraper** lets you extract structured property data from Germany's largest real estate platform, helping you monitor the market, compare prices, and automate research — all without manual browsing or copy-pasting.

- **Track rental prices across German cities:** extract thousands of apartment and house listings with exact prices, sizes, and locations to build rent-index datasets or spot underpriced deals
- **Automate relocation research:** search by city, property type, and keywords (e.g., "Wohnung mit Balkon") and get structured results you can filter, sort, and compare instantly
- **Monitor investment opportunities:** schedule daily runs to detect new sale listings in target neighborhoods before they get crowded with offers
- **Build market intelligence dashboards:** feed structured data into Google Sheets, Airtable, or any BI tool to visualize trends by city, district, or property type
- **Power lead generation for agencies:** extract agent names and contact details alongside listings to identify active brokers in specific regions
- **Enrich property databases:** combine ImmobilienScout24 data with listings from other European portals for cross-border real estate analysis

ImmobilienScout24 has an official API, but it serves the listings of estate agents who authorise your application. It has no endpoint that returns search results across Germany. This scraper reads the public search pages and needs no key or account.

### What data does ImmobilienScout24 Scraper extract?

🏠 **Title** — full listing headline in German
💰 **Price** — rent or sale price in EUR
📍 **Full address** — street, postal code, city
🗺️ **GPS coordinates** — latitude and longitude for mapping
🛏️ **Bedrooms** — bedroom count
📐 **Surface area** — living space in m²
🏗️ **Build year** — construction year of the property
🏷️ **Listing type** — rent (Miete) or sale (Kauf)
🏘️ **Property type** — apartment, house, land, room, shared flat, garage, office
🏢 **Agency** — agent/broker name and website
📸 **All images** — primary image + full gallery URLs
🔗 **Direct URL** — link to the original listing on ImmobilienScout24.de

### How to scrape ImmobilienScout24

Pick a **location**, **property type** and **listing type**, then run. For any city other than Berlin, Hamburg and Bremen, paste the search URL into `startUrls`.

#### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | Array | — | ImmobilienScout24 search result or listing detail URLs. Paste any URL from the site |
| `searchQuery` | String | — | Free-text search, e.g., `"Wohnung mit Balkon"` or `"Altbau Kreuzberg"` |
| `location` | String | `"berlin"` | Works for `"berlin"`, `"hamburg"` and `"bremen"`. Other cities return 0 listings, use `startUrls` instead |
| `propertyType` | String | `"wohnung"` | One of: `wohnung`, `haus`, `grundstueck`, `zimmer`, `wg`, `garage-stellplatz`, `buero-praxisflaeche` |
| `listingType` | String | `"mieten"` | `"mieten"` (rent) or `"kaufen"` (buy) |
| `maxResults` | Integer | `100` | Number of listings to return (1 – 10,000) |
| `proxyConfiguration` | Object | — | Legacy proxy settings, kept for backwards compatibility. Anti-bot unlocking is now handled automatically — no proxy setup needed |

#### Tips for best results

- **Use `startUrls` for every city except Berlin, Hamburg and Bremen:** for example `https://www.immobilienscout24.de/Suche/de/bayern/muenchen/wohnung-mieten`. It is also the precise route: go to ImmobilienScout24.de, apply all your filters (price range, rooms, district), copy the URL, and paste it into `startUrls` — the scraper will respect every filter
- **Use `searchQuery` for flexible searches:** queries like `"Altbau Einbaukueche"` or `"Dachgeschoss Charlottenburg"` let you find niche listings that structured filters miss
- **Expect fewer listings than `maxResults` on some runs:** with `maxResults` 30, a Munich URL run and a Berlin house-buy run each returned 20
- **Schedule daily runs** to catch new listings as soon as they appear — the German rental market moves fast, especially in Berlin and Munich
- **No proxy setup needed** — ImmobilienScout24's anti-bot protection is handled automatically by a built-in unlocking service

#### Supported search types

| Search | `propertyType` | `listingType` |
|--------|---------------|---------------|
| Rent apartments | `wohnung` | `mieten` |
| Buy apartments | `wohnung` | `kaufen` |
| Rent houses | `haus` | `mieten` |
| Buy houses | `haus` | `kaufen` |
| Buy land/plots | `grundstueck` | `kaufen` |
| Shared flats (WG) | `wg` | `mieten` |
| Rooms | `zimmer` | `mieten` |
| Garages & parking | `garage-stellplatz` | `mieten` or `kaufen` |
| Office & commercial | `buero-praxisflaeche` | `mieten` or `kaufen` |

### Output

Results are stored in a **dataset** that you can download in JSON, CSV, Excel, XML, or HTML format directly from the Apify Console.

#### JSON example

```json
{
    "title": "Helle 2-Zimmer-Wohnung mit Balkon in Kreuzberg",
    "price": 1450,
    "currency": "EUR",
    "listingType": "rent",
    "propertyType": "apartment",
    "address": "Oranienstrasse 58",
    "city": "Berlin",
    "postalCode": "10969",
    "latitude": 52.5024,
    "longitude": 13.4105,
    "bedrooms": 2,
    "surface": 75,
    "buildYear": 2003,
    "imageUrl": "https://pictures.immobilienscout24.de/listings/abc123/1.jpg",
    "imageUrls": [
        "https://pictures.immobilienscout24.de/listings/abc123/1.jpg",
        "https://pictures.immobilienscout24.de/listings/abc123/2.jpg",
        "https://pictures.immobilienscout24.de/listings/abc123/3.jpg",
        "https://pictures.immobilienscout24.de/listings/abc123/4.jpg"
    ],
    "agencyName": "Berliner Wohnraum GmbH",
    "url": "https://www.immobilienscout24.de/expose/145892367",
    "scrapedAt": "2026-04-04T09:15:00.000Z"
}
```

### How much does it cost to scrape ImmobilienScout24?

ImmobilienScout24 Scraper uses a **premium unlocking service** to get past the site's strong anti-bot protection (Akamai), which makes it slightly more expensive than plain HTTP scrapers.

| Scenario | Est. cost | Time |
|----------|-----------|------|
| 50 listings (Berlin rent, measured: 78 seconds) | ~$0.26 | ~1.5 min |
| 100 listings | ~$0.51 | |
| 1,000 listings | ~$5.01 | |

**Pricing breakdown:**

- Per run start: $0.01 per GB of memory, and the actor starts with 1 GB
- Per result (pay-per-event): $0.005

A run that returns no listings still pays the run start fee.

### Can I integrate ImmobilienScout24 Scraper with other apps?

Yes. ImmobilienScout24 Scraper connects with any tool through [Apify integrations](https://apify.com/integrations):

- **Google Sheets** — automatically export listings to a spreadsheet for team collaboration
- **Slack / Email** — get notified when new properties match your criteria
- **Zapier / Make** — trigger workflows when data is ready (e.g., add to CRM, send alerts)
- **Airtable** — build a searchable property database with filters and views
- **REST API** — call the scraper programmatically from any language
- **Webhooks** — get notified the moment a run finishes

### Can I use ImmobilienScout24 Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) to run ImmobilienScout24 Scraper programmatically from any application.

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/immoscout24-scraper").call(run_input={
    "location": "berlin",
    "propertyType": "wohnung",
    "listingType": "mieten",
    "maxResults": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} — €{item['price']:,}/month — {item['surface']}m²")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/immoscout24-scraper').call({
    location: 'berlin',
    propertyType: 'wohnung',
    listingType: 'mieten',
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(`${item.title} — €${item.price}/month`));
```

Check the [API tab](https://apify.com/studio-amba/immoscout24-scraper/api) for full documentation.

### FAQ

#### What is ImmobilienScout24?

ImmobilienScout24.de is Germany's largest and most-visited real estate platform, with over 1.5 million active listings for apartments, houses, land, commercial spaces, and shared flats. It is the go-to portal for anyone renting or buying property in Germany.

#### How does ImmobilienScout24 Scraper work?

It fetches ImmobilienScout24's search result pages through a premium unlocking service that handles the site's anti-bot protection, then extracts the structured listing data embedded in each page. Each page yields 20 listings, No browser automation is involved.

#### Can I scrape both rental and sale listings?

Yes. Set `listingType` to `"mieten"` for rentals or `"kaufen"` for sales. You can run separate jobs for each or use `startUrls` with pre-filtered search URLs.

#### Can I scrape specific neighborhoods or districts?

Yes. Either use the `searchQuery` field (e.g., `"Kreuzberg"`, `"Schwabing"`) or paste a pre-filtered search URL from ImmobilienScout24 into `startUrls`. The scraper will respect all filters in the URL, including district, price range, and room count.

#### Does it work for cities outside Berlin?

Yes, through `startUrls`. The `location` field only works for `"berlin"`, `"hamburg"` and `"bremen"`. For Munich, Frankfurt, Cologne or any other city, open the search on immobilienscout24.de and paste the result URL into `startUrls`.

#### How often should I run the scraper?

For active markets (Berlin, Munich, Hamburg), daily runs catch new listings fastest. For smaller cities or investment research, weekly runs are usually sufficient.

#### Is it legal to scrape ImmobilienScout24?

This scraper extracts publicly available listing data that ImmobilienScout24.de displays to all visitors. The data is factual (prices, addresses, sizes) and does not contain private personal information. As with any scraping tool, use the data responsibly and in compliance with applicable laws.

### Limitations

- **Germany only.** ImmobilienScout24.de covers the German real estate market exclusively.
- **Premium unlocking required.** The site has strong anti-bot protection (Akamai) — the built-in unlocking service handles this automatically, which adds a small per-request cost.
- **Some fields are often empty.** In a 50-row Berlin rental run, description, EPC score, bathrooms, land surface and agency URL were empty in every row. Latitude and longitude were filled in 40 rows, build year in 36 and agency name in 33.
- **Fewer listings than requested.** Some runs return 20 listings when `maxResults` is 30.
- **Listing descriptions are in German.** The site is German-language only; descriptions are not translated.

### Other European real estate scrapers

Combine ImmobilienScout24 Scraper with these actors for cross-border European property market coverage:

- 🇧🇪 [Immoweb Scraper](https://apify.com/studio-amba/immoweb-scraper) — Belgium's #1 real estate platform
- 🇫🇷 [Logic-Immo Scraper](https://apify.com/studio-amba/logicimmo-scraper) — French real estate listings
- 🇧🇪 [Immovlan Scraper](https://apify.com/studio-amba/immovlan-scraper) — Belgian property listings (VTM network)
- 🇱🇺 [Athome.lu Scraper](https://apify.com/studio-amba/athome-scraper) — Luxembourg real estate
- 🇧🇪 [Biddit Scraper](https://apify.com/studio-amba/biddit-scraper) — Belgian notarial property auctions with live bidding data

### Your feedback

Found a bug or have a feature request? Please open an issue on the [Issues tab](https://apify.com/studio-amba/immoscout24-scraper/issues). We actively maintain this scraper and respond to all reports.

# Actor input Schema

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

One or more ImmoScout24 search result URLs or listing detail URLs. Go to immobilienscout24.de, set your filters, and paste the URL(s) here. Overrides other search filters when provided.

## `searchQuery` (type: `string`):

Free-text search query (e.g., 'Wohnung mit Balkon'). Used only when no startUrls are provided.

## `location` (type: `string`):

City or region to search in (e.g., 'berlin', 'muenchen', 'hamburg'). Used only when no startUrls are provided.

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

Type of property to search for. Used only when no startUrls are provided.

## `listingType` (type: `string`):

Buy or rent. Used only when no startUrls are provided.

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

Maximum number of listings to return.

## `brightDataApiKey` (type: `string`):

Optional: your own Bright Data API key for the Web Unlocker zone. Leave empty to use the built-in unlocking service.

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

Legacy proxy settings, kept for backwards compatibility. Unlocking is handled automatically; this setting is no longer required.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
    }
  ],
  "location": "berlin",
  "propertyType": "wohnung",
  "listingType": "mieten",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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"
        }
    ],
    "location": "berlin",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/immoscout24-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" }],
    "location": "berlin",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/immoscout24-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"
    }
  ],
  "location": "berlin",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/immoscout24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/immoscout24-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/rWruXaGqjDzoJkZ1f/builds/3bLhzit7pAtOyb0bO/openapi.json
