Immowelt Germany Property Scraper avatar

Immowelt Germany Property Scraper

Pricing

from $0.50 / 1,000 listings

Go to Apify Store
Immowelt Germany Property Scraper

Immowelt Germany Property Scraper

Collect property listings from immowelt.de search results for market research and listing monitoring. Search by city or postcode, rent or buy, and apartment, house or plot; alternatively supply an Immowelt search URL.

Pricing

from $0.50 / 1,000 listings

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 hours ago

Last modified

Categories

Features

Limited permissions

Share

Immowelt Scraper: Germany Property Listings

Collect German property listings from immowelt.de for rent or for sale, as clean rows: cold rent, warm rent or purchase price in EUR, rooms, living area, plot area, floor, energy class, city, district, postcode, availability, the publishing agency and photos. Search by city or postcode, or paste any Immowelt search link, and filter by price, rooms and size.

Built for property investors, agents, proptech analysts and anyone researching a move within or to Germany.

Use cases

  • Rent tracking: follow cold and warm rents (Kaltmiete and Warmmiete) for the same city districts week by week.
  • Comparable listings: pull current flats or houses for sale in a postcode to price an offer or a valuation, with price per square metre one formula away.
  • New-listing alerts: schedule the same search daily; the stable listingId shows which listings are new, and postedAt when they were created.
  • Relocation research: compare rents for two- or three-room flats across Berlin, Munich, Hamburg or Frankfurt districts in one spreadsheet.
  • Market snapshots and agency lists: see which agencies publish the most listings in an area, with published contact details when available.

Quick start

An empty input ({}) returns up to 20 apartments for rent in Berlin. To choose your own search, paste an Immowelt search link:

{
"searchUrl": "https://www.immowelt.de/suche/mieten/wohnung/berlin/berlin-10115/ad08de8634",
"maxResults": 20
}

Or search by place, deal and property type, and filter the results:

{
"location": "Hamburg",
"transactionType": "buy",
"propertyType": "apartment",
"roomsFrom": 2,
"priceTo": 450000,
"maxResults": 30
}

Several searches in one run (set fanOutMax to the number of searches):

{"locations": ["Hamburg", "München", "Köln"], "fanOutMax": 3, "maxResults": 90}

Input

NameTypeDefaultWhat it does
locationstringBerlinGerman city name or five-digit postcode.
transactionTypestringrentrent or buy.
propertyTypestringapartmentapartment, house or plot.
searchUrlstringemptyAn Immowelt search link (https://www.immowelt.de/suche/..., without ? parameters). Replaces location, deal and property type.
searchUrlsarrayemptyUp to 50 search links; replaces searchUrl and the locations.
locationsarrayemptyUp to 50 cities or postcodes; used when no search links are given.
fanOutMaxinteger1How many of your searches to run, 1 to 50. Raise it when you list several searches: with the default 1, only the first one runs.
priceFrom, priceTonumbernoneRange for price, the main displayed amount in EUR, inclusive.
roomsFrom, roomsTonumbernoneRoom range, inclusive.
areaFrom, areaTonumbernoneLiving area range in square metres, inclusive.
maxResultsinteger20Most listings for the whole run, 1 to 10,000.
proxyConfigurationobjectoffOptional connection setting; the default works for normal runs.

The price, room and area filters are applied to the listings each search returns, so a narrow filter can return fewer rows than maxResults. A listing without the filtered value (for example no price) does not match.

Output

One row per listing:

FieldWhat it holds
listingId, url, titleImmowelt listing ID, listing page and headline.
transactionType, propertyTyperent or buy; apartment, house or plot.
price, currency, priceOnRequestMain displayed amount in EUR. Price-on-request listings have price and currency null and priceOnRequest: true.
coldRent, warmRent, purchasePriceKept separate when the listing labels them.
rooms, livingArea, plotAreaRooms and areas in square metres.
floor, availableFromAs the listing writes them, in German (e.g. 1. Geschoss, frei ab sofort).
yearBuilt, energyClassWhen the search result shows them; year built is often null.
city, district, postcodeLocation.
agencyNamePublished publisher name: agency, sole trader, brand or private publisher.
phoneNumbers, contactCardPublished contact details (which can include names and emails) when available, otherwise null.
imagesPhoto links; empty when none are shown.
postedAt, updatedAtCreated and updated times from Immowelt (they can differ from the first public posting date).

Missing values are null. A listing found by two searches in the same run is returned once. The OUTPUT record of each run reports how many listings were delivered, why the run stopped and any search that was incomplete.

Output example

A record from the default Berlin rental search:

{
"listingId": "26T8X9U2Q98T",
"url": "https://www.immowelt.de/expose/a06d6ef2-1e76-4b3c-b084-03c11cce9e9d",
"title": "Cosmo Berlin - großzügige Wohnung mit Südbalkon und EBK im Weitlingkiez, sofort bezugsfrei",
"transactionType": "rent",
"propertyType": "apartment",
"price": 1799,
"currency": "EUR",
"priceOnRequest": false,
"coldRent": 1799,
"warmRent": 2149,
"purchasePrice": null,
"rooms": 3,
"livingArea": 87.8,
"plotArea": null,
"floor": "1. Geschoss",
"yearBuilt": null,
"energyClass": "B",
"city": "Berlin",
"district": "Friedrichsfelde",
"postcode": "10315",
"availableFrom": "frei ab sofort",
"agencyName": "STRATEGIS AG",
"phoneNumbers": null,
"contactCard": null,
"images": [
"https://mms.immowelt.de/c/1/f/c/c1fcfbc3-24bb-4c53-af37-95e2d3d78223.jpg",
"https://mms.immowelt.de/1/b/9/8/1b984a07-e01e-4ac0-a40a-b60bea6e6359.jpg"
],
"postedAt": "2026-10-30T15:15:17.552Z",
"updatedAt": "2026-10-30T15:15:27.446Z"
}

Download the dataset as JSON, CSV, Excel or XML, or read it from your own code with an Apify client.

Pricing

  • $0.0005 per listing delivered.
  • $0.005 per run start. The start event is charged per GB of memory; the default 512 MB run is one start event.

Worked examples: the empty-input run (20 listings) costs about $0.015; 100 listings about $0.055; 1,000 listings about $0.505. Filtered-out, duplicate and failed listings are not charged. When your maximum charge for the run is reached, the run stops and keeps the rows already saved.

Scheduling and monitoring

  • New listings: save your search as a task and schedule it daily. Rows whose listingId was not in the previous run are new.
  • Rent and price changes: compare price, coldRent and warmRent per listingId between weekly runs.
  • Delivery: connect the task to email, Slack, Google Sheets or a webhook with Apify integrations.

FAQ

How fresh is the data? Every run reads Immowelt at the time it runs. Nothing is cached between runs.

How many listings can I get? Each search returns at most its first 30 listings, even when Immowelt shows a larger total; deeper result pages are not read yet. For more coverage, run several narrower searches (one per district or postcode) with searchUrls or locations and raise fanOutMax (up to 50 searches, so up to about 1,500 listings per run).

Does it open each listing's page? No. It returns what Immowelt search results show, so detail-only data such as the full description or year built is often missing.

Which locations work? German city names and postcodes, matched by Immowelt's own search. A pasted search link is the most exact choice: use one for a specific district, or if a city name does not land where you expect.

What if a search fails? Listings already delivered are kept, and the run summary names the incomplete search; later searches in the same run are not started. A run that delivers nothing because the source was unavailable or the search was empty ends as failed with a readable message.

Is this legal? The Actor collects publicly visible listing information, including publisher names and published contact details. You are responsible for handling them in line with GDPR and the marketing rules that apply to you.

For help, contact Apify Support and include the run URL.