Immowelt Scraper: Rents, Prices and Energy Data avatar

Immowelt Scraper: Rents, Prices and Energy Data

Pricing

from $0.66 / 1,000 listings

Go to Apify Store
Immowelt Scraper: Rents, Prices and Energy Data

Immowelt Scraper: Rents, Prices and Energy Data

Scrape Immowelt property ads in Germany and Austria by town, postal code, radius or filters, or paste search links, no login. Rows carry cold and warm rent or price, price per m2, living space, rooms, floor, energy class, place, photos and the agency's phones. Monitor new ads and price changes.

Pricing

from $0.66 / 1,000 listings

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Immowelt Scraper: Rents, Prices and Energy Data

Immowelt scraper for Germany's and Austria's property portal (immowelt.de and immowelt.at): search flats, houses, plots, parking, offices and shops for rent or sale by town, district, postal code, radius or a drawn area with Immowelt's own filters, or paste Immowelt search links, and get one row per ad with its cold rent and warm rent (or purchase price), price per m2, living space, rooms, floor, energy class, place, agency name and phones, photos and dates. Read single ads, new build projects, an agency's ads or every agency of a town. No login, no cookies, no captcha. Every search is read to its end, past Immowelt's 10,000 ads per order.

Who uses it: tenants, buyers and estate agents watching new listings, investors and analysts comparing rents and prices per m2 by district, relocation and proptech services, and teams building lead lists of German and Austrian estate agencies.

Quick start

  1. Open the Input tab and type a place in Places, for example Berlin, München, Prenzlauer Berg, 10115 or Landkreis München.
  2. Choose rent or buy and the property types, then add filters if you like: price or rent, living space, rooms, floor, energy class, features, seller type, keywords.
  3. Or paste one or more Immowelt search links (https://www.immowelt.de/classified-search?... or https://www.immowelt.de/suche/...) into Immowelt search links.
  4. Set Maximum ads and click Start. Download the rows as JSON, CSV or Excel, or read them through the Apify API.

For Austria set Country to at and type Austrian places (Wien, Linz, 1010). To watch a search for new ads, give the run a Monitor name and schedule it: each run delivers only the ads it never delivered before, and with Track changes and removals also the ads whose price changed and the ads taken offline.

What you get

One row per ad (type: "listing"), one row per agency (type: "agency") for agency links and the directory, one coverage row per search (type: "search"), free status rows for anything that could not be delivered, and a run summary (type: "summary").

FieldWhat it isFilled on (measured on the 763 ads of the platform matrix of 2026-10-19, build 0.1.9; the fields are read the same way since)
id, legacyId, url, marketImmowelt's 12 character id, the older id (a UUID), the ad's link, de or atevery ad
transaction, propertyType, propertySubType, isSwapApartmentrent or buy (auction, foreclosure), Immowelt's property type and sub type, a flat offered for swap (Tauschwohnung)every ad
price, coldRent, warmRent, warmRentEstimated, priceLabel, pricePerSqm, currencythe price shown first (the cold rent, Kaltmiete, for rentals), the cold and warm rent apart, whether Immowelt marks the warm rent as approximate, its label, the price per m2price 100, cold rent 97.2 and warm rent 35.8 percent of rentals
livingSpace, plotSpace, rooms, bedroomsliving space and plot in m2, rooms (Zimmer), bedrooms when the ad states themliving space 99.6, rooms 99.7 percent of flats and houses; bedrooms on few ads
floor, floorsInBuilding, availableFrom, availableNowfloor, floors of the building, the date the flat is free or "now"floor 81 percent of flats
energyClassthe energy class letter (A+ to H) on the card28.3 percent of flats and houses
city, district, postalCode, street, placeIdswhere the property is (the postal code as digits; empty on the rare card where Immowelt writes the town into it), the street when published, Immowelt's place codescity every ad, postal code every ad of the 763, district 97.2 percent, street 23.9 percent
title, headline, description, keyFacts, titleAdditionsthe ad's title, headline, the card's description (the whole text with Listing details), key facts and badgesevery ad
photos, photoCount, photoScenes, floorPlans, hasVideo, hasVirtualTourevery photo link, how many, Immowelt's scene label per photo (kitchen, bathroom ...), floor plansphotos 99.7 percent
createdAt, updatedAt, daysOnMarket, isNewfirst published, last update, whole days on the marketevery ad
sellerType, agencyName, agencyProfileId, agencyProfileUrl, agencyPhones, agencyAddress, agencyWebsite, agencyImprintUrlprofessional or private, and the agency's public contact dataof professional ads: agency name 100, phones 62.3, website 97 percent
agencyRating, agencyReviewsCount, agencyBadgethe agency's rating, number of reviews and Immowelt badge66.1 percent of professional ads
commissionFree, requiresWbs, propertyFingerprintno buyer's commission, a WBS (housing entitlement) needed, a key of the property's own facts (for reposts)every ad
searchKind, searchLabel, searchPage, rankwhich search, page and rank delivered the rowevery row
listingDetailswith Listing details on: the ad's full record (below)every ad read
agencyProfilewith Agency profiles on: the agency's public page (below)agencies whose page could be read
monitorBaselinewith change tracking: the monitor's own record of the version delivered (hashes), read back if the platform restarts the runchange tracking runs
change, reposton a monitor's change row: what changed, the previous price; on a repost: the removed ad it repeatschange rows
contactName, privateSellerName, privateSellerPhones, descriptionPhones, descriptionEmailsan agent's own name on an agency's ad, a private seller's shown name and phones, the numbers and addresses written into the description: only with Include personal data onwith the switch on

A sample row (shortened):

{
"type": "listing",
"id": "26L7X6JMV49Q",
"url": "https://www.immowelt.de/expose/48bcd04a-7f31-486c-aca9-d7dbd0b07e21",
"market": "de",
"transaction": "rent",
"propertyType": "APARTMENT",
"price": 640,
"coldRent": 640,
"warmRent": 790,
"pricePerSqm": 25.6,
"livingSpace": 25,
"rooms": 1,
"floor": null,
"energyClass": "C",
"city": "Frankfurt am Main",
"district": "Schwanheim",
"postalCode": "60529",
"sellerType": "professional",
"agencyName": "Wohnraum Entwicklungs GmbH",
"agencyPhones": ["+49 69 830 48 120"],
"photoCount": 7,
"createdAt": "2026-10-17T13:22:52.439Z",
"updatedAt": "2026-10-17T13:22:56.618Z",
"daysOnMarket": 1
}

The coverage row of each search says how many ads Immowelt holds for it (adsOnImmowelt), how many results pages were read, how many ads were delivered, left out by a filter (and by which) or already delivered, whether the search was read to its end (complete) and why it stopped (stoppedBy).

How much does it cost to scrape Immowelt?

You pay per event, with Apify's store discounts by plan:

EventFree planBronzeSilverGold
Listing (one ad row)$0.92 per 1,000$0.84 per 1,000$0.76 per 1,000$0.66 per 1,000
Listing details (add-on, per ad row that carries the full record)$0.92 per 1,000$0.84 per 1,000$0.76 per 1,000$0.66 per 1,000
Agency profile (per agency row; with the add-on once per agency per run)$0.005$0.0045$0.0042$0.004
Results page (monitor runs; a pasted search link's first page; pages of ads to leave out)$0.005$0.005$0.005$0.005
Actor start (once per run)$0.0095$0.0085$0.0075$0.0065

Platinum and Diamond plans pay the Gold price.

The Store pricing card shows these prices per 1,000 events: "$0.66 / 1,000" on the Listing row means one ad row costs $0.00066 on the Gold plan; "$5 / 1,000" on the Results page row means one results page costs $0.005; "$4 / 1,000" on the Agency profile row means one agency costs $0.004 on the Gold plan.

  • Never billed: ads left out by your filters, ads already delivered in the run, ads a monitor already knows, reposts you skip, ads no longer online, invalid inputs, coverage rows, status rows and the summary.
  • Results pages are billed in monitor runs: a monitor reads the newest ads since its last run each time (with change tracking, the whole search), so every results page it reads (up to 100 ads, each read to learn whether it is new) is billed, whatever it held. A pasted search link's first page is one Results page in any run (it is read to learn the search exactly as Immowelt applies it; its ads are delivered too). Searches by place, radius or area outside a monitor never pay it. A page that brings no ad the walk had not met yet (past 10,000 ads a search is read again in price and living space windows) is free.
  • Excluded features and words (excludeFeatures, excludeKeywords) are read as their own searches, whose ads are left out: each of their results pages (up to 200 ads to leave out) is billed as a Results page, in every run (leaving out the 2,531 Berlin rentals with a balcony or terrace reads 13 pages: $0.065 a run, measured).
  • Example on the Free plan: 1,000 ads from one search cost $0.0095 (start) + 1,000 listings ($0.92) = about $0.93. On the Gold plan the same run costs about $0.67.
  • Example of a daily monitor run (Gold) that reads 2 results pages and finds 40 new ads: start ($0.0065) + 2 results pages ($0.010) + 40 listings ($0.026) = about $0.04.

Input

SettingWhat it does
countryde (immowelt.de, default) or at (immowelt.at). Places, links and ad links of the other site are refused.
placesOne search per place: towns (Berlin), districts (Prenzlauer Berg), counties (Landkreis München), states, postal codes (10115, Austria 1010), resolved through Immowelt's own place lookup. Immowelt has no postal code places in Austria: a Vienna code (1010 to 1230) is searched as its district, any other Austrian code as the towns that list it, and every ad is checked on its own postal code (the other ads are left out free). A place that matches several is a free status row naming the candidates; add the postal code (Neustadt 67433).
radiusKmA circle of that radius around each place instead of the place's own outline.
searchAreasCircles ({ "lat": 52.52, "lng": 13.40, "radiusKm": 3 }) or polygons ({ "polygon": [[52.5, 13.3], ...] }), one search each.
transaction, propertyTypes, propertySubTypes, projectTypesRent (default), buy, auction or foreclosure; apartment, house, plot, parking, office, retail, hotel and restaurant, warehouse, agricultural, building, senior, other; Immowelt's 116 sub types; rentals: standard, new build, flatshare, swap, temporary; sales: resale, new build, investment, projected, life annuity.
minPrice, maxPrice, rentPriceTypePrice or monthly rent range; for rentals the cold rent (default) or the warm rent.
minLivingSpace ... maxYearBuilt, minBedrooms, maxBedroomsLiving space, plot, rooms, year built and bedrooms ranges, sent to Immowelt and checked on every row (year built by Immowelt alone). Few ads state a bedroom count, so a bedroom bound keeps only those.
minPricePerSqm, maxPricePerSqm, minFloor, maxFloorPrice per m2 and floor ranges (checked on every row).
energyClasses, energySources, features, excludeFeatures, heatingTypes, floors, excludeFloors, furnished, availableBefore, sellerType, conditions, wbs, saleWithGoodwillImmowelt's own filters (energy class letters or "none" for ads that show no class, balcony or terrace, garden, cellar, lift, fitted kitchen, parking, step free, pets, commission free ...), and the ads to leave out by feature or floor. Energy sources (gas, oil, district heating, heat pump, wind ...) are read from the record and need Listing details.
detailFeatures, excludeDetailFeaturesFeatures only the ad's full record shows, which Immowelt's search cannot filter: rented out (vermietet), listed building tax relief (Denkmalschutz-AfA), suitable for a flat share (WG-geeignet), a plot fully, partly or not developed (erschlossen). Need Listing details; an ad left out is free.
keywords, keywordsMatch, excludeKeywordsWords the ad must hold (all of them, or any one), and words it must not hold.
postedWithinDays or postedWithinHours, minDaysOnMarketOnly ads first published in the last N days or hours; only ads on the market for at least N days.
withPhoneOnly, withPhotosOnly, excludeAdIds, excludeDatasetIdsAds with a phone number, ads with photos; ads to leave out by id or link, or every ad of your earlier datasets.
sortNewest first (default), oldest first, relevance, price, price per m2, living space or rooms, each way.
searchUrlsImmowelt search links, read as Immowelt applies them (the search filters above do not apply to them; the row filters do).
adUrlsSingle ads: links or ids (also the older UUIDs), and new build project links (/projekte/expose/...: every unit of the project).
agencyUrls, includeAgencyListingsAgency pages (/profil/...): one agency row each and, by default, the ads its page lists.
agencyDirectoryTowns (Frankfurt am Main) or directory links: one agency row for every agency Immowelt lists in the town.
maxItems, maxItemsPerSearch, maxPagesPerSearchCaps per run, per search, per search in results pages.
includeDetails, includeAgencyProfiles, includePersonalData, includeRawDataThe add-ons, the personal data switch (below) and Immowelt's own objects.
descriptionMaxLength, descriptionFormat, omitEmptyFields, flattenOutput, outputFieldsShorter descriptions, text, HTML or Markdown, no empty fields, dotted flat keys for spreadsheets, only the fields you list.
monitorName, trackChanges, changeFields, includeUnchanged, flagReposts, skipRepostsThe monitor (below).
webhookUrl, webhookSecret, webhookHeaders, telegramBotToken, telegramChatId, slackWebhookUrl, discordWebhookUrl, whatsappPhoneNumberId, whatsappAccessToken, whatsappTo, notifyOnlyChanges, notificationMaxRowsFree notifications of the run's new rows.
failIfIncomplete, proxyConfigurationFail the run when a search could not be read to its end; Apify residential proxies (default, included in the price) or your own proxy links.

Every filter whose field the row carries (transaction, property type, sub type, place, price or rent, price per m2, living space, plot, rooms, bedrooms, floor, energy class, seller type, commission free, posted date, days on market, phone, photos) is checked again on each ad before it is billed; an ad that does not match is left out free and counted on the coverage row. Year built, project types, features, heating, positions in the building, furnished, availability, condition, WBS, goodwill and keywords are applied by Immowelt alone, since no field of the result card shows them; a radius or drawn area is Immowelt's to apply too.

Swap flats (Tauschwohnungen) are part of Immowelt's own rental results: they are delivered and flagged isSwapApartment; to leave them out, pick the other projectTypes.

Every search to its end

Immowelt serves the first 10,000 ads of one search in one order. This Actor reads them, then goes on in price order in windows that start at the last price read, then in living space order for the ads without a price, so a search of any size is read to its end. Measured on 2026-10-18: all 10,093 of 10,093 rentals in Bavaria in one walk, and a change tracking run of this Actor read all 10,790 Bavarian rental flats and houses to the end in 12 minutes. The coverage row says when ads past the first 10,000 came in price order. Immowelt has no oldest first order of its own: this Actor reads the newest first pages from the last one back for searches of up to 10,000 ads.

Listing details (add-on)

With Listing details on, each ad row carries listingDetails, read from the ad's record: the whole description and its sections, the area description, the position (latitude, longitude, geohash, and the distance from the centre of a radius search), the cost lines (cold rent, warm rent, service charges, heating costs, deposit, purchase price, buyer's commission, parking, every price line Immowelt prints), the energy certificate (type, validity, value, primary energy source, heating), condition, last modernisation, year built, house type, features, floor plans, videos and virtual tours. Billed as Listing details per row; an ad taken offline meanwhile is a free row.

Agency profiles (add-on) and agency rows

An agency row, and with Agency profiles on the agencyProfile of each ad row, carries the agency's public Immowelt page: phones, fax, e-mails, website, address, logo, rating and reviews count, how many ads it lists, its description and its legal record (legal name, register number and court, VAT number, supervisory authority, legal address). Billed once per agency per run, with the first row that carries it.

Monitor: new ads, changes and removals

Give the run a Monitor name and schedule it. Each run reads the ads first published since its last complete run (less 24 hours of margin; a first run reads the last 24 hours), newest first until the ads grow older than that, and delivers only the ads it never delivered before. With Track changes and removals, each run reads the whole search (a change to an older ad can sit on any page of Immowelt's list, so every page is read and billed), and an ad it delivered before comes back as a change row when its price changed (or another field you watch: warm rent, living space, rooms, energy class, floor, description, photos), with the previous price; an ad Immowelt no longer serves comes as a removed row and one that comes back as reappeared. With Flag reposts a new ad of a property the monitor saw removed carries repost; with Skip reposts it is left out free. Change and removed rows are billed as Listing; with Also deliver unchanged ads the others come free. Every results page a monitor run reads is billed. One monitor name belongs to one set of settings; its memory never forgets an ad, so an ad is never billed twice by one monitor.

Personal data

Agencies' data (name, phones, e-mail, address, register and VAT numbers) is business data and always delivered. A private seller's shown name and phone numbers, an agent's own name on an agency's ad, the numbers and addresses written into a description and an agency's legal representatives are delivered only when you turn on Include personal data (includePersonalData). With it off those fields are empty, and so are their copies in rawData. Titles, headlines and descriptions (of the ad, its record and an agency's page) and the record's price lines are delivered as readable plain text: typographic dashes and the minus sign become "-", the curly apostrophe and single quotes (’ ‘) become "'", special spaces become ordinary spaces, soft hyphens and zero width spaces and joiners are removed, HTML tags and the usual HTML entities (&,  , <, >, ", umlauts, ß, €, numeric ones and a few more) become text, and runs of ordinary spaces and tabs are collapsed to one. Every other short text (the price as shown, features, the agency's address on an ad row, reviews with their authors) gets the same character changes without the HTML reading; a person's name field is read like a title; the address, legal address and opening hours of an agency's page come as Immowelt writes them. Long texts are kept up to generous lengths (a title 300 characters, a description 30,000, an agency's description 5,000, a review 3,000). No name, number or address is removed from any text, whether the switch is on or off, and rawData holds Immowelt's own objects as served. You are responsible for a lawful use of personal data, GDPR included.

What this Actor does NOT do

  • No sort by distance. Immowelt's search has no distance order; a radius search's rows carry listingDetails.distanceKm (with Listing details) for your own sort.
  • No price history before your first monitor run. Immowelt keeps no history and answers a removed ad with "gone"; a monitor with change tracking records prices and removals from its first run on.
  • No other portals. Only immowelt.de and immowelt.at; no ImmoScout24 or Kleinanzeigen, no duplicate groups across portals, no prices in other currencies. Immonet now lives on Immowelt (every immonet.de address forwards there): Immonet links are refused with a free row saying so; search Immowelt instead.
  • No e-mails searched outside Immowelt. Agency e-mails are the ones the agency publishes on its Immowelt page.
  • No export into connected apps (Notion and the like). The rows go to Apify's own integrations, the API, webhooks and the chat notifications.
  • No prime location filter and no restructuring depreciation filter. Immowelt's search refuses both and none of 110 ad records read shows either; the listed building tax relief is a filter (detailFeatures).
  • No street or address search. Immowelt's place search serves towns, districts, counties, states and postal codes, no streets; draw a circle around an address (searchAreas) instead.
  • No search link Immowelt's page does not apply as written. A pasted link whose parameter the page ignores or changes (a value in another case, a kind the page does not apply) is refused with a free row, never read as a wider search.
  • No login and no account data: saved searches, alerts, messages and phone numbers behind a login are never read.
  • One request at a time: 1,000 ads take about 75 seconds (measured), so the default run timeout of one hour reads about 40,000 ads; raise the timeout in the run options for more. maxItems defaults to 100.
  • An agency page lists its ads in Immowelt's default list (for example 85 of 138); search the agency's town with its name as a keyword for the rest.

API examples

Run it and get the rows in one call (replace YOUR_TOKEN):

curl -X POST "https://api.apify.com/v2/acts/automation_craft~immowelt-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"places": ["Hamburg"], "propertyTypes": ["apartment"], "maxPrice": 1500, "minRooms": 2, "maxItems": 200}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('automation_craft/immowelt-scraper').call({ places: ['München'], transaction: 'buy', maxItems: 100 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'listing'));

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation_craft/immowelt-scraper").call(run_input={"country": "at", "places": ["Wien"], "maxItems": 50})
ads = [x for x in client.dataset(run["defaultDatasetId"]).iterate_items() if x["type"] == "listing"]

FAQ

How can I scrape Immowelt listings?

Type a place or paste an Immowelt search link, set a maximum, and start the run: no code, no login and no proxy setup. The rows come out as JSON, CSV or Excel, or through the Apify API.

Is there an Immowelt API for property listings?

Immowelt's own interface is for its advertisers' own listings, not for reading the portal's ads. This Actor works as one: call it through the Apify API with places, filters or search links and read the rows back as JSON.

All of them, up to your maxItems (100 by default) and the run's timeout (one hour reads about 40,000 ads). Immowelt serves 10,000 ads of one search in one order; this Actor goes on in price windows, so a search is read to its end, and its coverage row says how many ads Immowelt holds and how many were delivered.

Does it cover Austria (immowelt.at)?

Yes. Set country to at: the same searches, filters, links, agencies and monitor on immowelt.at, at the same prices.

This Actor reads only what Immowelt shows any visitor, without logging in or solving any captcha. Immowelt's listings form a database protected in Germany (section 87b UrhG: a substantial part of it, or repeated and systematic extraction of small parts, is reserved to its maker), so you are responsible for a lawful use: the parts you need, no rebuilding of the portal, Immowelt's terms, and the GDPR for any personal data.

Why does this Actor run with limited permissions?

It needs nothing more: it writes only to its own run's dataset and key-value store, a monitor keeps its memory in a named key-value store it creates itself, and it reads only the datasets you pick in Datasets of ads to leave out. Limited permissions keep your other Apify data out of its reach.

Changelog

  • 0.1 (2026-10-19): first release: searches by place, radius, area and filters in Germany and Austria, search links, ad and project links, agency pages and the agency directory; every search read to its end; oldest first; monitor with change tracking, removals, reappearances and reposts; Listing details and Agency profiles add-ons; notifications by webhook, Telegram, Slack, Discord and WhatsApp; private persons' data behind the personal data switch, texts unmasked (formatted as the Personal data section says); Austrian postal codes; filters on the features only the full record shows (rented out, listed building tax relief, plot development).

More data tools by Automation Craft