# Realo Property Scraper (`ocrad/realo-property-scraper`) Actor

Extract property details from Realo.be URLs, effortlessly scrape detailed property data including price, address, features, description, images, and listing-detail table fields (property type, habitable area, year built, floors etc).

- **URL**: https://apify.com/ocrad/realo-property-scraper.md
- **Developed by:** [Ocrad](https://apify.com/ocrad) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$25.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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Realo Property Scraper


#### 📌 **What it does**

This Actor scrapes **property listings** from [Realo.be](https://www.realo.be) (Belgium). You provide search or listing URLs from **realo.be** and get structured data for each property: price, address, features, description, images, and listing-detail table fields (property type, habitable area, year built, floors, heating, cadastral income, energy classification, renovation obligation, etc.).

With this Actor, you can:

* 🔍 **Extract listing details**: Title, price, address, property type, surface, bedrooms, bathrooms, year built, EPC.
* 📊 **Structured output**: One JSON object per property in the default dataset.
* 📋 **Listing features table**: All rows from the “Listing features” block (habitable area, floors, heating type, cadastral income, energy classification, renovation obligation, etc.) as top-level attributes.
* 🖼️ **Images & description**: Image URLs and full description text.
* ⚡ **Configurable**: Max properties, proxy, and request delays.


#### 📝 **Example output**

Each scraped property is one item in the default dataset. Example shape:

```json
{
    "listingUrl": "https://www.realo.be/en/rue-du-broux-113-4680-hermee/1108147",
    "title": "Propriété avec entrepôt, Hermée, jardin, espaces, garages",
    "propertyType": "House",
    "price": {
        "value": 299000,
        "currency": "EUR"
    },
    "address": {
        "street": "Rue du broux 113",
        "postalCode": "4680",
        "city": "Hermée, Oupeye",
        "region": null
    },
    "surfaceAreaM2": 1.003,
    "bedrooms": "4",
    "bathrooms": "2",
    "yearBuilt": "1977",
    "energyScoreEpc": "E",
    "listingStatus": "sold",
    "imageUrls": [
        "https://realocdn.com/image/5/BE-master_listing_9a82ef_....jpg",
        "https://realocdn.com/image/5/BE-master_listing_aa5cc3_....jpg"
    ],
    "description": "Vaste propriété multifonctionnelle sur 1.003 m²...",
    "latitude": null,
    "longitude": null,
    "habitableArea": "198m2",
    "lotSize": "1.003m2",
    "floors": "1",
    "heatingType": "Fuel oil",
    "cadastralIncome": "€ 871",
    "energyClassification": "E",
    "renovationObligation": "No"
}
````

Listing-features rows (Property type, Habitable area, Year built, Floors, Heating type, Cadastral income, Energy classification, Renovation Obligation, etc.) are added as camelCase attributes (e.g. `habitableArea`, `heatingType`, `cadastralIncome`, `energyClassification`, `renovationObligation`).

***

#### 🎯 **How it works**

- **Input**: One or more **realo.be** URLs — either **search** pages or **listing** (detail) pages. Only the **realo.be** domain is supported.
- **Processing**:
  - **Search pages**: The Actor finds listing URLs in the grid, enqueues them, and follows pagination until it has enough listings (or no more pages).
  - **Listing pages**: It extracts title, price, address, description, images, and the “Listing features” table; each row becomes a top-level attribute. Listings with no surface area and no price are skipped.
- **Output**: The **default dataset** contains one item per scraped property (same structure as the example above). Limiting is done only by **Max properties** (`maxItems`).

***

#### ⚙️ **Configuration**

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | Array | (required) | Realo.be search or listing URLs. |
| `maxItems` | Integer | `10` | Max properties to return (`0` = unlimited). |
| `proxyConfiguration` | Object | `{ "useApifyProxy": false }` | Proxy settings for requests. |
| `minDelayMs` | Integer | `500` | Min delay between requests (ms). |
| `maxDelayMs` | Integer | `1500` | Max delay between requests (ms). |

##### Example input

```json
{
    "startUrls": [
        { "url": "https://www.realo.be/en/search/for-sale" }
    ],
    "maxItems": 100
}
```

Other valid start URL examples:

- `https://www.realo.be/nl/search/te-koop`
- Any direct listing URL from realo.be

***

#### ⚖️ **Is it legal to scrape Realo?**

Scraping **publicly available** data (e.g. listing titles, prices, addresses, and property details) is generally allowed in many jurisdictions, but you must comply with applicable law (e.g. Belgian and EU law) and Realo.be’s terms of use. Results may contain personal data; you are responsible for handling such data in line with privacy regulations (e.g. GDPR). If in doubt, consult a lawyer. You can also read Apify’s articles on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

# Actor input Schema

## `startUrls` (type: `array`):

Realo search or listing URLs to start from (e.g. https://www.realo.be/en/search/for-sale).

## `maxItems` (type: `integer`):

Maximum number of properties (listings) to return (0 = unlimited).

## `proxyConfiguration` (type: `object`):

Proxy settings for requests.

## `minDelayMs` (type: `integer`):

Minimum delay between requests in milliseconds.

## `maxDelayMs` (type: `integer`):

Maximum delay between requests in milliseconds.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.realo.be/en/search/for-sale"
    }
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "minDelayMs": 500,
  "maxDelayMs": 1500
}
```

# Actor output Schema

## `dataset` (type: `string`):

Scraped property listings (one JSON object per property).

## `overview` (type: `string`):

Table view of the dataset.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.realo.be/en/search/for-sale"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ocrad/realo-property-scraper").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 = { "startUrls": [{ "url": "https://www.realo.be/en/search/for-sale" }] }

# Run the Actor and wait for it to finish
run = client.actor("ocrad/realo-property-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.realo.be/en/search/for-sale"
    }
  ]
}' |
apify call ocrad/realo-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ocrad/realo-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Realo Property Scraper",
        "description": "Extract property details from Realo.be URLs, effortlessly scrape detailed property data including price, address, features, description, images, and listing-detail table fields (property type, habitable area, year built, floors etc).",
        "version": "0.0",
        "x-build-id": "7S4dq0vkbHJxvIfN3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ocrad~realo-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ocrad-realo-property-scraper",
                "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/ocrad~realo-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ocrad-realo-property-scraper",
                "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/ocrad~realo-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ocrad-realo-property-scraper",
                "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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Realo search or listing URLs to start from (e.g. https://www.realo.be/en/search/for-sale).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max properties",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of properties (listings) to return (0 = unlimited).",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for requests.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "minDelayMs": {
                        "title": "Min delay (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum delay between requests in milliseconds.",
                        "default": 500
                    },
                    "maxDelayMs": {
                        "title": "Max delay (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum delay between requests in milliseconds.",
                        "default": 1500
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
