ImmoScout24 Scraper: Listings & Price Changes
Pricing
from $1.50 / 1,000 listings
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
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 know | Use | What it costs |
|---|---|---|
| What a search holds right now | Paste 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 listing | Include details ($) | $2.50 per 1,000 listings instead |
| Only new listings, every morning | What to store: New listings, and a daily schedule | $0.008 per search a run, plus the new listings |
| Price drops and listings taken offline | What to store: New, changed and removed listings | the same; removed listings are free |
What data can you get from ImmobilienScout24?
| Data | Each listing | With 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 address | with Include contact |
How often a detail is filled depends on the listing. Measured on 2026-10-28 with Include details on:
| Search | Detail | Filled |
|---|---|---|
| Berlin flats for rent, 2+ rooms, up to €1,500 | service charge | 20 of 20 |
| Berlin flats for rent, 2+ rooms, up to €1,500 | available from | 17 of 20 |
| Leipzig flats for sale up to €130,000 | Hausgeld | 24 of 50 |
| Leipzig flats for sale up to €130,000 | rental income (the flat is let) | 11 of 50 |
| Krefeld multi-family houses for sale | rental income | 23 of 50 |
| Cologne building plots | development status | 20 of 30 |
| Münster offices for rent | service charge | 24 of 50 |
How to use ImmoScout24 Scraper
- Create a free Apify account, or sign in.
- 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/. - Open ImmoScout24 Scraper, paste the address into Search URLs (one per line), and choose how many listings to store from each search.
- Turn on Include details if you need the costs and details, and choose What to store if you want a monitor.
- 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:
| Event | Price | When |
|---|---|---|
| Listing | $1.50 per 1,000 | each listing stored without details |
| Listing with details | $2.50 per 1,000 | each listing stored with its details |
| Search read | $0.008 each | each 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 search | Without details | With 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.
Every listing of a rental search
{"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.
Price drops and removed listings of a whole search
{"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_SUMMARYcounts 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_SUMMARYrecord (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, andRUN_SUMMARYhasinputError(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 reason | Meaning |
|---|---|
| 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 |
| unexpectedValue | The 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 inputError | Meaning |
|---|---|
| noSearch | No search URL was given |
| invalidSearch | A line is not an ImmobilienScout24 search URL |
| noSuchSearch | ImmobilienScout24 answers that the search does not exist |
| invalidSetting | A 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": falsefor 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,changedFieldsandprevious. -
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
inputErrorinRUN_SUMMARYis 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.
missinglists 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
Is it legal to scrape ImmobilienScout24?
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 says | What it means |
|---|---|
| Done … Stored N listings | It read everything you asked for |
| … up to the run's maximum cost | It 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 yet | The 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) andRUN_SUMMARYcounts 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
paywallUntilset. - 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
| Actor | What it gives |
|---|---|
| Google Ads Transparency Scraper & Monitor | A company's or a website's Google ads, with their text, countries and EU impressions; monitor competitors' new ads |
| YouTube Transcript Scraper | Transcripts, 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.