ImmoScout24 Scraper: Listings & Price Changes avatar

ImmoScout24 Scraper: Listings & Price Changes

Pricing

from $1.50 / 1,000 listings

Go to Apify Store
ImmoScout24 Scraper: Listings & Price Changes

ImmoScout24 Scraper: Listings & Price Changes

Scrape ImmobilienScout24 (ImmoScout24) real estate listings across Germany: rent and sale, with price, rent, size, rooms and address. Monitor a search for new listings, price changes and removed ones, and add details like Hausgeld, rental income and commission. Flats, houses, land, offices.

Pricing

from $1.50 / 1,000 listings

Rating

0.0

(0)

Developer

Kaleidoscope Labs

Kaleidoscope Labs

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

What can ImmoScout24 Scraper do?

Scrape ImmobilienScout24 listings from any search: the flats, houses, plots or offices it shows, as data, with prices, costs and details, and monitor the search for new listings, price changes and removed ones.

  • 🏠 Listings: the listings of the ImmobilienScout24 searches you paste, for rent and for sale, anywhere in Germany: price, total rent, price per m², living space, rooms, address, map point, publication dates, the listing company and pictures.
  • 📋 Details: costs (service charge, heating, deposit, Hausgeld, rental income, commission), availability, floor, bedrooms and bathrooms, condition, energy certificate, parking, features such as a lift or a WBS requirement, documents and the lister's descriptions.
  • 🔔 Monitor: run it on a schedule and each run stores only what is new since the last one, or also what changed (with the old and new value) and what was removed.
  • 🧾 Every record says what it lacks: details not asked for, a listing page gone, or a value in a form the Actor does not read is named in missing, with the reason; a field the listing leaves empty is left out.

Run it from Apify Console, through the API, on a schedule, or from an AI agent. The prefilled input stores 20 Berlin flats with their details in about 11 seconds, so you can see the output before a larger run.

You want to knowUseWhat it costs
What a search holds right nowPaste the search, What to store: All listings$1.50 per 1,000 listings, plus $0.008 per search
The costs, deposit and details of each listingInclude details ($)$2.50 per 1,000 listings instead
Only new listings, every morningWhat to store: New listings, and a daily schedule$0.008 per search a run, plus the new listings
Price drops and listings taken offlineWhat to store: New, changed and removed listingsthe same; removed listings are free

What data can you get from ImmobilienScout24?

DataEach listingWith Include details
ID, link, property type, title, the search it came from and its place in it✓✓
Published, created and last changed dates✓✓
Price, total rent, price per m², the site's price rating✓✓
Living space or net floor space, rooms, construction year, energy class✓✓
Balcony, fitted kitchen, garden, floor plan, commission, the listing's tags✓✓
Address (street and number only where the listing shows them), postcode, city, quarter, map point and whether it is exact✓✓
Private or company listing, the company's name, the listing's tier, a new-build project✓✓
Pictures: the original and a 1106×830 preview✓✓
Service charge, heating costs, deposit (as written, with the amount or number of rents), Hausgeld, rental income, parking price, commission✓
Available from (as written, with the date or "now"), floor of floors, bedrooms, bathrooms, usable space, plot area✓
Condition, interior quality, last refurbished, heating, energy sources, energy certificate (type, value, the building year it gives)✓
Features: cellar, lift, step-free, guest toilet, let, flat share, WBS required, listed building, swap flat✓
Whether the offer is still active (deactivated)✓
Land: development, building rules, recommended use, site coverage and floor area ratios✓
Short-term living: what is let, rental period, maximum persons, all-in rent✓
Documents (PDF floor plans, energy certificates) and links (virtual tours)✓
The lister's descriptions, as published✓
The contact person, company and addresswith Include contact

How often a detail is filled depends on the listing. Measured on 2026-10-28 with Include details on:

SearchDetailFilled
Berlin flats for rent, 2+ rooms, up to €1,500service charge20 of 20
Berlin flats for rent, 2+ rooms, up to €1,500available from17 of 20
Leipzig flats for sale up to €130,000Hausgeld24 of 50
Leipzig flats for sale up to €130,000rental income (the flat is let)11 of 50
Krefeld multi-family houses for salerental income23 of 50
Cologne building plotsdevelopment status20 of 30
Münster offices for rentservice charge24 of 50

How to use ImmoScout24 Scraper

  1. Create a free Apify account, or sign in.
  2. On www.immobilienscout24.de, run your search with its filters and sorting, then copy the address bar. It starts with https://www.immobilienscout24.de/Suche/.
  3. Open ImmoScout24 Scraper, paste the address into Search URLs (one per line), and choose how many listings to store from each search.
  4. Turn on Include details if you need the costs and details, and choose What to store if you want a monitor.
  5. Click Start. The listings appear in the Output tab as they are stored; download them as JSON, CSV or Excel, or read them through the API.

How much does it cost to scrape ImmobilienScout24?

ImmoScout24 Scraper is priced per event, with no usage fees on top:

EventPriceWhen
Listing$1.50 per 1,000each listing stored without details
Listing with details$2.50 per 1,000each listing stored with its details
Search read$0.008 eacheach search a run reads, whatever it stores

The platform also charges $0.00005 when a run starts, per GB of memory. Removed listings, listings a monitor finds unchanged, and listings that could not be read are not charged. The prefilled input (20 flats with details from one search) costs $0.058.

Listings stored from one searchWithout detailsWith details
100$0.16$0.26
1,000$1.51$2.51
10,000$15.01$25.01
  • A month of daily monitoring of one search: the first run stores the listings within Listings per search as new. Each later run costs $0.008 for the search, plus the new listings. In our test of Berlin's rentals on 2026-10-28, 78 new listings appeared among the newest 3,000 in 9.5 hours; at about 200 new listings a day (Listings per search set above that, say 300), a month of mornings costs about $9.24 without details. When every listing within Listings per search is new, the run warns that more may be past it. A search that gets 5 new listings a day costs about $0.47 a month.
  • An empty monitor run (nothing new) costs $0.008 per search.

Apify's free plan credit of $5 a month covers about 3,300 listings, or 2,000 with details. Set a maximum total charge in the run options to cap a run: the Actor stops before it.

Input recipes

Each recipe is a complete input, run on 2026-10-28 with the result shown.

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1500.0&numberofrooms=2.0-&sorting=2"],
"listingsPerSearch": 100,
"includeDetails": false
}

100 listings in 11 seconds.

Only new flats, every morning

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1500.0&numberofrooms=2.0-&sorting=2"],
"listingsPerSearch": 100,
"mode": "new",
"monitorName": "berlin-2-rooms",
"includeDetails": false
}

The first run stored the 100 newest listings as new (8 seconds); a run of the same monitor 47 minutes after an earlier one stored the 6 listings published since. Schedule it daily: each later run stores only the listings it has not seen before. Sort the search by newest first (sorting=2), so that the first results are the new ones.

Flats for sale with Hausgeld and rental income, for an investor's screen

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/de/sachsen/leipzig/wohnung-kaufen?price=-130000.0&sorting=2"],
"listingsPerSearch": 50,
"includeDetails": true
}

50 listings with details in 21 seconds: Hausgeld on 24, a rental income on 11 (the flats that are let), the commission on all 50, commission-free on 18.

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/haus-mieten?sorting=2"],
"listingsPerSearch": 0,
"mode": "changes",
"monitorName": "berlin-houses",
"includeDetails": false
}

The first run stored all 217 houses as new (21 seconds). From the next run on, it stores only what is new, what changed (with changedFields and previous) and what was taken offline. On the same search, later runs that day found 5 houses taken offline, each confirmed by its page, and one house whose rooms changed.

Multi-family houses around a city, with details

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/radius/mehrfamilienhaus-kaufen?centerofsearchaddress=Krefeld;;;;;&geocoordinates=51.33962;6.58615;10.0&sorting=2"],
"listingsPerSearch": 50,
"includeDetails": true
}

50 of the 141 listings within 10 km with details: a rental income on 23, the plot area on all, the energy certificate on 41.

Offices to let

{
"searchUrls": ["https://www.immobilienscout24.de/Suche/de/nordrhein-westfalen/muenster/buero-mieten?sorting=2"],
"listingsPerSearch": 50,
"includeDetails": true
}

50 of 188 offices with details in 21 seconds: available from on 46, the service charge on 24, air conditioning on 13.

Output example

One record of the prefilled input (2026-10-28), with its descriptions shortened (marked …), one of its pictures, and its energy certificate's document left out:

{
"id": "169757421",
"url": "https://www.immobilienscout24.de/expose/169757421",
"type": "ApartmentRent",
"title": "Zentrale Lage zwischen S Greifswalder Straße und S Prenzlauer Allee",
"searchUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten?price=-1500&numberofrooms=2.0-&sorting=2",
"position": 18,
"publishedAt": "2026-10-28T15:27:53.000+01:00",
"createdAt": "2026-10-28T15:27:53.000+01:00",
"modifiedAt": "2026-10-28T15:27:51.908+01:00",
"price": { "value": 1257.14, "currency": "EUR", "interval": "MONTH" },
"totalRent": { "value": 1595.14, "currency": "EUR", "interval": "MONTH" },
"pricePerSqm": 17.04,
"livingSpace": 73.78,
"rooms": 3,
"constructionYear": 2017,
"energyClass": "B",
"balcony": true,
"builtInKitchen": false,
"garden": false,
"hasFloorplan": true,
"tags": ["Balkon/Terrasse", "Keller", "Aufzug", "Stufenlos"],
"address": {
"street": "Gubitzstr.",
"houseNumber": "50a",
"postcode": "10409",
"city": "Berlin",
"quarter": "Prenzlauer Berg (Prenzlauer Berg)"
},
"lat": 52.54357,
"lon": 13.43163,
"locationPrecision": "exact",
"privateOffer": false,
"company": "Gewobag Wohnungsbau-Aktiengesellschaft Berlin",
"listingType": "M",
"deactivated": false,
"pictures": [
{
"url": "https://pictures.immobilienscout24.de/listings/f0786881-2fc0-4ca8-ab81-c98cc8214b20-2069439062.jpg",
"preview": "https://pictures.immobilienscout24.de/listings/f0786881-2fc0-4ca8-ab81-c98cc8214b20-2069439062.jpg/ORIG/resize/1106x830%3E/format/webp/quality/73"
}
],
"details": {
"descriptions": {
"object": "Für die angebotene Wohnung werden neue Mieter gesucht. Sie liegt zentral zwischen zwei S-Bahnhöfen. Viele Dinge des alltäglichen Bedarfs sin…",
"furnishing": "Badewanne, Breitbandkabelanschluss, Fliesenboden, Parkett, Fernheizung/Zentralheizung, Fern-/Zentralwarmwasserversorgung, Steinboden, Schall…",
"location": "Das Grundstück liegt mitten im Prenzlauer Berg, nördlich des S-Bahn-Rings. Anders als die Kieze innerhalb des S-Bahn-Rings wurde dieser Teil…",
"other": "Hinweis zu Ihrem Schutz: Wir vermieten provisionsfrei gemäß § 2 WoVermG. Personen, die im Auftrag der Gewobag tätig sind, dürfen keine Provi…"
},
"costs": {
"serviceCharge": 204,
"heatingCosts": 134,
"heatingInServiceCharge": false,
"deposit": "3771,42 €",
"depositAmount": 3771.42
},
"availableFrom": "01.10.2026",
"availableFromDate": "2026-10-01",
"flatType": "Etagenwohnung",
"floor": "4 von 7",
"floorNumber": 4,
"numberOfFloors": 7,
"petsAllowed": "Ja",
"heatingType": "Fernwärme",
"energySources": "Fernwärme",
"energy": {
"certificate": "liegt vor",
"type": "Bedarfsausweis",
"demand": 64,
"unit": "kWh/(m²·a)",
"constructionYear": 2017
},
"features": { "cellar": true, "lift": true, "stepFree": true }
},
"missing": []
}

A monitor's changed listing also carries change ("changed"), changedFields (for example ["price"]), previous (the earlier price, total rent, size, rooms, title and last change date) and priceHistory (the prices the monitor has seen it at, at most 20). A new listing carries change "new" and no previous; a removed one carries change "removed", its link and its last known values.

Monitoring: new, changed and removed listings

Give a search a monitor with What to store: New listings, or New, changed and removed listings, and schedule the run. The Actor remembers each search in a key-value store of your account named immobilienscout24-monitor (about 200 bytes a listing; it counts toward your storage), one record per search and Monitor name. Delete a record to start that monitor afresh.

  • New: a listing the monitor has not seen before among the search's first results, up to Listings per search. With details, a new listing whose page already says it is no longer active is not delivered as new (nor charged).
  • Changed: a listing counts as changed when its price, total rent, living space, rooms or title changes; each changed record lists what changed, with the old and new value. Other fields, such as the availability date, are not compared.
  • Removed: a listing taken offline, reported once two runs in a row that read the whole search did not find it and its page says it is gone. A listing that only stopped matching the search's filters is not reported. A run reads a search whole when Listings per search is 0 or at least the search's size; the closing message says in how many searches removals were checked, and RUN_SUMMARY counts per search the listings whose removal a later run decides.
  • Start from now: with it on, a monitor's first run records the current listings without storing them, so later runs deliver only what comes after.
  • With Include details on, only new and changed listings have their details read: an unchanged listing costs nothing.

Integrations and API

  • Make, Zapier, n8n: send a monitor's new listings on when a run finishes; the Slack and e-mail integrations post the run's closing message ("Stored 3 new and 1 changed listings from 1 search").
  • Google Sheets, webhooks, the Apify API and clients for JavaScript and Python.
  • AI agents: through Apify's MCP server, an agent can call the Actor as a tool.

Run a recipe and get its records in one call (with your Apify API key in the APIFY_TOKEN variable):

curl -X POST "https://api.apify.com/v2/acts/kaleidoscopelabs~immobilienscout24-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"searchUrls": ["https://www.immobilienscout24.de/Suche/de/sachsen/leipzig/wohnung-kaufen?price=-130000.0&sorting=2"], "listingsPerSearch": 20, "includeDetails": true}'

Building on this Actor

  • Output stability: fields are added, never renamed or removed without a new major version, and every change is in the changelog.
  • What a run's end means: a finished run read every search it was given, or says how many search pages and listings it could not read, in its closing message and in the RUN_SUMMARY record (complete, failedSearchPages, failedListings). A run that could not reach the site fails instead of succeeding empty. An input the Actor cannot read ends SUCCEEDED with nothing read or charged: the closing message says what to correct, and RUN_SUMMARY has inputError (null on a normal run).
  • Cost per call: the three events above; removed, unchanged and unread listings are not charged; your maximum charge holds.
  • Errors:
missing reasonMeaning
notRequested (group details)Include details was off
gone (group details)The listing's page was gone when its details were read; the record is as its search showed it
unexpectedValueThe site gave a value, or the listing's page, in a form the Actor does not read; the field is left empty
notGiven (group price)The listing gives no price (price on request); price is absent
RUN_SUMMARY inputErrorMeaning
noSearchNo search URL was given
invalidSearchA line is not an ImmobilienScout24 search URL
noSuchSearchImmobilienScout24 answers that the search does not exist
invalidSettingA setting is out of range, or Include contact is on without Include details

For AI agents

Connect an MCP client (Claude, Cursor and others) to https://mcp.apify.com?tools=kaleidoscopelabs/immobilienscout24-scraper with your Apify API key, then ask, for example:

  • "List the 20 newest 2-room flats for rent in Berlin under €1,500, with their service charge and when they are available."

  • "Which flats for sale in Leipzig under €130,000 are let, and at what rental income?"

  • Minimal input: {"searchUrls": ["<a search URL from www.immobilienscout24.de>"]} stores up to 100 listings of that search with their details. Set "includeDetails": false for the search's own fields only, at $1.50 per 1,000.

  • Fields to read: title, price.value, totalRent.value, livingSpace, rooms, address.city, address.quarter, url; with details, details.costs, details.availableFrom, details.floor. In a monitor, change, changedFields and previous.

  • What to know:

    • Search URLs are copied from the site's address bar; the Actor does not take a city or a price as fields.
    • An empty dataset with inputError in RUN_SUMMARY is a wrong input, not "no listings".
    • A monitor's later runs store only what is new or changed: an empty dataset there means nothing new (or changed) since the last run.
    • A listing two of your searches find is stored once, under one of them.
    • missing lists what the Actor did not or could not read, and why; a field the listing leaves empty is left out.

Tips

  • Try it cheap: the prefilled input stores 20 listings with details for $0.058; raise Listings per search once the output looks right.
  • Sort by newest first for a monitor of new listings: its first results are then the new ones.
  • Removals need a whole read: set Listings per search to 0 (or above the search's size) in a changes monitor, so the Actor can tell a removed listing from one further down the list.
  • Split very large searches: all of Germany's flats for sale were 112,875 listings on 2026-10-28; a search per city or district is quicker and is a monitor you can read.
  • One schedule per monitor: two runs of the same monitor at once both deliver what is new. Use a Monitor name per schedule for two monitors on one search.

FAQ

The Actor reads only the public pages that every visitor sees without signing in. Whether you may use the data depends on your purpose, on the law that applies to you and on ImmobilienScout24's terms, so check them before you build on the results. When in doubt, ask a lawyer.

Does it collect personal data?

Mostly not: the data is about properties. But the lister's descriptions are their text as published, and some of them name a contact person or give a phone number or an e-mail address (about 7% of the 262 listings, mostly rentals, we read with details on 2026-10-28; 21 of 50 in our test of Leipzig's flats for sale). The company field can be a person's name for a one-person business. The contact person and the company's address are off by default and only written with Include contact. If you store or process personal data, you need a lawful basis for it under the GDPR or the laws that apply to you. Runs and their storage are on Apify's platform in the United States (AWS us-east-1).

Why does a listing have no street?

The lister chose to hide the address: the record then has the postcode, city and quarter, and a map point of the area, with locationPrecision "approximate". The Actor never adds an address the listing does not show.

Why did I get fewer listings than the search shows?

Listings per search caps each search (100 unless you change it; 0 is every listing). A listing that two of your searches find is stored once. A result with too little to store (no ID, or neither title nor price) is left out, and the run log says how many. In a monitor, only new or changed listings are stored.

Why does the output differ from what I see on the site?

The site's list moves as listings are published, changed and taken offline, and the same search can show a little differently between visits. Open the record's url to see the listing as it is now.

Something went wrong: what should I check?

Check that each line is a search URL copied from the address bar (https://www.immobilienscout24.de/Suche/…), not a single listing's link. The run's last message says how it ended:

The run's last message saysWhat it means
Done … Stored N listingsIt read everything you asked for
… up to the run's maximum costIt stopped at your maximum charge; what it stored is kept and charged
… the search does not exist. Check the URL …The site has no such search: copy it again from the address bar
The input's own message, such as "Search URLs: … is not an ImmobilienScout24 search"Nothing was read or charged: correct the input as it says
… did not answer the run … / … did not return the search …Usually temporary: run it again later
… in a form this Actor does not read yetThe site changed its pages: report it with the Ref, and we fix it

Limits and what this Actor does not do

  • It takes search URLs; it does not search by city, price or rooms as fields. Run the search on the site and paste its address.
  • It reads ImmobilienScout24 in Germany (www.immobilienscout24.de), not its Austrian or Swiss sites.
  • ImmobilienScout24 can keep listings in its search results for a while after the offer ends: on a whole Berlin rental search, about one in eight listed results was already offline (2026-10-28). With details, each record says so (deactivated) and RUN_SUMMARY counts them per search; without details the Actor cannot tell.
  • It reads what any visitor sees without signing in: listings shown only to paying members are stored as the search shows them, with paywallUntil set.
  • Details are what the listing's page gives; not every listing gives every field, and a field a listing leaves empty is left out of its record.
  • Removals are reported only for searches read whole; price history starts with the monitor's first run.
  • Our largest test read all of Germany's flats for sale (112,875 listings, 2026-10-28) with details: it stored 109,953 listings in 83 minutes before we stopped it. Listings move between pages while a large search is read, so a few can be missed or met twice; each is stored once. If ImmobilienScout24's pages ever end before a search's last result, the run says so: split such a search by region, price or rooms.

Support and feedback

Open an issue on the Issues tab for a bug or a feature you need; we answer within 24 hours. If the Actor saves you time, bookmark it and leave a review in Apify Store: it helps others find it.

Other Actors

ActorWhat it gives
Google Ads Transparency Scraper & MonitorA company's or a website's Google ads, with their text, countries and EU impressions; monitor competitors' new ads
YouTube Transcript ScraperTranscripts, captions and subtitles of YouTube videos, channels and playlists, in any language

ImmoScout24 Scraper is an independent tool, not affiliated with or endorsed by Immobilien Scout GmbH, the operator of ImmoScout24.