Immowelt Scraper avatar

Immowelt Scraper

Pricing

from $0.49 / 1,000 listings

Go to Apify Store
Immowelt Scraper

Immowelt Scraper

Scrape Immowelt.de listings for any German city, district or postcode: cold and warm rent or price, €/m², living space, rooms, address, energy class, all photos, agency and phone. Filter by price, rooms and size. Export JSON or CSV, call it via API, schedule it, or use n8n, Make and Zapier.

Pricing

from $0.49 / 1,000 listings

Rating

0.0

(0)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

4

Monthly active users

8 hours ago

Last modified

Share

Immowelt Scraper collects listings from immowelt.de, Germany's second-largest property portal (immonet.de listings are part of it), for any city, district, postcode, federal state or the whole country: apartments and houses to rent or buy, furnished flats, building plots, garages and parking spaces, offices, investment properties and foreclosure auctions. Every listing comes back as one clean row: cold rent and warm rent or purchase price as numbers, price per m², living space, rooms, floor, full address with postcode and district, energy class, all photos, publish date, and the agency with its contact person, office address and phone number — all in the search data, no extra charge.

Switch on the Listing details add-on and each row also gets coordinates, the full description, location and features texts, a features list with balcony / garden / cellar / lift / kitchen flags, ancillary and heating costs, deposit, commission, year built, condition, heating, the energy certificate (type, validity, demand), floor plans and attached documents.

Export JSON, CSV or Excel, call it from the API, schedule it, or use it from n8n, Make, Zapier, Google Sheets or an AI agent through MCP.

What is Immowelt Scraper?

A pay-per-result tool for anyone who needs German real-estate listings as data instead of web pages: investors comparing rents and prices per m², agencies watching new listings and competitors, relocation and proptech teams, researchers and AI agents. You type a place (Berlin, München, Hamburg Eimsbüttel, 10115, Bayern, or Deutschland for the whole country) or paste an immowelt search URL, pick the property type and filters, and get a table. Filters (price, rooms, living space) are applied by immowelt itself, so every row already matches.

The field names are the same as in our ImmoScout24 Scraper wherever the meaning is the same (price, priceKind, baseRent, totalRent, livingSpace, rooms, postalCode, district, energyEfficiencyClass, realtorCompany, realtorPhone …), so you can put both portals into one table.

What data can Immowelt Scraper extract?

FieldExample from a real run (Berlin, 23 October 2026)
title, url, idModernes Wohnen im Herzen Berlins - Stilvolle 2-Zimmer-Wohnung … · link · 26T5KB29UCB3
price, priceKind, priceText, currency1299 · baseRent (cold rent) · "1.299 €" · EUR
baseRent, totalRent1299 · 1499 (cold and warm rent, already in the search data)
pricePerSqm26.95
livingSpace, rooms, floor48.2 · 2 · 1
plotArea, usableArea, numberOfFloorsfor houses, plots, offices and investment objects
availableFrom, availableFromText2026-12-01 · "ab 01.12.2026"
address, street, postalCode, city, district, addressCompleteStallschreiberstraße 23, 10179 Berlin, Kreuzberg · true
energyEfficiencyClassB
realtorCompany, realtorName, realtorPhone, realtorAddress, realtorWebsite, realtorProfileUrl, realtorBadgeSTRATEGIS AG · Stefan Prill · 030 44353300 · Leipziger Straße 51, 10117 Berlin · … · Platin Partner
isPrivateOfferfalse (true = private landlord or seller; their name and phone are never returned)
publishedAt, publishedDaysAgo, updatedAt2026-10-13T13:02:31Z · 9 · 2026-10-15T18:48:36Z
imageUrl, images, imageCountmain photo, all photo URLs, 11
labels, commissionFree, hasFloorPlan, hasVirtualTour, hasVideoTour, newBuildingprovisionsfrei, Tauschwohnung …
propertyType, listingType, propertySubTypeapartmentrent · Wohnung zur Miete · penthouse
descriptionPreview, objectNumber, legacyIdfirst ~500 characters of the description, the agency's reference number
position, searchQuery, searchTotalResultsrank in the results, your input, how many listings the search has

Listing details (includeDetails, paid add-on): latitude, longitude (when the address is public), description, locationDescription, otherDescription, furnishingDescription, features, hasBalcony, hasTerrace, hasGarden, hasCellar, hasLift, hasBuiltInKitchen, furnished, petsAllowed, parking, bathrooms, yearConstructed, lastModernized, condition, heatingType, energySources, energyCertificateType, energyCertificateValidity, energyConsumption, energyConsumptionKind, serviceCharge, heatingCosts, heatingCostsNote, deposit, commission, purchasePrice, costs (every price line as shown), documents, floorPlanUrls and criteria (every labelled fact of the listing page).

How much does it cost to scrape Immowelt?

Pay per result. No start fee, no subscription. Error rows, "no results" rows and the run summary row are always free.

EventPrice (Apify Free plan)Per 1,000
Listing (search data incl. cold/warm rent, photos, agency and phone)$0.0007$0.70
Add-on: Listing details (only listings that really got them)$0.0007$0.70

$1 buys about 1,400 listings, or about 700 listings with details. The $5 monthly credit of the Apify Free plan covers about 7,000 listings. Paid Apify plans pay less per event (down to $0.49 per 1,000). Platform usage on top is small: 1,000 Berlin listings took 23 seconds and well under one cent of compute.

Set Max listings and the run never delivers more than that. Set Max cost per run in the run options and the run stops by itself, green, when the budget is used up — everything written is paid for, nothing beyond it.

How to scrape Immowelt listings

  1. Click Try for free (a free Apify account is enough).
  2. Type one or more places into Locations: a city, a district, a postcode, a federal state or Deutschland. Or paste immowelt search or listing URLs into Immowelt search or listing URLs.
  3. Pick the Property type (apartment for rent is the default) and, if you want, a price, rooms or living-space range and a sort order.
  4. Set Max listings (50 by default), switch on Listing details if you need the full texts and costs, and click Start.
  5. Open the Output tab and download the table, or read the dataset through the API.

Leave everything empty and the Actor runs a demo search for Berlin apartments to rent.

⬇️ Input

Two- to three-room apartments in Köln up to €1,200 cold rent, newest first, with details:

{
"locations": ["Köln"],
"propertyType": "apartmentrent",
"priceMax": 1200,
"roomsMin": 2,
"roomsMax": 3,
"sortBy": "newest",
"includeDetails": true,
"maxItems": 200
}

Search URLs from your browser keep their own place, type, filters and sort order; listing URLs return one fully detailed row each:

{
"startUrls": [
{ "url": "https://www.immowelt.de/classified-search?distributionTypes=Rent&estateTypes=Apartment&locations=AD08DE6345&priceMax=1500&numberOfRoomsMin=2" },
{ "url": "https://www.immowelt.de/suche/kaufen/haus/bayern/ad04de9" },
{ "url": "https://www.immowelt.de/expose/26RGHWFIUULV" }
],
"maxItems": 100
}

Property types: apartmentrent, apartmentbuy, houserent, housebuy, shorttermaccommodation (furnished / Wohnen auf Zeit), livingbuysite (building plots), garagerent, garagebuy, office, investment (Kapitalanlage), compulsoryauction (Zwangsversteigerung). priceType: "total" filters rentals by warm rent instead of cold rent. Sort orders: relevance, newest, priceAsc, priceDesc, livingSpaceAsc, livingSpaceDesc, pricePerSqmAsc.

⬆️ Output

A real row without the details add-on (Berlin, 23 October 2026; photo list shortened):

{
"type": "listing",
"id": "26T5KB29UCB3",
"url": "https://www.immowelt.de/expose/26T5KB29UCB3",
"title": "Modernes Wohnen im Herzen Berlins - Stilvolle 2-Zimmer-Wohnung mit Balkon und Einbauküche",
"propertyType": "apartmentrent",
"listingType": "Wohnung zur Miete",
"price": 1299,
"priceKind": "baseRent",
"priceText": "1.299 €",
"currency": "EUR",
"baseRent": 1299,
"totalRent": 1499,
"pricePerSqm": 26.95,
"livingSpace": 48.2,
"rooms": 2,
"floor": 1,
"availableFromText": "ab 01.12.2026",
"availableFrom": "2026-12-01",
"address": "Stallschreiberstraße 23, 10179 Berlin, Kreuzberg",
"street": "Stallschreiberstraße 23",
"postalCode": "10179",
"city": "Berlin",
"district": "Kreuzberg",
"addressComplete": true,
"energyEfficiencyClass": "B",
"isPrivateOffer": false,
"realtorCompany": "STRATEGIS AG",
"realtorName": "Stefan Prill",
"realtorPhone": "030 44353300",
"realtorAddress": "Leipziger Straße 51, 10117 Berlin",
"realtorWebsite": "https://www.strategis.eu/",
"realtorProfileUrl": "https://www.immowelt.de/profil/9e54973f13ffde498cb2190efc8b9890",
"realtorBadge": "Platin Partner",
"isNew": false,
"hasBrokerageFee": false,
"hasFloorPlan": true,
"publishedAt": "2026-10-13T13:02:31.563Z",
"publishedDaysAgo": 9,
"updatedAt": "2026-10-15T18:48:36.280Z",
"imageUrl": "https://mms.immowelt.de/b/d/a/0/bda01f83-60ee-409a-8722-1039583b0f66.jpg",
"images": ["https://mms.immowelt.de/b/d/a/0/bda01f83-60ee-409a-8722-1039583b0f66.jpg", "…"],
"imageCount": 11,
"descriptionPreview": "Im Luisenpark Berlin-Mitte finden Bewohner ein attraktives Umfeld. …",
"objectNumber": "222840",
"position": 2,
"searchQuery": "Berlin",
"searchTotalResults": 5882,
"scrapedAt": "2026-10-23T00:09:04.311Z"
}

With Listing details on, a Hamburg row also carries (shortened, real run):

{
"latitude": 53.604721, "longitude": 10.015546,
"description": "Organische, dynamische und geschwungene Formen, inspiriert von brasilianischer Architektur. …",
"features": ["Bezug: sofort", "7. Geschoss", "Personenaufzug", "Einbauküche", "Badezimmer: Badewanne, Bad mit Dusche", "Keller", "Bodenbelag: Parkett", "Balkon", "Terrasse", "Stellplatz"],
"hasBalcony": true, "hasTerrace": true, "hasCellar": true, "hasLift": true, "hasBuiltInKitchen": true,
"yearConstructed": 2023, "condition": "neuwertig", "heatingType": "Fußbodenheizung", "energySources": "Fernwärme",
"energyCertificateType": "Bedarfsausweis", "energyConsumption": 47.9, "energyConsumptionKind": "Energiebedarf",
"serviceCharge": 230, "heatingCosts": 175, "deposit": "3 Nettokaltmieten",
"costs": { "Kaltmiete": "2.594 €", "Nebenkosten": "230 €", "Heizkosten": "175 €", "Warmmiete": "2.999 €", "Kaution": "3 Nettokaltmieten" },
"floorPlanUrls": ["https://mms.immowelt.de/f/a/a/3/faa3dc6e-62fa-4b73-99bb-b7bca3807ed9.jpg"]
}

Rows with type: "error" explain a problem with one input (unknown place, wrong URL, a search with no results, an offline listing) and are free; a free type: "notice" row at the end sums up what was delivered and charged.

Use cases

Real-estate investors

Pull every apartment for sale or investment property in a city with price, m², price per m², year built, condition and energy class, and rank them against the rents of the same district.

Agencies and property managers

Track new listings in your area daily, see which agencies are active where, and benchmark your own asking rents and prices against the market.

Lead generation

Collect agency names, contact persons, office addresses, websites and business phone numbers from every listing in a region — the phone is part of the normal search data here.

Relocation services and tenants' platforms

Feed fresh rentals with photos, cold and warm rent, deposit and availability date into your own search or alerts.

Proptech, analysts and researchers

Build rent and price indices by postcode, follow supply over time, combine immowelt with ImmoScout24 for full market coverage, and study energy classes of the German housing stock.

AI agents and RAG

An agent can call the Actor with a plain place name and get structured JSON back: every field is described in the dataset schema, the input needs no URL, and a run of 50 listings finishes in about ten seconds.

Integrations

  • API — POST https://api.apify.com/v2/acts/lergassy~immowelt-scraper/run-sync-get-dataset-items?token=… with the input JSON returns the rows directly.
  • Python / JavaScript — apify-client: client.actor("lergassy/immowelt-scraper").call(run_input={"locations": ["Berlin"]}), then read client.dataset(run["defaultDatasetId"]).list_items().
  • n8n, Make, Zapier — use the Apify app or node, pick this Actor and map the dataset items.
  • Google Sheets — the Apify Google Sheets integration or the CSV export link.
  • Schedules and webhooks — run the same input every morning; a webhook on ACTOR.RUN.SUCCEEDED posts the dataset link to your system.
  • MCP — connect the Apify MCP server to Claude, Cursor or any MCP client and ask for immowelt listings in plain language.

Only new listings, every day

Put a name into Only new listings — memory name (for example berlin-watch), set Sort by to Newest first and schedule the run. Every run remembers the listings it delivered under that name and writes — and charges — only listings you have not received before.

Migrating from another Immowelt scraper?

You usedHere
location / searchLocationlocations (a list: several places in one run)
startUrls with search or /expose/ URLsstartUrls (classified-search and /suche/… URLs, filters included)
properties (listing IDs)startUrls with https://www.immowelt.de/expose/<id>
operation + estateType / searchPropertyTypepropertyType (e.g. apartmentrent, housebuy)
minPrice, maxPricepriceMin, priceMax
minRooms, maxRoomsroomsMin, roomsMax
minSpace, maxSpacelivingSpaceMin, livingSpaceMax
preferredWarmRentpriceType: "total"
order (datedesc)sortBy (newest, priceAsc, …)
fetchDetailsincludeDetails
monitoringModeonlyNewRowsStore (any name you choose)
maxItemsmaxItems

Troubleshooting

  • "immowelt does not know the place" — write the place the way immowelt's search box suggests it, or paste the search URL from the site. The run log shows which immowelt place each input was matched to (Frankfurt → Frankfurt am Main, Leipzig → the city, Hamburg Eimsbüttel → the borough).
  • Fewer rows than Max listings — the search simply has fewer listings; searchTotalResults shows how many exist. immowelt pages one search only up to 10,000 results: split a bigger area by district or price range.
  • A postcode returns fewer rows than immowelt's count — immowelt's postcode search also lists homes just across the border; the Actor keeps only the postcode you asked for.
  • No street or coordinates — the advertiser hides the exact address (addressComplete: false); postcode and district are still given. Coordinates come with Listing details and only for public addresses.
  • "Newest first" shows older publish dates — immowelt sorts by the last time a listing was (re)published or updated; updatedAt follows that order.
  • A search URL returns "does not exist (404/410)" — copy the URL again from your browser's address bar; hand-built /suche/… URLs often do not exist on immowelt.

❓ FAQ

The Actor collects only what immowelt.de shows publicly to any visitor, without logging in. Whether and how you may use the data depends on your purpose and on the laws that apply to you, including the GDPR for personal data and database rights. Private landlords' and sellers' names and phone numbers are never returned. If you are unsure, ask a lawyer.

Do I need an immowelt account, API key or proxy?

No. The Actor needs none of these.

How many listings can I get?

Everything a search has, up to immowelt's own limit of 10,000 per search: about 5,900 apartments for rent in Berlin, about 64,000 in all of Germany. Use several places or price ranges in one run for more.

How fresh is the data?

Live: every run asks immowelt at that moment. publishedAt and updatedAt show when a listing went online and when it was last changed.

Is the phone number included?

Yes, for listings by agencies and professional landlords the phone number they publish is part of the normal search data, at no extra charge. Private advertisers' numbers are never returned.

What do Listing details add, and when are they charged?

The full texts, features, coordinates, costs, building and energy-certificate data, floor plans and documents of each listing. You pay the add-on only for listings that really got them. If immowelt went offline with a listing in the meantime or refused its details, the row is still delivered with its search data and a free note saying why, and the add-on is not charged for it.

Does it cover immonet.de?

immonet.de now sends its visitors to immowelt.de, and the listings are searched there — so they are part of every search here.

Your feedback

Missing a field, a filter or a property type? Open an issue on the Issues tab — every report gets an answer, and most fixes ship within days.

You might also like

ActorWhat it does
ImmoScout24 ScraperGermany's largest property portal, same field names — combine both for full coverage
Kleinanzeigen ScraperClassifieds from kleinanzeigen.de, including private rentals and sales
Zillow ScraperUS homes for sale, rent and recently sold, with Zestimate and agent phone