# Immoweb Search API Documentation

Scrappa's `GET /api/immoweb/search` endpoint is the Immoweb Search API documentation page for developers who need Belgian property listings as structured JSON instead of building their own scraper.

## Endpoint reference for Immoweb.be listing search

Use this endpoint to search houses, apartments, land and commercial property for sale or rent across Belgium, including new-build homes. The request supports transaction type, property type, postal codes, provinces, districts, price bounds, surface bounds, room counts and amenity booleans.

## What the Immoweb search response returns

Each listing carries its identifier, price, address with coordinates, surface and room counts, media references, publication timestamps and the agency record it belongs to. Belgian-specific data is included: notary public-sale flags, life-annuity sale flags, energy label information and construction-permit fields.

Every search response also returns `x_count` and `x_count_with_geopoint` — the number of matching listings in total, and the number of those that have coordinates. Comparing the two tells you how many listings are mappable, which is not always all of them.

## Pagination

Use `range` to page through results. It is zero-based and inclusive at both ends, so `range=0-199` returns 200 listings and `range=200-399` returns the next 200. Results are ordered deterministically; no sort-direction parameter is offered because the underlying data source has a fixed order per sort criterion.

## What this endpoint does not return

Three capabilities are worth stating plainly rather than discovering later. Immoweb exposes a price-changed boolean and modification timestamps, but not a price history series. User reviews and ratings do not exist on Immoweb. No new-build project entity is published — new build surfaces as listings and as developers in the agency directory.

## When to pair this endpoint with the other Immoweb docs

Use [Location Autocomplete](/docs/immoweb-api/immoweb_locations) to turn a place name into ready-made search filters before searching. Use [Search Count](/docs/immoweb-api/immoweb_count) to size a market before paginating. Use [Listing Detail](/docs/immoweb-api/immoweb_listing) for a single full record. See the [Immoweb API overview](/apis/immoweb-api) for the full endpoint list.

- **Documentation:** [https://scrappa.co/docs/immoweb-api/immoweb_search](https://scrappa.co/docs/immoweb-api/immoweb_search)
- **API group:** Immoweb API
- **Endpoint:** `GET https://scrappa.co/api/immoweb/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 |
| --- | --- | --- | --- |
| `transactionTypes` | string | Yes | FOR_SALE or FOR_RENT. Required. |
| `propertyTypes` | string | No | Property type, for example HOUSE, APARTMENT, LAND or HOMES_TO_BUILD for new build. |
| `constructionTypes` | string | No | Construction type, for example VILLA, HOUSE, BUNGALOW, BEL_ETAGE, APARTMENT_BUILDING, ALL_KIND or ANY. This vocabulary is not yet confirmed against the live API. An unrecognised value is rejected with HTTP 422. If a recognised value turns out not to be a query value the tier accepts, it returns zero results rather than the full inventory. |
| `postalCodes` | string | No | Comma-separated Belgian postal codes. Both 9000 and BE-9000 are accepted. |
| `provinces` | string | No | Unprefixed province codes, for example ANTWERP or EAST_FLANDERS. |
| `districts` | string | No | Unprefixed district codes, for example GENT. |
| `priceType` | string | No | PRICE, MONTHLY_RENTAL_PRICE, YEARLY_RENTAL_PRICE, PRICE_PER_SQM or YEARLY_RENTAL_PRICE_PER_SQM. |
| `minPrice` | integer | No | Minimum price. |
| `maxPrice` | integer | No | Maximum price. |
| `sort` | string | No | PRICE, AD_QUALITY, POSTAL_CODE or PUBLICATION_DATE. Each criterion has one fixed direction. |
| `range` | string | No | Zero-based inclusive page window, for example 0-199 for 200 listings. Defaults to 0-199. |
| `language` | string | No | nl, fr or en. Bare two-letter codes only; defaults to nl. |
| `isAPublicSale` | boolean | No | Restrict to notary public sales (veiling). |
| `hasGarden` | boolean | No | Restrict to listings with a garden. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/immoweb/search?transactionTypes=FOR_SALE&propertyTypes=HOUSE&postalCodes=BE-9000&range=0-9"
```

## Example response

```json
{
    "success": true,
    "x_count": 3812,
    "x_count_with_geopoint": 3627,
    "range": {
        "first": 0,
        "last": 9
    },
    "results": [
        {
            "id": 21882350,
            "price": 449000,
            "isAPublicSale": false,
            "isALifeAnnuitySale": false,
            "lastModificationDate": "2026-10-04T14:01:02.451Z",
            "property": {
                "title": "Te koop - huis",
                "alternativeTitles": {
                    "fr": "\u00c0 vendre - maison",
                    "nl": "Te koop - huis"
                },
                "numberOfBedrooms": 3,
                "surface": 180,
                "constructionPermit": {
                    "isObtained": true,
                    "floodZoneType": null
                },
                "location": {
                    "address": {
                        "postalCode": "9000",
                        "locality": "Gent",
                        "country": "Belgi\u00eb"
                    },
                    "geoPoint": {
                        "latitude": 51.05,
                        "longitude": 3.72
                    }
                }
            },
            "media": {
                "pictures": {
                    "baseUrl": "https://media-resize.immowebstatic.be",
                    "items": []
                }
            },
            "customers": [
                {
                    "id": 90001334,
                    "type": "AGENCY",
                    "publicInfo": {
                        "name": "Example Agency",
                        "ipiNo": "BE-000000"
                    }
                }
            ]
        }
    ]
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | One or more query parameters failed validation. No credits are charged. |
| 503 | Upstream Unavailable | One upstream lookup per request. A failed lookup is never billed. Upstream rejections (HTTP 403) surface as a 503 with the failure code; filter values outside the documented vocabulary are rejected with 422 before any upstream call. |

## 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)
