# leboncoin API scraper — France's largest classifieds site: marketplace search with condition, shipping, free-item and pro/private filters, real estate (sales, rentals, flat-shares, commercial) and vehicles (cars, motorcycles, vans, campervans), and the full ad record. No account, no browser; private sellers' personal data withheld.

> Search leboncoin, France's largest classifieds site, by keyword and/or category: price (free 'Don' items and placeholder prices labelled, price drops with the earlier price), town, postcode, department and region, pro or private seller, condition, shipping available, urgent and paid options, publication and re-publication dates, images and description. Filter by price, category, location or radius, condition, shipping, free only, urgent only, seller type or seller; sort by relevance, newest, oldest or price.
> ReefAPI engine `leboncoin` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/leboncoin/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /leboncoin/v1/search — 2 credits
Search leboncoin, France's largest classifieds site, by keyword and/or category: price (free 'Don' items and placeholder prices labelled, price drops with the earlier price), town, postcode, department and region, pro or private seller, condition, shipping available, urgent and paid options, publication and re-publication dates, images and description. Filter by price, category, location or radius, condition, shipping, free only, urgent only, seller type or seller; sort by relevance, newest, oldest or price.

**Parameters:**
- `query` (string, optional) — Free-text keyword, as typed into leboncoin's search box.
- `titles_only` (boolean, optional) — Match the keyword in ad titles only.
- `category` (string, optional) — leboncoin category id (55 = Vélos, 19 = Ameublement, 17 = Téléphones…); the categories action lists them.
- `condition` (array, optional) — One or more of new_with_tags, new_without_tags, new, very_good, good, fair, refurbished, for_parts. [one of: new_with_tags, new_without_tags, new, very_good, good, fair, refurbished, for_parts]
- `shippable` (boolean, optional) — Only ads the seller will ship.
- `free_only` (boolean, optional) — Only free give-away ('Don') ads.
- `urgent_only` (boolean, optional) — Only ads marked urgent.
- `ad_type` (enum, optional, default "offer") — offer (default) or demand (wanted ads). [one of: offer, demand]
- `price_min` (number, optional) — Lowest price in EUR (monthly rent on rentals).
- `price_max` (number, optional) — Highest price in EUR (monthly rent on rentals).
- `city` (string, optional) — Town name, e.g. Lyon. Combine with zipcode for one arrondissement.
- `zipcode` (string, optional) — 5-digit postcode; needs city.
- `department` (string, optional) — French department number, e.g. 13, 69, 75.
- `region` (string, optional) — leboncoin region id, e.g. 12 = Ile-de-France (see categories).
- `latitude` (number, optional) — Centre of a radius search (with longitude).
- `longitude` (number, optional) — Centre of a radius search (with latitude).
- `radius_km` (number, optional, default 10) — Radius around latitude/longitude, km.
- `seller_type` (enum, optional) — Only professional or only private sellers. [one of: pro, private]
- `seller_id` (string, optional) — A seller's seller_id (UUID) or store_id from a result row: that seller's ads.
- `sort` (enum, optional, default "relevance") — relevance, newest (last re-published first), oldest, price_asc or price_desc. [one of: relevance, newest, oldest, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (leboncoin serves the first 3,500 results).
- `page_token` (string, optional) — next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.
- `limit` (integer, optional, default 35) — Rows per page, up to 100.
- `include_sponsored` (boolean, optional, default false) — Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].
- `include_pii` (boolean, optional, default false) — Return private sellers' display names, exact coordinates and unmasked descriptions.
- `max_rotations` (integer, optional, default 3) — Upstream attempts on fresh exits before giving up.

**Returns:** listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description}, count, total, total_pro, total_private, page, limit, has_more, next_page_token, sort_applied, dropped_outside_price_range, sponsored_available, sponsored[]

**Example request body:**
```json
{
  "query": "velo"
}
```

### POST /leboncoin/v1/real_estate/search — 2 credits
Search leboncoin real estate — sales, rentals, flat-shares and commercial property: price or rent, price per m², surface, land surface, rooms, bedrooms, floor, energy and climate class, heating, building year, furnished, charges and deposit, agency fees and who pays them, new-build programmes with their units, town, postcode, district and department, agency or private owner, images. Filter by transaction, property type, price, surface, rooms, bedrooms, energy class, sale type, furnished and location or radius; sort by relevance, newest or price.

**Parameters:**
- `transaction` (enum, required) — sale, rent, flatshare or commercial. [one of: sale, rent, flatshare, commercial]
- `query` (string, optional) — Free-text keyword, as typed into leboncoin's search box.
- `property_type` (array, optional) — One or more of house, apartment, land, parking, other. [one of: house, apartment, land, parking, other]
- `sell_type` (array, optional) — Sales only: old, new (new-build) or life_annuity (viager). [one of: old, new, life_annuity]
- `price_min` (number, optional) — Lowest price in EUR (monthly rent on rentals).
- `price_max` (number, optional) — Highest price in EUR (monthly rent on rentals).
- `surface_min` (number, optional) — Smallest living surface, m².
- `surface_max` (number, optional) — Largest living surface, m².
- `land_surface_min` (number, optional) — Smallest plot, m².
- `land_surface_max` (number, optional) — Largest plot, m².
- `rooms_min` (integer, optional) — Fewest rooms.
- `rooms_max` (integer, optional) — Most rooms.
- `bedrooms_min` (integer, optional) — Fewest bedrooms.
- `bedrooms_max` (integer, optional) — Most bedrooms.
- `energy_class` (array, optional) — Energy (DPE) classes, e.g. ["a", "b"]. [one of: a, b, c, d, e, f, g]
- `furnished` (boolean, optional) — Rentals: true furnished only, false unfurnished only.
- `city` (string, optional) — Town name, e.g. Lyon. Combine with zipcode for one arrondissement.
- `zipcode` (string, optional) — 5-digit postcode; needs city.
- `department` (string, optional) — French department number, e.g. 13, 69, 75.
- `region` (string, optional) — leboncoin region id, e.g. 12 = Ile-de-France (see categories).
- `latitude` (number, optional) — Centre of a radius search (with longitude).
- `longitude` (number, optional) — Centre of a radius search (with latitude).
- `radius_km` (number, optional, default 10) — Radius around latitude/longitude, km.
- `seller_type` (enum, optional) — Only professional or only private sellers. [one of: pro, private]
- `seller_id` (string, optional) — A seller's seller_id (UUID) or store_id from a result row: that seller's ads.
- `sort` (enum, optional, default "relevance") — relevance, newest (last re-published first), oldest, price_asc or price_desc. [one of: relevance, newest, oldest, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (leboncoin serves the first 3,500 results).
- `page_token` (string, optional) — next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.
- `limit` (integer, optional, default 35) — Rows per page, up to 100.
- `include_sponsored` (boolean, optional, default false) — Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].
- `include_pii` (boolean, optional, default false) — Return private sellers' display names, exact coordinates and unmasked descriptions.
- `max_rotations` (integer, optional, default 3) — Upstream attempts on fresh exits before giving up.

**Returns:** listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, price_is_from, property{property_type, transaction, sell_type, surface_m2, land_surface_m2, rooms, bedrooms, bathrooms, floor, floors_in_building, elevator, energy_class, ghg_class, heating_type, building_year, furnished, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, agency_fees_paid_by, agency_fees, estimated_notary_fees, is_new_build_programme, units[]{unit_id, surface_m2, price}, …}}, count, total, total_pro, total_private, page, limit, has_more, next_page_token, sort_applied

**Example request body:**
```json
{
  "transaction": "rent",
  "department": "75"
}
```

### POST /leboncoin/v1/cars/search — 2 credits
Search leboncoin vehicles — cars, motorcycles, vans and campervans: price and price drops, make, model, version, trim, model year, first registration, mileage, fuel, gearbox, body type, doors, seats, fiscal and DIN horsepower, engine size, colour, condition, Crit'Air, inspection, battery health, equipment, leboncoin's market price estimate, dealer or private seller, town and department. Filter by vehicle type, make, model, year, mileage, fuel, gearbox, body type, engine size, price, seller type and location; sort by relevance, newest or price.

**Parameters:**
- `vehicle_type` (enum, optional, default "car") — car (default), motorcycle, van or caravan. [one of: car, motorcycle, caravan, van]
- `query` (string, optional) — Free-text keyword, as typed into leboncoin's search box.
- `make` (string, optional) — Make as leboncoin lists it, e.g. VOLKSWAGEN, PEUGEOT, YAMAHA (cars, motorcycles, vans).
- `model` (string, optional) — Cars: model name, with make (e.g. Golf).
- `year_min` (integer, optional) — Earliest model year.
- `year_max` (integer, optional) — Latest model year.
- `mileage_min` (number, optional) — Lowest mileage, km.
- `mileage_max` (number, optional) — Highest mileage, km.
- `fuel` (array, optional) — petrol, diesel, hybrid, plug_in_hybrid, electric, lpg, natural_gas, hydrogen, other. [one of: petrol, diesel, lpg, electric, other, hybrid, natural_gas, plug_in_hybrid, hydrogen]
- `gearbox` (enum, optional) — manual or automatic. [one of: manual, automatic]
- `body_type` (array, optional) — Cars: suv, sedan, estate, convertible, city_car, coupe, mpv, company_car, other. Motorcycles: motorcycle, scooter, quad, moped, other. [one of: suv, sedan, estate, convertible, city_car, coupe, mpv, company_car, other, motorcycle, scooter, quad, moped]
- `cubic_capacity_min` (number, optional) — Motorcycles: smallest engine, cm³.
- `cubic_capacity_max` (number, optional) — Motorcycles: largest engine, cm³.
- `price_min` (number, optional) — Lowest price in EUR (monthly rent on rentals).
- `price_max` (number, optional) — Highest price in EUR (monthly rent on rentals).
- `city` (string, optional) — Town name, e.g. Lyon. Combine with zipcode for one arrondissement.
- `zipcode` (string, optional) — 5-digit postcode; needs city.
- `department` (string, optional) — French department number, e.g. 13, 69, 75.
- `region` (string, optional) — leboncoin region id, e.g. 12 = Ile-de-France (see categories).
- `latitude` (number, optional) — Centre of a radius search (with longitude).
- `longitude` (number, optional) — Centre of a radius search (with latitude).
- `radius_km` (number, optional, default 10) — Radius around latitude/longitude, km.
- `seller_type` (enum, optional) — Only professional or only private sellers. [one of: pro, private]
- `seller_id` (string, optional) — A seller's seller_id (UUID) or store_id from a result row: that seller's ads.
- `sort` (enum, optional, default "relevance") — relevance, newest (last re-published first), oldest, price_asc or price_desc. [one of: relevance, newest, oldest, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (leboncoin serves the first 3,500 results).
- `page_token` (string, optional) — next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.
- `limit` (integer, optional, default 35) — Rows per page, up to 100.
- `include_sponsored` (boolean, optional, default false) — Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].
- `include_pii` (boolean, optional, default false) — Return private sellers' display names, exact coordinates and unmasked descriptions.
- `max_rotations` (integer, optional, default 3) — Upstream attempts on fresh exits before giving up.

**Returns:** listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, vehicle{make, model, version, trim, model_year, first_registration, mileage_km, fuel, gearbox, body_type, doors, seats, fiscal_horsepower, power_din_hp, cubic_capacity_cc, colour, condition, critair, technical_inspection_valid, battery_health_pct, equipment[], history[], market_price_estimate{min, max, positioning}, …}}, count, total, total_pro, total_private, page, limit, has_more, next_page_token

**Example request body:**
```json
{
  "make": "VOLKSWAGEN",
  "query": "golf"
}
```

### POST /leboncoin/v1/listing — 1 credit
The full leboncoin ad by id or URL, in any category: title, price (free, placeholder and price-drop labelled), description, all images, status, condition, shipping, every published attribute with its French label, publication, re-publication and expiry dates, location, vehicle or property details, paid options, and the seller — a pro's company, SIREN and shop; a private seller's name withheld.

**Parameters:**
- `ad_id` (string, required) — The leboncoin ad id (the digits at the end of an ad URL) or the full URL.
- `include_pii` (boolean, optional, default false) — Return private sellers' display names, exact coordinates and unmasked descriptions.
- `max_rotations` (integer, optional, default 3) — Upstream attempts on fresh exits before giving up.

**Returns:** listing{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, attributes[]{key, label, value, value_label, values[]}, reference, vehicle{} | property{}, price_is_from}

### POST /leboncoin/v1/categories — 2 credits
leboncoin's category tree (ids, names, parents, and which shortcut categories map to another) and its regions with their departments — the ids the search actions accept.

**Parameters:**
- `max_rotations` (integer, optional, default 3) — Upstream attempts on fresh exits before giving up.

**Returns:** categories[]{category_id, name, parent_id, same_as}, count, regions[]{region_id, name, departments[]{department_id, name}}

## More
- Try it live, no code: https://reefapi.com/playground?engine=leboncoin
- Human docs page: https://reefapi.com/docs/leboncoin
- Overview page: https://reefapi.com/leboncoin-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
