# Leboncoin Real Estate Scraper (`parsebird/leboncoin-real-estate-scraper`) Actor

Scrape French real estate listings from leboncoin.fr: price, surface, rooms, energy rating, location, seller, and photos.

- **URL**: https://apify.com/parsebird/leboncoin-real-estate-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### Leboncoin Real Estate Scraper

Extract structured real estate data from [leboncoin.fr](https://www.leboncoin.fr), France's largest classifieds site, without writing any code.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Paste any leboncoin.fr search URL and get price, price per m², surface, rooms, bedrooms, energy (DPE) and GES ratings, location, seller type, and photos for every listing — structured and ready for analysis.
</td>
</tr></table>

##### Copy to your AI assistant

```
Use the Apify actor "parsebird/leboncoin-real-estate-scraper" (actor ID: parsebird~leboncoin-real-estate-scraper) via the ApifyClient: client.actor("parsebird/leboncoin-real-estate-scraper").call(run_input={"startUrls": ["https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"], "limit": 500}); inputs are startUrls (array of leboncoin.fr search/category URLs, required) and limit (max listings across the run, optional, default all); output is one JSON object per listing with id, url, title, category, pricing (amount_eur, price_per_square_meter, fees), property (surface_m2, rooms, bedrooms, energy, amenities), location (city, zipcode, department, region), seller (type, name), media (image URLs), dates, listing_details, and source_context/source_data for provenance; full API spec at https://apify.com/parsebird/leboncoin-real-estate-scraper/api; get your token at https://console.apify.com/account/integrations.
```

### What does Leboncoin Real Estate Scraper do?

Leboncoin Real Estate Scraper turns any [leboncoin.fr](https://www.leboncoin.fr) property search into a clean, structured dataset. Leboncoin doesn't offer a public API for third parties, and its pages are protected against automated access — this **leboncoin scraper** handles both problems for you, returning the same data you'd see in the "Ventes immobilières" (real estate sales) category, ready to use.

- 🏠 Works with **any leboncoin.fr search URL** — city, radius, price range, surface, rooms, energy rating, property type, or any combination of filters you set up in your browser
- 💶 Extracts price, **price per m²**, and (when leboncoin provides them) estimated notary fees and total acquisition cost
- 📐 Extracts surface, land plot surface, rooms, bedrooms, bathrooms, floor number, parking, heating, and amenities
- 🌍 Extracts rich location data: city, postcode, district, department, region, and coordinates
- 👤 Distinguishes private sellers from real estate professionals (`seller.type`)
- 🖼️ Returns full-size and thumbnail image URLs for every listing
- 🔁 Paginates automatically up to leboncoin's own result cap for each search URL
- ☁️ Runs on the [Apify platform](https://apify.com): schedule recurring runs, trigger via API or webhook, and export straight to your stack

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | array of strings | **Yes** | — | leboncoin.fr search or category URLs to scrape, e.g. `https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753` |
| `limit` | integer | No | all available results | Maximum number of listings to save across the whole run |

Advanced users can also override the `proxyConfiguration` field (defaults to a French residential proxy, required for leboncoin.fr).

### Output example

```json
{
  "id": "3153918263",
  "ids": { "list": "3153918263", "external": "apimo_8078_5325036" },
  "url": "https://www.leboncoin.fr/ad/ventes_immobilieres/3153918263",
  "title": "Appartement 3 pièces 72 m²",
  "category": "Ventes immobilières",
  "status": "active",
  "listing_type": "offer",
  "pricing": {
    "amount_eur": 120000,
    "price_per_square_meter": 1667.0,
    "fees": { "included": null, "paid_by": "Vendeur" },
    "estimated_notary_fees_eur": 9600,
    "estimated_total_property_price_eur": 129600
  },
  "property": {
    "real_estate_type": "Appartement",
    "surface_m2": 72,
    "rooms": 3,
    "bedrooms": 2,
    "bathrooms": 1,
    "energy": { "rating": "D", "ges": "D" },
    "amenities": ["Cuisine séparée", "Cave", "Interphone", "Balcon"]
  },
  "location": {
    "city": "Fontaine",
    "zipcode": "38600",
    "department": "Isère",
    "region": "Rhône-Alpes",
    "lat": 45.19955,
    "lng": 5.68872
  },
  "seller": { "type": "pro", "name": "MIRIBEL IMMOBILIER" },
  "media": {
    "images": { "count": 7, "urls": ["https://img.leboncoin.fr/api/v1/lbcpb1/images/..."] }
  },
  "dates": { "first_published_at": "2026-04-27T03:47:32" },
  "listing_details": { "category_id": "9", "is_boosted": true, "has_phone": true }
}
```

Every field the source page provides is included — `property`, `location`, and `pricing` only contain the sub-fields that apply to that listing's category (a plot of land, for instance, has no `rooms` or `bedrooms`). The full raw `attributes` array from leboncoin is also kept under `source_data` for advanced use cases. Download results as **JSON, CSV, Excel, or HTML** from the Apify Console, or pull them with the [API](https://apify.com/parsebird/leboncoin-real-estate-scraper/api).

### Use cases

- **Market research** — track average price per m² across neighborhoods, cities, or departments over time
- **Lead generation** — monitor new listings matching your criteria for real estate agencies or investors
- **Portfolio monitoring** — re-run a saved search on a schedule to catch new or price-changed listings
- **Data enrichment** — feed structured property data into a CRM, spreadsheet, or BI dashboard
- **Academic and journalistic research** — analyze French housing market trends at scale

### How to scrape leboncoin.fr real estate listings

1. Go to [leboncoin.fr](https://www.leboncoin.fr/recherche?category=9), pick "Ventes immobilières," and apply the location and filters you want (city, price, surface, rooms, energy rating, and so on).
2. Copy the resulting URL from your browser's address bar.
3. Paste it into the **Start URLs** field of this actor (add more URLs to scrape several searches in one run).
4. Optionally set **Max listings** to cap how many results are collected.
5. Click **Start** and download the results as JSON, CSV, or Excel once the run finishes.

### How much does it cost to scrape leboncoin.fr?

This actor uses **pay-per-event pricing**: you're billed only for listings actually returned, per the pricing table below. A search returning 500 listings costs well under $1. There's no separate compute charge on top — proxy and browser costs are covered by the per-listing price.

### Pricing

| Event | Price per event | Price per 1,000 |
|-------|------------------|------------------|
| `listing-scraped` | from $0.00079 | from $0.79 |

Pricing is tiered by your Apify plan (as low as $0.79 per 1,000 listings on Silver/Gold plans, $0.99 per 1,000 on the Free plan). See the Pricing tab on the [Actor page](https://apify.com/parsebird/leboncoin-real-estate-scraper) for exact current rates.

### Is it legal to scrape leboncoin.fr?

Scraping publicly available data is generally legal, but you're responsible for how you use it — comply with leboncoin's [terms of service](https://www.leboncoin.fr/page/cgu) and applicable data protection law (including GDPR) when handling personal data such as seller names. Read more in [Apify's guide to the legality of web scraping](https://www.apify.com/is-web-scraping-legal). This actor only collects data leboncoin already publishes on its public search results pages.

### Other real estate scrapers on Apify

- [SeLoger France Property Scraper](https://apify.com/parsebird/seloger-france-scraper) — another major French real estate portal
- [Fotocasa Scraper](https://apify.com/parsebird/fotocasa-scraper) — Spain's leading property site
- [Immobiliare.it Scraper](https://apify.com/parsebird/immobiliare-it-scraper) — Italy's largest real estate portal
- [Daft.ie Property Scraper](https://apify.com/parsebird/daft-ie-property-scraper) — Ireland's leading property site

### FAQ

**Do I need to provide my own proxy?**
No. The actor uses a French residential Apify Proxy by default, which is required to reliably access leboncoin.fr.

**Does this work for rentals as well as sales?**
Yes — pass any leboncoin.fr real estate search URL, including rental ("Locations") searches; the same output structure applies, with `listing_details` and `property` reflecting whatever fields that listing includes.

**Can I filter by price, surface, rooms, or energy rating?**
Yes. Apply the filters you want directly on leboncoin.fr, then copy the resulting URL into **Start URLs** — the actor scrapes exactly what that URL returns.

**Can I run this on a schedule?**
Yes. Use [Apify's scheduler](https://docs.apify.com/platform/schedules) to run the actor daily, hourly, or at any interval, and combine it with [integrations](https://apify.com/integrations) (Slack, Google Sheets, Make, Zapier, webhooks) to get notified of new listings automatically.

**Can I access this via API?**
Yes. Every Apify actor exposes a REST API — see the [API tab](https://apify.com/parsebird/leboncoin-real-estate-scraper/api) for endpoints, or use the official [Python](https://docs.apify.com/api/client/python/) or [JavaScript](https://docs.apify.com/api/client/js/) clients (examples below).

**What if a listing is missing a field?**
leboncoin only sends the attributes that apply to that specific listing (a "Terrain" plot has no `rooms`, for example). Fields with no source data are omitted or left `null` rather than guessed.

**I found a bug or a listing that isn't parsed correctly. What do I do?**
Please open an issue on the Actor's Issues tab with the search URL you used — reports help keep the actor in sync with leboncoin's page changes.

### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/leboncoin-real-estate-scraper").call(run_input={
    "startUrls": ["https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"],
    "limit": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["pricing"]["amount_eur"])
```

### JavaScript example

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/leboncoin-real-estate-scraper').call({
    startUrls: ['https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753'],
    limit: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((item) => [item.title, item.pricing.amount_eur]));
```

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/leboncoin-real-estate-scraper/changelog.md

# Actor input Schema

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

leboncoin.fr search or category URLs to scrape, e.g. a filtered `/recherche?...` link copied from your browser. Each URL is paginated forward independently.

## `limit` (type: `integer`):

Maximum number of listings to save across the whole run. Leave empty to collect all available results for every start URL.

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

leboncoin.fr is protected by DataDome; a French residential proxy is required and is the default.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"
  ],
  "limit": 35,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        "https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"
    ],
    "limit": 35,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/leboncoin-real-estate-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": ["https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"],
    "limit": 35,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/leboncoin-real-estate-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 '{
  "startUrls": [
    "https://www.leboncoin.fr/recherche?category=9&locations=Paris_75011__48.85763_2.38005_1753"
  ],
  "limit": 35,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call parsebird/leboncoin-real-estate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/leboncoin-real-estate-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/54GoFSQjdkqHvLVPX/builds/z6dTXacZa125lXqeJ/openapi.json
