ImmobilleScout24 Swiss avatar

ImmobilleScout24 Swiss

Pricing

from $1.10 / 1,000 results

Go to Apify Store
ImmobilleScout24 Swiss

ImmobilleScout24 Swiss

▎ Scrape real-estate ads from ImmobiliareScout24. Search by city, region or paste listing URLs to collect price, address, rooms, floor area, floor number, property type, energy class, features, images and contact info — exported as JSON, CSV or Excel.

Pricing

from $1.10 / 1,000 results

Rating

0.0

(0)

Developer

Lukáš Širhal

Lukáš Širhal

Maintained by Community

Actor stats

2

Bookmarked

23

Total users

2

Monthly active users

3 days ago

Last modified

Share

ImmoScout24.ch Scraper

Scrape property listings from immoscout24.ch — Switzerland's largest real estate portal — for sale and rent, in all four site languages.

The easiest way: paste a URL

Search on immoscout24.ch the way you normally would, copy the URL out of your browser, paste it into startUrl. Done.

https://www.immoscout24.ch/en/real-estate/rent/city-bern
URL you pasteWhat you get
.../en/real-estate/rent/city-bernThe search results for that place
.../de/immobilien/kaufen/ort-bernSame, German site (fr/it work too)
.../rent/4001413696One single listing

Sale/rent is read from the URL, so the Operation field is ignored when you paste one. Paste as many URLs as you like — they are scraped in one run.

Or build the search in the input form

No URL? Fill in a Location (Bern, Zürich, Lausanne, a commune or a region), pick sale/rent and a property type, and optionally a price range.

Input

FieldTypeDescription
startUrlArrayRecommended. Search or listing URLs copied from the website
districtStringLocation(s), e.g. Bern or Bern, Zürich, Lausanne. Used only when no URL is given
operationStringsale or rent
propertyTypeStringAPARTMENT, HOUSE_OR_CHALET_OR_RUSTICO, OFFICE, … (see the input form)
propertyTypesArraySeveral types in one run. Overrides propertyType
minPrice / maxPriceIntegerPurchase price, or gross monthly rent for rentals
minRooms / maxRoomsNumberRoom count range, halves included, e.g. 2.54.5. Applied by the search API
minLivingSpace / maxLivingSpaceIntegerLiving space range in m². Applied by the search API
radiusIntegerAlso search this far around the location, in metres (5000 = 5 km)
publishedSinceStringKeep listings published since a date (2026-09-01) or an age (7 days)
maxItemsIntegerStop after this many listings (caps the whole run, not each URL)
maxItemsPerUrlIntegerStop after this many listings from each URL / location
endPageIntegerStop after this many result pages (100 listings per page, default 50)
startPageIntegerFirst result page, 1-based. Resume a big search where it stopped
proxyObjectRequired. Apify Proxy, RESIDENTIAL, country CH — see below
debugLogBooleanLog every request

Proxy — required setup

Apify Proxy, Residential group, country Switzerland. That is the prefilled default; leave it alone unless you know why you are changing it.

In the console: Proxy configuration → Apify Proxy → Residential → Country Switzerland.

Through the API or the CLI, send it as:

{
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "CH"
}
}

The search and listing endpoints sit behind DataDome bot protection, which answers 403 to datacenter IPs. On Datacenter proxies, on a non-Swiss country, or with no proxy at all, the run finishes green with zero results — the Actor warns about each of those in the log rather than letting it look like the site had nothing.

Residential proxy usage is billed by Apify on top of this Actor. A run started through the API without a proxy field gets no proxy at all, so always send the block above.

Output

{
"url": "https://www.immoscout24.ch/rent/4002086534",
"id": "4002086534",
"operation": "rent",
"offerType": "RENT",
"referenceId": "7884x.wxim5",
"listingType": "PREMIUM",
"title": "Furnished studio",
"description": "Beschreibung …",
"language": "en",
"availableLanguages": ["de", "en"],
"isMachineTranslated": true,
"price": 2950,
"currency": "CHF",
"priceInterval": "MONTH",
"baseRent": 2750,
"extraCosts": 200,
"totalRent": 2950,
"pricePerSqm": 128.26,
"typology": "APARTMENT-FLAT",
"categories": ["APARTMENT", "FLAT"],
"size": 23,
"rooms": 1.5,
"bathrooms": 1,
"yearLastRenovated": 2022,
"elevator": true,
"parking": true,
"garage": true,
"fittedKitchen": true,
"wheelchairAccessible": true,
"quiet": true,
"characteristics": {
"isGroundFloorRaised": true,
"numberOfRooms": 1.5,
"hasParking": true,
"hasDishwasher": true,
"hasElevator": true,
"numberOfBathrooms": 1,
"yearLastRenovated": 2022,
"isWheelchairAccessible": true,
"isQuiet": true,
"hasGarage": true,
"livingSpace": 23
},
"address": "Belpstrasse 23, 3007 Bern",
"street": "Belpstrasse 23",
"postalCode": "3007",
"locality": "Bern",
"district": "monbijou",
"canton": "bern",
"region": "BE",
"country": "CH",
"latitude": 46.944621091648,
"longitude": 7.433233501213,
"coordinatesAccuracy": "HIGH",
"geoTags": [
"geo-cityregion-mattenhof-weissenbuhl",
"geo-region-bern-mittelland",
"geo-canton-bern",
"geo-citydistrict-monbijou",
"geo-country-switzerland",
"geo-city-bern",
"geo-zipcode-3007"
],
"publishedAt": "2025-04-07T15:59:03.293Z",
"updatedAt": "2026-08-24T16:52:46.083Z",
"contacts": {
"commercialName": "City Pop AG",
"phones": ["+41315301242"],
"website": "https://citypop.com/",
"logo": "https://media2.homegate.ch/t_customer_logo/logos/l_e335city_v2.png",
"listerId": "e335city",
"subscriptionType": "Gold"
},
"photos": ["https://cdn.immoscout24.ch/listings/v2/e335city/4002086534/image/a.jpg"],
"photosCount": 1,
"documents": ["https://cdn.immoscout24.ch/listings/v2/e335city/4002086534/document/b.pdf"]
}

90 fields per listing. Prices are broken down the way the portal quotes them — baseRent + extraCosts = totalRent for rentals, purchasePrice for sales — and characteristics is passed through raw on top of the flattened columns, so rarer flags (distance to school/shop/transport, view, modernised, …) are never lost.

Every row also carries bfs (the Swiss federal municipality number, the join key to Federal Statistical Office data), sourceUrl (which start URL or location produced it) and scrapedAt, so datasets from scheduled runs can be diffed against each other.

Texts come back in English when the listing has an English version, otherwise in its primary language; language says which was used and availableLanguages lists the rest.

Notes

  • Swiss RESIDENTIAL proxies are required — see the proxy section above. The Actor rotates its session (and proxy IP) whenever it sees a block.
  • Photos and PDFs arrive in the same attachment list; they are split into photos and documents.
  • Price, rooms and living space are all filtered by the search API itself, for both sale and rent, so a filtered run costs no wasted requests.
  • district is looked up in the portal's own place autocomplete and the first match is used, so a keyword like Bern resolves to the city. Paste a URL when you need an exact region or canton.
  • Each property type is a separate search, so picking several in propertyTypes multiplies the search requests (not the listing requests).
  • publishedSince is the one filter applied to the scraped listing rather than to the search — the API has no verified "newest first" sort, so older listings still cost a request.