# Biddit Scraper — Belgian Property Auctions & Public Sales (`studio-amba/biddit-scraper`) Actor

Extract Belgian property auctions from Biddit.be — the official notary platform. Get starting prices, current bids, estimated values, selling prices, notary contacts, EPC scores, GPS coordinates, and full property details. Filter by province, property type, or sale method. Schedule daily runs to ...

- **URL**: https://apify.com/studio-amba/biddit-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Features:** Limited permissions
- **Stats:** 13 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Biddit Scraper

Extract every active property auction from [Biddit.be](https://www.biddit.be) — Belgium's official notarial online auction platform — into structured JSON with prices, bids, notary contacts, and full property details.

### What is Biddit Scraper?

**Biddit Scraper** lets you extract structured real estate auction data from Belgium's only official online notary auction platform, helping you find undervalued properties, track auction activity, and automate market research — all without manual browsing.

- **Find investment opportunities:** extract all active auctions with starting prices, current bids, and estimated values to spot properties selling below market value
- **Monitor auction activity by region:** track how many properties are auctioned per province, average selling prices, and bidding patterns across Belgium
- **Build automated alerts:** schedule daily runs and get notified when new properties matching your criteria appear on Biddit
- **Analyze historical sales:** include closed auctions with final selling prices to build datasets for market analysis, valuation models, or academic research
- **Feed your CRM or dashboard:** export structured data to Google Sheets, Airtable, or any BI tool via Apify integrations

Biddit.be has **no public API, no RSS feed, and no export feature**. This scraper is the only way to get structured data out of the platform. No other Apify actor covers Biddit.

### What data does Biddit Scraper extract?

🏠 **Title** and full property description (NL/FR)
📍 **Address** — street, postal code, city, province
🗺️ **GPS coordinates** — latitude and longitude for mapping
💰 **Starting price**, current bid, and estimated value
🏷️ **Selling price** (closed auctions only)
📅 **Auction dates** — bidding start and end timestamps
⚖️ **Auction status** — CURRENT, CLOSED, WITHDRAWN
🏗️ **Property details** — type, bedrooms, bathrooms, surface, land area, build year, facades
⚡ **EPC energy score** — rating by region (Flanders, Wallonia, Brussels)
👨‍⚖️ **Notary contact** — name, phone, and email
📸 **All images** — full list of property photos
📄 **Cadastral income** (kadastraal inkomen / revenu cadastral)
🔗 **Direct URL** to the listing on Biddit.be

### How to scrape Biddit.be auctions

The input is simple: choose your **filters** and hit run. You can configure the scraper through the Apify Console UI or programmatically via the API.

#### Filters

| Filter | Options | Description |
|--------|---------|-------------|
| **Province** | All provinces, Antwerpen, Oost-Vlaanderen, West-Vlaanderen, Vlaams-Brabant, Limburg, Brussels, Brabant Wallon, Hainaut, Liège, Luxembourg, Namur | Target a specific Belgian province or scrape all |
| **Property type** | House, Apartment, Land, Garage, Office, Industrial, Commercial, Other | Narrow down to one property category |
| **Sale type** | Public Auction (openbare verkoop), Private Sale (uit de hand), Annuity Sale (lijfrente) | Filter by auction method |
| **Include closed sales** | true / false | Include sold/withdrawn properties with final selling prices. Great for historical analysis |
| **Scrape full details** | true / false | Fetch descriptions, all images, notary contact, estimated prices. Adds ~1 request per listing but gives much richer data |
| **Max results** | 1 – 5,000 | Limit the number of listings returned |
| **Language** | Nederlands / Français | Controls titles, descriptions, and addresses |

#### Tips for best results

- **Start broad, then narrow:** run with all provinces and all types first to see what's available, then filter down
- **Use `includeClosedSales: true` for market research:** this gives you historical selling prices, which are the most valuable data for valuation models
- **Leave `scrapeDetails: true` (default):** the extra data (notary contact, estimated price, full description, all photos) is worth the slightly longer run time
- **Schedule daily runs** to track new auctions as they appear — typically 10-30 new listings per day across Belgium

### Output

Results are stored in a **dataset** that you can download in JSON, CSV, Excel, XML, or HTML format directly from the Apify Console.

#### JSON example

```json
{
    "title": "Eengezinswoning met tuin en garage",
    "price": 195000,
    "currency": "EUR",
    "listingType": "auction",
    "reference": "294512",
    "propertyType": "house",
    "address": "Dorpstraat 17",
    "city": "Aalst",
    "postalCode": "9300",
    "province": "Oost-Vlaanderen",
    "latitude": 50.9396,
    "longitude": 4.0401,
    "bedrooms": 3,
    "bathrooms": 1,
    "surface": 165,
    "landSurface": 420,
    "buildYear": 1965,
    "numberOfFacades": 3,
    "epcScore": "E",
    "startingPrice": 160000,
    "currentPrice": 195000,
    "estimatedPrice": 220000,
    "biddingStartDate": "2026-03-10T10:00:00",
    "biddingEndDate": "2026-03-17T10:00:00",
    "auctionStatus": "CURRENT",
    "biddingPace": 1000,
    "notaryName": "Marc Janssens",
    "notaryPhone": "+32 53 12 34 56",
    "notaryEmail": "info@notaris-janssens.be",
    "landIncome": 1485,
    "description": "Ruime eengezinswoning met tuin en garage...",
    "imageUrl": "https://www.biddit.be/stg/eco/images/294512/m/001.jpeg",
    "imageUrls": [
        "https://www.biddit.be/stg/eco/images/294512/l/001.jpeg",
        "https://www.biddit.be/stg/eco/images/294512/l/002.jpeg",
        "https://www.biddit.be/stg/eco/images/294512/l/003.jpeg"
    ],
    "url": "https://www.biddit.be/nl/catalog/detail/294512",
    "scrapedAt": "2026-03-16T10:00:00.000Z",
    "language": "nl"
}
```

### How much does it cost to scrape Biddit?

Biddit Scraper uses **only HTTP requests** (no browser), making it extremely fast and cheap to run.

| Scenario | Est. cost | Time |
|----------|-----------|------|
| 100 listings with full details | ~$1.21 | ~1 min |
| All ~1,100 active listings with details | ~$13.21 | ~5 min |
| Quick overview (no details) of all listings | ~$0.50 | ~30 sec |

**Pricing breakdown:**

- Per run start: $0.01
- Per result: $0.012

### Can I integrate Biddit Scraper with other apps?

Yes. Biddit Scraper connects with any tool through [Apify integrations](https://apify.com/integrations):

- **Google Sheets** — automatically export auction data to a spreadsheet
- **Slack / Email** — get notified when new auctions match your criteria
- **Zapier / Make** — trigger workflows when data is ready
- **Airtable** — build a searchable property database
- **REST API** — call the scraper programmatically from any language
- **Webhooks** — get notified when a run finishes

### Can I use Biddit Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) to run Biddit Scraper programmatically.

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/biddit-scraper").call(run_input={
    "province": "VAN",
    "propertyType": "HOUSE",
    "maxResults": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} — €{item['price']:,}")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/biddit-scraper').call({
    province: 'VAN',
    propertyType: 'HOUSE',
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Check the [API tab](https://apify.com/studio-amba/biddit-scraper/api) for full documentation.

### FAQ

#### What is Biddit.be?

Biddit.be is Belgium's official online auction platform operated by the Royal Federation of Belgian Notaries (Fednot). All sales are legally binding notarial transactions. It's the only platform in Belgium where notaries can conduct public property sales online.

#### How does Biddit Scraper work?

It queries Biddit's internal search API (the same one the website uses) and optionally fetches detail pages for each listing. No browser automation is needed — it's all HTTP requests, which makes it fast, reliable, and cheap.

#### Can I get historical selling prices?

Yes. Set `includeClosedSales: true` to include sold and withdrawn properties. Closed auctions include the final `sellingPrice`, which is the actual sale price recorded by the notary.

#### How often are new auctions posted on Biddit?

Typically 10-30 new listings appear per day across Belgium. Schedule a daily run to stay on top of new opportunities.

#### Can I scrape auctions in French?

Yes. Set the `language` input to `"fr"` to get all titles, descriptions, and addresses in French instead of Dutch.

#### Is it legal to scrape Biddit?

This scraper extracts publicly available auction data that Biddit.be displays to all visitors. The data is factual (prices, addresses, dates) and does not contain private personal information. As with any scraping tool, use the data responsibly and in compliance with applicable laws.

### Limitations

- **Belgium only.** Every listing on Biddit.be is a notarial sale under Belgian law.
- **No bid history.** Individual bid amounts per listing are not exposed by the API — only the current price and starting price are available.
- **Some fresh listings may be incomplete.** If a notary hasn't uploaded descriptions or photos yet, those fields will be empty.
- **Estimated price and notary contact** require `scrapeDetails: true`.
- **Runs on a Belgian residential proxy.** The default is a `RESIDENTIAL` group in Belgium,
  and a partial override merges over it so you cannot accidentally drop the group. A run
  drives a real browser through the search pages, so residential traffic is a few megabytes.
- **Biddit's bot defense rejects some sessions.** It does this whatever exit the request
  comes from. The actor relaunches with a fresh browser fingerprint when that happens, so a
  rejected session is usually invisible, but an occasional run still comes back short.
- **Long runs can come back partial.** If the bot defense cuts the page walk short, the actor
  delivers what it already read and says so in the run's status message rather than throwing
  the batch away.

### Other Belgian real estate scrapers

Combine Biddit Scraper with these actors for comprehensive Belgian property market coverage:

- 🏠 [Logic-Immo Scraper](https://apify.com/studio-amba/logicimmo-scraper) — French real estate listings
- 🏡 [Immovlan Scraper](https://apify.com/studio-amba/immovlan-scraper) — Belgian property listings (VTM network)
- 🇱🇺 [Athome.lu Scraper](https://apify.com/studio-amba/athome-scraper) — Luxembourg real estate
- 🇱🇺 [WortImmo Scraper](https://apify.com/studio-amba/wortimmo-scraper) — Luxembourg property (Wort group)

### Your feedback

Found a bug or have a feature request? Please open an issue on the [Issues tab](https://apify.com/studio-amba/biddit-scraper/issues). We actively maintain this scraper and respond to all reports.

# Actor input Schema

## `province` (type: `string`):

Filter by Belgian province. Leave empty for all provinces.

## `propertyType` (type: `string`):

Filter by property type. Leave empty for all types.

## `handlingMethod` (type: `string`):

Filter by sale type. Public auctions are the most common on Biddit.

## `includeClosedSales` (type: `boolean`):

Include listings that have already been sold or withdrawn. Useful for market analysis with historical selling prices.

## `scrapeDetails` (type: `boolean`):

Fetch full details for each listing (description, all images, notary contact, documents). Slower but much richer data. Adds ~1 request per listing.

## `maxResults` (type: `integer`):

Maximum number of listings to return.

## `language` (type: `string`):

Language for listing titles, descriptions, and addresses.

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

Proxy settings. biddit is fronted by F5 bot defense, which rejects a share of browser sessions whatever exit they come from — measured 2026-09-17, the same input passed and failed across consecutive runs on the same build, with and without a country pinned. The actor answers that by relaunching with a fresh fingerprint, so a rejected session is usually invisible to you. The default is a Belgian residential exit and a partial override merges over it, so you cannot accidentally drop the group or the country. Do not pin a country without a proxy group: Apify refuses that combination outright (NS_ERROR_PROXY_CONNECTION_REFUSED, run 35KFcYWftWhdxkYAX). The old note here about RESIDENTIAL exits hitting a content-filter block predates the Camoufox rewrite and no longer holds.

## Actor input object example

```json
{
  "province": "",
  "propertyType": "",
  "handlingMethod": "",
  "includeClosedSales": false,
  "scrapeDetails": true,
  "maxResults": 100,
  "language": "nl",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/biddit-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BE",
    } }

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/biddit-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}' |
apify call studio-amba/biddit-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/biddit-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UqMfU16PABEGvZK8P/builds/TaMLJ5ND8bgRLm6ty/openapi.json
