ImmobilleScout24 Swiss
Pricing
from $1.10 / 1,000 results
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
Maintained by CommunityActor stats
2
Bookmarked
23
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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 paste | What you get |
|---|---|
.../en/real-estate/rent/city-bern | The search results for that place |
.../de/immobilien/kaufen/ort-bern | Same, German site (fr/it work too) |
.../rent/4001413696 | One 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
| Field | Type | Description |
|---|---|---|
startUrl | Array | Recommended. Search or listing URLs copied from the website |
district | String | Location(s), e.g. Bern or Bern, Zürich, Lausanne. Used only when no URL is given |
operation | String | sale or rent |
propertyType | String | APARTMENT, HOUSE_OR_CHALET_OR_RUSTICO, OFFICE, … (see the input form) |
propertyTypes | Array | Several types in one run. Overrides propertyType |
minPrice / maxPrice | Integer | Purchase price, or gross monthly rent for rentals |
minRooms / maxRooms | Number | Room count range, halves included, e.g. 2.5–4.5. Applied by the search API |
minLivingSpace / maxLivingSpace | Integer | Living space range in m². Applied by the search API |
radius | Integer | Also search this far around the location, in metres (5000 = 5 km) |
publishedSince | String | Keep listings published since a date (2026-09-01) or an age (7 days) |
maxItems | Integer | Stop after this many listings (caps the whole run, not each URL) |
maxItemsPerUrl | Integer | Stop after this many listings from each URL / location |
endPage | Integer | Stop after this many result pages (100 listings per page, default 50) |
startPage | Integer | First result page, 1-based. Resume a big search where it stopped |
proxy | Object | Required. Apify Proxy, RESIDENTIAL, country CH — see below |
debugLog | Boolean | Log 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
photosanddocuments. - 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.
districtis looked up in the portal's own place autocomplete and the first match is used, so a keyword likeBernresolves 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
propertyTypesmultiplies the search requests (not the listing requests). publishedSinceis 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.