# ImmobilienScout24 Scraper - ImmoScout24 German Real Estate (`kalilfagundes.w/immoscout24-scraper`) Actor

\[Limited Launch Offer $1/1K] ImmoScout24 scraper: rent and buy listings by city, district or URL with price, size, rooms, coordinates and full details. No result limit. No login.

- **URL**: https://apify.com/kalilfagundes.w/immoscout24-scraper.md
- **Developed by:** [Scrape With Me](https://apify.com/kalilfagundes.w) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 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 real estate listings from ImmobilienScout24, no result limit

Scrape **ImmobilienScout24** by city, district or state, or paste a search URL. You get one row per listing: price,
living space, rooms, address with postal code, city and coordinates, publication age, energy class, images and the link.
Switch on *Full details* and every row also carries the description, equipment, location text, costs, building and energy
data, all image links and the provider (company, phones, address). It covers apartments and houses for rent and for sale,
flat-share rooms, garages, investment properties and commercial space. No login, no API key, no browser, and **no
result limit**: a whole city or state comes back in one run.

### Why this ImmoScout24 scraper

- **Everything, not the first 1,000.** The scraper reads ImmobilienScout24's own JSON interface page by page (50 listings per
  request). All 4,400 Berlin rentals take about 2 minutes; a whole state with 20,000 listings is one run.
- **Place names are enough.** Type `Berlin`, `Hamburg Altona` or `Bayern`; the region is looked up the way the app does it.
  Search URLs from your browser work too.
- **All listing types.** Apartments and houses to rent or buy, flat-share rooms, garages, investment properties, commercial.
- **Price, size and rooms as numbers**, plus latitude and longitude for maps and distance calculations.
- **Optional full details.** Description, equipment, location text, total rent, additional costs, deposit, construction year,
  heating, energy data, floor, availability, all images and the provider's contact. Charged only for the listings you save.
- **Privacy built in.** For private sellers the name and phone are never saved, only company listings carry contact data.
- **Cheap and fast.** Under 1 KB of traffic per listing, direct requests (no proxy bill); the scraper switches to a residential
  proxy by itself only if ImmobilienScout24 starts refusing requests.

### Use cases: German property market data

- **Investors and analysts**: asking rents and prices per square metre by city, district or postcode.
- **Agents and brokers**: competitor listings, provider names and stock in a region.
- **Proptech and apps**: a fresh listing feed for a map, an alert or a valuation model.
- **Researchers and journalists**: rent levels, new-build share, furnished flats and energy classes across states.
- **Relocation and corporate housing**: all flats under a budget near an office, exported to Excel every morning.

### Input example

```json
{
  "regions": ["Berlin", "Hamburg"],
  "listingTypes": ["apartment_rent"],
  "priceTo": 1500,
  "roomsFrom": 2,
  "maxResultsPerSearch": 500,
  "includeDetails": false
}
```

Search URLs work too: `{"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1200"]}`.

| Field | What it does |
|---|---|
| `regions` | Cities, districts or states by name (`München`, `Hamburg Altona`, `Bayern`) or a geo path (`/de/bayern/muenchen`) |
| `listingTypes` | `apartment_rent`, `apartment_buy`, `house_rent`, `house_buy`, `flatshare_room`, `garage_rent`, `garage_buy`, `investment`, `industry`, `trade_site` |
| `searchUrls` | ImmoScout24 city, district or state search pages (radius and map searches are not supported) |
| `priceFrom` / `priceTo` | Rent (total rent) or purchase price in EUR |
| `roomsFrom` / `roomsTo`, `livingSpaceFrom` / `livingSpaceTo` | Rooms and square metres |
| `extraParameters` | More ImmoScout24 filters as key-value pairs, e.g. `{"constructionyear": "2015-"}` |
| `maxResultsPerSearch` | Listings per region and listing type (0 = all) |
| `maxItems` | Cap for the whole run |
| `includeDetails` | Open every saved listing for description, costs, energy data, images and provider |
| `proxyConfiguration` | Default: none. A residential proxy is used automatically if the site refuses requests |

### Output example

```json
{
  "listingId": "170926900",
  "url": "https://www.immobilienscout24.de/expose/170926900",
  "title": "Großes & möbliertes all-inclusive City-Apartment zentral in Eimsbüttel",
  "realEstateType": "apartmentrent",
  "price": 1104,
  "currency": "EUR",
  "livingSpaceM2": 52.24,
  "rooms": 2,
  "address": "Oberstraße 14a-c, 20144 Hamburg, Harvestehude",
  "postalCode": "20144",
  "city": "Hamburg",
  "latitude": 53.57673,
  "longitude": 9.97903,
  "published": "vor einem Monat",
  "isPrivate": false,
  "images": ["https://pictures.immobilienscout24.de/listings/…/ORIG/resize/800x600>/format/webp/quality/80"],
  "hasDetails": true,
  "additionalCosts": 396.12,
  "totalRent": 1500,
  "pricePerM2": 21.13,
  "constructionYear": 1955,
  "floor": "10 von 14",
  "heatingType": "Fußbodenheizung",
  "condition": "Gepflegt",
  "availableFrom": "01.11.2026",
  "bedrooms": 1,
  "bathrooms": 1,
  "energyCertificate": "liegt zur Besichtigung vor",
  "description": "…",
  "equipment": "…",
  "locationDescription": "…",
  "attributes": { "Wohnungstyp": "Etagenwohnung", "Einbauküche": true, "Baujahr": "1955" },
  "detailImageCount": 15,
  "contact": { "company": "Placed GmbH", "name": "DIE ZIMMEREI", "profileUrl": "https://www.immobilienscout24.de/anbieter/…" },
  "scrapedAt": "2026-10-15T16:45:43Z"
}
```

Rows without *Full details* stop after `images`/`realtorLogoUrl`. The **OUTPUT** record lists, per search, how many results
ImmobilienScout24 reports, how many were saved and how many pages were read; **INPUT_STATUS** says whether each region or
URL was found, empty or could not be checked.

### Run it on a schedule and connect it to your tools

**Schedule:** in Apify Console open *Schedules → Create*, pick this actor and your input, and run it every morning to watch
new listings and rents in your region. Each run returns the full, current result set as a new dataset.

**Integrations** (Actor → *Integrations* tab, no code):

- **Google Sheets** — append every run's listings to a sheet.
- **Make, Zapier, n8n** — start the actor from a scenario/zap/workflow and use the listings in the next steps.
- **Webhook** — get a POST to your endpoint when a run succeeds, then download the dataset.
- **Slack / email** — notify your team when a scheduled run finishes.

**AI agents (MCP)** — Claude, ChatGPT, Cursor, VS Code or any MCP client can run it as a tool: add the Apify MCP
server `https://mcp.apify.com?actors=kalilfagundes.w/immoscout24-scraper` (sign in with your Apify account) and ask for the data in
plain language. The agent fills the input from the input schema and reads the dataset back.

**API** — call it from your code (`pip install apify-client` / `npm i apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kalilfagundes.w/immoscout24-scraper").call(run_input={
    "regions": ["Berlin"],
    "listingTypes": ["apartment_rent"],
    "priceTo": 1500,
    "maxResultsPerSearch": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["livingSpaceM2"], item["city"], item["url"])
```

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('kalilfagundes.w/immoscout24-scraper').call({
  regions: ['Berlin'],
  listingTypes: ['apartment_rent'],
  priceTo: 1500,
  maxResultsPerSearch: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Pricing

Pay per result, platform usage included:

| Event | Price |
|---|---|
| Listing saved | **$1.00 per 1,000 listings** |
| Full details of a listing (only with `includeDetails`) | +$1.50 per 1,000 listings |
| Run start | $0.002 |

Example: all 4,400 Berlin rentals ≈ $4.40; with full details ≈ $11. Apify subscribers get tier discounts automatically. Set
`maxItems` to cap the cost of a run.

### FAQ and limits

- **Does it need an ImmobilienScout24 login or API key?** No.
- **Is there a limit of results per search?** No. The website stops early, this interface pages through every result.
- **Which URLs work?** City, district and state searches such as `…/Suche/de/berlin/berlin/wohnung-mieten`. Radius and map
  searches are not supported: use a region name instead.
- **Postcodes?** Not as a region. Search the city or district and filter by `postalCode` in the output.
- **Contact data:** only for listings by companies. The name and phone of private sellers are not collected.
- **Price per square metre** is `pricePerM2` in details; without details compute `price / livingSpaceM2`.
- **Fair use:** ImmobilienScout24 may restrict automated access in its terms. Use the data in line with them and with the
  GDPR; keep schedules reasonable.

### Auf Deutsch

Dieser Actor liest ImmobilienScout24-Angebote nach Stadt, Stadtteil oder Bundesland aus: Mieten und Kaufen von Wohnungen und
Häusern, WG-Zimmer, Garagen, Anlageobjekte und Gewerbe. Ergebnis: Preis, Wohnfläche, Zimmer, Adresse mit Koordinaten, Bilder
und Link; mit „Full details“ zusätzlich Beschreibung, Ausstattung, Kosten, Energiedaten und Anbieter. Ohne Login, ohne
Ergebnislimit, Export als Excel, CSV oder JSON. Für private Anbieter werden Name und Telefonnummer nicht gespeichert.

### Related actors

- [Zap Imóveis, VivaReal & QuintoAndar Scraper - Imóveis Brasil](https://apify.com/kalilfagundes.w/imoveis-brasil-scraper)
- [Poshmark Sold Listings Scraper - Mercari, Depop & Grailed](https://apify.com/kalilfagundes.w/resale-sold-comps-scraper)
- [Meta Threads Scraper - Posts, Replies, Profiles & Hashtags](https://apify.com/kalilfagundes.w/threads-scraper)

### Feedback

Found a missing field or a region that returns nothing? Open an issue on the Actor page and it will be looked at.

# Actor input Schema

## `regions` (type: `array`):

One per line: a city, district or state such as "Berlin", "München", "Hamburg Altona", "Bayern", or a geo path like /de/bayern/muenchen. Each region is searched for every listing type below.

## `listingTypes` (type: `array`):

What to search for. Default: apartments for rent.

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

Optional. Search pages copied from your browser, e.g. https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1200. City, district and state searches are supported (not radius or map searches). Used together with the regions above.

## `maxResultsPerSearch` (type: `integer`):

Stop after this many listings for each region and listing type (0 = all of them). The API pages through every result: a big city can have thousands.

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

Hard cap for the whole run (0 = no cap). Keeps the cost predictable.

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

Open every listing for its description, equipment, location text, costs, building and energy data, all images and the provider (company, phones, address). Charged as an extra event per listing. Private sellers' names and phones are left out.

## `priceFrom` (type: `number`):

Minimum rent (total rent for rentals) or purchase price in EUR.

## `priceTo` (type: `number`):

Maximum rent or purchase price in EUR.

## `roomsFrom` (type: `number`):

Minimum number of rooms (2.5 is allowed).

## `roomsTo` (type: `number`):

Maximum number of rooms.

## `livingSpaceFrom` (type: `number`):

Minimum living space in square metres.

## `livingSpaceTo` (type: `number`):

Maximum living space in square metres.

## `extraParameters` (type: `object`):

Advanced: more ImmoScout24 filter parameters as key-value pairs, e.g. {"constructionyear": "2015-", "equipment": "balcony"}. Unknown parameters make the search fail with a clear message.

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

How many result pages (or detail pages) are fetched at the same time. Keep it low: ImmoScout24 blocks heavy traffic.

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

Default: no proxy, fastest and cheapest. If ImmobilienScout24 refuses requests the scraper switches to Apify residential proxies by itself. Choose a proxy group to use it from the start.

## Actor input object example

```json
{
  "regions": [
    "Berlin"
  ],
  "listingTypes": [
    "apartment_rent"
  ],
  "maxResultsPerSearch": 50,
  "maxItems": 1000,
  "includeDetails": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

OUTPUT record: per search the number of results ImmoScout24 reports, listings saved and pages read.

# 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 = {
    "regions": [
        "Berlin"
    ],
    "maxResultsPerSearch": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kalilfagundes.w/immoscout24-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 = {
    "regions": ["Berlin"],
    "maxResultsPerSearch": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("kalilfagundes.w/immoscout24-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 '{
  "regions": [
    "Berlin"
  ],
  "maxResultsPerSearch": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call kalilfagundes.w/immoscout24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kalilfagundes.w/immoscout24-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/b2gOwcSaxd7LZnniT/builds/6aWuX6DITxR5ucpzA/openapi.json
