ImmobilienScout24.de Scraper - Properties, Prices & Agents avatar

ImmobilienScout24.de Scraper - Properties, Prices & Agents

Pricing

from $0.90 / 1,000 results

Go to Apify Store
ImmobilienScout24.de Scraper - Properties, Prices & Agents

ImmobilienScout24.de Scraper - Properties, Prices & Agents

$0.9💰/1K for Gold discount. Extract property listings from immobilienscout24.de, Germany's #1 real estate platform with 9,000+ active listings per city. Get fully-detailed listings including price, GPS coordinates, amenities, images, agent contacts, and more.

Pricing

from $0.90 / 1,000 results

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

52

Total users

3

Monthly active users

6 days ago

Last modified

Share

ImmobilienScout24 Scraper: Property Listings, Prices & Coordinates for Germany

ImmobilienScout24 Scraper turns immobilienscout24.de into structured data. Type a city, town or district name, or paste any search link, and get price, full address, GPS coordinates, rooms, living space, construction year, amenities, images, energy data and agent contact for every listing. Turn on listing details for the full description, rent breakdown, purchase side costs, energy certificate and 100+ more attributes. Residential and commercial, buy or rent, with recurring change tracking for scheduled runs. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Type a place name, nothing else. München, Munich, Köln, Prenzlauer Berg or Titisee-Neustadt: names are looked up on the site's own location search, the state is optional, and towns inside a district work too.
  • Every link the site makes. City, district, state-wide and nationwide searches, every residential and commercial category, radius and drawn-area map searches, single listings by link or by number, and start-from-page links.
  • Up to 150+ fields per listing. 60+ fields from the search page alone; with listing details on, the description texts, rent and purchase cost breakdown, energy certificate, floor, condition, heating, market price comparison, documents and agent details.
  • The site's own filters and sorts. Price, rooms, living space, construction year, floor, amenities, apartment and house types, energy class, heating, pets, publish date, radius, commission free and 9 sort orders.
  • Residential and commercial. Apartments, houses, plots, garages, shared rooms, temporary housing, house-building offers, offices, retail, hospitality, industrial halls, commercial plots, investment properties and compulsory auctions.
  • Recurring change tracking. Scheduled runs return only new, updated and reappeared listings, with the changed fields and the price change in EUR and percent.
  • Ready-made output views. Overview, details, map, changes, costs and agents tabs, plus a run summary.

Use Cases

  • Real estate investors and analysts: build a pricing dataset across cities and districts and compare price per square meter, price factors and rental yields.
  • Relocation and rental platforms: feed current buy or rent listings for a city into your own site, app or newsletter.
  • Proptech and market research teams: track new listings, price cuts and removed listings over time with scheduled incremental runs.
  • Commercial property teams: monitor offices, retail units, halls and commercial plots with their areas, rents and conditions.
  • Agencies and brokers: collect competing listings with agent and company contacts for market comparison and outreach lists.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
title"Lichtdurchflutete 3-Zimmer-Wohnung mit Balkon"
priceDisplay / priceValue"450.000 €" / 450000
addressFull / postcode / city / quarter"Musterstraße 12, Mitte, Berlin" / "10115" / "Berlin" / "Mitte"
latitude / longitude52.5320 / 13.3850
rooms / livingSpace / plotArea3 / 85.5 / null (m²)
constructionYear / condition / floor2024 / "first_time_use" / 2
balcony / lift / garden / cellaramenity flags
energyEfficiencyClass / energyValue / heatingType"B" / 62.4 / "central_heating"
baseRent / serviceCharge / heatingCosts / depositrent breakdown in EUR (rentals, with details on)
commissionAmount / notaryCosts / landTransferTax / totalPurchaseCostspurchase side costs in EUR (sales, with details on)
pricePerSqm / priceRating / priceInfo5294.12 / "GOOD_OFFER" / the site's market comparison
description / locationDescription / furnishingDescriptionfull listing texts (details on)
images / imageCount / floorplanUrlphoto URLs / 12 / floorplan image
documents / virtualTourUrlbrochures and floor plans as PDF links / 3D tour link
contactName / contactPhone / contactCompany"Meier" / "030 1234567" / "Beispiel Immobilien GmbH"
agentProfileUrl / agentRating / agentAddressagent profile, star rating and office address (details on)
projectName / projectUrlnew development name and link, when the listing belongs to a project
mainFloorSpace / hallHeight / annualRent / priceFactorcommercial and investment figures, when the listing has them
datePublished / dateModifiedISO 8601 timestamps
changeType / changedFields"UPDATED" / ["priceValue"] (incremental mode)
previousPrice / priceChange / priceChangePct475000 / -25000 / -5.26 (incremental mode, price changes)
searchUrl / scrapedAtthe search that found the listing / when it was read

How to Use

  1. Pick a mode: location (type place names and set filters) or url (paste immobilienscout24.de links).
  2. In location mode, type one or more place names; pick the state only to choose between places with the same name. Set any filters and the sort order. In url mode, paste links instead.
  3. Turn on Include listing details if you need the full description, cost breakdown and energy data, set Max Pages and Max Listings, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search by place name, filtered:

{
"mode": "location",
"locations": [{ "city": "Munich" }, { "city": "Prenzlauer Berg" }],
"listingType": "buy",
"propertyType": "apartment",
"priceMax": 600000,
"roomsMin": 2,
"apartmentTypes": ["penthouse", "maisonette"],
"equipment": ["balcony", "lift"],
"energyEfficiencyClasses": ["a_plus", "a", "b"],
"sortBy": "newest",
"maxListings": 200
}

Rentals with full details and costs:

{
"mode": "location",
"locations": [{ "state": "sachsen", "city": "Leipzig" }],
"listingType": "rent",
"propertyType": "apartment",
"petsAllowed": ["yes"],
"publishedAfter": "2026-10-01",
"includeDetails": true,
"maxListings": 200
}

Paste links: a map search, a commercial search and one listing:

{
"mode": "url",
"urls": [
"https://www.immobilienscout24.de/Suche/radius/wohnung-mieten?centerofsearchaddress=Berlin;;;;;&geocoordinates=52.52;13.405;2.0",
"https://www.immobilienscout24.de/Suche/de/sachsen/leipzig/buero-mieten",
"166798088"
],
"maxListings": 100
}

Daily monitoring of one search (only new and changed listings):

{
"mode": "location",
"locations": [{ "city": "Hamburg" }],
"listingType": "rent",
"propertyType": "house",
"buildingTypes": ["singlefamilyhouse", "terracehouse"],
"incrementalMode": true,
"emitExpired": true,
"maxListings": 1000
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/immoscout24-scraper").call(run_input={
"mode": "location",
"locations": [{"city": "Berlin"}],
"listingType": "buy",
"maxListings": 200,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["priceDisplay"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/immoscout24-scraper').call({
mode: 'location',
locations: [{ city: 'Berlin' }],
listingType: 'buy',
maxListings: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Output views and run summary

The Output tab has six views of the same dataset: Overview (price, size, address), Details (description, condition, energy, floor), Map (coordinates), Changes (incremental rows with changed fields and price changes), Costs (rent breakdown and purchase side costs) and Agents (agent and company contacts). Each run also stores a summary under the OUTPUT key of its key-value store: listings collected, whether a cap was hit, detail-page counts and incremental change counts.

Splitting a large search across runs

If a URL contains pagenumber=N, scraping starts from page N and walks forward for maxPages pages (or until maxListings is reached, 40 by default). To continue an interrupted full walk in a new run, paste the earlier run ID into Resume from a previous run: listings that run already saved are skipped.

URL mode: every shape supported

Paste any immobilienscout24.de link into urls. Every search family below has a real example in the input's prefilled list (Search mode = URL):

What runs by default: the input form shows a prefilled example list covering these shapes so you can see each format, but if you leave urls untouched in URL mode only the first entry (the Berlin apartments-for-sale search) is the default and is scraped. Edit the list to the links you want; every link you keep is scraped.

ShapeExampleNotes
City/Suche/de/berlin/berlin/wohnung-kaufenstate / city / category
District or quarter/Suche/de/berlin/berlin/charlottenburg-wilmersdorf/wohnung-mietenadds the district segment
State-wide/Suche/de/bayern/wohnung-kaufenevery city in the state
Nationwide/Suche/de/wohnung-kaufenno state or city segment
Start from a page/Suche/de/berlin/berlin/haus-mieten?pagenumber=2starts at page 2, walks forward for Max Pages
Radius map search/Suche/radius/wohnung-mieten?centerofsearchaddress=...&geocoordinates=lat;lng;kmthe circle you set on the site's map
Drawn-area map search/Suche/shape/wohnung-mieten?shape=...the area you drew on the site's map
Residential categoriesgrundstueck-kaufen, wg-zimmer, wohnen-auf-zeit, garage-mieten, neubauwohnung-kaufen, haus-bauenrent-only and buy-only categories are labelled correctly
Commercial and investmentbuero-mieten, einzelhandel-kaufen, gastronomie-mieten, hallenproduktion-mieten, gewerbegrundstuecke-kaufen, anlageimmobilie, zwangsversteigerungsame search format, commercial fields filled in
Commission free/Suche/de/berlin/berlin/provisionsfreie-wohnung-kaufensame as the noCommission input (sales only)
Single listing/expose/<id>, or just the number, e.g. 166798088one row, no pagination
Bare host / http:// / &amp;immobilienscout24.de/Suche/...normalized automatically

Skipped with a clear warning, never a silent empty result: agent and company profile pages (/anbieter/..., /profil/...), overview and information pages (region overviews, price atlas, new-build portal, guides, the home page) and the Austrian or Swiss sites. A misspelled or outdated search link gets its own warning too.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each listing, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringlocationlocation to search by place name, or url for pasted links.
locationsarrayBerlin (used when empty)Places to search: city, town, district or quarter names. state is optional and only chooses between places with the same name. A name that cannot be found is reported and skipped.
listingTypestringbuybuy or rent. Location mode only.
propertyTypestringapartmentapartment, house, land, garage, flatShareRoom, shortTermAccommodation, houseBuild, office, retail, gastronomy, industry, tradeSite, investment or compulsoryAuction. Buy-only and rent-only types set the listing type automatically.
priceMininteger(none)Minimum price in EUR.
priceMaxinteger(none)Maximum price in EUR.
roomsMininteger(none)Minimum number of rooms.
roomsMaxinteger(none)Maximum number of rooms.
livingSpaceMininteger(none)Minimum living area in m².
livingSpaceMaxinteger(none)Maximum living area in m².
constructionYearMininteger(none)Earliest construction year.
constructionYearMaxinteger(none)Latest construction year.
equipmentarray(none)Required amenities, all must be present: balcony, builtinkitchen, garden, lift, cellar, guesttoilet, barrierfree, parking.
apartmentTypesarray(none)Apartments only: apartment, groundfloor, raisedgroundfloor, halfbasement, roofstorey, loft, maisonette, penthouse, terracedflat, other.
buildingTypesarray(none)Houses only: singlefamilyhouse, multifamilyhouse, semidetachedhouse, terracehouse, bungalow, villa, farmhouse, specialrealestate, otherrealestate.
noCommissionbooleanfalseCommission-free listings only. Sales only: the site has no commission-free filter for rentals, so it is ignored there (the log says so).
energyEfficiencyClassesarray(none)Energy certificate classes a_plus to h.
heatingTypesarray(none)central, selfContainedCentral or stove.
petsAllowedarray(none)Rentals only: yes or negotiable.
floorMininteger(none)Lowest floor (0 = ground floor).
floorMaxinteger(none)Highest floor.
publishedAfterstring(none)Only listings first published on or after this date, e.g. 2026-10-01.
radiusKminteger(none)Radius search in km around radiusCenter.
radiusCenterstring(none)Radius centre as "latitude, longitude", e.g. "52.52, 13.405".
sortBystringdefaultdefault, newest, priceAsc, priceDesc, roomsDesc, roomsAsc, livingSpaceDesc, livingSpaceAsc or projectsFirst.
urlsarrayBerlin apartments-for-sale search (one link; the form's prefilled example list shows all shapes)Links for url mode (see the shapes table above). Location-mode fields are ignored in url mode.
includeDetailsbooleanfalseAlso load each listing's details: description texts, rent and purchase cost breakdown, energy certificate, floor, condition, documents, agent details and every other attribute the listing states. One extra request per listing.
excludeNewBuildProjectsbooleanfalseHide listings that belong to new-build developer projects, in both modes.
maxPagesinteger(none, up to 500 pages)Maximum pages per location or URL (about 20 listings per page). Leave empty to read every page; the result count is capped by maxListings.
maxListingsinteger40Maximum total listings to collect across all searches. 0 = unlimited (every page of every search, up to thousands of listings, billed per listing).

Behaviour change: maxPages no longer defaults to 2. A run now stops at maxListings = 40 by default (the same size as the old 2-page default, about 20 listings per page). Set maxListings to a higher number, or 0 for unlimited, to collect more. | proxy | object | German residential (used when empty) | Connection settings. | | resumeFromRunId | string | (none) | A previous run ID or dataset ID: listings it already saved are skipped. | | incrementalMode | boolean | false | Recurring change tracking: later runs of the same search return only NEW, UPDATED and REAPPEARED listings. | | stateKey | string | (none) | Optional name for an incremental campaign; by default the key is derived from the search inputs. | | emitUnchanged | boolean | false | Incremental mode: also return unchanged listings, marked UNCHANGED. | | emitExpired | boolean | false | Incremental mode: also return listings that disappeared, marked EXPIRED, after a run that scanned the whole search. Default off (decision, S10c full-scan 2026-10-06): EXPIRED rows are billed dataset items like any other row, so a user who turns on incremental mode without reading every option should not be surprise-billed for rows they did not ask for, the same reasoning emitUnchanged already uses one row above. Turn it on explicitly for monitoring setups that want disappearance tracking (see the "Daily monitoring" example above, which sets it). | | ignoreFieldsForChanges | array | (none) | Incremental mode: extra field names to ignore when deciding whether a listing changed (scrapedAt, isNew, priceInfo and financeMonthlyRate are always ignored). | | mcpConnectors | array | (none) | Optional: send a summary of each listing to apps you authorized under Integrations. | | notionParentPageUrl | string | (none) | Notion connector only: page under which listing pages are created. | | maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "123456789",
"url": "https://www.immobilienscout24.de/expose/123456789",
"listingType": "rent",
"propertyType": "apartment",
"title": "Helle 3-Zimmer-Wohnung mit Balkon",
"addressFull": "Musterstraße 12, 04109 Leipzig, Zentrum",
"street": "Musterstraße",
"houseNumber": "12",
"postcode": "04109",
"city": "Leipzig",
"quarter": "Zentrum",
"state": "Sachsen",
"latitude": 51.3397,
"longitude": 12.3731,
"priceValue": 980,
"priceCurrency": "EUR",
"priceDisplay": "980 €",
"totalRent": 1180,
"rooms": 3,
"livingSpace": 82.5,
"constructionYear": 1910,
"balcony": true,
"builtInKitchen": true,
"lift": false,
"energyEfficiencyClass": "C",
"imageCount": 14,
"images": ["https://pictures.immobilienscout24.de/listings/example-800x600.jpg"],
"contactName": "Meier",
"contactCompany": "Beispiel Immobilien GmbH",
"datePublished": "2026-10-01T10:00:00.000+02:00",
"detailsFetched": true,
"description": "Schöne Altbauwohnung mit hohen Decken ...",
"floor": 2,
"condition": "well_kept",
"heatingType": "central_heating",
"baseRent": 980,
"serviceCharge": 200,
"deposit": 2940,
"pricePerSqm": 11.88,
"agentProfileUrl": "https://www.immobilienscout24.de/anbieter/example",
"searchUrl": "https://www.immobilienscout24.de/Suche/de/sachsen/leipzig/wohnung-mieten",
"changeType": "UPDATED",
"changedFields": ["priceValue", "totalRent"],
"firstSeenAt": "2026-09-20T06:00:00.000Z",
"lastSeenAt": "2026-10-06T06:00:00.000Z",
"previousPrice": 1020,
"priceChange": -40,
"priceChangePct": -3.92,
"scrapedAt": "2026-10-06T06:00:00.000Z"
}

Plan Requirement

The default connection is a German residential proxy and works without any setup on plans that include residential proxies. On a plan without residential proxy access, the run continues over a backup connection and says so in the log; if no page can be loaded at all, the run fails with a message explaining why. You can also supply your own proxy URLs under the proxy setting.

FAQ

How much does it cost?

You pay per listing returned plus a small start fee per run; the Pricing tab shows the current rates. Listing details are not charged extra, they only make the run slower. Use Max Pages and Max Listings to cap the size, and therefore the cost, of any run; Max Listings defaults to 40, and 0 removes the cap. In incremental mode, unchanged listings are not returned (or billed) unless you turn on Emit unchanged listings.

This actor collects only publicly available listing data. You are responsible for how you use it: follow immobilienscout24.de's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Agent and company contact details returned by this actor are business contact information published on the listing, not private personal data.

Can I get only new or changed listings on a schedule?

Yes. Turn on Incremental changes for scheduled runs (in the "🔁 Resume & recurring updates" section) and schedule the actor from the Schedules tab. The first run returns every matching listing as NEW; later runs of the same search return only NEW, UPDATED and REAPPEARED listings. Updated rows name the changed fields, and a price change comes with previousPrice, priceChange and priceChangePct. Turn on Emit expired listings to also get listings that disappeared (only after a run that scanned the whole search). Ignore fields when detecting changes excludes any field you find noisy.

Why did I get fewer listings than my Max Listings setting?

maxPages limits how many pages are read per location or URL, and each page holds about 20 listings, regardless of maxListings. Remember maxListings itself defaults to 40; raise it (or set 0 for unlimited) to collect more. Raise maxPages (or add more locations) to reach a higher maxListings value. Listings already returned for an earlier location in the same run are not repeated.

Why did my run fail instead of returning an empty dataset?

A run fails only when no page could be loaded at all: the proxy refused the connection for your account, your plan has no residential proxy access and the backup connection could not load the pages either, or the requests kept failing. The failure message says which one. A search that loads but matches no listings, or a misspelled place or link, finishes successfully with a warning that names the problem, so "no matching listings" is never confused with "the connection did not work".

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push listing summaries into Notion, Linear or Airtable.

🔗 Want more real estate data?

Pair this actor with these related scrapers from the same team:

🏠 Immowelt.de Scraper
Scrape detailed property listings from Immowelt.de into clean structured data. Extract...
🏠 Funda in Business Scraper
Scrape Funda in Business commercial listings: offices, retail, industrial, catering and...
🏠 SeLoger Scraper
Scrape SeLoger.com properties for sale and rent. Search by location with price, room and...
🏠 CommercialGuru SG Property Listings & Agent Contacts Scraper
Scrape commercialguru.com.sg Singapore listings at scale. Extract prices, PSF, floor...
🏠 Domclick RU Property Scraper
Extract property listings from domclick.ru, one of Russia’s largest real estate portals...
🏠 Otodom.pl Scraper
Scrape Otodom.pl properties for sale and rent, including apartments, houses, plots...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.