immoscout24.ch APIimmoscout24.ch ↗
Search and retrieve residential and commercial property listings from ImmoScout24.ch. Filter by location, price, rooms, and offer type via 6 structured endpoints.
curl -X GET 'https://api.parse.bot/scraper/5a1f2c54-82bd-4f5d-8200-de59a3c1fc9b/search_listings?page=1&location=city-zurich&offer_type=rent' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for residential property listings for rent or buy on immoscout24.ch. Returns paginated results with full listing data including address, price, characteristics, and images. Results are ordered by top listing score.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| location | string | Location slug (e.g. 'city-zurich', 'canton-geneva', '8048'). |
| price_to | number | Maximum price in CHF. |
| rooms_to | number | Maximum number of rooms. |
| offer_type | string | Listing offer type: 'rent' or 'buy'. |
| price_from | number | Minimum price in CHF. |
| rooms_from | number | Minimum number of rooms. |
{
"type": "object",
"fields": {
"result": "object containing listings array, page, pageCount, resultCount, hasNextPage",
"isLoading": "boolean",
"searchModel": "object with applied search parameters",
"dataFetchError": "null or error string"
},
"sample": {
"data": {
"result": {
"page": 1,
"start": 0,
"listings": [
{
"id": "4002086198",
"listing": {
"prices": {
"rent": {
"gross": 2208,
"interval": "MONTH"
},
"currency": "CHF"
},
"address": {
"street": "Militärstrasse 106",
"locality": "Zürich",
"postalCode": "8004"
},
"offerType": "RENT",
"categories": [
"APARTMENT",
"FLAT"
],
"characteristics": {
"livingSpace": 24,
"numberOfRooms": 1.5
}
}
}
],
"pageCount": 50,
"hasNextPage": true,
"resultCount": 1065,
"itemsPerPage": 20,
"hasPreviousPage": false
},
"isLoading": false,
"searchModel": {
"page": 1,
"pageSize": 20,
"locations": [
"geo-city-zurich"
],
"offerType": "rent"
},
"dataFetchError": null
},
"status": "success"
}
}About the immoscout24.ch API
The ImmoScout24.ch API provides access to Swiss property listings across 6 endpoints, covering both residential and commercial real estate. Use search_listings to query rentals and sales filtered by location slug, price range, and room count, then retrieve full listing details — including geo-coordinates, agency information, and HTML descriptions — via get_listing_details.
Search and Filter Listings
The search_listings endpoint accepts location slugs such as city-zurich, canton-geneva, or postal codes like 8048, alongside price_from, price_to, rooms_from, rooms_to, and offer_type (rent or buy). Results are paginated and include a resultCount, pageCount, and hasNextPage flag. Each listing in the returned array carries address, price, room count, images, and a top-listing score ordering. For commercial property — offices, retail, and industrial spaces — search_office_listings mirrors this structure with location and offer type filters.
Listing Detail Endpoints
get_listing_details takes a listing_id sourced from search results and returns the full record: gross price in CHF, rooms, title, an address object with street, postalCode, locality, region, and geoCoordinates, an HTML description, and an array of images. It also includes a company object with the agency's legalName, logoUrl, and address. If you only need images or agency data, get_listing_images and get_listing_company return those subsets individually without fetching the entire listing payload.
Property Types and Data Coverage
get_property_types returns a static list of property category strings used across listings on the platform, useful for building filter UIs or categorising search results programmatically. All monetary values are denominated in CHF, and the currency field in get_listing_details confirms the currency code. Commercial searches via search_office_listings currently do not support room-based filtering, reflecting the nature of commercial inventory on the source platform.
- Aggregate Swiss rental listings by canton and compare median prices using
price_from/price_tofilters - Build a property alert system that polls
search_listingsfor new results matching a postal code and room count - Populate a CRM with agency contact data pulled from
get_listing_companyfor each listed property - Generate geo-coded property maps using
geoCoordinatesreturned byget_listing_details - Compare commercial office availability across Swiss cities using
search_office_listingswith location slugs - Extract listing image galleries via
get_listing_imagesfor use in a property comparison interface - Classify listings by property type using the static values from
get_property_types
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ImmoScout24.ch have an official developer API?+
How does location filtering work in `search_listings`?+
location parameter accepts slugs in three formats: city slugs like city-zurich, canton slugs like canton-geneva, and Swiss postal codes like 8048. Omitting the parameter returns results across all locations. You can combine location with price_from, price_to, rooms_from, and rooms_to in the same request.Does `search_office_listings` support room count or price filters?+
location, offer_type, and page. Room and price range filtering is available on search_listings for residential properties but not on the commercial endpoint. You can fork this API on Parse and revise search_office_listings to add those filter parameters if your use case requires them.Are there limitations on how deep pagination goes?+
pageCount and hasNextPage in the result object, so you can iterate until hasNextPage is false. However, very broad searches can return a large number of pages, and the platform may limit how far into results you can paginate for any given query. Narrowing by location or price range reduces result set size and makes full traversal more reliable.Does the API return historical listing data or price history?+
get_listing_details reflects the listing as it currently appears on the platform. You can fork this API on Parse and revise it to add a data-persistence layer if you need to track price changes over time.