# ImmoScout24 Property Scraper 🏠 (`shahidirfan/immoscout24-property-scraper`) Actor

Extract real estate listings from ImmoScout24 with property prices, locations, addresses, sizes, rooms, descriptions, images, amenities, and listing URLs. Ideal for German real estate market research, rental analysis, property investment, price monitoring, and competitor intelligence.

- **URL**: https://apify.com/shahidirfan/immoscout24-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does ImmoScout24 Scraper do?

ImmoScout24 Scraper collects public property listings from ImmoScout24, Germany's largest real estate marketplace. Paste an ImmoScout24 search URL, or enter a location such as Berlin, München, or a postcode, and receive structured listings with prices, living space, rooms, addresses, coordinates, images, energy class, agent details, and full descriptions. It is built for market research, price monitoring, investment screening, and lead generation.

### Why use ImmoScout24 Scraper?

- **Reliable dataset creation** - Collect clean, structured German property listings without manual copy and paste.
- **Both rent and sale** - Search apartments and houses for rent or for purchase.
- **Rich listing detail** - Prices, rooms, size, energy class, descriptions, contact details, and labelled attributes such as floor, year built, and heating type.
- **Automation-ready output** - Export to JSON, CSV, Excel, or XML, or send results to Google Sheets, webhooks, Make, or Zapier.
- **Scheduling friendly** - Run once or schedule recurring runs to track new listings and asking prices over time.

### What data can you extract from ImmoScout24?

| Field                        | Description                                                             |
| ---------------------------- | ----------------------------------------------------------------------- |
| `id`                         | ImmoScout24 listing identifier                                          |
| `title`                      | Listing title                                                           |
| `url`                        | Direct listing URL                                                      |
| `realEstateType`             | Property type, such as apartment rent or house buy                      |
| `price`                      | Displayed price with currency                                           |
| `priceValue`                 | Numeric price                                                           |
| `livingSpace`                | Living space with unit                                                  |
| `livingSpaceValue`           | Numeric living space in square meters                                   |
| `rooms`                      | Room count as displayed                                                 |
| `roomsValue`                 | Numeric room count                                                      |
| `address`                    | Full listing address                                                    |
| `street`                     | Street and house number                                                 |
| `addressDetail`              | Postcode, district, and city                                            |
| `latitude` / `longitude`     | WGS84 coordinates                                                       |
| `energyEfficiencyClass`      | Energy efficiency class                                                 |
| `published`                  | Listing age, for example "vor 2 Tagen"                                  |
| `imageUrl`                   | Main listing image                                                      |
| `pictures` / `imageCaptions` | Full image gallery with captions                                        |
| `description`                | Full listing description                                                |
| `equipment`                  | Equipment and furnishing description                                    |
| `locationDescription`        | Location and neighborhood description                                   |
| `otherDescription`           | Additional listing description                                          |
| `coldRent` / `warmRent`      | Cold and warm rent when published                                       |
| `pricePerSqm`                | Price per square meter when published                                   |
| `agentName` / `agentCompany` | Contact name and company                                                |
| `agentRating`                | Agent rating when published                                             |
| `phoneNumbers`               | Published contact phone numbers                                         |
| `attributes`                 | Labelled details such as apartment type, floor, year built, and heating |
| `attributeGroups`            | The same attributes grouped into sections                               |
| `scrapedAt`                  | ISO timestamp for the collection                                        |

### How to use ImmoScout24 Scraper

1. Open the Actor on Apify Store.
2. Paste an ImmoScout24 search URL, or leave it empty and enter a location.
3. Choose a property type and optional price or room filters when using a location.
4. Set the result limit and page limit.
5. Run the Actor and review the dataset preview.
6. Download the results or connect the dataset to your workflow.

You can copy any search URL from ImmoScout24, including city pages, radius searches, and searches with price or room filters, and the Actor reads the filters from the URL. When no URL is supplied, the Actor uses the location input.

### Input Parameters

| Parameter            | Type    | Required | Default                      | Description                                                                                                                              |
| -------------------- | ------- | -------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrl`           | String  | No       | Berlin apartment rent search | ImmoScout24 search URL. A custom URL takes precedence over `location`.                                                                   |
| `location`           | String  | No       | -                            | City, district, or postcode, such as Berlin, Berlin Mitte, München, or 10115. Used when no custom URL is supplied.                       |
| `realEstateType`     | String  | No       | `apartmentrent`              | Property type used with `location`: `apartmentrent`, `apartmentbuy`, `houserent`, or `housebuy`.                                         |
| `priceRange`         | String  | No       | -                            | Price in euros, such as `-800` (up to 800) or `500-1200`. Used with `location`.                                                          |
| `numberOfRooms`      | String  | No       | -                            | Room range, such as `2.0-3.5` or `3.0-`. Used with `location`.                                                                           |
| `collectDetails`     | Boolean | No       | `true`                       | Open each listing to add the full description, contact, and detailed attributes.                                                         |
| `results_wanted`     | Integer | No       | `20`                         | Maximum number of listings to save.                                                                                                      |
| `max_pages`          | Integer | No       | `10`                         | Safety cap on the number of result pages to visit.                                                                                       |
| `proxyConfiguration` | Object  | No       | No proxy                     | Leave as no proxy for the fastest, most reliable runs. If you enable Apify Proxy, sessions are rotated across IPs to spread rate limits. |

If both `startUrl` and `location` are supplied, `startUrl` takes priority. If both are omitted, the Actor runs a default Berlin apartment rent search.

### Output Data

Each item is stored in an Apify Dataset. All important fields are listed in the data table above. Records only contain fields that have values, so empty attributes are not included.

### Usage Examples

#### Basic search by URL

Collect apartments for rent in Berlin from a search URL:

```json
{
    "startUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search",
    "results_wanted": 50,
    "max_pages": 10
}
```

#### Search by location with filters

Collect houses for sale in Munich with a maximum price:

```json
{
    "location": "München",
    "realEstateType": "housebuy",
    "priceRange": "-800000",
    "results_wanted": 100,
    "collectDetails": true
}
```

#### Search a postcode or district

Search around a postcode and limit results:

```json
{
    "location": "10115",
    "realEstateType": "apartmentrent",
    "numberOfRooms": "2.0-3.0",
    "results_wanted": 20,
    "max_pages": 5
}
```

### Sample Output

```json
{
    "id": "168052908",
    "title": "Naturverbunden wohnen in kompakter 2-Zimmer-Gartenwohnung mit WBS-140-Förderung",
    "url": "https://www.immobilienscout24.de/expose/168052908",
    "realEstateType": "apartmentrent",
    "price": "362 €",
    "priceValue": 362,
    "currency": "EUR",
    "livingSpace": "52 m²",
    "livingSpaceValue": 52,
    "rooms": "2 Zi.",
    "roomsValue": 2,
    "address": "Hellersdorfer Straße 91, 12619 Berlin, Kaulsdorf (Hellersdorf)",
    "street": "Hellersdorfer Straße 91",
    "addressDetail": "12619 Hellersdorf, Berlin",
    "latitude": 52.52485,
    "longitude": 13.58695,
    "energyEfficiencyClass": "B",
    "published": "vor 2 Tagen",
    "imageUrl": "https://pictures.immobilienscout24.de/listings/7059e813-0eb0-4e71-82d6-e98b247a3755-2033933665.jpg/ORIG/resize/800x600>/format/webp/quality/80",
    "pictures": [
        "https://pictures.immobilienscout24.de/listings/7059e813-0eb0-4e71-82d6-e98b247a3755-2033933665.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
        "https://pictures.immobilienscout24.de/listings/46ec0f5f-f897-48a5-9dbe-696a0856b52d-2033933691.jpg/ORIG/resize/1500x1000/format/webp/quality/80"
    ],
    "imageCaptions": ["Außenvisualisierung", "Zimmer"],
    "description": "Die Wohnung wird ausschließlich an einen 2-Personen-Haushalt vermietet...",
    "equipment": "Die Ausstattung im Cecilien-Carré orientiert sich am Alltag...",
    "locationDescription": "Das Cecilien-Carré befindet sich im Berliner Ortsteil Hellersdorf...",
    "coldRent": "362 €",
    "warmRent": "569 €",
    "pricePerSqm": "7 €/m²",
    "agentName": "Gesobau Vermietungsteam Neubau",
    "agentCompany": "GESOBAU AG",
    "agentRating": 4.3,
    "attributes": {
        "Wohnungstyp": "Erdgeschosswohnung",
        "Wohnfläche ca.": "51,7 m²",
        "Etage": "0",
        "Baujahr": "2025",
        "Heizungsart": "Fernwärme"
    },
    "attributeGroups": {
        "Hauptkriterien": {
            "Wohnungstyp": "Erdgeschosswohnung",
            "Etage": "0"
        },
        "Kosten": {
            "Kaltmiete (zzgl. Nebenkosten)": "362 €",
            "Gesamtmiete": "569 €"
        }
    },
    "scrapedAt": "2026-10-09T16:22:55.000Z"
}
```

### Tips for Best Results

- Copy the search URL straight from your browser so all filters match what you selected on ImmoScout24.
- Start with a smaller `results_wanted` to confirm the output, then scale up.
- Keep `collectDetails` enabled for descriptions and labelled attributes; disable it for faster, lighter runs.
- Use `max_pages` to control run time on very large result sets.
- Enable residential proxies for larger or repeated runs.
- Some fields are empty when the listing does not publish that information, such as a missing energy class.

### Integrations

- **Google Sheets** - Send listings to a spreadsheet for review and sharing.
- **Webhooks** - Trigger downstream workflows after each run.
- **Make or Zapier** - Connect results to no-code automations.
- **API** - Access the dataset programmatically from your own systems.
- **CSV, Excel, JSON, XML** - Download the dataset in the format you need.

### Frequently Asked Questions

#### Can I export ImmoScout24 data to CSV or Excel?

Yes. Apify datasets can be downloaded in CSV, Excel, JSON, XML, and other supported formats.

#### Can I search both rent and sale listings?

Yes. Use a URL for the listing type you want, or set `realEstateType` to `apartmentrent`, `apartmentbuy`, `houserent`, or `housebuy` when using a location.

#### Can I run this Actor on a schedule?

Yes. Schedule the Actor in Apify Console to refresh data hourly, daily, weekly, or at another interval.

#### Does it work with any ImmoScout24 search URL?

Yes. City pages, radius searches, and searches with price or room filters are supported. The Actor reads the property type and filters from the URL.

#### What should I do if some fields are missing?

Some fields may be empty when the source listing does not publish that information. Check several results before assuming the Actor failed.

#### Is it legal to scrape ImmoScout24?

Scraping public web data can be legal, but you are responsible for complying with applicable laws, website terms, and privacy rules.

### Related Actors

- [Realtor.com Scraper](https://apify.com/shahidirfan/realtor-com-scraper) - Property listings from Realtor.com in the United States.
- [Zillow Property Scraper](https://apify.com/shahidirfan/zillow-property-scraper) - Zillow listings with prices, home details, and coordinates.
- [PropertyGuru Scraper](https://apify.com/shahidirfan/propertyguru-scraper) - Property listings across Malaysia and Singapore.
- [Zameen.com Scraper](https://apify.com/shahidirfan/zameen-com-scraper) - Property listings from Pakistan's leading property portal.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate data collection from publicly available sources. Users are responsible for using the data responsibly and complying with applicable laws and website terms.

# Actor input Schema

## `startUrl` (type: `string`):

An ImmoScout24 search URL. A custom URL takes precedence over Location. Example: https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten

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

A city, district, or postcode, for example Berlin, Berlin Mitte, Muenchen, or 10115. Used when no custom Start URL is supplied.

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

Property type used with Location (Start URL mode reads the type from the URL).

## `priceRange` (type: `string`):

Maximum or range in euros, for example -800 (up to 800) or 500-1200. Used with Location.

## `numberOfRooms` (type: `string`):

Room range, for example 2.0-3.5 or 3.0-. Used with Location.

## `collectDetails` (type: `boolean`):

If enabled, opens each listing to add the full description, contact, and detailed attributes.

## `results_wanted` (type: `integer`):

The maximum number of listings to collect.

## `max_pages` (type: `integer`):

A safety cap on the number of result pages to visit.

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

Leave as no proxy for the fastest, most reliable runs. If you enable Apify Proxy, the Actor rotates sessions across IPs to spread rate limits.

## Actor input object example

```json
{
  "startUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search",
  "realEstateType": "apartmentrent",
  "collectDetails": true,
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/immoscout24-property-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 = { "startUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search" }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/immoscout24-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search"
}' |
apify call shahidirfan/immoscout24-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/immoscout24-property-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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