ImmobilienScout24 Scraper — German Buy & Rent Listings avatar

ImmobilienScout24 Scraper — German Buy & Rent Listings

Pricing

from $5.00 / 1,000 property scrapeds

Go to Apify Store
ImmobilienScout24 Scraper — German Buy & Rent Listings

ImmobilienScout24 Scraper — German Buy & Rent Listings

Scrape Immobilienscout24.de buy and rent listings by city or /Suche URL. Returns flat rows with listing URL, title, address, agency and images, plus price, rooms and living space where the page shows them.

Pricing

from $5.00 / 1,000 property scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

What is ImmobilienScout24 Scraper — German Buy & Rent Listings?

ImmobilienScout24 Scraper turns a German city or an ImmobilienScout24 /Suche search URL into a dataset with one row per buy or rent listing. Each row returns the expose ID and URL, operation, title, price in EUR, rooms, living space in m², address, district, city and the search URL it came from. German PropTech teams, rental-market analysts, relocation agencies, investors and AI agents use it to track apartment and house supply in cities such as Berlin, München and Hamburg without an ImmobilienScout24 login.

Why teams use this ImmobilienScout24 scraper

  • City or URL input. Set location, operation and estateType, or paste a live /Suche URL with your own district and filter choices.
  • Buy and rent, every property type. Apartments, houses, plots, commercial units, garages and shared flats (WG-Zimmer).
  • Filters on price, rooms and space. minPrice, maxRooms, minSpace and friends trim rows before they are saved.
  • Expose IDs for joins. listingId and url give a stable key for deduplication and week-over-week tracking.
  • Run outcome records. Each run writes OUTPUT and RUN_SUMMARY with COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT or UPSTREAM_FAILED.

Best fit for this Actor

Example workflow: from a city to a weekly rent tracker

A relocation agency starts with Berlin two-room apartments for incoming employees. They set location to Berlin, operation to rent, estateType to apartment, minRooms to 2 and maxPrice to 1500. The dataset returns listingId, title, price, rooms, livingSpaceSqm and district for each listing. They export the rows to a sheet, compare price per m² by district, then schedule the same input every Monday and flag new listingId values for the relocation team.

Input

FieldTypeWhat it controls
startUrlsarrayImmobilienScout24 /Suche/de/... or /Suche/radius/... search URLs.
locationstringGerman city used when startUrls is empty, for example Berlin or München.
operationstringrent or buy. Default rent.
estateTypestringapartment, house, plot, commercial, garage or shared.
minPrice / maxPriceintegerEUR price bracket.
minRooms / maxRoomsnumberRoom count (Zimmer) bracket.
minSpace / maxSpaceintegerLiving space bracket in m².
maxItemsintegerRows to return and charge. Default 30.
proxyConfigurationobjectDefault Apify Residential with German exit IPs.
{
"location": "Berlin",
"operation": "rent",
"estateType": "apartment",
"minRooms": 2,
"maxPrice": 1500,
"maxItems": 30,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "DE"
}
}

Output

One row per listing.

FieldWhat it contains
listingId, urlExpose ID and expose URL
operationRENT or BUY
titleListing headline
price, priceFormatted, priceCurrencyPrice in EUR when the listing shows one
rooms, livingSpaceSqmZimmer and Wohnfläche when shown
address, street, district, city, countryLocation fields
imageUrls, imageCount, isPrivateOwnerGallery and owner-type fields
serpRank, serpSnippetPosition and listing summary text from the search results
source, inputUrl, scrapedAtCollection route, originating search URL and collection time
{
"listingId": "167483693",
"url": "https://www.immobilienscout24.de/expose/167483693",
"operation": "RENT",
"title": "2,5-Zimmer Wohnung 560 € zur Miete Gropiusstadt, Berlin",
"price": 560,
"priceCurrency": "EUR",
"priceFormatted": "560 €",
"rooms": 2.5,
"livingSpaceSqm": 69,
"address": "Gropiusstadt, Berlin",
"district": "Gropiusstadt",
"city": "Berlin",
"country": "DEU",
"imageUrls": [],
"imageCount": 0,
"isPrivateOwner": false,
"source": "immobilienscout24-google-serp",
"inputUrl": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten",
"scrapedAt": "2026-09-26T06:54:54.905Z",
"serpRank": 2,
"serpSnippet": "Wohnen mit Charakter: 2,5-Zimmer-Wohnung in Berlin ... Zi. 69 m². Fläche. 760–840 €. Warmmiete."
}

Each row carries the listing ID, URL, title and city. Price, rooms, living space, street and district fill in when the listing summary includes them, so serpSnippet is a useful extra source for warm rent and availability notes. The dataset schema also reserves fields such as zipCode, agencyName, latitude and energyClass for listings whose public data carries them.

Pricing

This Actor uses Pay per event plus Apify platform usage. You pay one Property scraped event per listing written to the dataset and one small Actor Start event per run, and Apify platform usage for compute and residential proxy is billed on top. The live Pricing tab on this page shows the current event prices.

Worked example: a Berlin rent search with maxItems set to 30 that saves 30 listings costs 30 property events, one start event and the platform usage of that run. maxItems is your ceiling for property events.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~immobilienscout24-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location": "Hamburg", "operation": "buy", "estateType": "house", "maxItems": 20}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/immobilienscout24-scraper").call(run_input={
"startUrls": [{"url": "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"}],
"maxItems": 30,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["listingId"], row.get("price"), row.get("livingSpaceSqm"), row.get("district"))

Use with AI agents (MCP)

Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask:

Find 20 rental apartments in Berlin on ImmobilienScout24 with at least 2 rooms under 1,500 EUR and list price, rooms, living space, district and the expose link.

The agent calls the Actor with location, operation and the filters, reads the rows with get-dataset-items, and reads OUTPUT.outcome to know whether the search was complete or empty. url and scrapedAt give provenance per listing, and maxItems keeps cost bounded.

Best results

Starting situationHelpful actionExpected outcome
A specific district or radiusPaste the live /Suche URL from your browser in startUrlsListings for exactly that area
A major German cityUse location with operation and estateTypeA ready-made city search
A budget or size briefSet maxPrice, minRooms and minSpaceOnly listings that fit the brief
Weekly monitoringSchedule the same input and compare listingId valuesNew listings each week
Steady results pagesKeep the default Residential proxy with German exit IPsPages served as German visitors see them

Builder's note

I built this for market monitoring, so every row is keyed by the expose ID and tagged with the search URL it came from, which makes week-over-week comparisons simple. I designed the city builder for the common case and kept startUrls for everything else, because ImmobilienScout24's own search page already encodes districts and filters better than any input form. I found that listing summaries often carry warm rent and availability hints, so I keep the summary text on each row next to the structured fields.

FAQ

Which cities work with location?

Major German cities such as Berlin, München, Hamburg, Köln and Frankfurt. For any other area, paste a /Suche URL.

Are the price filters applied before billing?

Yes. Listings outside your price, room and space filters are dropped before they are saved, so they are free.

Can I open the full listing?

Yes. Each row's url points to the public expose page.

Responsible use

This Actor collects publicly available ImmobilienScout24 listing data for research, market monitoring and lead workflows. Respect ImmobilienScout24's terms, the GDPR and other applicable laws, and contact advertisers only through lawful channels. ImmobilienScout24 is a trademark of its owner; this independent Actor is not affiliated with or endorsed by ImmobilienScout24 GmbH. For questions or bugs, open a ticket in the Issues tab.