# ImmoScout24 CH Search API Documentation

Search public ImmoScout24 Switzerland listings by offer type, location, price, rooms, living space and features. Each listing carries the id, price (CHF), rooms, living space, floor, features, address with coordinates, image urls, agency and the public listing url. Pages hold 5, 10, 20 or 50 rows; the first 1000 results of a search can be paged. Rent and room bounds are enforced on every row. A valid empty result is a successful response.

- **Documentation:** [https://scrappa.co/docs/immoscout24-ch-api/immoscout24_ch_search](https://scrappa.co/docs/immoscout24-ch-api/immoscout24_ch_search)
- **API group:** ImmoScout24 CH API
- **Endpoint:** `GET https://scrappa.co/api/immoscout24-ch/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `offer_type` | string | No | Rent or buy listings. Defaults to rent. Example: rent. |
| `property_type` | string | No | apartment_or_house, apartment or house. Defaults to apartment_or_house. |
| `geo_tags` | string | No | Comma-separated geo tags from the locations endpoint, e.g. geo-city-zurich. Without a tag the search covers all of Switzerland. Example: geo-city-zurich. |
| `min_price` | number | No | Minimum gross monthly rent (rent) or purchase price (buy) in CHF. Example: 1500. |
| `max_price` | number | No | Maximum gross monthly rent (rent) or purchase price (buy) in CHF. Example: 3000. |
| `min_rooms` | number | No | Minimum number of rooms. Example: 2.5. |
| `max_rooms` | number | No | Maximum number of rooms. |
| `min_area` | integer | No | Minimum living space in square metres. |
| `balcony` | boolean | No | Only listings with a balcony when true. |
| `elevator` | boolean | No | Only listings with an elevator when true. |
| `lister_id` | string | No | Only listings of one agency, using the lister id from a listing. |
| `semantic_query` | string | No | Free text such as "8004 Zurich quiet". Used with sort_by=relevance. |
| `sort_by` | string | No | date, price, rooms, place, completeness, listing_type, random, exclusive or relevance. Defaults to date. |
| `sort_direction` | string | No | asc or desc. Defaults to desc. |
| `lang` | string | No | Text language: de, fr, it or en. Defaults to de. |
| `page` | integer | No | 1-based page number. Defaults to 1. |
| `size` | integer | No | Listings per page: 5, 10, 20 or 50. Defaults to 20. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/immoscout24-ch/search?offer_type=rent&geo_tags=geo-city-zurich&min_rooms=2.5&max_price=3000&size=20"
```

## Example response

```json
{
    "success": true,
    "data": {
        "search_metadata": {
            "offer_type": "rent",
            "geo_tags": [
                "geo-city-zurich"
            ],
            "page": 1,
            "size": 20,
            "language": "de",
            "sort_by": "date",
            "sort_direction": "desc",
            "total": 412,
            "returned": 1
        },
        "results": [
            {
                "id": "4003373005",
                "offer_type": "rent",
                "categories": [
                    "APARTMENT",
                    "FLAT"
                ],
                "title": "Zentrale 3-Zimmer-Wohnung mit Balkon",
                "description": "Helle Wohnung in ruhiger Lage, nahe Tram und Einkauf.",
                "price": {
                    "currency": "CHF",
                    "gross": 2310,
                    "net": 2100,
                    "interval": "MONTH"
                },
                "rooms": 3,
                "living_space": 68,
                "floor": 3,
                "features": {
                    "has_balcony": true,
                    "has_elevator": true
                },
                "address": {
                    "street": "Brunnenstrasse 22",
                    "postal_code": "8610",
                    "locality": "Uster",
                    "region": "ZH",
                    "latitude": 47.3511,
                    "longitude": 8.7225
                },
                "images": [
                    "https://media2.homegate.ch/listings/v2/z927/4003373005/image/b002cd67dead2640a1d0f0b75f66055d.jpg"
                ],
                "lister": {
                    "id": "z927",
                    "name": "Example Immobilien AG"
                },
                "platforms": [
                    "immoscout24",
                    "homegate"
                ],
                "available_from": "2026-11-01",
                "url": "https://www.immoscout24.ch/rent/4003373005"
            }
        ],
        "pagination": {
            "current_page": 1,
            "total": 412,
            "max_from": 980,
            "has_more": true
        }
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A parameter is missing or invalid. This response is not billable. |
| 503 | Source Unavailable | The source is temporarily unreachable or blocked the request. Retry later; this response is not billable. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
