# Leboncoin Scraper - Ads, Real Estate, Cars & Seller Data (`scrapersdelight/leboncoin-scraper`) Actor

Scrape leboncoin.fr ads from any search URL, keyword, category, place or seller: price, full description, every attribute, GPS, seller type, SIREN, photos and dates. Real-estate and car fields typed, past the 3,500-ad limit, monitor mode, optional seller profiles. No login.

- **URL**: https://apify.com/scrapersdelight/leboncoin-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Real estate, E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.63 / 1,000 leboncoin ads

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

### What does Leboncoin Scraper do?

**Leboncoin Scraper** extracts classified ads from [leboncoin.fr](https://www.leboncoin.fr), France's largest marketplace, and turns any search URL, keyword, category, place or seller into structured rows: one ad per row with its price, full description, every attribute, GPS position, seller and photos. Built for real-estate analysts, used-car dealers, resellers and lead-generation teams who need fresh French market data without copying pages by hand.

Also known as: leboncoin API, le bon coin scraper, LBC scraper, leboncoin immobilier scraper, leboncoin voiture scraper.

- **Every category, every filter:** real estate, cars, motorbikes, electronics, furniture, jobs... Paste any leboncoin search URL and all its filters are applied, or build the search from the form (category, places, radius, price, seller type, real-estate and car filters).
- **The full ad, not a card:** title, complete description, price and price drop, all attributes, latitude/longitude, publication dates in UTC, seller type and name, SIREN for professionals, every photo.
- **Typed real-estate and vehicle fields:** surface, rooms, bedrooms, DPE energy class, floor, charges, notary fees; brand, model, year, mileage, fuel, gearbox, horsepower, Crit'Air and leboncoin's own market price range - as numbers, not "82 m²" strings.
- **Past the 3,500-ad limit:** leboncoin stops one search at 3,500 ads; Leboncoin Scraper splits bigger searches into price bands automatically.
- **Seller profiles (optional):** member since, active ads, rating and review count, reply rate, last seen; for professionals SIREN, SIRET, address, website and opening hours.
- **Monitor mode:** schedule it and get only new or re-priced ads, with the previous price and the ids of ads that disappeared.
- **No login, no cookies, no leboncoin account.** Pay only for ads delivered; no start fee.
- **Export anywhere:** JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets; the Apify API and MCP server for AI agents.

### What data can you get from leboncoin?

<table>
<tr>
<td>🆔 Ad id and link (`id`, `url`)</td>
<td>📝 Title and full description</td>
<td>💶 Price, old price, €/m² (`oldPrice`, `pricePerM2`)</td>
</tr>
<tr>
<td>🗂️ Category, ad type, condition</td>
<td>📅 First published, last indexed, expiry (UTC)</td>
<td>⏳ Days online (`daysOnline`)</td>
</tr>
<tr>
<td>📍 City, postcode, district, department, region</td>
<td>🌐 Latitude and longitude</td>
<td>👤 Seller type and name (`sellerType`)</td>
</tr>
<tr>
<td>🏢 Shop name, logo, SIREN (professionals)</td>
<td>⭐ Seller rating and review count</td>
<td>🚚 Shippable, shipping mode, buyer fee</td>
</tr>
<tr>
<td>🏠 Real estate: surface, rooms, DPE, floor, charges</td>
<td>🚗 Vehicle: brand, model, year, mileage, fuel, gearbox</td>
<td>🖼️ Photo count and every photo URL</td>
</tr>
<tr>
<td>🔖 Urgent and boosted flags</td>
<td>🧾 Every leboncoin attribute (`attributes`)</td>
<td>🔁 Monitor: new / price drop / price rise</td>
</tr>
</table>

Measured on 2,699 different ads read in our test runs (cars, bikes, consoles, Paris apartments, Gironde houses): title, description, price, city, postcode, GPS, dates and seller type on 100% of ads; photos on 99%; SIREN on 99% of professional sellers' ads; leboncoin's own "old price" (a price drop) on 35%; a seller rating on 35%.

### How to scrape leboncoin with Leboncoin Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - it comes with monthly free credit, no card needed.
2. Open [Leboncoin Scraper](https://apify.com/scrapersdelight/leboncoin-scraper) and click **Try for free**.
3. Search leboncoin.fr in your browser with the filters you want and paste the URL into **Search URLs** - or type **Keywords** and pick a category, places and filters in the form.
4. Set **Max ads** and click **Start**. Ads arrive in the dataset as each page is read (100 ads per request).
5. Open the **Storage** tab and **Export** as JSON, CSV or Excel - or add a schedule to run it every day.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | Use any mix; each URL / keyword / seller is one search. |
| `searchUrls` | List | leboncoin search URLs (`/recherche?...` or `/c/<category>`). Every filter in the URL is applied. Prefilled with Paris apartments for sale. |
| `keywords` | List | One search per keyword, e.g. `peugeot 308`, `maison piscine`. Form filters apply. |
| `adUrls` | List | Single ads: a link (`/ad/voitures/3287999313`) or an id. |
| `sellerIds` | List | All active ads of a seller: seller id (`sellerUserId`), profile link or store id. |
| **🎯 Filters** (applied by leboncoin) | | For keywords, sellers and filter-only searches. |
| `category` / `categoryId` | Select / text | Category (53 in the list) or any leboncoin category id or slug. Default: all. |
| `locations` | List | Cities, postcodes, departments, regions: `Lyon`, `75011`, `Gironde`, `69`. |
| `radiusKm` | Integer | Radius around a city, or around `latitude` / `longitude`. |
| `priceMin` / `priceMax` | Integer | Price range in euros. |
| `ownerType` | Select | `all` (default), `private`, `pro`. |
| `sortBy` | Select | `newest` (default), `relevance`, `cheapest`, `mostExpensive`, `oldest`. |
| `searchInTitleOnly`, `urgentOnly`, `shippableOnly`, `donationOnly` | Boolean | Keywords in title only; urgent ads; leboncoin delivery; free items. Default: off. |
| **🏠 Real-estate filters** | | `realEstateTypes` (house, apartment, land, parking, other), `surfaceMin/Max`, `roomsMin/Max`, `bedroomsMin/Max`, `landSurfaceMin/Max`, `energyClasses` (A-G, blank), `furnished`. |
| **🚗 Vehicle filters** | | `carBrands` (e.g. `PEUGEOT`), `fuels`, `gearboxes`, `mileageMin/Max`, `yearMin/Max`. |
| `customFilters` | JSON | Any other leboncoin filter: `{"enums": {...}, "ranges": {...}}`. |
| **✂️ Refine results** | | Applied before anything is delivered or charged. |
| `includeKeywords` / `excludeKeywords` | List | Keep / drop ads whose title or description contains a word. |
| `postedWithinDays` | Integer | Only ads first published in the last N days; searches read newest first and stop at the cutoff. |
| **➕ Extra data** | | |
| `includeSellerProfile` | Boolean | Seller profile on every row, charged once per seller per run (see pricing). Default: off. |
| `extractContacts` | Boolean | Phone numbers and links the seller typed in the description. Free. Default: off. |
| **🔁 Monitoring** | | |
| `monitorMode` | Boolean | Only ads this monitor has not delivered before, plus re-priced ones. Default: off. |
| `monitorKey` | Text | Optional name for the monitor's memory. |
| `webhookUrl` | Text | One JSON POST per run that delivered something. |
| **📦 Output** | | |
| `maxItems` | Integer | Most ads per run. Default `100` (prefill 20). |
| `maxItemsPerSearch` | Integer | Cap per URL / keyword / seller. |
| `splitLargeSearches` | Boolean | Read searches bigger than 3,500 ads in price bands. Default: on. |
| `compact`, `descriptionMaxLength` | Boolean / Integer | Core fields only; cut long descriptions. |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | Proxy | Optional. Leave empty: the actor picks its own route. |

#### Input JSON

```json
{
  "keywords": ["peugeot 208"],
  "category": "2",
  "locations": ["Lyon"],
  "radiusKm": 30,
  "fuels": ["1"],
  "maxItems": 100
}
```

#### Paste the URL from your browser for anything the form does not have

Set the search up on leboncoin.fr (category, place, every filter, sort), copy the address bar and paste it into **Search URLs**. **Do:** `https://www.leboncoin.fr/recherche?category=9&locations=Lyon_69000__45.76_4.83_7308_10000&real_estate_type=1,2&square=50-120` · **Don't:** paste an ad link there (`/ad/...`) - ad links go in **Ad links or ids**.

#### Use department numbers for whole departments

`69` searches the whole Rhône department; `Lyon` searches the city of Lyon (add **Radius** to widen it); `69003` searches that postcode. Several places in **Locations** make one search covering all of them.

#### Big searches: raise Max ads and leave Split large searches on

leboncoin serves at most 3,500 ads per search. Ask for more and Leboncoin Scraper splits the search by price into pieces of up to 3,500 and reads each one; ads with no price at all cannot be reached that way and are counted in the run summary.

### ⬆️ Output

Every ad becomes one dataset item. A real row from the test run of the prefilled Paris search (trimmed):

```json
{
  "id": "3287690243",
  "url": "https://www.leboncoin.fr/ad/ventes_immobilieres/3287690243",
  "title": "Appartement 5 pièces 114 m²",
  "price": 893000,
  "pricePerM2": 7833,
  "categoryName": "Ventes immobilières",
  "firstPublishedAt": "2026-10-13T13:00:54.000Z",
  "city": "Paris", "zipcode": "75015", "district": "Balard",
  "latitude": 48.83858, "longitude": 2.28092,
  "sellerType": "pro", "sellerName": "ABRICULTEURS", "siren": "837704584",
  "imageCount": 20,
  "realEstate": {
    "realEstateType": "Appartement", "surfaceM2": 114, "rooms": 5, "bedrooms": 3,
    "energyClass": "E", "gesClass": "D", "floor": 9, "floorsInBuilding": 15,
    "elevator": true, "buildingYear": 1971, "annualCondoCharges": 5460,
    "estimatedNotaryFees": 71440, "propertyTax": 3074
  },
  "source": "search",
  "searchTotal": 9490
}
```

#### Fields

| Field | Type | What it is | Fill (2,699 test ads) |
|---|---|---|---|
| `id`, `url`, `title`, `description` | string | Ad id, link, title, full text | 100% |
| `price`, `priceCents`, `currency` | number / string | Asking price in euros (rentals: per month) | 100% |
| `oldPrice` | number | Previous price when the seller lowered it | 35% |
| `pricePerM2` | number | € per m² (real estate for sale) | on real-estate sales |
| `categoryId`, `categoryName`, `adType`, `status` | string | Category, offer/demand, status | 100% |
| `condition` | string | Item condition (goods) | 51% |
| `firstPublishedAt`, `indexedAt` | string (ISO, UTC) | First publication, last (re)publication | 100% |
| `expiresAt` | string (ISO, UTC) | Expiry, when leboncoin shows it | 20% |
| `daysOnline` | integer | Days since first publication | 100% |
| `city`, `zipcode`, `departmentId`, `departmentName`, `regionId`, `regionName` | string | Place | 100% (overseas ads have no department number) |
| `district` | string | Neighbourhood | 19% |
| `latitude`, `longitude`, `locationSource` | number / string | GPS; `address` = the ad's own address, `city` = city centre | 100% |
| `sellerType`, `sellerName`, `sellerUserId`, `storeId` | string | Seller | 100% |
| `siren`, `storeName`, `onlineStoreId`, `storeLogo` | string | Professional sellers | SIREN on 99% of pros |
| `sellerRating`, `sellerReviewCount` | number | Seller rating out of 5 and reviews | 35% |
| `noSolicitation` | boolean | Seller opted out of commercial solicitation | 100% |
| `isUrgent`, `isBoosted`, `hasPhone` | boolean | Urgent; paid visibility; accepts phone contact | 100% |
| `isShippable`, `shippingType`, `buyerFee` | boolean / string / number | leboncoin delivery (goods) | 55% |
| `imageCount`, `thumbnailUrl`, `imageUrls` | integer / string / list | Photos | 99% |
| `realEstate` | object | Real-estate block (surface 100%, rooms 100%, bedrooms 96%, DPE 92% of real-estate ads) | real-estate ads |
| `vehicle` | object | Vehicle block (brand, model, year, mileage, fuel, gearbox 100%; horsepower 98%; market price range 84% of cars) | vehicle ads |
| `attributes` | object | Every leboncoin attribute, key → label | 100% |
| `sellerProfile` | object | With Seller profiles on | see below |
| `descriptionPhones`, `descriptionLinks` | list | With Contacts from the ad text on | rare (see FAQ) |
| `changeType`, `previousPrice`, `firstSeenAt` | string / number | Monitor mode | monitor runs |
| `source`, `sourceInput`, `position`, `searchTotal`, `scrapedAt` | mixed | Which input produced the row; leboncoin's own total | 100% |

**Seller profile** (69 sellers in the test runs): member since and active ad count 100%, last seen 96%, rating 32%, reply rate 35%, and for professional sellers a `company` block with SIREN, SIRET, address, website, opening hours, slogan and services.

### How can I use leboncoin data?

- 🏠 **Real-estate agents and investors:** price per m² by district, new listings from private sellers every morning, price drops on houses you follow.
- 🚗 **Used-car dealers:** comps by model, year and mileage, leboncoin's own market price range, dealer stock by SIREN.
- 📈 **Market researchers:** supply and asking prices by category, department and seller type across France.
- 🛒 **Resellers:** underpriced electronics, furniture and bikes the minute they are listed (monitor mode + webhook).
- 🧾 **B2B sales teams:** professional sellers with SIREN, SIRET, address and website from Seller profiles.
- 🤖 **AI agents and data teams:** a clean, typed feed through the API or MCP, with `compact` output for LLM context.

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

Pay per event, no start fee. Apify platform costs are included.

| Event | Price | When |
|---|---|---|
| Leboncoin ad | $0.00063 ($0.63 per 1,000) | each ad delivered to your dataset |
| Seller profile | $0.0009 | once per seller per run, only with Seller profiles on |

| Run | Ads | Cost |
|---|---|---|
| Quick check | 20 | $0.013 |
| Typical search | 100 | $0.063 |
| Big export | 1,000 | $0.63 |
| 1,000 ads + seller profiles (~400 sellers) | 1,000 | ~$0.99 |

Filtered, duplicate, already-seen (monitor) and unreachable ads are never charged. You can cap the spend of any run with the **maximum cost per run** setting.

### Integrations, API, scheduling & MCP

- **Schedules:** run a search every hour or day and combine with **monitor mode** for alerts.
- **Webhooks and apps:** `webhookUrl`, or Apify integrations with Make, Zapier, n8n, Google Sheets, Slack and email.
- **API:** start runs and read datasets from [Python](https://apify.com/scrapersdelight/leboncoin-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/leboncoin-scraper/api/javascript) with `apify-client`.
- **MCP:** give AI assistants (Claude, Cursor, ChatGPT) live leboncoin search through the [Apify MCP server](https://apify.com/scrapersdelight/leboncoin-scraper/api/mcp).

### More French data scrapers

- 📒 [PagesJaunes France Leads Scraper](https://apify.com/scrapersdelight/pagesjaunes-france-scraper) - use it when you need business phone numbers, emails and SIRET by trade and town.
- 💼 [France Travail Jobs Scraper](https://apify.com/scrapersdelight/france-travail-jobs-scraper) - use it for French job offers with the employer's contact.
- 🔧 [France RGE Installers Scraper](https://apify.com/scrapersdelight/rge-installers-fr-scraper) - use it for certified renovation firms.
- 🏡 [Rightmove Scraper](https://apify.com/scrapersdelight/rightmove-scraper) and [Kyero Property Scraper](https://apify.com/scrapersdelight/kyero-property-scraper) - property listings in the UK and Spain.

See every actor on [our profile](https://apify.com/scrapersdelight).

### Limits & empty runs

- **3,500 ads per search** is leboncoin's own limit; turn on **Split large searches** (default) to go past it. Ads without a price fall outside the price bands.
- **Phone numbers are not available:** leboncoin shows a seller's number only to signed-in members, and this actor never signs in. `hasPhone` tells you whether the seller accepts calls.
- **Speed (test runs):** 20 ads in 12 s, 100 ads in 12 s, 1,000 ads in 24 s; ad links ~5 per second; seller profiles add ~0.15 s per seller.
- **An empty run** means leboncoin had no ad matching the search (the run summary shows leboncoin's own total of 0) or a place could not be found (listed under `unresolvedInputs`). Nothing is charged.
- The run summary (`RUN_SUMMARY`) lists, per search, leboncoin's total, ads read and delivered, price bands, filtered and duplicate ads, and ad links that no longer exist.

### FAQ

#### How many ads can Leboncoin Scraper get?

As many as your search holds. One leboncoin search serves 3,500 ads; with **Split large searches** on, Leboncoin Scraper reads bigger searches in price bands. Our test read 1,000 cars from one department in 24 seconds.

#### Does Leboncoin Scraper need a leboncoin account, login or API key?

No. It reads the same public data a visitor sees, with no login, cookies or key.

#### Can Leboncoin Scraper get the seller's phone number?

No. leboncoin only reveals phone numbers to signed-in members. Turn on **Contacts from the ad text** to collect numbers sellers typed in their description - leboncoin removes most of them, so expect few (5 in 2,699 test ads). For professionals, **Seller profiles** adds the company's website and address.

#### How do I get only new ads every day with Leboncoin Scraper?

Turn on **Only new or re-priced ads** (monitor mode) and add a daily schedule. Each run delivers ads it has never delivered before plus ads whose price changed (`changeType`, `previousPrice`); ads that disappeared are listed in the run's `OUTPUT`, free.

#### Can I scrape leboncoin real estate (immobilier) and cars (voitures) with Leboncoin Scraper?

Yes - and every other category. Real-estate ads get a `realEstate` block (surface, rooms, bedrooms, DPE, floor, charges, notary fees, property tax) and vehicles a `vehicle` block (brand, model, year, mileage, fuel, gearbox, horsepower, Crit'Air, market price range).

#### How much does Leboncoin Scraper cost?

$0.63 per 1,000 ads, no start fee, and $0.0009 per seller when you add seller profiles. A 100-ad search costs $0.063.

#### Can I use Leboncoin Scraper with the Apify API or from Python?

Yes. Start a run with `apify-client` (Python or JavaScript), pass the same JSON input, and read the dataset. See the **API** tab for ready-made code.

#### Can AI agents use Leboncoin Scraper through MCP?

Yes. Add it to the Apify MCP server and an assistant can search leboncoin live; turn on **Compact output** to keep rows short.

#### Why did my Leboncoin Scraper run return no ads?

Your search matched nothing on leboncoin right now, a filter was too narrow, or a place name was not recognised - the run summary says which. Paste the same search URL into your browser to compare. Nothing is charged for an empty run.

#### Is it legal to scrape leboncoin?

Leboncoin Scraper collects publicly available listing data. Some ads contain personal data such as a seller's first name; use the data responsibly and in line with the laws that apply to you.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/leboncoin-scraper/issues/open) - we read every one.

# Actor input Schema

## `searchUrls` (type: `array`):

leboncoin search pages with your filters applied, e.g. https://www.leboncoin.fr/recherche?category=9\&locations=Paris\&real_estate_type=2 or https://www.leboncoin.fr/c/voitures. Every filter in the URL is applied.

## `keywords` (type: `array`):

One search per keyword, as you would type it on leboncoin, e.g. "peugeot 308", "maison piscine", "iphone 15". The filters below apply to these searches.

## `adUrls` (type: `array`):

Single ads to fetch, e.g. https://www.leboncoin.fr/ad/voitures/3287999313 or 3287999313. Each returns the same full row as a search.

## `sellerIds` (type: `array`):

Every active ad of a seller: the seller id (sellerUserId of any of their ads, e.g. c7041ea4-7898-486c-8372-a50a6bc1ee09), a profile link, or a store id (storeId). Filters below apply.

## `category` (type: `string`):

leboncoin category. Leave on 'All categories' to search everywhere.

## `categoryId` (type: `string`):

Any leboncoin category id or URL slug not in the list, e.g. 81 or accessoires_telephone_objets_connectes. Overrides Category.

## `locations` (type: `array`):

Cities, postcodes, departments or regions, resolved by leboncoin's own place search, e.g. "Lyon", "75011", "Gironde", "69" (department number). Several = one search covering all of them.

## `radiusKm` (type: `integer`):

Search this far around a city (or the latitude/longitude point). Empty = the city itself.

## `latitude` (type: `string`):

Point search instead of a named place, e.g. 45.7640 (with Longitude and Radius).

## `longitude` (type: `string`):

Point search, e.g. 4.8357 (with Latitude and Radius).

## `priceMin` (type: `integer`):

Lowest price in euros.

## `priceMax` (type: `integer`):

Highest price in euros.

## `ownerType` (type: `string`):

Private individuals, professionals, or both.

## `sortBy` (type: `string`):

Order leboncoin returns the ads in.

## `searchInTitleOnly` (type: `boolean`):

Match keywords in the ad title only, not the description.

## `urgentOnly` (type: `boolean`):

Only ads the seller marked "Urgent".

## `shippableOnly` (type: `boolean`):

Only ads with leboncoin delivery.

## `donationOnly` (type: `boolean`):

Only ads given away for free.

## `realEstateTypes` (type: `array`):

Houses, apartments, land, parking or other.

## `surfaceMin` (type: `integer`):

Smallest living area in m².

## `surfaceMax` (type: `integer`):

Largest living area in m².

## `roomsMin` (type: `integer`):

Fewest rooms (pièces).

## `roomsMax` (type: `integer`):

Most rooms (pièces).

## `bedroomsMin` (type: `integer`):

Fewest bedrooms.

## `bedroomsMax` (type: `integer`):

Most bedrooms.

## `landSurfaceMin` (type: `integer`):

Smallest plot in m².

## `landSurfaceMax` (type: `integer`):

Largest plot in m².

## `energyClasses` (type: `array`):

Energy performance classes to keep.

## `furnished` (type: `string`):

Rentals: furnished or unfurnished.

## `carBrands` (type: `array`):

Brands as leboncoin writes them, e.g. PEUGEOT, RENAULT, MERCEDES-BENZ, TOYOTA.

## `fuels` (type: `array`):

Fuel types to keep.

## `gearboxes` (type: `array`):

Manual, automatic or both.

## `mileageMin` (type: `integer`):

Lowest mileage in km.

## `mileageMax` (type: `integer`):

Highest mileage in km.

## `yearMin` (type: `integer`):

Oldest registration year, e.g. 2015.

## `yearMax` (type: `integer`):

Newest registration year.

## `customFilters` (type: `object`):

Any other leboncoin filter, as on its search URLs: {"enums": {"vehicle_type": \["4x4"]}, "ranges": {"horse_power_din": {"min": 150}}}.

## `includeKeywords` (type: `array`):

Keep an ad only if its title or description contains one of these words (case-insensitive).

## `excludeKeywords` (type: `array`):

Drop ads whose title or description contains any of these words, e.g. "épave", "pour pièces".

## `postedWithinDays` (type: `integer`):

Only ads first published in the last N days. Searches then read newest first and stop at the cutoff. Pairs well with a daily schedule.

## `includeSellerProfile` (type: `boolean`):

Add each seller's profile: member since, active ads, rating and reviews, reply rate, last seen; for professionals also SIREN, SIRET, address, website and opening hours. Charged once per seller per run.

## `extractContacts` (type: `boolean`):

List phone numbers and links sellers wrote in their description (descriptionPhones, descriptionLinks). leboncoin removes most numbers from ad texts, so expect few. No extra charge.

## `monitorMode` (type: `boolean`):

Deliver only ads this monitor has not delivered before, plus known ads whose price changed (changeType, previousPrice). Ads that disappeared are listed in OUTPUT, free.

## `monitorKey` (type: `string`):

Optional name for this monitor's memory. Empty = derived from your inputs, so different searches never share one.

## `webhookUrl` (type: `string`):

Receives one JSON POST per run that delivered something (counts, dataset id, removed ads). Works with Make, Zapier, n8n.

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

Most ads delivered in this run, across all searches. One leboncoin query stops at 3,500 ads; bigger searches are split by price automatically.

## `maxItemsPerSearch` (type: `integer`):

Cap for each search URL / keyword / seller. Empty = only Max ads applies.

## `splitLargeSearches` (type: `boolean`):

When a search holds more than 3,500 ads and you asked for more, read it in price bands so you get past leboncoin's 3,500-ad limit.

## `compact` (type: `boolean`):

Core fields only (id, url, title, price, place, seller, date, key specs, short description) - for AI agents and spreadsheets.

## `descriptionMaxLength` (type: `integer`):

Cut descriptions to this many characters. Empty = full text.

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

Optional. Leave empty: the actor picks its own route (French residential exits, then Apify's unblocker). Set it only to use your own proxies.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.leboncoin.fr/recherche?category=9&locations=Paris&real_estate_type=2"
  ],
  "category": "all",
  "ownerType": "all",
  "sortBy": "newest",
  "searchInTitleOnly": false,
  "urgentOnly": false,
  "shippableOnly": false,
  "donationOnly": false,
  "furnished": "any",
  "includeSellerProfile": false,
  "extractContacts": false,
  "monitorMode": false,
  "maxItems": 20,
  "splitLargeSearches": true,
  "compact": false
}
```

# Actor output Schema

## `ads` (type: `string`):

The dataset of leboncoin ads (one item per ad).

## `summary` (type: `string`):

Per search: leboncoin's own total, ads read and delivered, price bands, filters applied, lookups not found or unreachable, transport totals.

## `output` (type: `string`):

Delivered counts and, in monitor mode, the ids of ads that disappeared since the last run.

# 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 = {
    "searchUrls": [
        "https://www.leboncoin.fr/recherche?category=9&locations=Paris&real_estate_type=2"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/leboncoin-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 = {
    "searchUrls": ["https://www.leboncoin.fr/recherche?category=9&locations=Paris&real_estate_type=2"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/leboncoin-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 '{
  "searchUrls": [
    "https://www.leboncoin.fr/recherche?category=9&locations=Paris&real_estate_type=2"
  ],
  "maxItems": 20
}' |
apify call scrapersdelight/leboncoin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/leboncoin-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/TlMPG8f1kygowbrqg/builds/d0WeHz9hIg28lUmlh/openapi.json
