# ImmoScout24 Scraper (`scrapesmith/immoscout24-scraper`) Actor

Scrape ImmoScout24 property listings — rent or buy across Germany, Austria, Switzerland. 78+ fields: price breakdown, rooms, energy class, agent contact, photos, fair price indicator. Search by city or paste URLs. JSON/CSV/Excel. API, MCP, webhook, AI-agent ready.

- **URL**: https://apify.com/scrapesmith/immoscout24-scraper.md
- **Developed by:** [Scrape Smith](https://apify.com/scrapesmith) (community)
- **Categories:** Developer tools, Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 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.
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

## ImmoScout24 Scraper

Extract clean, structured real estate data from ImmoScout24 — Germany's largest property marketplace — in seconds. Built for real estate agencies, PropTech developers, investors, and analysts who need reliable rental and for-sale listing data without touching a browser or writing a single line of scraping code.

### Why use this scraper

- **Complete German real estate coverage** — apartments, houses, plots, garages, investment properties, shared flats (WG), and assisted living, for both rent and buy.
- **No-code data extraction** — just paste a search URL or set filters and run. No proxies, no browser setup, no maintenance on your end.
- **Deep, structured output** — price breakdowns, energy certificates, agent/landlord contact details, full address and geolocation, and photo galleries in one clean JSON/CSV row per listing.
- **Built for automation** — plug directly into your CRM, spreadsheet, BI tool, or AI agent via API, webhook, or native no-code integrations.

### Features

- Search by pasted ImmoScout24 URL, location geocode, or latitude/longitude radius search
- Filter by rent or buy, property type, price range, room count, living space, plot size, construction year, and energy class
- Filter by amenities and equipment — balcony, garden, fitted kitchen, elevator, cellar, guest toilet, step-free access, and parking
- Filter by apartment sub-type (loft, maisonette, penthouse, etc.) and building sub-type (villa, bungalow, semi-detached, etc.)
- Fetch specific listings directly by ImmoScout24 expose ID, bypassing search entirely
- Toggle between fast search-only results or full listing detail enrichment (price breakdown, energy data, description, agent contact, photos)
- Full price transparency for rentals (cold rent, warm rent, utilities, heating costs, deposit) and purchases (purchase price, broker commission, land transfer tax, notary costs)
- Complete energy performance data (EPC class, certificate type, consumption, primary energy carrier)
- Full photo galleries, floor plans, and agent/landlord contact details on every listing
- Structured, geocoded addresses ready to drop straight into a map or CRM

### Output fields

Every listing is returned as a structured JSON object (and flattened automatically for CSV/Excel export). Fields are grouped below by category.

#### Listing Details

| Field | Description |
|---|---|
| `id` | Unique ImmoScout24 listing (expose) ID |
| `url` | Direct link to the listing on immobilienscout24.de |
| `title` | Listing headline |
| `operation` | `RENT` or `BUY` |
| `realEstateType` | Raw ImmoScout24 listing type code |
| `propertyCategory` | Normalized category: apartment, house, garage, plot, investment, sharedflat, assistedliving |
| `publicationState` / `listingState` | Current publication status of the listing |
| `isProject` | Whether the listing is part of a new-build development project |
| `isPrivate` | Whether the listing was posted by a private individual (not an agency) |
| `isNew` | Whether the listing is newly published |
| `isNewlyConstructed` | Whether the property itself is newly constructed |
| `listingType` | Listing tier/type as set by the poster |
| `objectNumber` | Internal object/reference number from the lister |
| `projectId` | Associated development project ID, if any |
| `availableFrom` | Date the property becomes available |
| `isHighDemand` | Whether ImmoScout24 flags the listing as high demand |
| `isExclusiveExpose` | Whether the listing is marked as an exclusive expose |
| `isPrivateOffer` | Whether the listing is a private offer |
| `tags` | Listing badges/tags as shown on ImmoScout24 |
| `hasDetails` | Whether full detail-page enrichment was applied to this record |
| `scrapedAt` | UTC timestamp the record was collected |

#### Price & Costs

| Field | Description |
|---|---|
| `price` | Primary listing price (cold rent for rentals, purchase price for sales) |
| `priceCurrency` | Always `EUR` |
| `priceRaw` | Original unparsed price string as shown on the listing |
| `pricePerSqm` | Price per square meter, calculated from price and living space |
| `kaltmiete` | Cold rent (excl. utilities) |
| `warmmiete` | Warm rent (incl. utilities) |
| `nebenkosten` | Monthly utility/service charges |
| `heizkosten` | Monthly heating costs |
| `kaution` | Deposit or cooperative share requirement |
| `kaufpreis` | Purchase price (for-sale listings) |
| `kaufnebenkosten` | Additional purchase costs |
| `gesamtkosten` | Total purchase costs |
| `maklerprovision` | Broker/agent commission |
| `grunderwerbsteuer` | Real estate transfer tax |
| `notarkosten` | Notary fees |
| `grundbucheintrag` | Land registry entry fee |
| `fairPrice.label` | ImmoScout24's fair-price assessment label |
| `fairPrice.minPricePerM2` / `fairPrice.maxPricePerM2` | Fair-price range per square meter for the area |
| `fairPrice.positionInPercent` | Where this listing's price sits within the fair-price range |

#### Property Specs

| Field | Description |
|---|---|
| `livingSpace` | Living space in square meters |
| `plotArea` | Plot/ground size in square meters |
| `rooms` | Number of rooms |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `floor` | Floor the unit is on |
| `numberOfFloors` | Total floors in the building |
| `yearBuilt` | Year of construction |
| `condition` | Property condition (e.g. renovated, first occupancy) |
| `heatingType` | Type of heating system |
| `buildingType` | Building or apartment sub-type |
| `energyClass` | EU energy efficiency class (A+ to H) |
| `energyCertificateType` | Type of energy certificate provided |
| `energyConsumption` | Energy consumption value |
| `primaryEnergyCarrier` | Primary energy source (gas, oil, district heat, etc.) |
| `balcony` / `terrace` / `garden` / `cellar` | Amenity flags |
| `elevator` / `guestToilet` / `builtInKitchen` | Amenity flags |
| `handicappedAccessible` | Step-free / accessible access flag |
| `parking` | Parking/garage details |
| `petsAllowed` | Pet policy |
| `description` | Main listing description text |
| `objectDescription` | Property description section |
| `equipmentDescription` | Equipment/fittings description section |
| `locationDescription` | Neighborhood/location description section |
| `miscDescription` | Additional notes section |

#### Location / Address

| Field | Description |
|---|---|
| `address.fullAddress` | Full address as displayed on the listing |
| `address.street` | Street name |
| `address.houseNumber` | House number |
| `address.zip` | Postal code |
| `address.city` | City |
| `address.district` | District/neighborhood |
| `address.region` | Region/state |
| `address.country` | Country (Deutschland) |
| `address.isRedacted` | Whether the exact address is hidden until contact |
| `latitude` / `longitude` | Geocoordinates |
| `coordinatePrecision` | `exact`, `approximate`, or `unknown` |

#### Agent / Landlord Info

| Field | Description |
|---|---|
| `realtor.company` | Agency or landlord company name |
| `realtor.name` | Contact person's name |
| `realtor.phone` | Contact phone number |
| `realtor.email` | Contact email address |
| `realtor.profileUrl` | Link to the agent's ImmoScout24 profile |
| `realtor.rating` | Agent rating score |
| `realtor.ratingCount` | Number of ratings/stars |
| `realtor.isVerified` | Whether the agent is verified by ImmoScout24 |
| `realtor.logoUrl` | Agency logo image URL |

#### Media

| Field | Description |
|---|---|
| `photos` | Array of `{ url, caption }` objects — the full photo gallery |
| `photosCount` | Total number of photos |
| `floorPlanUrl` | Floor plan image/PDF URL, if available |
| `videoUrl` | Listing video URL, if available |
| `virtualTourUrl` | Virtual tour URL, if available |

### Use cases

- **Market research** — track average rents and sale prices by city, district, or property type across Germany.
- **Rent & price monitoring** — watch specific areas or property types for new listings and price changes over time.
- **Lead generation for real estate agents & agencies** — build prospect lists of private landlords and competing agencies with contact details.
- **Investment analysis** — compare price-per-square-meter, yields, and fair-price positioning across neighborhoods to find undervalued opportunities.
- **Competitor analysis for PropTech & agencies** — benchmark your own listings against comparable inventory on the market.
- **Data journalism** — power housing-market stories and visualizations with structured, verifiable listing data.
- **ML & AI training data** — feed clean, labeled real estate records into pricing models, valuation tools, or AI agents.
- **Relocation & portfolio tools** — enrich apartment-finder apps or corporate relocation platforms with live German listing inventory.

### Input

Configure the scraper with a search URL, location, or specific listing IDs — plus optional filters. Example input:

```json
{
  "searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?numberofrooms=2.0-4.0",
  "operation": "rent",
  "propertyType": "apartment",
  "minPrice": 800,
  "maxPrice": 2000,
  "minRooms": 2,
  "maxRooms": 4,
  "minLivingSpace": 50,
  "equipment": ["balcony", "builtInKitchen", "cellar"],
  "fetchDetails": true,
  "maxItems": 100
}
````

You can also skip search entirely and pass `listingIds` to fetch a specific set of exposes directly, or use `latitude` / `longitude` / `radiusKm` for a radius-based search around a point. Set `fetchDetails` to `false` for a faster, lighter run that returns search-result fields only, without the full expose enrichment (price breakdown, energy data, description, agent contact).

### Output example

```json
{
  "id": "148392057",
  "url": "https://www.immobilienscout24.de/expose/148392057",
  "title": "Helle 3-Zimmer-Wohnung mit Balkon in Prenzlauer Berg",
  "operation": "RENT",
  "propertyCategory": "apartment",
  "isNew": true,
  "address": {
    "fullAddress": "Kastanienallee 42, 10435 Berlin",
    "street": "Kastanienallee",
    "houseNumber": "42",
    "zip": "10435",
    "city": "Berlin",
    "district": "Prenzlauer Berg",
    "country": "Deutschland",
    "isRedacted": false
  },
  "latitude": 52.5396,
  "longitude": 13.4127,
  "coordinatePrecision": "exact",
  "price": 1450,
  "priceCurrency": "EUR",
  "pricePerSqm": 19.33,
  "kaltmiete": 1450,
  "warmmiete": 1780,
  "nebenkosten": 250,
  "heizkosten": 80,
  "kaution": "4350 €",
  "livingSpace": 75,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 1,
  "floor": "3. Etage",
  "yearBuilt": 1905,
  "condition": "Saniert",
  "heatingType": "Fußbodenheizung",
  "energyClass": "C",
  "balcony": true,
  "garden": false,
  "cellar": true,
  "elevator": false,
  "builtInKitchen": true,
  "description": "Diese lichtdurchflutete Altbauwohnung besticht durch hohe Decken...",
  "photos": [
    { "url": "https://pictures.immobilienscout24.de/listings/148392057-1.jpg", "caption": "Wohnzimmer" },
    { "url": "https://pictures.immobilienscout24.de/listings/148392057-2.jpg", "caption": "Küche" }
  ],
  "photosCount": 12,
  "realtor": {
    "company": "Berlin Wohnen Immobilien GmbH",
    "name": "Anna Müller",
    "phone": "+49 30 12345678",
    "profileUrl": "https://www.immobilienscout24.de/anbieter/12345",
    "isVerified": true
  },
  "hasDetails": true,
  "scrapedAt": "2026-07-20T10:15:00.000Z"
}
```

### Export formats

Download your results in the format your workflow needs — **JSON**, **CSV**, **Excel (XLSX)**, or **XML** — directly from the Apify dataset, no extra setup required. Perfect for feeding straight into spreadsheets, databases, or BI tools.

### Integrations

This scraper works anywhere your data needs to go:

- **REST API** — trigger runs and pull results programmatically
- **MCP server** — connect directly to Claude, ChatGPT, and other AI agents for natural-language data requests
- **Webhooks** — get notified the moment a run finishes
- **Zapier, Make, and n8n** — no-code automation into thousands of other apps
- **Google Sheets** — pipe listings straight into a live spreadsheet
- **AI agent & LLM workflows** — built for integration with LangChain, Claude, ChatGPT, and other agent frameworks that need structured, real-time real estate data

### Tips for best results

- Paste a fully-filtered search URL straight from your browser for the fastest, most accurate setup — all filters are read automatically.
- Turn off `fetchDetails` when you only need headline price, size, and location for a large batch of listings.
- Use `listingIds` when you already know exactly which exposes you want, to skip search entirely.
- Combine `latitude` / `longitude` / `radiusKm` for hyper-local radius searches around a specific address or landmark.
- Re-run on a schedule (via Apify's built-in scheduler) to track price changes and new listings over time.

### FAQ

**Does this scraper require a proxy or any technical setup?**
No. It runs out of the box on Apify — no proxy, browser, or infrastructure setup needed on your end.

**Can I search by city, postcode, or exact radius?**
Yes. Use a geocode path, a postcode, or set latitude/longitude with a radius in kilometers.

**Does it return both rental and for-sale listings?**
Yes, set the `operation` input to `rent` or `buy`.

**Can I get agent or landlord contact details?**
Yes, when `fetchDetails` is enabled, each listing includes available agent/landlord company, name, phone, and profile link.

**What formats can I export the data in?**
JSON, CSV, Excel, and XML — all available directly from the Apify dataset, plus API and webhook access for automated pipelines.

### Pricing

Pay only for results — no subscription required. Try it free.

### Related scrapers

Looking for other European real estate data? Check out our other property scrapers for more markets and marketplaces — great for building a multi-country real estate dataset or comparing cross-border investment opportunities.

# Actor input Schema

## `searchUrl` (type: `string`):

Paste a full immobilienscout24.de search URL (apply your filters in the browser, then copy the address bar). Geocode, property type, and any query filters (price, rooms, size, equipment...) are read directly from it.

## `geocode` (type: `string`):

A location geocode path, e.g. /de/berlin/berlin, /de/bayern/muenchen, or a postcode as /de/10115. Find it by pasting any immobilienscout24.de search URL and copying the path between '/Suche/' and the last segment. Ignored if Search URL is set.

## `latitude` (type: `number`):

Center latitude for a radius search. Combine with Longitude and Radius (km). Overrides Geocode.

## `longitude` (type: `number`):

Center longitude for a radius search. Combine with Latitude and Radius (km).

## `radiusKm` (type: `integer`):

Search radius in km around Latitude/Longitude.

## `listingIds` (type: `array`):

ImmoScout24 expose IDs to fetch directly (skips search entirely). When set, all search/location/filter inputs are ignored.

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

Whether to search for-sale or for-rent listings.

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

Type of real estate to search.

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

Minimum price (Kaltmiete for rent, purchase price for buy).

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

Maximum price (Kaltmiete for rent, purchase price for buy).

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

Minimum number of rooms.

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

Maximum number of rooms.

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

Minimum living space in square meters.

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

Maximum living space in square meters.

## `minPlotArea` (type: `integer`):

Minimum plot/ground size in square meters.

## `maxPlotArea` (type: `integer`):

Maximum plot/ground size in square meters.

## `minConstructionYear` (type: `integer`):

Earliest construction year.

## `maxConstructionYear` (type: `integer`):

Latest construction year.

## `energyEfficiencyClasses` (type: `array`):

Filter by EU EPC energy efficiency class.

## `equipment` (type: `array`):

Filter by equipment/amenities.

## `apartmentTypes` (type: `array`):

Filter by apartment sub-type.

## `buildingTypes` (type: `array`):

Filter by building sub-type (for houses).

## `newBuilding` (type: `boolean`):

Only include new-build / project listings.

## `sorting` (type: `string`):

Sort order value as used by ImmoScout24 (e.g. -firstactivation for newest first). Leave empty for default relevance sorting.

## `fetchDetails` (type: `boolean`):

Fetch the full expose detail page for every listing (price breakdown, energy data, description, photos, agent contact). Turn off for a faster, lighter search-only run.

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

Maximum number of listings to return.

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

ImmoScout24's public listing API works cleanly without a proxy. Only set this if you're running very high volumes and want extra IP diversity.

## Actor input object example

```json
{
  "searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?numberofrooms=2.0-4.0",
  "radiusKm": 10,
  "listingIds": [],
  "operation": "rent",
  "propertyType": "apartment",
  "newBuilding": false,
  "fetchDetails": true,
  "maxItems": 100
}
```

# 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 = {
    "searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?numberofrooms=2.0-4.0"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesmith/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 = { "searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?numberofrooms=2.0-4.0" }

# Run the Actor and wait for it to finish
run = client.actor("scrapesmith/immoscout24-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 '{
  "searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?numberofrooms=2.0-4.0"
}' |
apify call scrapesmith/immoscout24-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ImmoScout24 Scraper",
        "description": "Scrape ImmoScout24 property listings — rent or buy across Germany, Austria, Switzerland. 78+ fields: price breakdown, rooms, energy class, agent contact, photos, fair price indicator. Search by city or paste URLs. JSON/CSV/Excel. API, MCP, webhook, AI-agent ready.",
        "version": "0.0",
        "x-build-id": "faM90DRaAvkttEr9L"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesmith~immoscout24-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesmith-immoscout24-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/scrapesmith~immoscout24-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesmith-immoscout24-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/scrapesmith~immoscout24-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesmith-immoscout24-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": {
                    "searchUrl": {
                        "title": "Search URL (easiest — paste from browser)",
                        "type": "string",
                        "description": "Paste a full immobilienscout24.de search URL (apply your filters in the browser, then copy the address bar). Geocode, property type, and any query filters (price, rooms, size, equipment...) are read directly from it."
                    },
                    "geocode": {
                        "title": "Geocode (direct)",
                        "type": "string",
                        "description": "A location geocode path, e.g. /de/berlin/berlin, /de/bayern/muenchen, or a postcode as /de/10115. Find it by pasting any immobilienscout24.de search URL and copying the path between '/Suche/' and the last segment. Ignored if Search URL is set."
                    },
                    "latitude": {
                        "title": "Latitude (radius search)",
                        "type": "number",
                        "description": "Center latitude for a radius search. Combine with Longitude and Radius (km). Overrides Geocode."
                    },
                    "longitude": {
                        "title": "Longitude (radius search)",
                        "type": "number",
                        "description": "Center longitude for a radius search. Combine with Latitude and Radius (km)."
                    },
                    "radiusKm": {
                        "title": "Radius (km)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Search radius in km around Latitude/Longitude.",
                        "default": 10
                    },
                    "listingIds": {
                        "title": "Listing IDs (direct)",
                        "type": "array",
                        "description": "ImmoScout24 expose IDs to fetch directly (skips search entirely). When set, all search/location/filter inputs are ignored.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "operation": {
                        "title": "Buy or rent",
                        "enum": [
                            "rent",
                            "buy"
                        ],
                        "type": "string",
                        "description": "Whether to search for-sale or for-rent listings.",
                        "default": "rent"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "apartment",
                            "house",
                            "plot",
                            "garage",
                            "investment",
                            "sharedflat",
                            "assistedliving"
                        ],
                        "type": "string",
                        "description": "Type of real estate to search.",
                        "default": "apartment"
                    },
                    "minPrice": {
                        "title": "Min price (EUR)",
                        "type": "integer",
                        "description": "Minimum price (Kaltmiete for rent, purchase price for buy)."
                    },
                    "maxPrice": {
                        "title": "Max price (EUR)",
                        "type": "integer",
                        "description": "Maximum price (Kaltmiete for rent, purchase price for buy)."
                    },
                    "minRooms": {
                        "title": "Min rooms",
                        "type": "number",
                        "description": "Minimum number of rooms."
                    },
                    "maxRooms": {
                        "title": "Max rooms",
                        "type": "number",
                        "description": "Maximum number of rooms."
                    },
                    "minLivingSpace": {
                        "title": "Min living space (m²)",
                        "type": "integer",
                        "description": "Minimum living space in square meters."
                    },
                    "maxLivingSpace": {
                        "title": "Max living space (m²)",
                        "type": "integer",
                        "description": "Maximum living space in square meters."
                    },
                    "minPlotArea": {
                        "title": "Min plot size (m²)",
                        "type": "integer",
                        "description": "Minimum plot/ground size in square meters."
                    },
                    "maxPlotArea": {
                        "title": "Max plot size (m²)",
                        "type": "integer",
                        "description": "Maximum plot/ground size in square meters."
                    },
                    "minConstructionYear": {
                        "title": "Min construction year",
                        "type": "integer",
                        "description": "Earliest construction year."
                    },
                    "maxConstructionYear": {
                        "title": "Max construction year",
                        "type": "integer",
                        "description": "Latest construction year."
                    },
                    "energyEfficiencyClasses": {
                        "title": "Energy efficiency classes",
                        "type": "array",
                        "description": "Filter by EU EPC energy efficiency class.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "a_plus",
                                "a",
                                "b",
                                "c",
                                "d",
                                "e",
                                "f",
                                "g",
                                "h"
                            ],
                            "enumTitles": [
                                "A+",
                                "A",
                                "B",
                                "C",
                                "D",
                                "E",
                                "F",
                                "G",
                                "H"
                            ]
                        }
                    },
                    "equipment": {
                        "title": "Equipment",
                        "type": "array",
                        "description": "Filter by equipment/amenities.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "balcony",
                                "builtInKitchen",
                                "garden",
                                "parking",
                                "cellar",
                                "lift",
                                "guestToilet",
                                "handicappedaccessible"
                            ],
                            "enumTitles": [
                                "Balcony/Terrace",
                                "Fitted kitchen",
                                "Garden",
                                "Garage/Parking space",
                                "Cellar",
                                "Elevator",
                                "Guest toilet",
                                "Step-free access"
                            ]
                        }
                    },
                    "apartmentTypes": {
                        "title": "Apartment types",
                        "type": "array",
                        "description": "Filter by apartment sub-type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "apartment",
                                "groundfloor",
                                "halfbasement",
                                "loft",
                                "maisonette",
                                "other",
                                "penthouse",
                                "raisedgroundfloor",
                                "roofstorey",
                                "terracedflat"
                            ],
                            "enumTitles": [
                                "Apartment",
                                "Ground floor",
                                "Half basement",
                                "Loft",
                                "Maisonette",
                                "Other",
                                "Penthouse",
                                "Raised ground floor",
                                "Roof storey",
                                "Terraced flat"
                            ]
                        }
                    },
                    "buildingTypes": {
                        "title": "Building types",
                        "type": "array",
                        "description": "Filter by building sub-type (for houses).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "apartmentbuilding",
                                "blockhouse",
                                "bungalow",
                                "cityvilla",
                                "countryhouse",
                                "farmhouse",
                                "multifamilyhouse",
                                "nondetachedhouse",
                                "onefamilyhouse",
                                "semidetachedhouse",
                                "singlefamilyhouse",
                                "terracehouse",
                                "villa"
                            ],
                            "enumTitles": [
                                "Apartment building",
                                "Block house",
                                "Bungalow",
                                "City villa",
                                "Country house",
                                "Farmhouse",
                                "Multifamily house",
                                "Non-detached house",
                                "One family house",
                                "Semi-detached house",
                                "Single family house",
                                "Terrace house",
                                "Villa"
                            ]
                        }
                    },
                    "newBuilding": {
                        "title": "New builds only",
                        "type": "boolean",
                        "description": "Only include new-build / project listings.",
                        "default": false
                    },
                    "sorting": {
                        "title": "Sort order",
                        "type": "string",
                        "description": "Sort order value as used by ImmoScout24 (e.g. -firstactivation for newest first). Leave empty for default relevance sorting."
                    },
                    "fetchDetails": {
                        "title": "Fetch full listing details",
                        "type": "boolean",
                        "description": "Fetch the full expose detail page for every listing (price breakdown, energy data, description, photos, agent contact). Turn off for a faster, lighter search-only run.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to return.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy (optional — not needed by default)",
                        "type": "object",
                        "description": "ImmoScout24's public listing API works cleanly without a proxy. Only set this if you're running very high volumes and want extra IP diversity."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
