Immowelt Scraper — German Buy & Rent Listings
Pricing
from $4.00 / 1,000 property scrapeds
Immowelt Scraper — German Buy & Rent Listings
Scrape Immowelt.de buy and rent listings by city, district, or search URL. Returns flat MCP-ready rows: price, rooms, m², address, agency phone, images. HTTP-only SERP extract, cookieless, no Immowelt login.
Pricing
from $4.00 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Immowelt All-in-One Scraper — German Buy & Rent Listings
Immowelt All-in-One Scraper is an Apify Actor for collecting public Germany real-estate listings from Immowelt.de. It accepts a German city or district name, or a pasted Immowelt /liste or /suche search URL, and returns one structured record per listing. Each record can include asking price, rooms, living space in m², address, city, ZIP, agency name, agency phone, gallery image URLs, and the canonical expose URL. It runs over HTTP (Cheerio + SSR extract) and is usable through Apify MCP.
Best fit and connected workflows
This Actor fits workflows centered on German residential inventory from Immowelt:
- Rent-side research from
mietensearches, with cold rent, rooms, m², and agency contact fields - Buy-side research from
kaufensearches, with purchase price and size fields - URL-driven collection when you already filtered on Immowelt and want the Actor to follow that search
- Location-driven collection when you want the Actor to resolve a city such as Berlin or München and run buy or rent filters
- CRM and spreadsheet import where one flat row per listing is the next step
If your workflow centers on another property market, these verified related Actors provide natural routing options:
- Then use Idealista Scraper to extend Immowelt All-in-One Scraper with a neighboring Idealista source when the brief calls for Idealista data
- Then use Rightmove All-in-One Scraper to extend Immowelt All-in-One Scraper with a neighboring UK BUY/RENT/SOLD source when the brief calls for Rightmove data
- Then use Fotocasa All-in-One Scraper to extend Immowelt All-in-One Scraper with a neighboring Spain buy/rent source when the brief calls for Fotocasa data
Immowelt All-in-One Scraper — German Buy & Rent Listings is designed as a focused standalone workflow for Immowelt Germany.
Practical scenario
Jonas is comparing Berlin apartment rentals for a relocation client. He sets location to Berlin, operation to rent, estateType to apartment, and maxItems to 10. The dataset returns fields such as price, rooms, livingSpaceSqm, city, agencyPhone, and url. Jonas sorts by cold rent, shortlists three districts, and opens each url to review photos before sharing a shortlist with the client. For more than about 30 cards in one city, he adds district startUrls such as Berlin-Mitte and Charlottenburg.
Input
Use either an Immowelt URL in startUrls or a location-based search with location and operation.
| Field | Type | Purpose |
|---|---|---|
startUrls | array | Immowelt /liste or /suche search URLs. District URLs expand coverage beyond one SSR page. |
location | string | German city or district when startUrls is empty (for example Berlin, München, Frankfurt). |
operation | string | rent or buy for location mode. |
estateType | string | apartment, house, plot, commercial, or garage. |
minPrice / maxPrice | integer | Client-side EUR filters applied to the SSR page cards. |
minRooms / maxRooms | number | Client-side Zimmer filters. |
minSpace / maxSpace | number | Client-side living-space filters in m². |
maxItems | integer | Cap on returned rows and property event charges. |
proxyConfiguration | object | Datacenter default; Apify Residential DE when Immowelt returns DataDome blocks. |
Focused input example:
{"location": "Berlin","operation": "rent","estateType": "apartment","maxItems": 10}
Output
Each dataset item is one flat JSON record per listing.
| Field | Type | Meaning |
|---|---|---|
listingId / legacyId | string | Immowelt identifiers. |
url | string | Canonical expose URL. |
operation | string | RENT or BUY. |
title | string or null | Public listing title. |
price | number or null | Asking price in EUR. |
priceCurrency | string | Usually EUR. |
priceFormatted | string or null | Localized price label from the SERP card. |
rooms | number or null | Room count when published. |
livingSpaceSqm | number or null | Living space in square metres. |
address / city / zipCode | string or null | Location fields when published. |
agencyName / agencyPhone | string or null | Publisher contact when shown on the SERP card. |
imageUrls | array | Gallery image URLs when present. |
scrapedAt | string | Collection timestamp for the row. |
Illustrative JSON record:
{"listingId": "264C9FHP3E4H","url": "https://www.immowelt.de/expose/5ea9bbf0-2214-4886-adca-4b54a78b77c6","operation": "RENT","title": "Wohnung zur Miete auf Zeit - Erstbezug","price": 1799,"priceCurrency": "EUR","priceFormatted": "1.799 €/Monat","rooms": 3,"livingSpaceSqm": 87.66,"city": "Lichtenberg","zipCode": "10315","agencyName": "STRATEGIS AG","agencyPhone": "030 44353300","source": "immowelt","scrapedAt": "2026-09-17T12:00:00.000Z"}
How it works
The Actor builds /liste/{city}/{estate}/{mieten|kaufen} from location, or uses pasted Immowelt search URLs. It fetches the HTML over HTTP, decompresses the SSR __UFRN_FETCHER__ lz-string blob for classified-serp-init-data, and flattens about 30 listing cards per URL. Client-side price, room, and space filters trim that page. Terminal runs write OUTPUT and RUN_SUMMARY with an explicit outcome such as COMPLETE, PARTIAL, VALID_EMPTY, or INVALID_INPUT. v1 focuses on SERP card fields from the Immowelt search page; detail-page enrichment can be added later when a stable expose path is available.
Pricing
This Actor uses Apify Pay per event plus standard Apify platform usage (passed through to the caller). Charged events:
- Actor start — $0.00005
- Property scraped — $0.004 per returned listing
Open the live Pricing tab in the Apify Console for the current source of truth. A run that returns ten listings charges the start event once and the property-scraped event ten times, plus platform usage for compute and proxy.
Use with AI agents (MCP)
This Actor is available through Apify MCP as apify--immowelt-all-in-one-scraper. Exact Actor identity: khadinakbar/immowelt-all-in-one-scraper.
Tool shape: resolve a German city or Immowelt URL, return flat listing rows with price, rooms, m², agency phone, and URL for CRM or agent reasoning.
Search Immowelt for apartments for rent in Berlin, return price, rooms, livingSpaceSqm, city, agencyPhone, and url for each listing. Cap at 10 rows and summarize cold-rent ranges.
Agent readback guidance:
- Dataset rows are the primary result store
OUTPUT/RUN_SUMMARYcarry the run outcome and countsurlplusscrapedAtkeep provenance inspectablemaxItemsbounds both yield and PPE charges- Cost maps one returned row to one
property-scrapedevent; check the Pricing tab for live amounts alongside platform usage - Immowelt SSR returns about 30 cards per URL — pass multiple district URLs when you need broader city coverage
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("khadinakbar/immowelt-all-in-one-scraper").call({location: "München",operation: "buy",estateType: "apartment",maxItems: 10});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results and outcome guidance
Prefer Apify Residential Germany when datacenter requests hit DataDome. Segment large cities by district URL instead of one oversized maxItems. Paste a ready-made Immowelt /liste URL when filters are already set on the site. Client-side price and room filters refine the SSR page cards that Immowelt already returned. Unknown or retired location slugs finish with a clear VALID_EMPTY outcome and zero property charges.
Design note
While probing Immowelt, I learned the search HTML already embeds the listing cards inside an lz-string SSR blob (classified-serp-init-data), so Cheerio can return price, rooms, m², and agency phone without opening each expose page. City aliases such as Frankfurt → frankfurt-am-main keep location mode aligned with Immowelt's live slugs; when a slug is retired, the Actor records a clear VALID_EMPTY outcome so callers can retry with a district URL instead of treating it as a transport outage.
FAQ
How do I scrape purchases instead of rentals?
Set operation to buy, or paste a /kaufen search URL into startUrls.
How do I get more than 30 listings in Berlin?
Pass several district startUrls (for example berlin-mitte, berlin-charlottenburg) and raise maxItems.
How do I keep agency outreach fields?
Use the default SERP path; agencyName and agencyPhone are returned when Immowelt publishes them on the card.
How do I bound cost?
Set maxItems to the number of listings you need; each accepted row maps to one property-scraped event.
Responsible use
This Actor collects public listing fields from Immowelt.de. Callers are responsible for complying with Immowelt / AVIV terms, German and EU law, and their own data-protection obligations. Keep request volume appropriate to the research scope, and review agency contact fields before any outreach automation.
Immowelt and Immowelt.de are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by Immowelt or AVIV Germany.