Vexaloom Labs

Use Immowelt Germany Rent & Buy Listings Scraper with Python

Scrape Immowelt.de - one of Germany's largest real-estate portals. Search rental and for-sale apartments and houses by city, price, rooms, living space, and amenities, or scrape a specific Immowelt search-results URL.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "buildState": [],
  "city": "Berlin",
  "distributionType": "mieten",
  "energyClass": [],
  "estateSubType": "",
  "estateType": "wohnung",
  "excludeGroundFloor": false,
  "excludeKeywords": [],
  "features": [],
  "floorLocation": [],
  "includeDetails": false,
  "includeKeywords": [],
  "maxDetails": 0,
  "maxItems": 5,
  "mode": "search",
  "projectTypes": [],
  "propertyIds": [],
  "sellerType": "any",
  "sortBy": "",
  "wbsRequired": false
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredHow to find listings: by German city and filters, by a pasted Immowelt search URL, or by listing IDs / expose URLs.
citystringoptionalGerman city or town, for example Berlin, Muenchen, Hamburg, Koeln or Frankfurt am Main. Any place Immowelt indexes can be used.
distributionTypestringoptionalChoose rentals, for-sale listings, or compulsory auctions.
estateTypestringoptionalBroad property category. Temporary living is rent-only and is automatically switched to rentals. All 14 Immowelt categories are supported.
estateSubTypestringoptionalOptional narrower sub-type. Use a value that belongs to the chosen property type; leave empty for any sub-type.
minPriceintegeroptionalMinimum monthly cold rent or purchase price in EUR.
maxPriceintegeroptionalMaximum monthly cold rent or purchase price in EUR.
minRoomsnumberoptionalSmallest number of rooms to include.
maxRoomsnumberoptionalLargest number of rooms to include.
minAreaintegeroptionalMinimum living space in square metres.
maxAreaintegeroptionalMaximum living space in square metres.
minPlotAreaintegeroptionalMinimum plot or land size in square metres.
maxPlotAreaintegeroptionalMaximum plot or land size in square metres.
minYearBuiltintegeroptionalEarliest year the building was constructed.
maxYearBuiltintegeroptionalLatest year the building was constructed.
minBedroomsintegeroptionalSmallest number of bedrooms to include.
maxBedroomsintegeroptionalLargest number of bedrooms to include.
featuresarrayoptionalOnly include listings that have all selected features. Leave empty for no feature filter.
energyClassarrayoptionalOnly include listings with one of the selected German energy certificate classes (A+ is the most efficient).
buildStatearrayoptionalOnly include listings in one of the selected building conditions.
projectTypesarrayoptionalOnly include listings with one of the selected project or tenure types, such as new build, resale, investment or apartment swap.
sellerTypestringoptionalFilter by private owners, professional agents, or any seller.
wbsRequiredbooleanoptionalOnly include listings that require a certificate of eligibility (Wohnberechtigungsschein).
floorLocationarrayoptionalOnly include listings on one of the selected floor locations.
excludeGroundFloorbooleanoptionalSkip ground-floor listings.
includeKeywordsarrayoptionalKeep only listings whose title or description contains every listed keyword (case-insensitive).
excludeKeywordsarrayoptionalDrop listings whose title or description contains any listed keyword (case-insensitive).
sortBystringoptionalOrder applied by Immowelt across the whole result set, not just one page.
maxItemsintegeroptionalHard cap on emitted listings. Full result sets are paginated, so values up to 10,000 are supported.
searchUrlstringoptionalA full Immowelt search-results URL, either a modern /classified-search URL or a /suche/... page. Any filters in the URL are respected.
propertyIdsarrayoptionalImmowelt classified IDs or full /expose/... URLs. Both forms can be mixed.
includeDetailsbooleanoptionalFetch each listing's exposé page to add construction year, heating, energy consumption, coordinates, amenities, price breakdown, documents and the full description. Adds one request per listing.
maxDetailsintegeroptionalHow many emitted listings get exposé enrichment. 0 means all emitted listings.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/CYHgaHuFfQWHxpnpj/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

German real-estate listings from Immowelt.de with price, rooms, living space, address, images, provider, energy and optional expose detail fields such as coordinates, amenities, documents and the full description.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build 7uMuGZ3LeiapvgTvJ and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.