ImmobilienScout24.de Scraper icon

ImmobilienScout24.de Scraper

$0.9💰/1K for Gold discount. Extract property listings from immobilienscout24.de, Germany's #1 real estate platform with 9,000+ active listings per…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

ImmobilienScout24.de Scraper at a glance

ImmobilienScout24.de Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, changetype, title, address and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.70 per 1,000 results on the Apify Free plan and from $0.90 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate, Agents, Lead Generation
Pricing
$1.70 per 1,000 results (Free plan), from $0.90 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
39 options
Run success
100.0% of completed public runs in the last 30 days

$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.

What ImmobilienScout24.de Scraper can do

  • 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.

Choose what to collect

These inputs let you configure ImmobilienScout24.de Scraper - Properties, Prices & Agents. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringLocation mode = pick state + city + filters below. URL mode = paste any immobilienscout24.de search URL already refined in a browser (recommended for complex filters).

Choices: location, url

locationsarrayPlaces to search. Type a city, town, district or quarter NAME (e.g. München, Munich, Köln, Frankfurt, Prenzlauer Berg, Titisee-Neustadt): it is looked up on ImmobilienScout24's own location search, so no ids or URL slugs are needed. The state is optional: pick it only to choose between places with the same name (e.g. Neustadt). A name that cannot be found is reported in the log and skipped.
listingTypestringBuy or rent. Location mode only.

Choices: buy, rent

propertyTypestringType of property to search, residential or commercial. Building plots, house-building offers, investment properties and compulsory auctions exist only for sale; flat-share rooms and short-term furnished housing only for rent, for those the matching listing type is used automatically.

Choices: apartment, house, land, garage, flatShareRoom, shortTermAccommodation, houseBuild, office, retail, gastronomy, industry, tradeSite, investment, compulsoryAuction

priceMinintegerMinimum price in EUR
priceMaxintegerMaximum price in EUR
roomsMinintegerMinimum number of rooms
Show 32 more inputs
More input fields
InputWhat it controls
roomsMaxintegerMaximum number of rooms
livingSpaceMinintegerMinimum living area in square meters
livingSpaceMaxintegerMaximum living area in square meters
constructionYearMinintegerEarliest construction year
constructionYearMaxintegerLatest construction year
equipmentarrayRequired amenities (all must be present)
apartmentTypesarrayApartments only (Property type = Apartment): only these apartment types, e.g. penthouse or maisonette. Leave empty for no filter. Ignored for other property types (the log says so).
buildingTypesarrayHouses only (Property type = House): only these house types, e.g. single-family house or villa. Leave empty for no filter. Ignored for other property types (the log says so).
noCommissionbooleanOnly return provisionsfreie listings (no buyer's agent commission). Available for properties FOR SALE only: this site has no commission-free filter for rentals, so the option is ignored on rent searches.
energyEfficiencyClassesarrayOnly listings whose energy certificate shows one of these classes. Leave empty for no filter.
heatingTypesarrayOnly listings with one of these heating types. Leave empty for no filter.
petsAllowedarrayRentals only: only listings that allow pets (yes) or allow them by arrangement (negotiable). Leave empty for no filter.
floorMinintegerLowest floor the apartment may be on (0 = ground floor). Leave empty for no limit.
floorMaxintegerHighest floor the apartment may be on. Leave empty for no limit.
publishedAfterstringOnly listings first published on or after this date (for example 2026-10-01). Leave empty for no filter.
radiusKmintegerSearch a circle of this many km around Radius centre, instead of the city area. Needs Radius centre.
radiusCenterstringCentre of the radius search as "latitude, longitude", for example "52.5200, 13.4050" for central Berlin. The first location's city name is used as its label.
sortBystringResult ordering

Choices: default, newest, priceAsc, priceDesc, roomsDesc, roomsAsc, livingSpaceDesc, livingSpaceAsc, projectsFirst

urlsarrayFull immobilienscout24.de links with your own filters. Supported: city, district/quarter, state-wide and nationwide searches, every category (apartments, houses, plots, garages, shared rooms, temporary housing, offices and other commercial), map searches (radius /Suche/radius/... and drawn area /Suche/shape/...), pagenumber=N start pages, and a single listing page (/expose/, or just its number, e.g. 166798088). A link without https:// works too. Overview pages (region overviews, price atlas, guides, the home page), agent profiles and the Austrian/Swiss sites are skipped with a warning. If a URL contains pagenumber=N, scraping starts from page N and walks forward. Tip: open immobilienscout24.de in your browser, apply filters, then paste the resulting URL here. In URL mode, all the Location-mode fields above are ignored.
includeDetailsbooleanAlso load each listing's full details: description texts, floor, condition, heating and energy certificate, rent breakdown (base rent, service and heating costs, deposit, Hausgeld), purchase side costs (commission, notary, land transfer tax, land registry), price per m², usable area, bedrooms, bathrooms, pets, parking, availability, virtual tour link, agent details and every other attribute the listing states. Slower: one extra request per listing.
excludeNewBuildProjectsbooleanHide listings that belong to new-build developer projects. Works in both modes (it is added to pasted search URLs too).
maxPagesintegerMaximum pages to scrape per location (20 listings per page). Leave empty to read every page; use Max Listings to cap the result count.
maxListingsintegerMaximum total listings to collect across all searches. Defaults to 40; set 0 for unlimited (every page, which can be thousands of listings per search).
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by listing id) are skipped, so this run only saves the new ones. Leave empty for a normal fresh run. For recurring monitoring of the same search instead, use Incremental mode below.
incrementalModebooleanTurn this on for daily/weekly recurring monitoring of the same search. The first run returns all matching listings as NEW. Later runs return only NEW, UPDATED, and REAPPEARED listings by default. Turn on "Emit unchanged listings" or "Emit expired listings" only when you also want those rows returned (and billed). State is kept separately per search (location/URLs, filters, sort); use State key below to name or deliberately share a monitoring campaign.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search inputs above.
emitUnchangedbooleanOff by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max Pages/Max Listings capped it, a block stopped it early, or a pasted URL/Resume started mid-walk.
ignoreFieldsForChangesarrayOptional. Field names to exclude from change detection in addition to the defaults (scrapedAt, isNew, priceInfo, financeMonthlyRate, already ignored because they change independently of the listing itself). Use this if another field in your setup turns out to be noisy.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idID (text)
changeTypechangeType
titleTitle (text)
addressFullAddress (text)
priceDisplayPrice (text)
roomsRooms (number)
livingSpaceArea (m²) (number)
urlURL (link)
latitudeLat (number)
longitudeLng (number)
priceValuePrice (€) (number)
priceCurrencyCurrency (text)
Show 53 more fields
constructionYearBuilt (number)
balconyBalcony (boolean)
liftElevator (boolean)
gardenGarden (boolean)
builtInKitchenKitchen (boolean)
cellarCellar (boolean)
barrierFreeBarrier-free (boolean)
hasCourtageCommission (boolean)
tagsTags (json)
isNewNew (boolean)
isPrivatePrivate (boolean)
contactCompanyCompany (text)
contactPhonePhone (text)
datePublishedPublished (text)
streetStreet (text)
postcodePostcode (text)
cityCity (text)
quarterQuarter (text)
changedFieldsChanged Fields (json)
previousPricePrevious Price (€) (number)
priceChangePrice Change (€) (number)
priceChangePctPrice Change (%) (number)
firstSeenAtFirst Seen (text)
lastSeenAtLast Seen (text)
pricePerSqmPrice per m² (number)
baseRentBase Rent (Kalt, €) (number)
serviceChargeService Charge (€) (number)
heatingCostsHeating Costs (€) (number)
depositDeposit (€) (number)
hausgeldHausgeld (€) (number)
commissionCommission (text)
commissionAmountCommission Amount (€) (number)
notaryCostsNotary Costs (€) (number)
landTransferTaxLand Transfer Tax (€) (number)
landRegistryCostsLand Registry Costs (€) (number)
additionalPurchaseCostsAdditional Purchase Costs (€) (number)
totalPurchaseCostsTotal Purchase Costs (€) (number)
energyEfficiencyClassEnergy Class (text)
energyCertificateTypeEnergy Certificate Type (text)
energyValueEnergy Value (number)
floorFloor (text)
numberOfFloorsNumber of Floors (number)
conditionCondition (text)
contactNameContact Name (text)
contactFirstNameContact First Name (text)
contactMobileMobile (text)
agentNameAgent Name (text)
agentCompanyAgent Company (text)
agentProfileUrlAgent Profile (link)
agentAddressAgent Address (text)
agentRatingAgent Rating (number)
agentPhoneNumbersAgent Phone Numbers (json)
realtorIdRealtor ID (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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"
}

Ways to use this data

  • 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.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does ImmobilienScout24.de Scraper return?

The documented output for ImmobilienScout24.de Scraper includes id, changetype, title, address, price, rooms, area (m²) and url. Availability of each field depends on the source page and the selected mode.

How much does ImmobilienScout24.de Scraper cost?

It costs $1.70 per 1,000 results on the Apify Free plan and from $0.90 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

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.

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.

Ready to collect with ImmobilienScout24.de Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.