# ImmoScout24 Scraper (`ivanvs/immobilienscout-scraper`) Actor

Extract data from immobilienscout24.de for data on thousands of apartments and house listings. Scrape house location, extract descriptions, images, prices, contact number, addresses, names, and all other listing details. Unlimited and extremely fast!

- **URL**: https://apify.com/ivanvs/immobilienscout-scraper.md
- **Developed by:** [Gen First](https://apify.com/ivanvs) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 listings

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

## ImmobilienScout24 Scraper

Extract rental and sale listings, prices, living space, rooms, full addresses, photos, agent
details, and price insights from [ImmobilienScout24](https://www.immobilienscout24.de/). No login,
no cookies, and no proxy setup required. ImmobilienScout24 Scraper turns any ImmobilienScout24
search, listing (exposé), new-build project, or house-builder URL into clean, structured JSON you
can export to CSV, Excel, JSON, XML, or HTML Table.

### What does ImmobilienScout24 Scraper do?

- 🔎 **Scrapes search results**: paste any ImmobilienScout24 search URL (`/Suche/...`) and collect every listing it returns. Pagination is automatic, and your filters (price, size, rooms, features, …) and sort order are kept.
- 🏠 **Scrapes individual listings**: paste a single exposé URL (`/expose/<id>`) to get its full detail record.
- 🏗️ **Scrapes new-build projects**: paste a developer project URL (`/neubau/...`) to collect every apartment or house in that development.
- 🧱 **Scrapes house-builder catalogs**: paste a builder page (`/bauen/<builder>.html`) to collect every house model the builder offers.
- 🏢 **Works across property types**: apartments and houses for rent or sale, shared rooms (WG), short-term rentals, land, garages and parking spaces, offices, retail, hospitality, industrial, and investment properties.
- 🇬🇧 **German and English URLs**: English-language URLs (`/en/search/...`, `/en/expose/...`) work just like the German ones.
- 🧾 **Returns rich structured data**: base rent and total rent or purchase price, living space, rooms, full address with coordinates, photos, virtual tours, agent and company contact details, price-per-m² comparison, estimated monthly expenses, purchase side costs, and every exposé attribute.
- 🔓 **No login or session cookies** required.
- 🌐 **Proxy preconfigured**
- 📤 **Export anywhere**: JSON, CSV, Excel, XML, or HTML Table.

### About ImmobilienScout24

ImmobilienScout24 (immobilienscout24.de) is Germany's largest online real-estate marketplace.
It lists residential and commercial property for rent and for sale across the country, from
private landlords, real-estate agents, property developers, and house builders. This makes it a
key source of German housing-market, rent, and pricing data.

### What can you do with this data?

- **Rent and price monitoring**: track asking rents and purchase prices by city, district, or postcode over time.
- **Market research**: compare price per m², living space, and features across neighbourhoods and property types.
- **Investment analysis**: use purchase prices, side costs (land transfer tax, notary, broker commission), and price-comparison data to evaluate deals.
- **Agent and developer tracking**: see which agencies and developers are active in a region and monitor new-build projects.
- **Dataset building**: feed structured listing data into analytics, dashboards, or ML pipelines.

### How to use ImmobilienScout24 Scraper

1. Open the actor on Apify.
2. Go to [immobilienscout24.de](https://www.immobilienscout24.de/), run a search with the filters you want, and copy the URL from your browser. You can also copy a single listing, project, or builder URL.
3. Paste one or more URLs into the **urls** field.
4. Set **maxRecords** to cap how many listings to collect (default `100`).
5. Click **Start** and let the scraper run.
6. Download the results in JSON, CSV, Excel, XML, or HTML Table.

#### Input parameters

| Input parameter | Description                                                                      | Required | Default value                                                                         |
| --------------- | -------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------- |
| `urls`          | ImmobilienScout24 URLs to scrape (search, exposé, new-build project, or builder) | `true`   | `{ "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten" }` |
| `maxRecords`    | Maximum number of listings to scrape                                             | `false`  | `100`                                                                                 |

Instead of typing URLs one by one, you can also load them from a CSV file or a Google Sheet.
The URLs must be in the first column.

#### Supported input URLs

ImmobilienScout24 Scraper accepts four kinds of URLs:

- **Search URL**: collects every listing in the results (and paginates):
  - `https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten`
  - `https://www.immobilienscout24.de/Suche/de/bayern/muenchen/haus-kaufen`
  - `https://www.immobilienscout24.de/en/search/de/hamburg/hamburg/apartments-for-rent`
  - Pattern: `https://www.immobilienscout24.de/Suche/de/<state>/<city>/<property-type>?<filters>`.
  - Common property types: `wohnung-mieten`, `wohnung-kaufen`, `haus-mieten`, `haus-kaufen`, `wg-zimmer`, `wohnen-auf-zeit`, `grundstueck-kaufen`, `garage-mieten`, `buero-mieten`, `buero-kaufen`, `einzelhandel-mieten`, `anlageimmobilie`, `neubauwohnung-kaufen`, `haus-bauen`, and their English equivalents (`apartments-for-rent`, `houses-for-sale`, …).
  - Search filters from the website (price, living space, rooms, features such as balcony or garden, …) and the chosen sort order are applied.
- **Single listing (exposé) URL**: collects one listing's full detail record:
  - `https://www.immobilienscout24.de/expose/123456789`
  - Pattern: `https://www.immobilienscout24.de/expose/<id>`.
- **New-build project URL**: collects every unit (apartment or house) in the development:
  - Pattern: `https://www.immobilienscout24.de/neubau/<developer>/<project>/<id>.html`.
  - Some projects are only contact forms and have no units attached. These return no records.
- **House-builder catalog URL**: collects every house model a builder offers:
  - `https://www.immobilienscout24.de/bauen/living-haus.html`
  - Pattern: `https://www.immobilienscout24.de/bauen/<builder>.html`.

You can mix all URL types in the same `urls` list. Each output record's `inputUrl` field is set to
the original URL you supplied that produced it.

### Examples

#### Input

Scrape 20 rental apartments in Berlin:

```json
{
  "urls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"],
  "maxRecords": 20
}
```

Scrape a single listing:

```json
{
  "urls": ["https://www.immobilienscout24.de/expose/123456789"],
  "maxRecords": 1
}
```

#### Output

> The example below is illustrative. Long arrays have been shortened, and personal contact
> details have been anonymized.

```json
{
  "id": "123456789",
  "url": "https://www.immobilienscout24.de/expose/123456789",
  "title": "Klein, aber fein: Kompakte 2-Zimmerwohnung mit Balkon",
  "description": "Helle 2-Zimmer-Wohnung in einem 2022 fertiggestellten Neubau mit Aufzug und Tiefgarage.\n\nDie Wohnung verfügt über eine moderne Einbauküche, ein Tageslichtbad und einen Balkon mit Blick ins Grüne. …",
  "realEstateType": "apartmentrent",
  "commercializationType": "RENT",
  "publicationState": "active",
  "price": 1444,
  "baseRent": 1444,
  "totalRent": 1664,
  "currency": "EUR",
  "livingSpace": 47.48,
  "numberOfRooms": 2,
  "images": [
    "https://pictures.immobilienscout24.de/listings/00000000-0000-0000-0000-000000000001-0000000001.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
    "https://pictures.immobilienscout24.de/listings/00000000-0000-0000-0000-000000000002-0000000002.jpg/ORIG/resize/1500x1000/format/webp/quality/80"
  ],
  "videos": [],
  "references": ["https://my.matterport.com/show/?m=XXXXXXXXXXX"],
  "thumbnailUrl": "https://pictures.immobilienscout24.de/listings/00000000-0000-0000-0000-000000000001-0000000001.jpg/ORIG/resize/800x600/format/webp/quality/80",
  "imageCount": 14,
  "datePosted": null,
  "location": {
    "street": "Musterstraße",
    "houseNumber": "12",
    "city": "Berlin",
    "district": "Mitte",
    "zip": "10115",
    "country": "Deutschland",
    "geoCode": null,
    "isFullAddress": true,
    "lat": 52.52,
    "lng": 13.405
  },
  "attributes": [
    { "label": "Wohnungstyp", "value": "Etagenwohnung" },
    { "label": "Etage", "value": "4 von 8" },
    { "label": "Schlafzimmer", "value": "1" },
    { "label": "Badezimmer", "value": "1" },
    { "label": "Bezugsfrei ab", "value": "ab sofort" },
    { "label": "Garage/Stellplatz", "value": "Tiefgarage" },
    { "label": "Balkon/Terrasse", "value": "Ja" }
  ],
  "estimatedExpenses": [
    { "name": "Internet", "grouping": "Internet", "price": 32.5 },
    { "name": "Strom", "grouping": "Strom", "price": 52.5 },
    { "name": "Hausratversicherung", "grouping": "Versicherungen", "price": 8 }
  ],
  "seller": {
    "name": "Example Immobilien GmbH",
    "logoUrl": "https://pictures.immobilienscout24.de/usercontent/00000000-0000-0000-0000-000000000000.JPG",
    "websiteUrl": null,
    "contactPersonName": "Frau Erika Mustermann",
    "phoneNumbers": [],
    "hasEmail": true,
    "realtorId": null,
    "address": "Musterstraße 1\n10707 Berlin",
    "isVerified": true,
    "rating": null,
    "reviewCount": null
  },
  "priceInfo": {
    "pricePerSqm": 30.41,
    "minPricePerSqm": 9.7,
    "maxPricePerSqm": 49,
    "minSimilarPricePerSqm": 14.5,
    "maxSimilarPricePerSqm": 32.7,
    "priceIndicatorPosition": 0.53,
    "offersWithLowerPricePercent": 15.9,
    "offersWithSimilarPricePercent": 68.2,
    "offersWithHigherPricePercent": 15.9,
    "sourceUrl": "https://www.immobilienscout24.de/immobilienbewertung/fragen-und-antworten/preis-lageinformationen-wohnung-miete.html"
  },
  "financeCosts": null,
  "services": [
    {
      "id": "home-entertainment",
      "chipName": "Home Entertainment",
      "title": "MagentaTV MegaStream",
      "company": "Telekom Deutschland GmbH",
      "ctaText": "Hier informieren",
      "ctaLink": "https://rebrand.ly/services-miete-web",
      "contentListItems": []
    }
  ],
  "inputUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"
}
```

### Output formats

Results are stored in an Apify dataset (`ad_details`). After a run finishes you can download
the data as **JSON, CSV, Excel, XML, or HTML Table**, or pull it via the Apify API. The
dataset's `overview` view shows `id`, `title`, `price`, `currency`, and `url`.

### ❓ FAQ

#### Do I need proxies to scrape ImmobilienScout24?

No. The actor is preconfigured to use the Apify residential proxy, so you don't need
to set anything up.

#### Do I need to write code?

No. ImmobilienScout24 Scraper is a no-code tool: paste your URLs, set `maxRecords`, and run.

#### Can I scrape a single listing or a whole search?

Both. Provide a search URL to collect many listings, or an exposé URL to collect one listing's
full record. You can mix search, exposé, new-build project, and builder URLs in the same `urls`
list.

#### Can I scrape all units of a new-build project?

Yes. Paste the project's `/neubau/.../<id>.html` URL and the scraper collects every apartment or
house listed in the development, up to `maxRecords`. Each unit is a full listing record.

#### Are my search filters applied?

Yes. Filters you set on the website (price, living space, rooms, features, and so on) and the
chosen sort order are carried over from the search URL.

#### How many listings can I scrape?

Use `maxRecords` to set the cap (default `100`). Increase it to collect more results across
paginated searches.

#### Is it legal to scrape ImmobilienScout24?

Scraping publicly available data is generally permitted, but you are responsible for how you use
it. Listings can include personal data such as contact-person names and phone numbers. Don't
collect or store more of it than your use case requires, and comply with applicable laws
(including the GDPR) and ImmobilienScout24's terms. Consult legal counsel if you're unsure.

#### What export formats are available?

JSON, CSV, Excel, XML, and HTML Table, plus programmatic access via the Apify API.

### Support

For custom or simplified outputs, or to report a bug, contact the developer at
**support (at) getmediumdata.com** or open an issue.

# Changelog

This Actor's version history is a separate document: https://apify.com/ivanvs/immobilienscout-scraper/changelog.md

# Actor input Schema

## `maxRecords` (type: `integer`):

Maximum number of records to be scraped

## `urls` (type: `array`):

List of URLs from ImmobilienScout24 (https://www.immobilienscout24.de/) that needs to be scraped

## Actor input object example

```json
{
  "maxRecords": 10,
  "urls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search"
    }
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "maxRecords": 10,
    "urls": [
        {
            "url": "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("ivanvs/immobilienscout-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 = {
    "maxRecords": 10,
    "urls": [{ "url": "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("ivanvs/immobilienscout-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 '{
  "maxRecords": 10,
  "urls": [
    {
      "url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?enteredFrom=one_step_search"
    }
  ]
}' |
apify call ivanvs/immobilienscout-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ivanvs/immobilienscout-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/Quoaxl3u0GKomr2m5/builds/JdfKUtCdGDdNlihJf/openapi.json
