# ImmobilienScout24 Property Listings Scraper (`fetch_cat/immobilienscout24-property-listings-scraper`) Actor

Extract public ImmobilienScout24 real estate listing data for market research, lead generation, and price monitoring.

- **URL**: https://apify.com/fetch\_cat/immobilienscout24-property-listings-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 item extracteds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

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

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

# README

## ImmobilienScout24 Property Listings Scraper

ImmobilienScout24 scraper for extracting public property search results into a structured Apify dataset. This ImmobilienScout24 API workflow uses the proven mobile search route to collect listing IDs, prices, location, coordinates, attributes, images, flags, and pagination metadata for German real-estate research and monitoring.

### At a glance

- **Primary job**: Export ImmobilienScout24 search listings without manually paging through the website.
- **Input**: ImmobilienScout24 search URLs or mobile API geocode paths such as `/de/berlin/berlin`.
- **Output**: One dataset row per unique property listing.
- **Best for**: Rental and sales market research, price monitoring, location analysis, and listing deduplication.

### Input recipes

**Berlin apartment rentals**

```json
{
  "startUrls": [{ "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }],
  "maxItems": 50
}
```

**Munich apartment rentals by geocode**

```json
{
  "geocodes": ["/de/bayern/muenchen"],
  "realEstateType": "apartmentrent",
  "maxItems": 50
}
```

**House purchases**

```json
{
  "geocodes": ["/de/brandenburg/potsdam"],
  "realEstateType": "housebuy",
  "maxItems": 100
}
```

### Output: what data can you extract?

| Field | Description |
| --- | --- |
| `listingId` | Stable ImmobilienScout24 expose ID for deduplication. |
| `url` | Public listing URL. |
| `sourceUrl` | Search URL or generated API source for the row. |
| `title` | Listing headline. |
| `realEstateType`, `listingType` | Search/listing type values exposed by the source. |
| `price`, `priceRaw` | Parsed numeric price and original price text. |
| `livingAreaSqm`, `livingAreaRaw` | Parsed living area and original area text. |
| `rooms`, `roomsRaw` | Parsed room count and original room text. |
| `address`, `city`, `postalCode` | Public address line and parsed locality fields. |
| `latitude`, `longitude` | Listing coordinates when exposed. |
| `published` | Source-published label. |
| `energyEfficiencyClass` | Energy class when present in search results. |
| `isProject`, `isPrivate`, `isNewObject`, `liveVideoTourAvailable`, `listOnlyOnIs24` | Listing flags exposed by the mobile result. |
| `attributes`, `tags` | Additional result attributes and badges. |
| `imageUrls`, `titlePictureUrl`, `realtorLogoUrl` | Public image/logo URLs from the search result. |
| `reportUrl` | Source report URL when available. |
| `searchPageNumber`, `searchTotalResults` | Pagination context. |
| `scrapedAt` | ISO timestamp when the row was saved. |

### Input configuration

| Setting | JSON key | Use it for | Example |
| --- | --- | --- | --- |
| Search URLs | `startUrls` | ImmobilienScout24 search URLs for supported apartment/house rent/buy searches. | `https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten` |
| Geocodes | `geocodes` | Direct region paths for the mobile search API. | `/de/bayern/muenchen` |
| Real estate type | `realEstateType` | Property and transaction type for geocode inputs. | `apartmentrent` |
| Maximum listings | `maxItems` | Cap saved rows and control spend. | `50` |
| Page size | `pageSize` | Results requested per page, up to 50. | `50` |

### Pricing and limits

This Actor uses pay-per-event pricing. A run-start event is charged once when the Actor starts, and an item event is charged for each unique ImmobilienScout24 listing saved to the dataset. See the live [Pricing tab](https://apify.com/fetch_cat/immobilienscout24-property-listings-scraper/pricing) for current rates.

### Tips for best results

- Start with `maxItems: 10` or `50` to validate the region and type.
- Use specific city/region search URLs or geocodes for faster, cleaner output.
- Schedule repeated runs and compare `listingId`, `price`, and `scrapedAt` for monitoring.

### Limits and caveats

- Search results do not expose every detail-page field. Phone numbers, agent names, and full descriptions are intentionally not guessed.
- Very broad searches can span many pages; use `maxItems` to control runtime and spend.
- Source data can change, disappear, or become temporarily unavailable.

### Who is it for?

- Real-estate analysts tracking rental or sales inventory by German city.
- PropTech teams enriching dashboards with listing IDs, coordinates, and price fields.
- Agencies and investors monitoring market supply and listing changes over time.
- Automation builders who need CSV, Excel, JSON, API, or MCP access to ImmobilienScout24 property listings.

### API usage

Node.js:

```js
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/immobilienscout24-property-listings-scraper").call({
  geocodes: ["/de/berlin/berlin"],
  realEstateType: "apartmentrent",
  maxItems: 50
});
console.log(run.defaultDatasetId);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/immobilienscout24-property-listings-scraper").call(run_input={
    "geocodes": ["/de/berlin/berlin"],
    "realEstateType": "apartmentrent",
    "maxItems": 50,
})
print(run["defaultDatasetId"])
```

cURL:

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~immobilienscout24-property-listings-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"geocodes":["/de/berlin/berlin"],"realEstateType":"apartmentrent","maxItems":50}'
```

### MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/immobilienscout24-property-listings-scraper"
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/immobilienscout24-property-listings-scraper"
    }
  }
}
```

Example prompts:

- "Run ImmobilienScout24 Property Listings Scraper for Berlin apartment rentals and summarize average price from the dataset."
- "Export 20 Munich ImmobilienScout24 listings and list IDs with coordinates for monitoring."

### Related actors

- [Rightmove Property Listings Scraper](https://apify.com/fetch_cat/rightmove-property-listings-scraper)
- [Idealista Property Listings Scraper](https://apify.com/fetch_cat/idealista-property-listings-scraper)
- [Zillow Property Details Scraper](https://apify.com/fetch_cat/zillow-property-details-scraper)
- [Realtor.com Agents Scraper](https://apify.com/fetch_cat/realtor-com-agents-scraper)
- [Google Maps Places Scraper](https://apify.com/fetch_cat/google-maps-places-scraper)

### FAQ

#### Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

#### Why are some fields empty?

ImmobilienScout24 search results expose different fields per listing. Empty optional fields mean the source did not provide that value in the search response.

### Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, and actual output.

# Actor input Schema

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

ImmobilienScout24 search URLs, for example Berlin apartment rentals. The actor derives geocode and real estate type from supported URLs.

## `geocodes` (type: `array`):

Optional ImmobilienScout24 mobile API geocode paths, for example /de/berlin/berlin or /de/bayern/muenchen.

## `realEstateType` (type: `string`):

Mobile API real estate type used for geocode inputs or as URL fallback.

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

Maximum number of unique listings to save.

## `pageSize` (type: `integer`):

Listings requested per API page. The source currently returns up to 50.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
    }
  ],
  "realEstateType": "apartmentrent",
  "maxItems": 20,
  "pageSize": 50
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/immobilienscout24-property-listings-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [{ "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }] }

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/immobilienscout24-property-listings-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 '{
  "startUrls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
    }
  ]
}' |
apify call fetch_cat/immobilienscout24-property-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9kPrdtT9UJhUolgdc/builds/6SnZa1Cr2SSMOGWXT/openapi.json
