# ImmobilienScout24 Scraper 🇩🇪 (apartments, houses, agents) (`tagadanar/immobilienscout24-scraper`) Actor

Search ImmobilienScout24.de and get clean JSON: price, size, rooms, address with zip code, energy class, features and the listing agent. Rent or buy, any German city. Monitor mode alerts you on new listings only, with a Slack digest.

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

## Pricing

from $1.22 / 1,000 listing founds

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 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## ImmobilienScout24 Scraper

Search ImmobilienScout24.de, Germany's biggest property portal, and get every
listing as a clean row of data: price, living space, rooms, the full address
with zip code, features, energy data and the agent behind the listing. Works
for rentals and sales in any German city, down to a single district. Run it
once for a market snapshot, or on a schedule with monitor mode to get only the
listings that are new since your last run, straight to Slack if you want.

No API key, no setup, nothing to configure. Reliability is handled for you,
and you only pay for listings you actually get back.

### Who uses this

- **Property investors** watching a city or district for new deals, with price
  per square meter and year built ready to filter in a spreadsheet.
- **Relocation and rental agencies** who need new rental listings the hour they
  appear, not when the email alert digest arrives.
- **Agents and appraisers** pulling comparables for a valuation: asking prices,
  sizes and conditions for a whole neighbourhood in one run.
- **Market researchers and proptech teams** tracking rents, supply and
  time-on-market across German cities.
- **Data teams** who want German real estate as tidy JSON instead of copying
  listings by hand.

### What you get

One record per listing:

| Field | Description |
| --- | --- |
| `title`, `url` | Listing title and direct link |
| `price` | Cold rent for rentals, purchase price for sales (€) |
| `totalRent`, `serviceCharge` | Warm rent and service charge for rentals |
| `livingSpace`, `rooms`, `plotArea` | Size in m² and room count |
| `street`, `houseNumber`, `zipCode`, `city`, `district`, `quarter`, `state` | Full address, as exact as the listing publishes it |
| `lat`, `lon` | Coordinates |
| `yearConstructed`, `condition`, `flatType` | Building data |
| `heatingType`, `energyEfficiencyClass` | Energy data |
| `hasBalcony`, `hasCellar`, `hasLift`, `hasKitchen`, `hasGarden`, `parkingSpace` | Features |
| `agentName`, `agentCompany`, `agentRating` | Who advertises it, or private offer |
| `isPrivateOffer`, `isNewConstruction`, `buyerCommission` | Offer flags |
| `description` | The listing text |
| `isNew` | In monitor mode, whether the listing is new since the last run |

### Input examples

Apartments for rent in Berlin, newest first:

```json
{
  "location": "Berlin",
  "propertyType": "apartment-rent",
  "maxListings": 100
}
````

Houses for sale up to 800k in a Hamburg district, at least 4 rooms:

```json
{
  "location": "Hamburg Blankenese",
  "propertyType": "house-buy",
  "priceMax": 800000,
  "roomsMin": 4
}
```

Scheduled monitor that posts new Munich rentals to Slack:

```json
{
  "location": "München",
  "propertyType": "apartment-rent",
  "priceMax": 2000,
  "monitorMode": true,
  "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ"
}
```

### How monitor mode works

Turn on `monitorMode` and schedule the actor (hourly or daily). The first run
records the current listings as a baseline. Every run after that returns, and
charges for, only listings that are new since the previous run, and posts them
to your webhook if you set one. In a market where the good apartments are gone
in hours, being first matters; a scheduled monitor run costs you a handful of
new listings, not the whole market each time.

### Pricing

You pay per listing returned, platform usage included in the price. No subscription. Users on higher Apify plans get automatic discounts.

| Event | Price | When |
|---|---|---|
| Run started | **$0.005** | Flat, once per run |
| Listing found | **$1.75 per 1,000** | Per listing returned with its data |
| Digest sent | **$0.03** | Monitor mode only, per Slack/webhook digest actually posted |

### FAQ

**Which locations work?** Any city, district or area on immobilienscout24.de,
for example "Berlin", "Frankfurt am Main" or "München Schwabing". The actor
resolves the name the same way the site's own search box does.

**Rent or buy?** Both. Pick a `propertyType`: apartments and houses for rent or
sale, plus investment properties, building plots and parking.

**How exact are the addresses?** As exact as the listing publishes. Most agent
listings carry the street and house number; some show only the zip code and
district, and the record then says so.

**Do I need an API key, account or proxy?** No. Nothing to set up. The site
limits how much a single address can pull, and the actor spreads its requests
for you so large and frequent runs keep working. That is included in the
price per listing.

**What does "Full details per listing" do?** With it on (the default), every
listing is opened for the complete record including exact address, service
charge, year built, features and the agent. Turn it off for faster list-level
runs with just price, size, rooms and the approximate address.

**Does it cover ImmobilienScout24.ch?** No, this actor is for the German site
(.de) only.

***

ImmobilienScout24 scraper, immoscout24 data, German real estate data, Wohnung
mieten Berlin data, Immobilien scraper, German property listings, real estate
monitoring Germany, immo data extraction, apartment listings API Germany.

# Actor input Schema

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

German city, district or area, spelled as on immobilienscout24.de. Examples: <code>Berlin</code>, <code>München</code>, <code>Hamburg Altona</code>, <code>Frankfurt am Main</code>.

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

What to search for: rent or buy, apartments, houses, investment properties, building plots or parking.

## `priceMin` (type: `integer`):

Cold rent for rentals, purchase price for sales. Leave empty for no minimum.

## `priceMax` (type: `integer`):

Cold rent for rentals, purchase price for sales. Leave empty for no maximum.

## `roomsMin` (type: `integer`):

Minimum number of rooms.

## `sizeMin` (type: `integer`):

Minimum living space in square meters.

## `maxListings` (type: `integer`):

Stop after this many listings. Results come newest first.

## `withDetails` (type: `boolean`):

Open every listing for the complete record: exact street and zip code, service charge, year built, features, energy data and the advertising agent. Off = faster, list-level fields only (price, size, rooms, approximate address).

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

Remember listings already reported across runs and return only newly published ones. Built for a scheduled run: the first run sets the baseline, later runs report and charge for new listings only.

## `webhookUrl` (type: `string`):

When monitor mode finds new listings, post a text digest here (Slack incoming webhook or any endpoint accepting <code>{"text": "..."}</code> JSON).

## Actor input object example

```json
{
  "location": "Berlin",
  "propertyType": "apartment-rent",
  "maxListings": 20,
  "withDetails": true,
  "monitorMode": false
}
```

# Actor output Schema

## `listings` (type: `string`):

One item per listing in the default dataset.

# 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 = {
    "location": "Berlin",
    "propertyType": "apartment-rent",
    "maxListings": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/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 = {
    "location": "Berlin",
    "propertyType": "apartment-rent",
    "maxListings": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/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 '{
  "location": "Berlin",
  "propertyType": "apartment-rent",
  "maxListings": 20
}' |
apify call tagadanar/immobilienscout24-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ImmobilienScout24 Scraper 🇩🇪 (apartments, houses, agents)",
        "description": "Search ImmobilienScout24.de and get clean JSON: price, size, rooms, address with zip code, energy class, features and the listing agent. Rent or buy, any German city. Monitor mode alerts you on new listings only, with a Slack digest.",
        "version": "0.1",
        "x-build-id": "z0DiF6uZU9FKzibhW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tagadanar~immobilienscout24-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tagadanar-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/tagadanar~immobilienscout24-scraper/runs": {
            "post": {
                "operationId": "runs-sync-tagadanar-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/tagadanar~immobilienscout24-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-tagadanar-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",
                "required": [
                    "location"
                ],
                "properties": {
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "German city, district or area, spelled as on immobilienscout24.de. Examples: <code>Berlin</code>, <code>München</code>, <code>Hamburg Altona</code>, <code>Frankfurt am Main</code>."
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "apartment-rent",
                            "apartment-buy",
                            "house-rent",
                            "house-buy",
                            "investment",
                            "plot-buy",
                            "garage-rent",
                            "garage-buy"
                        ],
                        "type": "string",
                        "description": "What to search for: rent or buy, apartments, houses, investment properties, building plots or parking.",
                        "default": "apartment-rent"
                    },
                    "priceMin": {
                        "title": "Min price (€)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cold rent for rentals, purchase price for sales. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Max price (€)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cold rent for rentals, purchase price for sales. Leave empty for no maximum."
                    },
                    "roomsMin": {
                        "title": "Min rooms",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of rooms."
                    },
                    "sizeMin": {
                        "title": "Min living space (m²)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum living space in square meters."
                    },
                    "maxListings": {
                        "title": "Max listings",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Stop after this many listings. Results come newest first.",
                        "default": 100
                    },
                    "withDetails": {
                        "title": "Full details per listing",
                        "type": "boolean",
                        "description": "Open every listing for the complete record: exact street and zip code, service charge, year built, features, energy data and the advertising agent. Off = faster, list-level fields only (price, size, rooms, approximate address).",
                        "default": true
                    },
                    "monitorMode": {
                        "title": "Monitor mode (alert on new listings only)",
                        "type": "boolean",
                        "description": "Remember listings already reported across runs and return only newly published ones. Built for a scheduled run: the first run sets the baseline, later runs report and charge for new listings only.",
                        "default": false
                    },
                    "webhookUrl": {
                        "title": "Webhook URL (Slack-compatible)",
                        "type": "string",
                        "description": "When monitor mode finds new listings, post a text digest here (Slack incoming webhook or any endpoint accepting <code>{\"text\": \"...\"}</code> JSON)."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
