# Immoweb.be mass scraper (by search URL) 🏠 (`azzouzana/immoweb-be-mass-scraper-by-search-url`)

🔥 Scrape Immoweb.be search result pages and monitor them for new or delisted ads, easily exportable to JSON, CSV, Excel, or as an API... Simply enter the search page URL and get your data! Blazing fast & affordable ⚡

- **URL**: https://beta-securitybyobscurity.apify.com/azzouzana/immoweb-be-mass-scraper-by-search-url.md
- **Developed by:** [Azzouzana](https://beta-securitybyobscurity.apify.com/azzouzana) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 61 total users, 16 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$35.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.
You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

# README

## Version française

### 🤩 Vue d'ensemble

🚀 Notre scraper ultra-rapide pour les annonces immobilières ee masse immoweb.de vous permet d'extraire les informations des biens immobiliers depuis une page de résultat de recherche et de les exporter dans différents formats (JSON, CSV, HTML, etc.) 🔥 Apportez vos URLs et c'est parti !

👀 Activer le mode Delta, et l'acteur ne récupérera que les nouvelles annonces immobilières depuis la dernière exécution et retournera les annonces supprimées.

👉 Il vous permet de récupérer des détails riches tels que: titres, descriptions, photos, prix, nombre de vues/favoris, informations énergétiques, date de construction, informations de l'éditeur (e-mail/numéro de téléphone si disponible) et bien plus encore.

### 📚 Comment utiliser ce scraper

1. 👉 [Créez un compte gratuit sur Apify](https://apify.com/sign-up?fpr=cbgdsf) – aucune carte bancaire requise !
2. 🎉 Cliquez sur le bouton **"Get Started"** et complétez une inscription rapide.
3. 💰 Le compte gratuit inclut suffisamment de crédits pour tester cet actor.
4. ⏳ Profitez de la période d’essai gratuite – sans engagement ni paiement anticipé.

Le scraper a un paramètre requis `startUrl`, qui est le lien vers la page de recherche

- Exemple: `https://www.immoweb.be/en/search-3-rooms/apartment/for-rent?countries=BE&maxBedroomCount=3&minBedroomCount=3&maxPrice=500&page=1&orderBy=relevance`

📝 Pour récupérer cette url, lancer votre recherche sur Immoweb.be en appliquant vos filtres souhaités, puis copiez le lien dans la barre d'adresse.

### Vous avez des liens directs vers des annonces immobilières et vous voulez les scraper?

Si vous avez plutôt des URL directes vers des annonces immobilières (de type `https://www.immoweb.be/en/classified/kot/for-rent/namur/5002/20368607`) et souhaitez en scraper les informations de manière structurée (JSON, Excel, XML, etc.), n'hésitez pas à consulter l'acteur [Immoweb.be ads scraper (by ads URLs) 🏠](https://apify.com/azzouzana/immoweb-be-ads-scraper-by-ads-urls)

### ⚠️ Est-il légal de scraper immoweb.be ?

Il est légal de scraper les données publiquement disponibles telles que les descriptions de biens immobiliers, les prix, les photos, les transports à proximité, etc. Lisez notre article de blog sur la [légalité du web scraping](https://blog.apify.com/is-web-scraping-legal/) pour en savoir plus.

### 🤔 Pourquoi scraper immoweb.be ?

Immoweb.be est le plus grand site immobilier en Belgique. Avec plus de 7 millions de visiteurs par mois et +1M d'annonces immobilières, il y a certainement quelque chose pour vous!

Alors, que pourriez-vous faire avec toutes ces données sur les annonces immobilières ?

- Trouver des biens immobiliers à vendre à proximité
- Faire une analyse des données du marché
- Créer une liste d'emails d'agents immobiliers
- Collecter des données sur le logement pour la recherche ou des besoins personnels
- Comparer les données collectées avec un indice de valeur des maisons
- Utiliser les données pour une analyse globale du marché immobilier

Ce ne sont que quelques idées pour vous faire réfléchir à la manière dont le web scraping peut vous fournir les données dont vous avez besoin. Les possibilités sont infinies 🚀

### 🤑 Coût d'utilisation

Le coût moyen d'utilisation de ce scraper SeLoImmoweb.beger est d'environ **$0,07 pour chaque 1000 annonces immobilières scrappées**. Avec le crédit gratuit de $5 par mois d'Apify, vous pouvez scraper des milliers d'annonces immobilières gratuitement 🤩
Pour une meilleure performance, l'acteur utilise de manière transparente les proxies résidentiels d'Apify.

### 🛠️ Paramètres d'entrée:

| Champ | Type | Description | Valeur par défaut / Exemple |
| ----- | ---- | ----------- | ------------- |
| `startUrls` | `tableau` | les URL directes des biens immobiliers que l'acteur va scraper. | `https://www.immoweb.be/en/search-3-rooms/apartment/for-rent?countries=BE&maxBedroomCount=3&minBedroomCount=3&maxPrice=500&page=1&orderBy=relevance` |
| `enableDeltaMode` | `booléen` | activer ou pas le mode Delta | `false` |
| `maxPagesToScrape` | `entier` | le nombre maximum de pages à scraper. | `300` (300 c'est le maximum) |
| `proxy` | `proxy configuration` | configuration du proxy à utiliser pour le scraping. | Si vous choisissez de ne pas utiliser de proxy, l’acteur utilisera par défaut les proxys résidentiels d’Apify.

### 👀 Monitoring Mode

Lorsqu'il est activé, l'acteur ne renverra que les nouvelles annonces et celles supprimées, en fonction des résultats de l'exécution précédente. Pour différencier les nouvelles annonces des annonces supprimées, chaque élément aura le champ `apify_monitoring_status` défini sur `new` ou `delisted`.

### 🧐 Résultats

Les résultats sont stockés dans un jeu de données (ou "dataset" en jargon Apify). Chaque élément contient des informations d'une annonce:

#### Exemples de résultats:

Le résultat du scraping rassemble à la capture ci-dessous:

##### Exemple

![immowebbe scraping result](https://i.ibb.co/RCsK27K/image.png)

& plein d'autres informations que les capture d'écrans ci-dessus ne montrent pas, venez explorer!

### 🔍 **Vous cherchez autre chose ?**

N'hésitez pas à explorer les [+4 000 scrapers préconstruits sur Apify Store](https://apify.com/store?fpr=cbgdsf) pour plus d’options !

## English version

### 🤩 Features

🚀 Our blazing fast immoweb.be mass real estate items scraper lets you extract real estate items' information and export them to various format (JSON, CSV, HTML etc..) 🔥 Bring your search URLs and you're good to go!

👉 It enables you to scrape rich details as title, descriptions, popularity, views, photos, energy information, various dates, price, publisher information (email/phone number included when available) and a lot more.

👀 Enable Delta mode, and the actor will only retrieve new real estate listings since the last run and return the deleted listings.

### 📚 How to use this actor

1. 👉 [Register for a free Apify account](https://apify.com/sign-up?fpr=cbgdsf) – no credit card required!
2. 🎉 Just click the **"Get Started"** button and complete a quick signup.
3. 💰 A free account includes enough credits to test this actor.
4. ⏳ Enjoy scraping for the free trial period, no commitment or upfront payment required.

The scraper has a required `startUrl` parameter which holds the value of the search result page's link:

- Example: `https://www.immoweb.be/en/search-3-rooms/apartment/for-rent?countries=BE&maxBedroomCount=3&minBedroomCount=3&maxPrice=500&page=1&orderBy=relevance`

### Do you have direct links to real estate listings and want to scrape them?

If you have direct URLs to real estate listings (e.g., `https://www.immoweb.be/en/classified/kot/for-rent/namur/5002/20368607`) and want to scrape their information in a structured format (JSON, Excel, XML, etc.), feel free to check out the actor [Immoweb.be ads scraper (by ads URLs) 🏠](https://apify.com/azzouzana/immoweb-be-ads-scraper-by-ads-urls).

### ⚠️ Is it legal to scrape Immoweb.be?

It is legal to scrape publicly available data such as real estate descriptions, prices, photos, nearby transportation etc. Read our blog post on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) to learn more.

### 🤔 Why scrape Immoweb.be?

Immoweb.be is the largest real estate website in Belgium. With over 7 million visitors per month and more than 1 million real estate listings, there's definitely something for you!

So what could you do with all that products listings data?

- Find real estate for sale nearby
- Do market data analysis
- Build a real estate agent email list
- Collect housing data for research or personal purposes
- Compare collected data with home value index
- Use the data for overall real estate data analytics

These are just some ideas to get you thinking about how web scraping can give you the data you need. Sky is the limit 🚀

### 🤑 Cost of usage

The average cost of using this scraper is about **$0.07 for every 1000 real estate listings** scraped when deepScrape is disabled. With Apify’s $5 monthly free credit, you can scrape thousands of real estate listings for free 🤩
For better performance, the actor transparently uses Apify’s residential proxies.

### 🛠️ Input

| Field | Type | Description | Default value / Example |
| ----- | ---- | ----------- | ------------- |
| `startUrl` | `array` | the search page's result link | `https://www.immoweb.be/en/search-3-rooms/apartment/for-rent?countries=BE&maxBedroomCount=3&minBedroomCount=3&maxPrice=500&page=1&orderBy=relevance` |
| `enableDeltaMode` | `boolean` | Enable or disable Delta mode | `false` |
| `maxPagesToScrape` | `integer` | The maximum number of pages to scrape. | `300` (300 is the maximum) |
| `proxy` | `proxy configuration` | Proxy configuration to use for scraping. | If you choose not to use a proxy, the actor will use Apify's residential proxies by default |

### 👀 Monitoring Mode

When enabled, the actor will only return new and delisted ads based on the outcome of the previous run. To differentiate between new and delisted ads, every item will have apify\_monitoring\_status set to either new or delisted.
Output is stored in a dataset. Each item is information about a real estate item:

### 🧐 Output

#### Output examples

The scraping result may look like this

##### Example

![immowebbe scraping result](https://i.ibb.co/RCsK27K/image.png)

& many more details that the screenshots above don't show, come and explore!

# Actor input Schema

## `startUrl` (type: `string`):

THe search URL to start with.

## `maxPagesToScrape` (type: `integer`):

Maximum number of pages to scrape

## `enableDeltaMode` (type: `boolean`):

By enabling monitoring mode, and enable the actor to only return new/delisted ads based on the previous run outcome

## `proxy` (type: `object`):

Specify Apify proxy groups or custom proxy URLs

## Actor input object example

```json
{
  "startUrl": "https://www.immoweb.be/en/search/office/for-rent?countriesssss=BE&maxPrice=250&priceType=MONTHLY_RENTAL_PRICE&page=1&orderBy=relevance",
  "enableDeltaMode": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrl": "https://www.immoweb.be/en/search/office/for-rent?countriesssss=BE&maxPrice=250&priceType=MONTHLY_RENTAL_PRICE&page=1&orderBy=relevance"
};

// Run the Actor and wait for it to finish
const run = await client.actor("azzouzana/immoweb-be-mass-scraper-by-search-url").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrl": "https://www.immoweb.be/en/search/office/for-rent?countriesssss=BE&maxPrice=250&priceType=MONTHLY_RENTAL_PRICE&page=1&orderBy=relevance" }

# Run the Actor and wait for it to finish
run = client.actor("azzouzana/immoweb-be-mass-scraper-by-search-url").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://www.immoweb.be/en/search/office/for-rent?countriesssss=BE&maxPrice=250&priceType=MONTHLY_RENTAL_PRICE&page=1&orderBy=relevance"
}' |
apify call azzouzana/immoweb-be-mass-scraper-by-search-url --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=azzouzana/immoweb-be-mass-scraper-by-search-url",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Immoweb.be mass scraper (by search URL) 🏠",
        "description": "🔥 Scrape Immoweb.be search result pages and monitor them for new or delisted ads, easily exportable to JSON, CSV, Excel, or as an API... Simply enter the search page URL and get your data! Blazing fast & affordable ⚡",
        "version": "0.0",
        "x-build-id": "eno1iqxFYpMJrCSAA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/azzouzana~immoweb-be-mass-scraper-by-search-url/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-azzouzana-immoweb-be-mass-scraper-by-search-url",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/azzouzana~immoweb-be-mass-scraper-by-search-url/runs": {
            "post": {
                "operationId": "runs-sync-azzouzana-immoweb-be-mass-scraper-by-search-url",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/azzouzana~immoweb-be-mass-scraper-by-search-url/run-sync": {
            "post": {
                "operationId": "run-sync-azzouzana-immoweb-be-mass-scraper-by-search-url",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "THe search URL to start with."
                    },
                    "maxPagesToScrape": {
                        "title": "Max pages to scrape",
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum number of pages to scrape"
                    },
                    "enableDeltaMode": {
                        "title": "Enable monitoring mode",
                        "type": "boolean",
                        "description": "By enabling monitoring mode, and enable the actor to only return new/delisted ads based on the previous run outcome",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Specify Apify proxy groups or custom proxy URLs"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
