Immowelt Scraper — German Buy & Rent Listings avatar

Immowelt Scraper — German Buy & Rent Listings

Pricing

from $4.00 / 1,000 property scrapeds

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

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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 mieten searches, with cold rent, rooms, m², and agency contact fields
  • Buy-side research from kaufen searches, 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.

FieldTypePurpose
startUrlsarrayImmowelt /liste or /suche search URLs. District URLs expand coverage beyond one SSR page.
locationstringGerman city or district when startUrls is empty (for example Berlin, München, Frankfurt).
operationstringrent or buy for location mode.
estateTypestringapartment, house, plot, commercial, or garage.
minPrice / maxPriceintegerClient-side EUR filters applied to the SSR page cards.
minRooms / maxRoomsnumberClient-side Zimmer filters.
minSpace / maxSpacenumberClient-side living-space filters in m².
maxItemsintegerCap on returned rows and property event charges.
proxyConfigurationobjectDatacenter 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.

FieldTypeMeaning
listingId / legacyIdstringImmowelt identifiers.
urlstringCanonical expose URL.
operationstringRENT or BUY.
titlestring or nullPublic listing title.
pricenumber or nullAsking price in EUR.
priceCurrencystringUsually EUR.
priceFormattedstring or nullLocalized price label from the SERP card.
roomsnumber or nullRoom count when published.
livingSpaceSqmnumber or nullLiving space in square metres.
address / city / zipCodestring or nullLocation fields when published.
agencyName / agencyPhonestring or nullPublisher contact when shown on the SERP card.
imageUrlsarrayGallery image URLs when present.
scrapedAtstringCollection 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_SUMMARY carry the run outcome and counts
  • url plus scrapedAt keep provenance inspectable
  • maxItems bounds both yield and PPE charges
  • Cost maps one returned row to one property-scraped event; 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.