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

51

Total users

3

Monthly active users

4 days ago

Last modified

Share

ImmobilienScout24 Scraper: Property Listings, Prices & Coordinates for Germany

ImmobilienScout24 Scraper turns immobilienscout24.de into structured data. Search by state and city, or paste your own search link, and get price, full address, GPS coordinates, rooms, living space, construction year, amenities, images, floorplan, tags and agent contact for every listing. Filter by price, rooms, living space, construction year and amenities, buy or rent, apartment or house, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two ways to search. Pick a state and city from dropdowns, or paste your own immobilienscout24.de search link with filters already applied in the browser.
  • 47 fields per listing. Price, full address, GPS coordinates, rooms, living space, construction year, amenities, images, floorplan, tags, agent and project details.
  • GPS coordinates on nearly all listings. Latitude and longitude are included for the large majority of results, ready for maps and geospatial analysis.
  • Granular filters. Price, rooms, living space, construction year, amenities, sort order, and commission free for properties for sale.
  • Every German state and city. Buying and renting, apartments and houses, all in one actor.
  • Multiple searches per run. Combine several cities in one run, or split a large search across runs by page number.
  • Optional export. Send a summary of each listing into Notion, Linear, Airtable or Apify through MCP connectors.

Use Cases

  • Real estate investors and analysts: build a pricing dataset across cities and districts to compare value per square meter.
  • 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 construction, price changes and inventory over time using the publish and modification dates.
  • Mapping and geospatial tools: plot listings on a map using latitude and longitude.
  • Agencies and brokers: collect competing listings, including 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"Musterstraße 12, Mitte, Berlin"
city / quarter / postcode"Berlin" / "Mitte" / "10115"
latitude / longitude52.5320 / 13.3850
rooms3
livingSpace85.5 (m²)
constructionYear2024
balcony / lift / gardentrue / true / false
builtInKitchen / cellar / guestToilet / barrierFreeamenity flags
hasCourtagefalse (commission free)
images / imageCountphoto URLs / 5
floorplanUrl / hasFloorplanfloorplan image, when available
hasVideovideo walkthrough available
contactName / contactPhone / contactCompany"Meier" / "030 1234567" / "Beispiel Immobilien GmbH"
projectName / projectUrlnew development name and link, when the listing belongs to a project
tags["Provisionsfrei", "Balkon/Terrasse", "Aufzug"]
isNew / isPrivate / isSpotlightlisting flags
datePublished / dateModified / dateCreatedISO 8601 timestamps
scrapedAtwhen this actor read the listing

How to Use

  1. Pick a mode: location (choose state, city and filters) or url (paste your own immobilienscout24.de search link).
  2. For location mode, select the state, type the city, then set any price, rooms, living space, construction year, amenity or sort filters you want. For url mode, paste one or more search URLs instead.
  3. Set Max Pages and Max Listings to control how much the run collects, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search Berlin apartments for sale:

{
"mode": "location",
"locations": [{ "state": "berlin", "city": "Berlin" }],
"listingType": "buy",
"propertyType": "apartment",
"maxPages": 10
}

Filtered search in München:

{
"mode": "location",
"locations": [{ "state": "bayern", "city": "München" }],
"listingType": "buy",
"propertyType": "apartment",
"priceMin": 200000,
"priceMax": 600000,
"roomsMin": 2,
"livingSpaceMin": 60,
"equipment": ["balcony", "lift"],
"sortBy": "newest",
"maxPages": 10
}

Rentals across three cities:

{
"mode": "location",
"locations": [
{ "state": "berlin", "city": "Berlin" },
{ "state": "hamburg", "city": "Hamburg" },
{ "state": "nordrhein-westfalen", "city": "Köln" }
],
"listingType": "rent",
"maxPages": 20
}

Direct URL, starting from a later page:

{
"mode": "url",
"urls": [
"https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen?price=-500000&livingspace=50.0-&pagenumber=3"
],
"maxPages": 20
}

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": [{"state": "berlin", "city": "Berlin"}],
"listingType": "buy",
"maxPages": 10,
})
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: [{ state: 'berlin', city: 'Berlin' }],
listingType: 'buy',
maxPages: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

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

Splitting a large search across runs

If a URL contains pagenumber=N, scraping starts from page N and walks forward for maxPages pages. Use this to resume a search where a previous run left off, or to split a large city into several smaller runs.

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 state and city, or url for direct search links.
locationsarrayBerlin (used when empty)Cities to search in location mode. Select the state, then type the city name. Entries missing either field are skipped; if none remain, Berlin is searched.
listingTypestringbuybuy or rent. Location mode only.
propertyTypestringapartmentapartment or house.
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 square meters.
livingSpaceMaxinteger(none)Maximum living area in square meters.
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.
noCommissionbooleanfalseCommission-free listings only. For-sale searches only: this site has no commission-free filter for rentals, so the option is ignored on rent searches.
sortBystringdefaultdefault, newest, priceAsc, or priceDesc.
urlsarrayBerlin apartments-for-sale searchFull immobilienscout24.de search URLs with your own filters (url mode). If a URL contains pagenumber=N, scraping starts from page N and walks forward. All location-mode fields above are ignored in url mode.
maxPagesinteger2Maximum pages to scrape per location or URL (20 listings per page).
maxListingsinteger0Maximum total listings to collect (0 = unlimited).
proxyobjectGerman residential (used when empty)Connection settings.
mcpConnectorsarray(none)Optional: send a summary of each listing to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which listing pages are created.
maxNotifyListingsinteger50Cap 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": "buy",
"propertyType": "apartment",
"title": "Helle 3-Zimmer-Wohnung mit Balkon",
"addressFull": "Musterstraße 12, Mitte, Berlin",
"street": "Musterstraße",
"houseNumber": "12",
"postcode": "10115",
"city": "Berlin",
"quarter": "Mitte",
"latitude": 52.532,
"longitude": 13.385,
"priceValue": 450000,
"priceCurrency": "EUR",
"priceDisplay": "450.000 €",
"marketingType": "SALE",
"rooms": 3,
"livingSpace": 85.5,
"constructionYear": 2024,
"balcony": true,
"builtInKitchen": true,
"garden": false,
"lift": true,
"guestToilet": false,
"cellar": true,
"barrierFree": false,
"hasCourtage": false,
"hasFloorplan": true,
"hasVideo": false,
"imageCount": 5,
"images": ["https://pictures.immobilienscout24.de/listings/example-800x600.jpg"],
"floorplanUrl": "https://pictures.immobilienscout24.de/listings/example-floorplan.jpg",
"contactName": "Meier",
"contactPhone": "030 1234567",
"contactCompany": "Beispiel Immobilien GmbH",
"projectName": null,
"projectUrl": null,
"tags": ["Provisionsfrei", "Balkon/Terrasse", "Aufzug"],
"isNew": true,
"isPrivate": false,
"isSpotlight": false,
"listingDepth": "L",
"datePublished": "2026-03-01T10:00:00.000+01:00",
"dateModified": "2026-03-20T09:00:00.000+01:00",
"dateCreated": "2026-03-01T09:55:00.000+01:00",
"scrapedAt": "2026-03-25T12:00:00.000Z"
}

Plan Requirement

The default connection setting works out of the box. For large or frequent runs, the residential proxy group configured under Connection gives the most consistent results.

FAQ

How much does it cost?

You pay per listing returned. The Pricing tab shows the current rates. Use Max Pages and Max Listings to cap the size, and therefore the cost, of any run.

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 listings on a schedule?

There is no built-in incremental or deduplication mode. Schedule the actor from the Schedules tab to run it regularly, set sortBy to newest, and use the datePublished, dateModified and scrapedAt fields in the dataset to identify listings you have not seen before in your own downstream logic.

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. Raise maxPages (or add more locations) to reach a higher maxListings value.

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

The run fails only when a connection could not be established at all, for example a proxy configuration or access problem. If a search matches no listings, or a particular city or URL cannot be read, the run still finishes successfully with fewer or zero records for that search, 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...
🏠 Real Estate AU
Extract detailed Australian real estate property listings with 30+ structured fields...
🏠 CommercialGuru SG Property Listings & Agent Contacts Scraper
Scrape commercialguru.com.sg Singapore listings at scale. Extract prices, PSF, floor...
🏠 Zumper
Scrape Zumper.com rental listings: apartments, houses, condos and rooms. Pulls 60+ fields...
🏠 Pap.fr
From $1/1k. Extract property listings from pap.fr. Get fully-detailed listings with...
🏠 Zonaprop Argentina
Scrape Zonaprop.com.ar property listings across Argentina. Extract 140+ fields including...

👉 Browse all abotapi scrapers

💬 Support & custom scrapers

  • 🐞 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 abotapi@proton.me or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.