# Immobilien Scout24 (`lukass/immobilien-scout24`) Actor

- **URL**: https://apify.com/lukass/immobilien-scout24.md
- **Developed by:** [Lukáš Širhal](https://apify.com/lukass) (community)
- **Categories:** E-commerce, Real estate
- **Stats:** 9 total users, 0 monthly users, 69.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.30 / 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 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

Scrape property listings from [immobilienscout24.de](https://www.immobilienscout24.de) — Germany's largest real estate portal. Supports sale and rental properties across Germany and Austria.

### Features

- **Search by location** — enter a district or city name to find matching listings
- **Search by URL** — paste any search results page, shape search URL, or individual property URL
- **Shape search** — paste a polygon/drawn-area URL from the website to scrape within a custom boundary
- **Sale & rental** — target for-sale or rent listings across all property types
- **Price filtering** — set min/max price range
- **Rich output** — price, size, rooms, bathrooms, photos, 3D tours, coordinates, agent contact

> Note: Some properties hide their exact address. In those cases the scraper returns the map center point provided by the listing.

### Input Parameters

| Field          | Type    | Required | Description |
|----------------|---------|----------|-------------|
| `district`     | String  | —        | Location keyword (e.g. `Berlin`, `München`). Required if no `startUrl`. |
| `country`      | String  | ✓        | `de` (Germany) or `at` (Austria) |
| `operation`    | String  | ✓        | `sale` or `rent` |
| `propertyType` | String  | —        | Property type (default: `apartment`). See values below. |
| `minPrice`     | Integer | —        | Minimum price filter |
| `maxPrice`     | Integer | —        | Maximum price filter |
| `maxItems`     | Integer | —        | Cap on total results returned |
| `endPage`      | Integer | —        | Last page to scrape (default: 50) |
| `startUrl`     | Array   | —        | Direct URLs — property detail pages or filtered search result pages (see below) |
| `proxy`        | Object  | ✓        | Proxy configuration. **RESIDENTIAL proxies required.** |

#### Property types

`apartment`, `house`, `plot`, `solid-house`, `shorttermaccommodation`, `flatshareroom`, `garage`, `office`, `store`, `industry`, `gastronomy`, `tradesite`, `specialpurpose`, `investment`, `compulsoryauction`

### Searching via Website URLs

The easiest way to apply filters (rooms, size, features, etc.) is to configure your search directly on [immobilienscout24.de](https://www.immobilienscout24.de), then paste the URL into `startUrl`.

The scraper automatically extracts the property type, operation (sale/rent), and all active filters from the URL and forwards them to the API.

**Supported URL types in `startUrl`:**

| URL pattern | What happens |
|-------------|--------------|
| `.../Suche/de/berlin/berlin/wohnung-kaufen?price=300000-600000&numberofrooms=3-` | Full search with all filters applied |
| `.../Suche/de/berlin/berlin/wohnung-kaufen` | Search with no extra filters |
| `.../Suche/shape/wohnung-kaufen?shape=<encoded-polygon>` | Search within a drawn area/polygon |
| `.../expose/157410302` | Single property detail page |

**Example** — paste this URL into `startUrl` to scrape Berlin apartments for sale, 3+ rooms, €300k–€600k:

```
https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen?price=300000-600000&numberofrooms=3-
```

**Shape search** — draw an area on the website map, copy the resulting URL, and paste it into `startUrl`:

```
https://www.immobilienscout24.de/Suche/shape/wohnung-kaufen?shape=c2FhX0l1anBvQWRdX0M-c2VAdV9AcXVFZ3lBelo
```

The scraper extracts the polygon from the `shape` query parameter and property type/operation from the URL path segment. All extra filter parameters are forwarded automatically. The `operation` and `propertyType` input fields are ignored when the URL already encodes them in the path.

### Example Output

```json
{
    "url": "https://www.immobilienscout24.de/expose/157410302",
    "id": "157410302",
    "operation": "sale",
    "typology": "apartment",
    "subTypology": "Flat",
    "title": "Moderne 4-Zimmer-Wohnung mit Balkon, Aufzug im Neubau!",
    "price": "714000",
    "size": "100.53",
    "rooms": "3",
    "baths": "2",
    "condition": "mint_condition",
    "availableFrom": "2026-08-01",
    "description": "Moderne 4-Zimmer-Wohnung mit Balkon, Aufzug im Neubau, ...",
    "address": "Berkenbrücker Steig 18-19 13055 Alt-Hohenschönhausen, Berlin",
    "latitude": 52.53749,
    "longitude": 13.47987,
    "photos": [
        "https://pictures.immobilienscout24.de/listings/fedae27f-7793-4f42-bae3-ad9ea435c760-1968121293.jpg/ORIG/resize/1500x1000/format/webp/quality/80"
    ],
    "tour3d": [],
    "contacts": {
        "commercialName": "WvM Vertriebsgesellschaft mbH",
        "contactName": "Wir freuen uns auf Sie. Ihr Team der WvM Vertriebsgesellschaft mbH",
        "rating": "(4.3 stars)",
        "phones": []
    }
}
```

### Proxy Requirements

This scraper requires **RESIDENTIAL** proxies. Datacenter proxies are blocked by the site. You can use [Apify Proxy](https://docs.apify.com/platform/proxy) with the `RESIDENTIAL` group.

# Actor input Schema

## `district` (type: `string`):

Where you want to look for the real estates, e.g. Madrid. For further filtering you can use the URL below.

## `operation` (type: `string`):

Select Listing sale or rent properties

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

Select type of property

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

Lower price of estate.

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

Maximum price of estate.

## `country` (type: `string`):

Select your country

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

How many real estates do you want to get. If you don't want to get all items, because  you maybe only want to test the solution, or want to know what are the new real estates on the market.

## `endPage` (type: `integer`):

Scrape only limit pages

## `startUrl` (type: `array`):

URL(s) of places or pages what will be scraped. For example https://www.idealista.com/venta-viviendas/madrid/centro/con-de-tres-dormitorios,de-cuatro-cinco-habitaciones-o-mas,tres-banos-o-mas/

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "district": "Berlin",
  "operation": "sale",
  "propertyType": "apartment",
  "country": "de",
  "maxItems": 10,
  "endPage": 50,
  "startUrl": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "district": "Berlin",
    "maxItems": 10,
    "endPage": 50,
    "startUrl": [],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lukass/immobilien-scout24").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 = {
    "district": "Berlin",
    "maxItems": 10,
    "endPage": 50,
    "startUrl": [],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lukass/immobilien-scout24").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 '{
  "district": "Berlin",
  "maxItems": 10,
  "endPage": 50,
  "startUrl": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call lukass/immobilien-scout24 --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WtAZc6Kf7Ol5sL1Pj/builds/GLE7wtqTsGmDEeGSm/openapi.json
