ImmoScout24 Scraper: Rentals, Sales and Agencies avatar

ImmoScout24 Scraper: Rentals, Sales and Agencies

Pricing

from $0.66 / 1,000 listings

Go to Apify Store
ImmoScout24 Scraper: Rentals, Sales and Agencies

ImmoScout24 Scraper: Rentals, Sales and Agencies

Export ImmobilienScout24 ads in Germany and Austria by place, postcode, radius, search link, ad number or agency, no login. Rows hold Kaltmiete or Kaufpreis, Wohnfläche, Zimmer, address, photos; the full record adds Warmmiete, Nebenkosten, Kaufnebenkosten, fair price rating. Pay per ad, CSV or API.

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

3 days ago

Last modified

Share

ImmoScout24 Scraper: Rentals, Sales and Agencies

ImmoScout24 scraper and API for Germany's and Austria's property portal ImmoScout24 (ImmobilienScout24, immobilienscout24.de and immobilienscout24.at): type a city, district, quarter or German postcode, paste ImmoScout24 search links with their filters, give ad links or ad numbers, or name an agency, and get one row per ad with its cold rent or purchase price, living space, rooms, address, photos, energy class, advertiser type and how long ago it was posted. Turn on Listing details for the ad's full record (warm rent, service and heating costs, deposit, the purchase cost breakdown with broker commission, land transfer tax and notary, ImmoScout24's fair price rating, year built, heating, energy values, description texts, every photo, floor plans and the agency's contact and imprint), and Agency profile for the agency's ratings and listing counts. List the real estate agents of a place from ImmoScout24's agent directory.

No login, no cookies and no browser. Apartments and houses to rent or buy, plots, garages, rooms in shared flats, furnished short term rentals, assisted living, foreclosure auctions, investment property and six commercial kinds (office, retail, hospitality, hall and warehouse, special purpose, commercial plot): 18 property types.

What you can do with it

  • Pull every flat to rent in a Berlin district or a Munich postcode into a sheet, with cold rent, size, rooms and price per m², for a rent comparison or a flat hunt.
  • Read the newest ads of a search on a schedule (newest first, posted within the last N hours) and act on them the same morning.
  • Size up purchase costs: with Listing details each ad for sale carries ImmoScout24's own breakdown of broker commission, land transfer tax, notary and land registry costs, plus its fair price rating.
  • Build a list of the estate agencies active in a city: their listings for rent and for sale, their marketed references, their profiles with ratings and specializations, or every agent in ImmoScout24's agent directory for a place with their agency's office contact (the Agency profile add-on).
  • Study Austria with the same row shape: Vienna, Graz, Tyrol or any of the nine states and 94 districts.

Quick start

  1. Open the Input tab and type a place in Places, for example Berlin, München, Köln - Ehrenfeld or 10115. For Austria set Country of the places to Austria and type Wien or Graz.
  2. Pick the Property type (apartments to rent by default) and any filters: price, living space, rooms, year built, energy classes, must haves, advertiser, keywords.
  3. Or paste one or more ImmoScout24 search links or ad links into ImmoScout24 links.
  4. Set Max listings in the run and, for each ad's full record, turn on Listing details.
  5. Click Start. Download the rows as JSON, CSV or Excel, or read them through the Apify API.

What data you get

One row per ad (type: "listing") and one per agent directory entry (type: "agent"), plus free rows that tell you what happened:

  • one coverage row per search, agency or directory place (type: "search", see below),
  • free status rows (type: "status") for anything that was not read: a place ImmoScout24 does not know (with the candidates when several places match), a refused setting or link, an ad number that is gone (status: "not_found"), a stop at your maximum cost per run,
  • one free run summary (type: "summary") with the rows, pages, charges and requests of the run.

Fill rates below were measured on the 1,565 distinct search and lookup rows of 83 runs (the 17 agency listing rows of the same runs are left out: an agency's own listing door serves no title or type) on the Apify platform on 2026-10-31 (the file list is in the repo's docs/factory/fill-rates.json; Berlin, München, Wien, Sylt and a radius search around Berlin centre; apartments to rent and to buy, houses to buy, offices), with personal data off. The second column counts the 1,494 rows of apartments and houses.

FieldWhat it holdsFill, all rows (N=1,565)Fill, homes (N=1,494)
id, url, titleImmoScout24 ad number, the ad's link, its title100%100%
realEstateType, propertyTypeproperty type code and its label100%100%
price, priceKind, priceTextcold rent per month, purchase price or the commercial rent, with its kind and the text as shown (empty when the ad says "price on request")95.8%99.1%
pricePerSqmprice per m²94.6%99.1%
livingSpace, roomsliving space in m², rooms (commercial ads carry area and areaKind instead: 60 of 60 offices)95.5%100.0%
address.postcode, address.citypostcode, city, quarter, district and the address line as served100%100%
address.street, latitude, longitudestreet and position where the advertiser publishes them (addressComplete says so)38.6% (latitude)40.1% (latitude)
sellerType, isPrivateprivate, business or newHomeBuilder100%100%
energyClassenergy efficiency class where the ad shows it42.6%44.6%
coverPhotoUrl, photoUrlsthe ad's photos99.1%99.1%
publishedAgo, publishedAfter, publishedBeforethe age ImmoScout24 shows ("vor 3 Stunden") and the time window it means96.1%96.5%
earlyAccess, earlyAccessUntil, listingTier, onlyOnImmoScout24flags as served (earlyAccessUntil only on early access ads)99.9%, 13.7%, 96.1%, 99.9%
newHomeBuilderOffer, builderGroupa house builder's offers, one row per ad of the group100%100%
marketValue, minimumBidforeclosure auctionsauctions only
searchthe search that found the row: place, page, position, ImmoScout24's total100%100%

Why some figures are lower: price is empty only on ads that say "price on request" (every empty price); positions come only where the advertiser publishes the street (about half of business ads), and with personal data off a private advertiser's position is always empty; publishedAgo is empty on house builder offers, which ImmoScout24 shows without an age.

Listing details (the add-on, details, with detailsStatus: "read"), measured on 208 records read on 2026-10-31 (197 ads for sale, 10 ads to rent, the rest commercial; distinct ads of the same runs):

FieldWhat it holdsFill
details.costs.coldRent, details.costs.totalRent, details.costs.serviceCharge, details.costs.heatingCosts, details.costs.depositcold rent, warm rent, service and heating costs, deposit10 of 10 rent ads (cold rent)
details.purchaseCostspurchase price, additional costs, total, broker commission, land transfer tax, notary and land registry (amount and percent), the monthly rate text196 of 197 ads for sale
details.priceRating, details.priceInfoImmoScout24's fair price rating and its price bar65.9% (rating)
details.building.yearConstructedyear built, with last refurbishment, condition, interior quality, heating, firing, floor, apartment and building type94.7%
details.building.energyClassenergy class, with the certificate type and energy value80.3%
details.descriptionthe description, with furnishingText, locationText, otherText and every titled text99.0%
details.photosevery photo, with videos, virtualTours and documents (floor plans and PDFs)100.0%
details.agency.companythe agency's company, with its address, phones, rating, imprint, e-mail, commercial register, VAT id and profile link84.1% (175 of 208; private advertisers have none)
details.agency.phonesphone numbers of the advertiser (a private advertiser's only with personal data on)89.4%
details.objectNumberthe advertiser's own object number100.0%
details.areas, details.features, details.availableFrom, details.factsareas with bedrooms and bathrooms, balcony, garden, cellar, lift, kitchen, pets, parking, rented, available from, and every labelled fact as servedby ad

Agency profile (the add-on, agencyProfile, once per agency per run, on listing rows and on agent rows of the directory): company name, focus, e-mail, phone, fax, imprint, address, logo, average rating and rating count, ratings by period with seeker and owner sub ratings, badges, listing counts, followers, specializations, services and operation areas.

Agent rows (type: "agent", from agentDirectoryPlaces), measured on 356 distinct entries of Berlin (distinct by content): agentType, company (292 of 356), agencyProfileUrl, companyLogoUrl, badges, followers, activeListings, marketedObjects, shareForSalePercent, shareForRentPercent, rating (290 of 356), ratingCount, ownerRecommendationPercent; with personal data on also the agent's name, title, photoUrl and agentProfileUrl.

The coverage row: was the search read to its end?

Every search (and every agency and directory place) ends with one free row that says how far it got (shortened):

{
"type": "search",
"searchKey": "sce97168bfe294ed3",
"label": "location 1",
"place": "Berlin",
"country": "de",
"propertyTypes": ["apartmentrent"],
"sort": "newest",
"total": 4607,
"met": 100,
"delivered": 20,
"pagesRead": 1,
"pagesFailed": 0,
"skippedFree": {},
"repeats": 0,
"beyondCaps": 80,
"withheldByChargeLimit": 0,
"complete": false,
"stoppedBy": "max_items"
}

total is ImmoScout24's own count, met the distinct ads the run saw, delivered the rows you got. complete is true only when every page was read, nothing failed, no cap or cost limit stopped the walk, and the ads met reach ImmoScout24's total. When it is false, stoppedBy says why (max_items, max_items_per_search, max_pages, charge_limit, page_failed, source_total_not_reached). skippedFree counts the ads a check left out free, by reason (for example posted_outside_window).

Example listing row (a search row with personal data off, shortened)

{
"type": "listing",
"id": "172235668",
"url": "https://www.immobilienscout24.de/expose/172235668",
"country": "de",
"realEstateType": "apartmentrent",
"propertyType": "Apartment for rent",
"title": "Pärchendomizil in der Gropiusstadt",
"price": 584,
"priceKind": "coldRent",
"priceText": "584 €",
"currency": "EUR",
"livingSpace": 64,
"rooms": 2,
"pricePerSqm": 9.13,
"address": {
"line": "Goldammerstr. 47, 12351 Berlin, Buckow (Neukölln)",
"street": "Goldammerstr.",
"houseNumber": "47",
"postcode": "12351",
"city": "Berlin",
"quarter": "Buckow",
"district": "Neukölln"
},
"addressComplete": true,
"latitude": 52.43063,
"longitude": 13.46734,
"sellerType": "business",
"isPrivate": false,
"listingTier": "L",
"earlyAccess": false,
"energyClass": "B",
"coverPhotoUrl": "https://pictures.immobilienscout24.de/listings/93b81ed4-5d8c-4f27-840a-b9b98fafaf27-2121964518.jpg/ORIG/resize/800x600>/format/webp/quality/80",
"publishedAgo": "vor 3 Stunden",
"publishedAfter": "2026-10-31T00:11:55.030Z",
"publishedBefore": "2026-10-31T01:41:55.030Z",
"search": { "key": "sce97168bfe294ed3", "label": "location 1", "place": "Berlin", "page": 1, "total": 4607, "position": 1 },
"details": null,
"detailsStatus": null,
"language": "de",
"scrapedAt": "2026-10-31T04:11:55.030Z"
}

Example Listing details (an apartment for sale in München, shortened)

{
"type": "listing",
"id": "172233814",
"realEstateType": "apartmentbuy",
"price": 570000,
"priceKind": "purchasePrice",
"livingSpace": 71,
"rooms": 2,
"detailsStatus": "read",
"details": {
"costs": { "purchasePrice": 570000, "pricePerSqm": 8065, "commissionNote": "3,57% inkl. der ges. MwSt. ", "commissionFree": false, "houseMoney": "355 €" },
"purchaseCosts": {
"purchasePrice": 570000,
"additionalCosts": 51699,
"totalCosts": 621699,
"brokerCommission": { "text": "20.349 €", "percentage": "3,57 %", "value": 20349 },
"landTransferTax": { "text": "19.950 €", "percentage": "3,5 %", "value": 19950 },
"notaryCosts": { "text": "8.550 €", "percentage": "1,5 %", "value": 8550 },
"landRegistry": { "text": "2.850 €", "percentage": "0,5 %", "value": 2850 }
},
"priceRating": { "status": "FAIR_OFFER", "label": "Guter Preis", "level": 3 },
"areas": { "livingSpace": 70.68, "rooms": 2 },
"building": { "yearConstructed": 1988, "condition": "well_kept", "interiorQuality": "normal", "heatingType": "floor_heating", "firingTypes": "gas", "energyCertificate": "energy_consumption", "apartmentType": "apartment" },
"availableFrom": "nach Vereinbarung",
"objectNumber": "WG98658",
"agency": { "company": "Hegerich Immobilien GmbH", "contactName": null, "rating": 3.5, "ratingStars": 16, "verified": true }
}
}

How much does it cost to scrape ImmoScout24?

You pay per row delivered (pay per event). Prices per 1,000 events:

EventFreeBronzeSilverGold
Listing (one ad row)$0.92$0.84$0.76$0.66
Listing details (add-on, only when on)$0.75$0.60$0.56$0.45
Results page (one page of up to 100 results, 50 for commercial property)$0.60$0.60$0.50$0.40
Agency profile (add-on, once per agency per run)$8.00$7.00$6.50$6.00
Agent (one agent directory row)$0.92$0.84$0.76$0.66

Each run also pays a one time Actor start of $0.004 on every plan. Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$0.92 / 1,000" on the Listing row means one ad costs less than a tenth of a cent, and "$8.00 / 1,000" on the Agency profile row means one agency profile costs 0.8 cents.

  • The prefilled run (20 apartments to rent in Berlin) costs $0.0230 on the Free plan: 20 listings ($0.0184), one results page ($0.0006) and the start ($0.004). On Gold, $0.0176.
  • 1,000 listings of a search cost $0.668 on Gold (1,000 x $0.00066 + 10 pages x $0.0004 + $0.004) and $0.930 on Free.
  • With Listing details on, add $0.45 (Gold) to $0.75 (Free) per 1,000 records read: $1.118 on Gold, $1.680 on Free for 1,000 ads with their records.
  • An agency profile costs 0.6 to 0.8 cents, once per agency per run, however many of its ads you get.
  • 1,000 agents from the agent directory cost $0.664 on Gold and $0.924 on Free, start included (a directory page has no page fee).
  • Free: repeats (an ad found by two of your searches is charged once per run), ads a filter or the posted window leaves out, skipped results, a page that delivered no charged listing, a record that could not be read (the ad's row is delivered and charged as a Listing, its details are not charged), an agency profile that could not be read, gone ads asked by number, and every coverage, status and summary row. A run with invalid input charges only the start fee.
  • Set a maximum cost per run in the Apify Console: the run stops at the first row it cannot pay, delivers no row unpaid and says so on a free status row.

How fast is it?

A run reads ImmoScout24 at the steady pace ImmoScout24 answers from one address, one request at a time:

  • Search rows: about 100 every 10 to 11 seconds, roughly 30,000 an hour (1,000 rows took 108 seconds on 2026-10-31). Commercial searches give 50 results a page, so about half that.
  • Listing details: each record is one paced request, about 300 to 500 records an hour (150 records took 30 minutes on 2026-10-31). Plan big detail runs accordingly, or read the search rows first and the records of the ads you keep.
  • Agent directory: 12 agents a page.

For large runs raise the run timeout in the run options; a run that times out keeps every row it delivered.

Input

SettingWhat it does
locationsPlace names as ImmoScout24 writes them (Berlin, München, Köln - Ehrenfeld, Hamburg - Altona-Altstadt), German postcodes (10115), Deutschland for the whole country, or ImmoScout24 place codes (/de/bayern/muenchen). A name that matches several places, or none, is a free row with the candidates.
countryde (default) or at: Austrian places are the nine states and 94 districts (Wien, Graz, Mödling, Tirol).
startUrlsImmoScout24 search links from immobilienscout24.de (/Suche/..., place, radius and drawn area searches) or immobilienscout24.at (/regional/...) with their filters, and ad links (/expose/<number>). A setting you give replaces the same filter of the link; the link's own sort and page are not read.
listingIdsAd numbers (171968189) or ad links; each ad is read from its full record. A gone ad is a free not_found row.
latitude, longitude, radiusKmA radius search, 0.1 to 500 km.
agencies, agencyListingTypes, agencyPropertyKindsAgencies by agency link, agency number or profile link; their tabs (for sale, for rent, marketed references) and kinds (residential, commercial).
agentDirectoryPlaces, agentDirectorySortPlaces whose agents to list from ImmoScout24's agent directory; ImmoScout24's order or best rated first.
propertyType, commercialOfferOne of 18 property types (default apartments to rent); for commercial types, to rent, to buy or both.
rentBasisThe rent price filter bounds the cold rent (default) or the warm rent (apartments).
priceMin, priceMax, livingSpaceMin, livingSpaceMax, roomsMin, roomsMax, plotAreaMin, plotAreaMax, yearBuiltMin, yearBuiltMax, floorMin, floorMaxRanges.
energyClasses, equipment, apartmentTypes, houseTypes, heatingTypes, petsAllowed, constructionPhasesEnergy classes A+ to H; must haves (balcony, fitted kitchen, garden, cellar, lift, parking, guest toilet, step free access; each only on the property types ImmoScout24 applies it to, otherwise the search is refused free); apartment and house types; heating; pets; construction phase.
newBuildingsOnly, excludeNewBuildProjects, commissionFreeOnly, luxuryOnly, newHomeBuilderOffersOnly, rentedNew buildings only, leave out new build project units, commission free only, luxury homes, house builder offers, rented or vacant.
keywordsWords ImmoScout24 searches in the ad text (altbau, möbliert).
sellerTypeEveryone, private advertisers only, or agencies and businesses only.
postedWithinHoursOnly ads posted in the last N hours; with newest first the search stops once two pages are older.
earlyAccessListingsInclude, leave out or keep only the ads ImmoScout24 shows its paying members first.
sortnewest (default), oldest, priceAsc, priceDesc, livingSpaceAsc, livingSpaceDesc, standard (ImmoScout24's own order, which lists paid placements first).
maxItems, maxItemsPerSearch, maxPagesPerSearch, skipItemsCaps for the run and per search, and results to skip at the top of each search (free). To continue a capped search, set skipItems to the resumeSkipItems value of its coverage row (a house builder's group counts as one result, so a group the cap cut is read again whole).
includeDetails, includeAgencyProfileThe Listing details and Agency profile add-ons. The Agency profile needs Listing details for ads found by search or number (the agency is found through the ad's record); agencies given by their profile links and agents of the directory carry it without.
includePersonalDataOff by default (see below).
languagede (default) or en: titles and texts ImmoScout24 translates itself, labels and age texts.
outputFieldsKeep only these fields in each listing row (price, address.city, details.costs.totalRent); paid add-ons stay whole.
proxyConfigurationLeft empty: Apify's datacenter proxy, included in the price. Or your own http proxy links.

Input examples

The prefill (20 apartments to rent in Berlin):

{
"locations": ["Berlin"],
"propertyType": "apartmentrent",
"maxItems": 20
}

Two-room flats in two Munich postcodes posted in the last 24 hours, with their records:

{
"locations": ["80331", "80797"],
"propertyType": "apartmentrent",
"roomsMin": 2,
"roomsMax": 2,
"priceMax": 1800,
"rentBasis": "warm",
"postedWithinHours": 24,
"sort": "newest",
"includeDetails": true,
"maxItems": 200
}

A pasted search link and ad numbers:

{
"startUrls": ["https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mieten"],
"listingIds": ["171968189"],
"maxItems": 100
}

Houses to buy in Austria, in English:

{
"country": "at",
"locations": ["Graz", "Tirol"],
"propertyType": "housebuy",
"language": "en",
"maxItems": 100
}

An agency's listings with its profile, and the agents of a postcode:

{
"agencies": ["https://www.immobilienscout24.de/anbieter/profil/hegerich-immobilien-gmbh"],
"agencyListingTypes": ["forSale", "forRent"],
"includeAgencyProfile": true,
"maxItems": 100
}
{
"agentDirectoryPlaces": ["10115"],
"agentDirectorySort": "rating",
"maxItems": 50
}

Personal data

Off by default. With includePersonalData off, a private advertiser's name, phone numbers, street, house number and exact position (and the links they add: videos, tours, documents) are empty, the address line keeps the postcode, city, quarter and district; an agency's contact person's name, a house builder offer's contact heading and an agency's team list are empty; agent directory rows have no name, title, photo or agent page. Business contact data (company, address, phones, e-mail and imprint of an agency) is delivered, except a company name, e-mail, website or profile link that holds the name of the person the row names (an agency named after its agent, a team member of its profile), and free texts (descriptions) always come as the advertiser wrote them. With it on, those fields are filled as ImmoScout24 shows them. You are responsible for using personal data lawfully (GDPR included).

What this Actor does NOT do

  • No monitoring mode: no "only new since the last run", no price change or removal tracking, no alerts and no price history. Run it on a schedule with sort: "newest" and postedWithinHours to get the ads of a time window, and compare runs in your own sheet.
  • No view and contact request counts: ImmoScout24 shows them only to its paying members.
  • No "price reduced" marker: ImmoScout24's app serves none on search rows or records.
  • No filter by agency name in the agent directory: ImmoScout24's directory takes a place, not a name, so a name filter would read every page of a city to find a few agencies. Give the agency's link to agencies instead.
  • No immoscout24.ch: it is a different site run by a different company.
  • No geocoding: positions are the ones ImmoScout24 serves, and only where the advertiser publishes the address.
  • No currency conversion: prices stay in euros as served.
  • No AI analysis or deal scoring; ImmoScout24's own fair price rating and price bar come with Listing details.
  • No e-mail lookup on agencies' own websites: the e-mail is the one in the agency's ImmoScout24 imprint or profile.
  • No sort by rooms or distance: ImmoScout24 refuses those orders. A pasted link's own sort is not read.
  • Link filters ImmoScout24's app has no filter for (old buildings, furnished, student, swap flats, a link's private seller part) are refused free, never approximated; use sellerType for private advertisers.
  • Marketed references of an agency (sold or let objects) come as list rows only, without Listing details.
  • House builder offers show no age, so a posted window leaves them out (free).
  • Austrian places by name are the nine states and 94 districts, and Austria has apartments, houses and plots only; other Austrian searches can be pasted as immobilienscout24.at links.

FAQ

Does ImmoScout24 have an API for listings?

ImmoScout24's developer portal says its search APIs are only available to content partners, not for data delivery. This Actor works like an API: send a JSON input through the Apify API and read the ads as JSON, CSV or Excel.

This Actor reads only what ImmoScout24 shows without a login and leaves private persons' data out unless you turn it on. ImmoScout24's terms of use forbid automated queries and building a database from its listings; whether and how you use the data is your decision and responsibility, GDPR included.

Can I get cold rent, warm rent and the price per m²?

Yes. Every rental row carries the cold rent (price) and pricePerSqm; with Listing details on, the record adds the warm rent (details.costs.totalRent), service and heating costs and the deposit. The rent price filter can bound the cold or the warm rent (rentBasis).

How do I export ImmoScout24 listings to CSV or Excel?

Run the Actor and open the run's dataset: the Listings view shows ad number, link, title, type, price, size, rooms, postcode, city, advertiser, energy class and age, and the Export button saves it as CSV, Excel or JSON. outputFields keeps only the fields you name.

Does it include the ads ImmoScout24 shows Plus members first?

Yes, they come in the search like any other ad, marked earlyAccess: true with ImmoScout24's text and the time the early access ends (earlyAccessUntil). Early access ads includes them (default), leaves them out or keeps only them.

Why does this Actor run with limited permissions?

It needs nothing beyond its own run storage (the dataset it writes and its own key value store), so it runs with Apify's limited permissions: it cannot read or change anything else in your account.

Use it through the API

curl -X POST "https://api.apify.com/v2/acts/automation_craft~immoscout24-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"locations": ["Berlin"], "propertyType": "apartmentrent", "maxItems": 100}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/immoscout24-scraper').call({ locations: ['München'], propertyType: 'apartmentbuy', maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'listing').length);
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/immoscout24-scraper").call(run_input={"listingIds": ["171968189"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("title"), item.get("price"))

Changelog

  • 0.1 (2026-10-31): first version.

More data tools by Automation Craft