# ImmoScout24 Scraper: German Rentals and Homes for Sale (`themineworks/immobilienscout24-scraper`) Actor

Scrape immobilienscout24.de listings to rent or buy by German city or ImmoScout24 search link. Each row: rent or price, rooms, living space, address, coordinates, energy class, agency and its published phone, photos, description, costs, year built. Private sellers never get a phone. No login.

- **URL**: https://apify.com/themineworks/immobilienscout24-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Real estate, Lead generation, MCP servers
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.89 / 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

## ImmoScout24 Scraper: German Rentals and Homes for Sale

[![5,136 ImmoScout24 listings in 72 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/immobilienscout24-scraper-hero.png)](https://console.apify.com/actors/oDWN9yG2eSXOEpiNP/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Whole cities in about a minute.** Our proof run returned **every apartment to rent in Berlin and Hamburg, 5,136 listings, in 72 seconds**, each with rent, rooms, living space, address, postcode, district, energy class and photo. It reads ImmoScout24's own app data, so there is no bot check to fight, no browser and no ImmoScout24 account.
- **The agency and the phone it publishes.** With the listing page on (the default) every row adds the agency, the contact person, the phone number the agency publishes on the listing or in its imprint, the description, warm rent with service and heating costs, or commission and Hausgeld for sales, bedrooms, bathrooms, floor, year built, heating and the energy certificate. Private sellers get their name as shown and never a phone number.
- **You pay only for listings you get.** One charge per listing saved to your dataset, plus a flat start fee per run. Places that do not resolve cost nothing, a listing found twice is delivered once, and on a schedule "Only listings not delivered before" returns and charges only new ones.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/oDWN9yG2eSXOEpiNP/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Real estate family:** [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [99acres Scraper](https://apify.com/themineworks/99acres-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [MagicBricks Scraper](https://apify.com/themineworks/magicbricks-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this input and press Start. It returns the 20 newest apartments to rent in Berlin, each with the agency, its phone and the full description, in about 6 seconds:

```json
{
  "locations": ["Berlin"],
  "listingType": "rent",
  "maxListingsPerSearch": 20
}
```

You can tell the actor what to read in two plain forms, and mix them in one run:

- **Places in Germany** (`locations`): a city (`Berlin`, `München`, `Köln`), or a district or quarter as ImmoScout24 names it (`München Bogenhausen`, `Berlin Kreuzberg`, `Hamburg Altona-Altstadt`), looked up with ImmoScout24's own place finder; the run summary names the place that was used. Each place is searched with the filters of the input: `listingType`, `propertyType`, `minPrice`, `maxPrice`, `minRooms`, `maxRooms`, `minSize`, `maxSize` and `sortBy`.
- **ImmoScout24 links** (`startUrls`): search pages from immobilienscout24.de such as `https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1200.0&numberofrooms=2.0-`, read with every filter in the link, and listing pages such as `https://www.immobilienscout24.de/expose/168986451`.

Apify's free plan includes $5 of credit every month, which covers about 3,200 results at this actor's price.

#### Copy to your AI assistant

```text
themineworks/immobilienscout24-scraper on Apify. Returns public ImmoScout24 (immobilienscout24.de, Germany) listings to rent or to buy, from German place names with filters or from ImmoScout24 search links, plus single listing links, one row per listing with listing_id, url, title (original German), listing_type, property_type, real_estate_type, price (cold rent per month or purchase price, EUR), price_label, price_per_sqm, size_sqm, rooms, display_address, street when published, postcode, city, district, latitude, longitude, energy_rating, published_text, listed_at_approx, is_private_seller, images; with includeDetails (on by default) also agency_name, agent_name, agency_phone (never for private sellers, who get seller_name as shown), agency_address, agency_rating, description, location_description, total_rent, service_charge, heating_costs, deposit, commission, maintenance_fee, bedrooms, bathrooms, floor, available_from, construction_year, condition, heating_type, energy_demand, features and floorplans. Call ApifyClient("TOKEN").actor("themineworks/immobilienscout24-scraper").call(run_input={"locations": ["Hamburg"], "listingType": "rent", "maxListingsPerSearch": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: nothing (an empty input searches Berlin); normally locations (German places) and/or startUrls (immobilienscout24.de search or expose links). Optional: listingType ("rent" or "sale", default rent), propertyType ("apartment" or "house", default apartment), minPrice, maxPrice (EUR, cold rent per month for rents), minRooms, maxRooms (2.5 allowed), minSize, maxSize (m2), sortBy ("newest", "price_low", "price_high", "size_high"), maxListingsPerSearch (20 to 5,000, default 100), includeDetails (default true), onlyNewListings (default false). Skip rows that have "_type". Full spec: GET https://api.apify.com/v2/acts/themineworks~immobilienscout24-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Up to 36 fields from the search, up to 63 with the listing page**: price as a number and as shown, price per m2, living space, rooms, address with street when published, postcode, city, district, coordinates, energy class, how long the listing has been online and an approximate date, private or business advertiser, new build, project, listing size (S to XL), photos and the agency logo; the listing page adds agency, contact person, phone, address, rating and profile, original title, description, location text, warm rent, service and heating costs, deposit, commission, Hausgeld, bedrooms, bathrooms, floor, usable area, plot area, vacancy date, year built, last modernisation, condition, interior quality, heating, energy sources, energy demand, ticked features (balcony, lift, fitted kitchen, cellar) and floor plans.
- **Deep searches**: up to 5,000 listings per place or link, 50 a page. Our proof run read all 86 pages of Berlin's 4,262 rentals.
- **Filters as on the site**: to rent or to buy, apartment or house, price, rooms (German count, 2.5 allowed), living space and four sort orders. Any other filter you set on immobilienscout24.de (balcony, year built, energy class) comes in through a pasted search link.
- **Privacy by design**: a private seller's phone number is never returned, not even when ImmoScout24 shows it; the row says `is_private_seller: true` and gives the name exactly as shown.
- **Only new listings for schedules**: remembers up to 50,000 listings per input in a key-value store in your account. With the newest first sort a repeat run stops at the first page with nothing new.
- **No browser, no login, no bot wall**: plain requests to the mobile app data ImmoScout24's own iPhone and Android apps read, over Apify's datacenter proxy, which the run includes. Memory 256 MB.

### How to use it

#### Basic: one city, to rent

```json
{
  "locations": ["Hamburg"],
  "listingType": "rent",
  "maxListingsPerSearch": 100
}
```

#### Several cities at once

Each place is its own search of up to `maxListingsPerSearch` listings, and three run at a time. This is the input of our 5,136 listing proof run (search fields only, so it runs fast):

```json
{
  "locations": ["Berlin", "Hamburg"],
  "listingType": "rent",
  "maxListingsPerSearch": 5000,
  "includeDetails": false
}
```

#### Relocation and rental services: new flats every hour

Watch the districts your clients want and get only flats listed since the last run, with the agency phone and warm rent on each row. Save the input as a task and add an hourly schedule in Apify Console (Schedules, Add schedule). A quiet hour reads one page per district and costs the start fee.

```json
{
  "locations": ["Berlin Prenzlauer Berg", "Berlin Friedrichshain", "Berlin Kreuzberg"],
  "listingType": "rent",
  "maxPrice": 1600,
  "minRooms": 2,
  "sortBy": "newest",
  "maxListingsPerSearch": 100,
  "onlyNewListings": true
}
```

#### Investors and agents: apartments for sale with the full listing

Price per m2 as ImmoScout24 shows it, Hausgeld, commission, year built, condition and energy certificate for a shortlist.

```json
{
  "locations": ["Leipzig", "Dresden"],
  "listingType": "sale",
  "propertyType": "apartment",
  "maxPrice": 300000,
  "minSize": 50,
  "maxListingsPerSearch": 200
}
```

#### Any filter from the website

Set the filters on immobilienscout24.de (balcony, year built, energy class and so on), copy the link from the address bar and paste it. Filters in the link are kept.

```json
{
  "startUrls": [
    "https://www.immobilienscout24.de/Suche/de/bayern/muenchen/wohnung-kaufen?price=-600000.0&numberofrooms=2.0-",
    "https://www.immobilienscout24.de/expose/168986451"
  ],
  "maxListingsPerSearch": 300
}
```

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `locations` | array of strings | none (prefilled with `Berlin`) | Places in Germany: city, district or quarter. When places and links are both left out, the run searches Berlin. |
| `startUrls` | array of strings | empty | immobilienscout24.de search links (filters in the link are kept) and listing (expose) links. |
| `listingType` | string | `rent` | `rent` or `sale`, for places. |
| `propertyType` | string | `apartment` | `apartment` (Wohnung) or `house` (Haus), for places. |
| `minPrice` | integer | none | Lowest price in EUR; for rents the cold rent per month. |
| `maxPrice` | integer | none | Highest price in EUR; for rents the cold rent per month. |
| `minRooms` | number | none | Fewest rooms (German count, 2.5 allowed). |
| `maxRooms` | number | none | Most rooms. |
| `minSize` | integer | none | Smallest living space in m2. |
| `maxSize` | integer | none | Largest living space in m2. |
| `sortBy` | string | `newest` | `newest`, `price_low`, `price_high` or `size_high`. |
| `maxListingsPerSearch` | integer | 100 | Listings per place or search link, 20 to 5,000. |
| `includeDetails` | boolean | `true` | Read each listing page for the agency, phone, description and costs, at the same price per listing. |
| `onlyNewListings` | boolean | `false` | Skip, and do not charge for, listings an earlier run with the same input delivered. |

The filters apply to places only; a search link keeps its own. Only immobilienscout24.de (Germany) is covered; links to the Austrian and Swiss sites are skipped with a note in the log.

### What data do you get?

One row per listing. A field with no value is left out of that row rather than sent empty.

- **The listing**: `listing_id` (the Scout-ID), `url`, `title` (the advertiser's original German title), `listing_type` (rent or sale), `property_type` (apartment, house), `real_estate_type`, `property_subtype`, `listing_tier`, `is_new_build`, `is_project`, `tags`, `images`, `image_count`, `floorplans`, `has_video`.
- **Price**: `price` (cold rent per month for rents, purchase price for sales), `currency`, `price_label`, `price_kind`, `price_per_sqm`; with the listing page `total_rent` (warm rent), `service_charge`, `heating_costs`, `deposit`, `commission`, `maintenance_fee` (Hausgeld).
- **Size and rooms**: `size_sqm` (living space), `rooms`; with the listing page `bedrooms`, `bathrooms`, `usable_area_sqm`, `plot_area_sqm`, `floor`, `total_floors`.
- **Where**: `display_address`, `address_hidden`, `street` (when the advertiser publishes it), `postcode`, `city`, `district`, `latitude`, `longitude`, and with the listing page `state`.
- **When**: `published_text` (how long the listing has been online, as ImmoScout24 says it, for example vor 2 Stunden), `listed_at_approx` (an approximate ISO time worked out from it), and with the listing page `available_from`.
- **Building and energy**: `energy_rating` (A+ to H); with the listing page `construction_year`, `last_modernisation`, `condition`, `interior_quality`, `heating_type`, `energy_sources`, `energy_certificate_type`, `energy_certificate`, `energy_demand`, `parking`, `features` (balcony, lift, fitted kitchen, cellar and more).
- **The advertiser**: `is_private_seller`, `agency_logo`; with the listing page `agency_name`, `agent_name`, `agency_phone` (the number the agency publishes on the listing, or its imprint phone when the listing shows none), `agency_address`, `agency_rating`, `agency_profile_url`, and for private sellers `seller_name` exactly as shown and no phone.
- **Text** (listing page): `description`, `location_description`, `equipment_description`, `other_notes`.
- **Where the row came from**: `details_included`, `rank`, `search_input`, `search_url`, `scraped_at`.

#### Stable fields for automations

These fields were present in every row of our proof runs (5,257 rows, with and without the listing page), and their names will not change:

| Field | What it holds |
|---|---|
| `listing_id` | ImmoScout24's Scout-ID, stable across runs; use it to dedupe |
| `url` | Link to the listing |
| `title` | Listing title as the advertiser wrote it |
| `listing_type` | `rent` or `sale` |
| `property_type` | `apartment` or `house` |
| `real_estate_type` | ImmoScout24's own type, for example apartmentrent |
| `price_kind` | What `price` means: cold rent per month or purchase price |
| `currency` | EUR |
| `size_sqm` | Living space in m2 |
| `rooms` | Number of rooms |
| `display_address` | Address as published |
| `postcode` | Postcode |
| `city` | City |
| `district` | District or quarter |
| `is_private_seller` | True for private advertisers |

`price` and `price_label` were present in every row but one, a listing that showed no price in the search results. When an advertiser writes "On request", `price_label` says so and `price` is left out.

#### Output examples

Real rows from our proof runs on 6 October 2026, shortened: lists cut to their first items, long text cut with ..., and the advertiser's free-text notes left out.

**A rental from a place search, listing page off** (Berlin, `includeDetails: false`):

```json
{
  "listing_id": "171537045",
  "url": "https://www.immobilienscout24.de/expose/171537045",
  "title": "Familienfreundliche 4-Zimmer-Wohnung mit zwei Balkonen, EBK",
  "listing_type": "rent",
  "property_type": "apartment",
  "real_estate_type": "apartmentrent",
  "price": 1627,
  "currency": "EUR",
  "price_label": "1.627 €",
  "price_kind": "cold rent per month",
  "price_per_sqm": 18.08,
  "size_sqm": 90,
  "rooms": 4,
  "display_address": "Alte Kaulsdorfer Straße 25A, 12555 Berlin, Köpenick",
  "address_hidden": false,
  "street": "Alte Kaulsdorfer Straße 25A",
  "postcode": "12555",
  "city": "Berlin",
  "district": "Köpenick",
  "latitude": 52.45991,
  "longitude": 13.57922,
  "energy_rating": "B",
  "published_text": "vor 2 Stunden",
  "listed_at_approx": "2026-10-05T20:09:09.934Z",
  "is_private_seller": false,
  "is_new_build": false,
  "is_project": false,
  "listing_tier": "S",
  "tags": [],
  "images": [
    "https://pictures.immobilienscout24.de/listings/2a919505-b333-4c97-821f-4db044b12f95-2107236416.jpg/ORIG/legacy_thumbnail/1280x960/format/webp/quality/80"
  ],
  "image_count": 1,
  "agency_logo": "https://pictures.immobilienscout24.de/usercontent/8d5f23e8-bdd7-4870-8dd1-ed753dabf6df.JPG/ORIG/resize/300x200%3E/format/webp/quality/80",
  "details_included": false,
  "rank": 4,
  "search_input": "Berlin",
  "search_url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?sorting=-firstactivation",
  "scraped_at": "2026-10-05T22:09:09.934Z"
}
```

**An apartment for sale with the listing page** (München, the default; the advertiser shows postcode and district only):

```json
{
  "listing_id": "171528985",
  "url": "https://www.immobilienscout24.de/expose/171528985",
  "title": "2-Zimmer-Wohnung mit Südterrasse und ca. 33 qm Hobbybereich",
  "listing_type": "sale",
  "property_type": "apartment",
  "real_estate_type": "apartmentbuy",
  "price": 559000,
  "currency": "EUR",
  "price_label": "€559,000",
  "price_kind": "purchase price",
  "price_per_sqm": 7658,
  "size_sqm": 73,
  "rooms": 2,
  "display_address": "80689 Blumenau, München",
  "address_hidden": true,
  "postcode": "80689",
  "city": "München",
  "district": "Blumenau",
  "energy_rating": "F",
  "published_text": "vor 7 Stunden",
  "listed_at_approx": "2026-10-05T15:12:14.107Z",
  "is_private_seller": false,
  "is_new_build": false,
  "is_project": false,
  "listing_tier": "L",
  "tags": [],
  "images": [
    "https://pictures.immobilienscout24.de/listings/e98eb2ee-d682-451f-91aa-895790f18694-2107061993.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
    "https://pictures.immobilienscout24.de/listings/94e1ef70-d48c-4ad5-b7bd-d977c5d7f1b1-2107062001.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
    "..."
  ],
  "image_count": 8,
  "agency_logo": "https://pictures.immobilienscout24.de/usercontent/ee4efd7d-de41-48bf-a183-7f521d47f31c.PNG/ORIG/resize/300x200%3E/format/webp/quality/80",
  "details_included": true,
  "rank": 14,
  "search_input": "München",
  "search_url": "https://www.immobilienscout24.de/Suche/de/bayern/muenchen/wohnung-kaufen?sorting=-firstactivation",
  "scraped_at": "2026-10-05T22:12:14.107Z",
  "maintenance_fee": 390,
  "commission": "3,57 % inkl. ges. MwSt.",
  "property_subtype": "Ground floor",
  "usable_area_sqm": 33,
  "bedrooms": 1,
  "bathrooms": 2,
  "available_from": "sofort",
  "construction_year": 1974,
  "condition": "Well-kept",
  "interior_quality": "Normal",
  "heating_type": "Central heating",
  "energy_sources": "Oil",
  "energy_certificate_type": "Energy consumption",
  "energy_certificate": "available",
  "energy_demand": "174.8 kWh/(m²∙a)",
  "features": [
    "Balcony/Terrace",
    "Garden/Garden use",
    "Guest toilet",
    "Fitted kitchen"
  ],
  "description": "Diese 2 Zimmer-Terrassen-Wohnung befindet sich im Erdgeschoss eines kleinen vier Familienhauses in Kleinhadern und überzeugt durch eine großzügige Raumaufteilung, helle Räume sowie den direkten ...",
  "location_description": "Kleinhadern zählt zu den angenehm gewachsenen Wohnlagen im Münchner Südwesten. Das direkte Umfeld ist von Ein- und Zweifamilienhäusern, gepflegten Gärten und einer aufgelockerten Bebauung geprägt. ...",
  "state": "Bayern",
  "floorplans": [],
  "has_video": false,
  "agency_name": "GARANT Immobilien München GmbH",
  "agent_name": "GARANT Immobilien Büro München",
  "agency_phone": "089 7874790",
  "agency_address": "Kistlerhofstraße 170, 81379 München",
  "agency_rating": 3.8,
  "agency_profile_url": "https://www.immobilienscout24.de/anbieter/garant-immobilien-muenchen-gmbh/acb3ad68d921302a5fa9b8c"
}
```

**Another sale with the listing page** (Köln):

```json
{
  "listing_id": "171525405",
  "url": "https://www.immobilienscout24.de/expose/171525405",
  "title": "Erbbaurecht! Bezugsfreie, moderne, lichtdurchflutete 2-Zimmer ETW mit Balkon & TG-Stellplatz",
  "listing_type": "sale",
  "property_type": "apartment",
  "real_estate_type": "apartmentbuy",
  "price": 279000,
  "currency": "EUR",
  "price_label": "€279,000",
  "price_kind": "purchase price",
  "price_per_sqm": 4650,
  "size_sqm": 60,
  "rooms": 2,
  "display_address": "51107 Ostheim, Köln",
  "address_hidden": true,
  "postcode": "51107",
  "city": "Köln",
  "district": "Ostheim",
  "energy_rating": "B",
  "published_text": "vor 9 Stunden",
  "listed_at_approx": "2026-10-05T13:12:09.697Z",
  "is_private_seller": false,
  "is_new_build": false,
  "is_project": false,
  "listing_tier": "L",
  "tags": [],
  "images": [
    "https://pictures.immobilienscout24.de/listings/ee7c8524-77d6-4aeb-85e5-711bd8c6fbfb-2106977986.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
    "https://pictures.immobilienscout24.de/listings/1c17f806-dece-4edd-9575-1890cb4db957-2106977998.jpg/ORIG/resize/1500x1000/format/webp/quality/80",
    "..."
  ],
  "image_count": 14,
  "agency_logo": "https://pictures.immobilienscout24.de/usercontent/f0ddfd30-5681-460d-9509-88b51b1d6f2d.PNG/ORIG/resize/300x200%3E/format/webp/quality/80",
  "details_included": true,
  "rank": 9,
  "search_input": "Köln",
  "search_url": "https://www.immobilienscout24.de/Suche/de/nordrhein-westfalen/koeln/wohnung-kaufen?sorting=-firstactivation",
  "scraped_at": "2026-10-05T22:12:09.697Z",
  "commission": "3,57 %",
  "bedrooms": 1,
  "bathrooms": 1,
  "floor": "2 of 4",
  "available_from": "ab sofort",
  "construction_year": 2016,
  "condition": "Well-kept",
  "interior_quality": "Sophisticated",
  "heating_type": "District heating",
  "energy_sources": "District heat",
  "energy_certificate_type": "Energy consumption",
  "energy_certificate": "available",
  "energy_demand": "66 kWh/(m²∙a)",
  "parking": "Garage",
  "features": [
    "Elevator",
    "Balcony/Terrace",
    "Cellar"
  ],
  "description": "Objektnr: 1072951 \n\nDie 2-Zimmer-Eigentumswohnung befindet sich im 2. Obergeschoss einer modernen Wohnanlage im Waldbadviertel in Köln-Ostheim und bietet auf ...",
  "location_description": "Lage: Attraktive urbane Lage bietet große Vielfalt für Kulturbegeisterte und kurze Wege\nBildung und Betreuung: In max. 15 Fahrradminuten Schule und ...",
  "state": "Nordrhein-Westfalen",
  "floorplans": [
    "https://pictures.immobilienscout24.de/listings/a243666b-e264-489b-8ad7-534b7d3146d3-2106978081.png/ORIG/resize/1500x1000/format/webp/quality/80"
  ],
  "has_video": false,
  "agency_name": "McMakler GmbH",
  "agent_name": "Ihr McMakler Team",
  "agency_phone": "+49 800 5008002",
  "agency_address": "Am Postbahnhof 17, 10243 Berlin",
  "agency_rating": 4.1,
  "agency_profile_url": "https://www.immobilienscout24.de/anbieter/mcmakler-gmbh/aa688f5e65e420e5888efe4"
}
```

### Pricing

Pay per event: you pay for each listing delivered to your dataset, plus a flat $0.005 per run, whatever memory you choose. Prices by Apify plan:

| Event | Free plan | Bronze (Starter) | Silver (Scale) | Gold and above (Business) |
|---|---|---|---|---|
| Listing delivered (`listing-scraped`), per 1,000 | $1.49 | $1.29 | $1.09 | $0.89 |
| Run start (`run-start`), once per run | $0.005 | $0.005 | $0.005 | $0.005 |

The listing page (agency, phone, description, costs) comes at the same price per listing; there is no separate details or phone fee. It makes the run slower (one extra request per listing), not dearer.

What is never charged:

- Places ImmoScout24 has no location for, and searches with no listings.
- Pages ImmoScout24 refused, even after retries on a new connection.
- The same listing found by two places or links: the second copy is skipped.
- Listings an earlier run already delivered, when Only listings not delivered before is on.
- Listing links whose listing has been taken down.
- The information row in the dataset (it has a `_type` field).

Proxy traffic goes through Apify's datacenter proxy, which is included in the price; there is no separate proxy fee.

### FAQ

**What does this actor read?**
Public ImmoScout24 listings in Germany, logged out, the way any visitor of the ImmoScout24 app sees them: search results and each listing page. It asks ImmoScout24 for the same data its own iPhone and Android apps load. It does not use an ImmoScout24 account, a Plus membership or your cookies.

**How many listings can I get?**
Up to 5,000 per place or search link, 50 a page. Our proof run read every apartment to rent in Berlin (4,262) and Hamburg (874) in 72 seconds. For more, split a region into its cities or districts.

**Why does the website show a robot check but this works?**
The website asks datacenter visitors to prove they are human. The app data this actor reads is a different door to the same listings, and it answered every request of our proof runs except three, which were asked again on a new connection and then answered.

**Do I get the agency's phone number?**
Yes, with the listing page on (the default): the number the agency publishes on the listing, or the phone in its legal imprint when the listing shows none. In our details proof run 87% of rows had one; the rest were private sellers or agencies that publish no number. A private seller's phone number is never returned, even when ImmoScout24 shows it; the row says `is_private_seller: true` and gives the name exactly as shown in `seller_name`.

**Why do some listings have no street or coordinates?**
Advertisers can hide the exact address until you contact them. The row then keeps the postcode, city and district, sets `address_hidden: true` and leaves the street and coordinates out. In our Berlin and Hamburg run 79% of listings had a published address.

**What date is the listing from?**
ImmoScout24 shows how long a listing has been online ("vor 2 Stunden", "vor 3 Tagen", "vor einem Monat"). The actor keeps that text in `published_text` and works out an approximate time in `listed_at_approx`, exact to the hour for new listings and to the month for old ones.

**Is the price cold or warm rent?**
`price` is the cold rent per month (Kaltmiete) for rents, as ImmoScout24 lists it, and the purchase price for sales. With the listing page you also get `total_rent` (warm rent), `service_charge` and `heating_costs`.

**Do I need an ImmoScout24 account, cookies or a proxy of my own?**
No. Nothing to log in to and nothing to set up. The actor uses Apify's datacenter proxy, which the run includes.

**Can I run it on a schedule and get only new listings?**
Yes. Turn on `onlyNewListings`, keep `sortBy` at `newest` and add a schedule in Console (Schedules, Add schedule, hourly or daily). Each run delivers and charges only listings no earlier run with the same input delivered, and stops reading a search at the first page with nothing new. In our test the second run of the same Leipzig search skipped the 20 listings of the first and delivered 20 others.

**Does it cover Austria and Switzerland?**
No, only immobilienscout24.de (Germany). Links to immobilienscout24.at and immoscout24.ch are skipped with a note in the log.

**What formats can I export?**
JSON, CSV, Excel, XML, RSS and HTML from the dataset tab, or through the API. In CSV and Excel, lists such as `images` and `features` are spread over numbered columns (`images/0`, `images/1`).

**Can I use it from Claude, ChatGPT or Cursor (MCP)?**
Yes, through Apify's MCP server.

- Connector URL: https://mcp.apify.com/?tools=themineworks/immobilienscout24-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http immobilienscout24-scraper "https://mcp.apify.com/?tools=themineworks/immobilienscout24-scraper"`

**Is it legal to scrape ImmoScout24?**
The actor reads only public listings and returns what any visitor of the app can see, and it never returns a private seller's phone number. You are responsible for how you use the data, including ImmoScout24's terms and data protection law such as GDPR and CCPA.

### Integrations

- **Google Sheets**: add the Google Sheets integration to the actor or a schedule, and new listings land in a sheet after each run.
- **Make, Zapier and n8n**: use the Apify app to start a run and read the dataset, for example to send new flats in your districts to Slack, Telegram or a CRM.
- **Webhooks**: call your own endpoint when a run finishes.
- **API**: start runs and read results from any language; the Python and JavaScript clients are a few lines each.
- **MCP clients**: Claude, ChatGPT, Cursor, VS Code and Claude Code, as in the FAQ above.

### More from The Mine Works

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [99acres Scraper](https://apify.com/themineworks/99acres-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [MagicBricks Scraper](https://apify.com/themineworks/magicbricks-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Property Scraper](https://apify.com/themineworks/zillow-property-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Photos Scraper](https://apify.com/themineworks/zillow-photos?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Real Estate MCP](https://apify.com/themineworks/real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Airbnb Scraper](https://apify.com/themineworks/airbnb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Domain.com.au Property Scraper](https://apify.com/themineworks/domain-property-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [realestate.com.au Scraper](https://apify.com/themineworks/realestate-com-au-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a place, link or field that does not come through? Open an issue on the Issues tab and include the input you used; we answer there. For a new site or source, email dmineworks@gmail.com.

*ImmoScout24 Scraper turns German places and ImmoScout24 links into a clean table of rentals and homes for sale, with rents, sizes, addresses, energy classes and the agency's published phone, and a charge only for the listings you get.*

# Actor input Schema

## `locations` (type: `array`):

One place per line, as you would type it in the ImmoScout24 search box: a city (Berlin, München, Köln) or a district or quarter (München Bogenhausen, Berlin Kreuzberg, Hamburg Altona-Altstadt). Each place is searched with the filters below. When you give nothing at all the actor searches Berlin.

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

Optional. Search pages from immobilienscout24.de (https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1200.0\&numberofrooms=2.0-) are read with the filters already in the link; the filters below do not apply to them. Listing pages (https://www.immobilienscout24.de/expose/168986451) return that one listing in full. Germany only.

## `listingType` (type: `string`):

Which listings to search for each place.

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

Apartments or houses.

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

Optional. For rents this is the cold rent per month.

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

Optional. For rents this is the cold rent per month.

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

Optional. German room count (Zimmer): living room and bedrooms, without kitchen and bathroom. 2.5 is allowed.

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

Optional.

## `minSize` (type: `integer`):

Optional.

## `maxSize` (type: `integer`):

Optional.

## `sortBy` (type: `string`):

Order of the results. Newest first suits schedules with Only new listings.

## `maxListingsPerSearch` (type: `integer`):

How many listings to collect for each place or search link, 20 to 5,000. ImmoScout24 lists 50 a page.

## `includeDetails` (type: `boolean`):

On by default. Reads each listing's own page and adds the agency, contact person and the phone the agency publishes, the description, warm rent with service and heating costs and deposit, or commission and maintenance fee for sales, bedrooms, bathrooms, floor, year built, condition, heating, energy certificate, every photo and floor plans. Turn off for a faster run with the search card fields only. Same price per listing.

## `onlyNewListings` (type: `boolean`):

For schedules: skip, and do not charge for, listings an earlier run with the same places and links already delivered. Each run then returns only listings that are new to you.

## Actor input object example

```json
{
  "locations": [
    "Berlin"
  ],
  "listingType": "rent",
  "propertyType": "apartment",
  "sortBy": "newest",
  "maxListingsPerSearch": 100,
  "includeDetails": true,
  "onlyNewListings": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "locations": [
        "Berlin"
    ],
    "listingType": "rent",
    "maxListingsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/immobilienscout24-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 = {
    "locations": ["Berlin"],
    "listingType": "rent",
    "maxListingsPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/immobilienscout24-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 '{
  "locations": [
    "Berlin"
  ],
  "listingType": "rent",
  "maxListingsPerSearch": 100
}' |
apify call themineworks/immobilienscout24-scraper --silent --output-dataset

```

## MCP server setup

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