# ImmoScout24 Germany Real Estate Scraper (`automation-lab/immoscout24-de-scraper`) Actor

Scrape property listings from ImmobilienScout24.de — Germany's #1 real estate portal. Extract price, address, area, rooms, energy data, photos, and agent contact info.

- **URL**: https://apify.com/automation-lab/immoscout24-de-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ImmoScout24 Germany Real Estate Scraper

Extract property listings from **ImmobilienScout24.de** — Germany's largest real estate marketplace. Collect price, address, area, rooms, energy rating, photos, and agent contact details at scale, with no manual browsing.

### What does it do?

This actor scrapes property listings from [ImmobilienScout24.de](https://www.immobilienscout24.de/) — the dominant German real estate portal covering apartments, houses, commercial properties, and land across all of Germany, Austria, and Switzerland. You paste one or more search result URLs, and the actor automatically paginate through results and exports structured data for each listing.

**Typical use cases:**
- 🏡 Aggregate listings for a specific city, neighbourhood, or price range
- 📊 Build real estate market reports and rent/sale price comparisons
- 🤖 Feed property data into CRMs, analytics dashboards, or price alert systems
- 📋 Monitor competitor listings for real estate agencies and PropTech tools

### Who is it for?

#### 🏢 Real estate agencies
Stay ahead of the market. Track competitor listings, monitor price trends in your target districts, and identify undervalued properties before your clients do.

#### 💼 Property investors & funds
Automate market intelligence. Extract asking prices, energy ratings, and location data across hundreds of cities to build proprietary deal-flow pipelines and comparables databases.

#### 🛠️ PropTech startups and analytics firms
Build rental price indexes, neighbourhood value maps, and automated valuation models. Feed IS24 data into your models without paying for enterprise data licences.

#### 📰 Data journalists and researchers
Track rent inflation, analyse housing availability by district, or visualise the spread of energy efficiency ratings across Germany's housing stock.

### Why use it?

- ✅ Handles IS24's bot protection automatically — no manual CAPTCHA solving
- ✅ Extracts structured data from IS24's Next.js page model for maximum field coverage
- ✅ Supports all listing types: apartments for rent/sale, houses, commercial, land
- ✅ Paginates automatically across all result pages
- ✅ Works with residential proxy rotation for reliable, long-running scrapes
- ✅ Exports to JSON, CSV, Excel, or via API — native Apify dataset integrations

### What data is extracted?

| Field | Description |
|-------|-------------|
| `listingId` | IS24 listing ID |
| `url` | Direct link to the listing page |
| `title` | Listing headline |
| `listingType` | e.g. "Wohnung kaufen", "Haus mieten" |
| `price` | Asking price (€) |
| `priceRaw` | Price as displayed on IS24 |
| `pricePerSqm` | Price per square metre (€/m²) |
| `currency` | EUR |
| `warmRent` | Total rent incl. additional costs (Warmmiete) |
| `coldRent` | Base rent (Kaltmiete) |
| `additionalCosts` | Service charge / Nebenkosten |
| `deposit` | Security deposit (Kaution) |
| `livingAreaSqm` | Living area in m² |
| `plotAreaSqm` | Plot area in m² (houses) |
| `rooms` | Total number of rooms |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `floor` | Floor number |
| `totalFloors` | Total floors in the building |
| `yearBuilt` | Year of construction |
| `condition` | Property condition (e.g. Renoviert) |
| `heatingType` | Heating system type |
| `energyClass` | Energy efficiency class (A+–H) |
| `energyConsumption` | Energy consumption in kWh/(m²·a) |
| `address` | Full address string |
| `street` | Street name |
| `city` | City |
| `district` | Neighbourhood/district |
| `zipCode` | Postal code |
| `latitude` | GPS latitude |
| `longitude` | GPS longitude |
| `description` | Property description text |
| `features` | List of features (balcony, lift, garden…) |
| `photoUrls` | Array of photo URLs |
| `agentName` | Contact person name |
| `agentCompany` | Agency / company name |
| `agentPhone` | Agent phone number |
| `contactFormUrl` | URL to IS24 contact form |
| `postedAt` | Listing publication date |
| `scrapedAt` | Timestamp when data was collected |

### How to use it

#### Step 1 — Open ImmobilienScout24 and filter your search

1. Go to [immobilienscout24.de](https://www.immobilienscout24.de/)
2. Select your city, listing type (rent/sale), property type (apartment/house), and any price/size filters
3. Copy the full URL from your browser address bar

**Example search URLs:**
````

https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen
https://www.immobilienscout24.de/Suche/de/hamburg/haus-mieten?price=500.0-1500.0
https://www.immobilienscout24.de/Suche/de/muenchen/wohnung-mieten?numberOfRooms=2.0-

````

#### Step 2 — Paste URLs into the actor

1. Open this actor on [Apify](https://apify.com/automation-lab/immoscout24-de-scraper)
2. Paste one or more IS24 search URLs into the **Search URLs** field
3. Set **Max listings per URL** (start with 20–50 for testing)

#### Step 3 — Run and download results

Click **Start** and wait for the run to complete. Results appear in the **Dataset** tab as they are collected. Download as JSON, CSV, or Excel — or connect to Google Sheets via Apify integrations.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchUrls` | array | — | **Required.** IS24 search result URLs to scrape |
| `maxListings` | integer | 50 | Max listings to collect per URL |
| `maxPages` | integer | 10 | Max search result pages per URL (each page ≈ 20 listings) |
| `proxy` | object | Residential | Proxy configuration — residential recommended |
| `maxConcurrency` | integer | 3 | Parallel browser pages (lower = more stable) |
| `navigationTimeoutSecs` | integer | 60 | Page load timeout in seconds |
| `maxRequestRetries` | integer | 3 | Retry attempts for failed pages |

### Output example

```json
{
  "listingId": "123456789",
  "url": "https://www.immobilienscout24.de/expose/123456789",
  "title": "Helle 3-Zimmer-Wohnung in Berlin-Mitte",
  "listingType": "Wohnung kaufen",
  "price": 450000,
  "priceRaw": "450.000 €",
  "pricePerSqm": 5625,
  "currency": "EUR",
  "warmRent": null,
  "coldRent": null,
  "additionalCosts": null,
  "deposit": null,
  "livingAreaSqm": 80,
  "plotAreaSqm": null,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 1,
  "floor": "3",
  "totalFloors": 5,
  "yearBuilt": 1998,
  "condition": "Gepflegt",
  "heatingType": "Fernwärme",
  "energyClass": "C",
  "energyConsumption": "89.5 kWh/(m²·a)",
  "address": "Musterstraße 12, 10115 Berlin",
  "street": "Musterstraße 12",
  "city": "Berlin",
  "district": "Mitte",
  "zipCode": "10115",
  "latitude": 52.5208,
  "longitude": 13.4094,
  "description": "Wir bieten Ihnen diese helle und geräumige Wohnung...",
  "features": ["Balkon", "Einbauküche", "Aufzug"],
  "photoUrls": ["https://pictures.immobilienscout24.de/..."],
  "agentName": "Max Mustermann",
  "agentCompany": "Immobilien GmbH Berlin",
  "agentPhone": "+49 30 12345678",
  "contactFormUrl": "https://www.immobilienscout24.de/expose/123456789#contact",
  "postedAt": "2026-05-01",
  "scrapedAt": "2026-05-10T08:00:00.000Z"
}
````

### Tips for best results

💡 **Use specific search filters** — Set price ranges, room counts, and neighbourhood filters before copying the URL. The more specific your filter, the more relevant your results.

💡 **Start small** — Set `maxListings` to 20–50 for test runs before scraping thousands of listings. This keeps costs predictable.

💡 **One URL per district/type** — For large cities (Berlin, Munich), split by neighbourhood or property type. One search URL per run segment works better than combining too many filters.

💡 **Residential proxy is recommended** — IS24 has bot protection that blocks datacenter IPs. The default residential proxy setting handles this automatically.

💡 **Re-run for freshness** — IS24 listings are updated daily. Schedule this actor weekly or monthly to keep your dataset current.

💡 **Export to Google Sheets** — Use Apify's Google Sheets integration to automatically push results into a spreadsheet after each run.

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

This actor uses **Pay-Per-Event (PPE)** billing — you only pay for the listings you extract. There's a small one-time start fee per run.

#### Pricing tiers

| Plan | Cost per listing |
|------|----------------|
| FREE | $0.01762 |
| BRONZE | $0.01532 |
| SILVER | $0.01195 |
| GOLD | $0.00919 |
| PLATINUM | $0.00613 |
| DIAMOND | $0.00429 |

#### Cost examples

Estimates at BRONZE tier ($0.01532/listing) including the $0.005 start fee:

| Listings | Estimated cost |
|----------|---------------|
| 100 listings | ~$1.54 |
| 500 listings | ~$7.67 |
| 2,000 listings | ~$30.65 |
| 10,000 listings | ~$153.25 |

**Free plan estimate:** Apify's free plan includes $5/month in credits — enough for approximately 270–280 listings at the FREE tier.

Prices shown are for the BRONZE tier and include the $0.005 start fee. Higher-volume plans (GOLD, PLATINUM, DIAMOND) offer significant discounts.

### Integrations

#### 🔗 Google Sheets — live property tracking

1. Run the actor with your search URLs
2. In the **Integrations** tab, connect the **Google Sheets** integration
3. Map the dataset fields to your spreadsheet columns
4. Results automatically append after each run

#### 📊 Power BI / Tableau — market analysis dashboards

Export the dataset as CSV from the Apify console and import into your BI tool. Schedule the actor monthly to refresh your data automatically.

#### 🤖 Zapier / Make — CRM pipeline automation

Connect Apify to Zapier via the **Apify → Zapier** trigger. When new listings are scraped, automatically create leads in HubSpot, Salesforce, or Pipedrive for matching properties.

#### 📧 Price alert workflows

1. Run this actor weekly on your target search URL
2. Use Apify's **Dataset comparison** integration to detect new or reduced listings
3. Send email/Slack notifications via Zapier when new matches appear

### API usage

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/immoscout24-de-scraper').call({
  searchUrls: ['https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen'],
  maxListings: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} listings`);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("automation-lab/immoscout24-de-scraper").call(run_input={
    "searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"],
    "maxListings": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} — {item['priceRaw']}")
```

#### cURL

```bash
## Start a run
curl -X POST "https://api.apify.com/v2/acts/automation-lab~immoscout24-de-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"],
    "maxListings": 100
  }'

## Fetch results (replace DATASET_ID with the one from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN&format=json"
```

### Using with Claude, ChatGPT, and AI assistants (MCP)

This actor is available as an **MCP (Model Context Protocol) tool**, letting you query IS24 listings directly from Claude, Cursor, or any MCP-compatible AI assistant.

#### Claude Code / Claude Desktop

Add this actor as a tool in Claude Code:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper"
```

Or add to your Claude Desktop config (`~/.claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

#### Example MCP prompts

Once connected, you can ask your AI assistant:

- *"Find 3-bedroom apartments for sale in Munich under €600,000 on ImmobilienScout24"*
- *"Get 50 rental listings in Hamburg Altona and calculate the average price per m²"*
- *"Scrape IS24 search results for Berlin Mitte and export them as a table"*

#### VS Code / Cursor

Add to your workspace `.vscode/mcp.json`:

```json
{
  "servers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/immoscout24-de-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

### Legality and ethical use

ImmobilienScout24 is a publicly accessible website. This actor only collects data that is visible to any website visitor — it does not access private accounts, contact databases, or any non-public data.

**Before using this actor, please review:**

- [ImmobilienScout24 Terms of Use](https://www.immobilienscout24.de/hilfe/nutzungsbedingungen.html)
- [Robots.txt guidelines](https://www.immobilienscout24.de/robots.txt)
- The GDPR rules applicable to personal data (agent names and phone numbers) in your jurisdiction

We recommend:

- Respecting IS24's rate limits (the actor does this by default)
- Not scraping personal contact data beyond what is needed for your use case
- Complying with applicable data protection laws when storing agent contact info

Apify's platform terms also apply. This actor is intended for legitimate business intelligence, market research, and analytics use cases.

### FAQ

#### Does this work for Austria (immobilienscout24.at) and Switzerland (immobilienscout24.ch)?

The actor scrapes based on the URL you provide. If you paste an `.at` or `.ch` URL, it will attempt to scrape that region. However, IS24's country subdomains may have different page structures — `.de` is the primary supported target.

#### Why are some listings missing price or area data?

IS24 allows sellers to publish listings without all fields. If `price`, `livingAreaSqm`, or `rooms` is `null`, the original listing on IS24 did not include that data.

#### The run succeeded but my dataset is empty — what happened?

This usually means the search URL returned a bot-challenge page that wasn't fully resolved. Try:

1. Using a more specific search URL (add filters)
2. Reducing `maxConcurrency` to 1
3. Verifying the URL loads correctly in your browser

#### Can I scrape detail pages for additional fields?

The actor extracts data from IS24's Next.js server-rendered search pages. Detail pages contain additional fields (energy certificates, floor plans) — if you need those, open an issue and we can add a `scrapeDetails` option.

#### How long does a run take?

A typical run scraping 100 listings takes 2–5 minutes, including proxy handling. Larger runs (1,000+ listings) take 15–30 minutes.

### Related scrapers

Looking for real estate data from other markets? Check out our full portfolio:

- [🇬🇧 Rightmove Scraper](https://apify.com/automation-lab/rightmove-scraper) — UK property listings
- [🇺🇸 Zillow Scraper](https://apify.com/automation-lab/zillow-scraper) — US real estate
- [🇺🇸 Realtor.com Scraper](https://apify.com/automation-lab/realtor-scraper) — US listings
- [🇺🇸 Redfin Scraper](https://apify.com/automation-lab/redfin-scraper) — US home listings

All scrapers export the same structured format for easy multi-market comparison.

# Actor input Schema

## `searchUrls` (type: `array`):

ImmobilienScout24.de search result URLs to scrape. Example: https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen

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

Maximum number of listings to extract per search URL. Set to 0 for unlimited (all pages).

## `maxPages` (type: `integer`):

Maximum number of search result pages to scrape per URL. Each page has ~20 listings.

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

Proxy settings. Residential proxies are recommended for reliable access.

## `maxConcurrency` (type: `integer`):

Maximum number of browser pages open simultaneously. Lower values are more stable and cheaper.

## `navigationTimeoutSecs` (type: `integer`):

How long to wait for a page to load before giving up.

## `maxRequestRetries` (type: `integer`):

Number of times to retry a failed page load.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"
  ],
  "maxListings": 20,
  "maxPages": 3,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 2,
  "navigationTimeoutSecs": 60,
  "maxRequestRetries": 3
}
```

# 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 = {
    "searchUrls": [
        "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"
    ],
    "maxListings": 20,
    "maxPages": 3,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    },
    "maxConcurrency": 2,
    "navigationTimeoutSecs": 60,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/immoscout24-de-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 = {
    "searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"],
    "maxListings": 20,
    "maxPages": 3,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
    "maxConcurrency": 2,
    "navigationTimeoutSecs": 60,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/immoscout24-de-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 '{
  "searchUrls": [
    "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen"
  ],
  "maxListings": 20,
  "maxPages": 3,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 2,
  "navigationTimeoutSecs": 60,
  "maxRequestRetries": 3
}' |
apify call automation-lab/immoscout24-de-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ImmoScout24 Germany Real Estate Scraper",
        "description": "Scrape property listings from ImmobilienScout24.de — Germany's #1 real estate portal. Extract price, address, area, rooms, energy data, photos, and agent contact info.",
        "version": "0.1",
        "x-build-id": "cxdgOnfwBpGdMQBMo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~immoscout24-de-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-immoscout24-de-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/automation-lab~immoscout24-de-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-immoscout24-de-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/automation-lab~immoscout24-de-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-immoscout24-de-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": [
                    "searchUrls"
                ],
                "properties": {
                    "searchUrls": {
                        "title": "🔗 Search URLs",
                        "type": "array",
                        "description": "ImmobilienScout24.de search result URLs to scrape. Example: https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxListings": {
                        "title": "📊 Max listings per URL",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to extract per search URL. Set to 0 for unlimited (all pages).",
                        "default": 50
                    },
                    "maxPages": {
                        "title": "📄 Max pages per URL",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of search result pages to scrape per URL. Each page has ~20 listings.",
                        "default": 10
                    },
                    "proxy": {
                        "title": "🔒 Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies are recommended for reliable access."
                    },
                    "maxConcurrency": {
                        "title": "⚡ Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of browser pages open simultaneously. Lower values are more stable and cheaper.",
                        "default": 3
                    },
                    "navigationTimeoutSecs": {
                        "title": "⏱ Navigation timeout (seconds)",
                        "minimum": 30,
                        "maximum": 120,
                        "type": "integer",
                        "description": "How long to wait for a page to load before giving up.",
                        "default": 60
                    },
                    "maxRequestRetries": {
                        "title": "🔄 Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of times to retry a failed page load.",
                        "default": 3
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
