leboncoin France Car Scraper avatar

leboncoin France Car Scraper

Under maintenance

Pricing

Pay per event

Go to Apify Store
leboncoin France Car Scraper

leboncoin France Car Scraper

Under maintenance

Scrape used-car listings from leboncoin.fr — price (EUR), brand, model, year, mileage, fuel, gearbox, horsepower, body type, colour, Crit'Air, seller (pro/private), location, and photos. Export to JSON or CSV; optionally enrich each listing with its full French description.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share


🎯 What this scrapes

leboncoin.fr is France's largest classifieds marketplace and the default place the French buy and sell used cars, with hundreds of thousands of live listings in the Voitures section. It publishes no public API. This Actor wraps a polite scrape — paste a filtered leboncoin search URL or use the default car listing page, and pull every listing's price (EUR), brand, model, year, mileage (km), fuel, gearbox, horsepower, body type, colour, Crit'Air sticker, seller type (pro/private), location with postcode, and photos. Flip on detail enrichment and we fetch each listing's page for the full French description. Built on curl-cffi with browser TLS impersonation and residential-proxy rotation to ride past the site's bot protection.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Used-car price analytics — track asking prices by brand/model/year across the French market in EUR.
  • Dealer inventory monitoring — diff successive runs to spot new arrivals and price cuts at specific pro sellers.
  • Market research — aggregate fuel-type and Crit'Air mix to gauge EV/hybrid adoption and low-emission-zone readiness in France.
  • Lead generation — build a directory of French car dealers from seller_name + location + postcode.
  • Arbitrage / cross-border sourcing — find under-priced French listings filtered by mileage, year, and power for import.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlstringno''Full leboncoin.fr search/results URL with your filters already applied (e.g. https://www.leboncoin.fr/recherche?ca
maxResultsintegerno50Hard cap on dataset rows. leboncoin.fr paginates 35 listings per page; the Actor walks pages until this cap or the last
enrichDetailsbooleannoTrueFetch each listing's detail page for the full French description. The search payload already carries price, brand, model
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}Apify Proxy spec. leboncoin.fr is fronted by bot protection — residential exits are required for reliable access.

Example input

{
"searchUrl": "",
"maxResults": 5,
"enrichDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringleboncoin advert ID (list_id).
listing_urlstringAbsolute URL to the listing detail page.
titlestringListing headline (subject).
make['string', 'null']Car manufacturer / brand (e.g. Peugeot, Renault, BMW).
model['string', 'null']Model name.
year['integer', 'null']Model year (Année modèle / regdate).
price['integer', 'null']Asking price as an integer in the listing currency.
currency['string', 'null']ISO-4217 currency code — always EUR for leboncoin.fr.
mileage_km['integer', 'null']Odometer reading in kilometres (Kilométrage).
fuel_type['string', 'null']Fuel type (Essence, Diesel, Hybride, Électrique).
transmission['string', 'null']Gearbox (Manuelle / Automatique).
engine_power_hp['integer', 'null']Engine power in metric horsepower (chevaux), when published.
engine_size_cc['integer', 'null']Engine displacement in cubic centimetres, when published.
body_type['string', 'null']Body / vehicle type (e.g. Citadine, Berline, SUV, Break).
color['string', 'null']Exterior colour (e.g. Noir, Blanc, Gris).
first_registration['string', 'null']Date of first registration (Date de première mise en circulation, MM/YYYY) when published.
location['string', 'null']Town / city of the listing.
region['string', 'null']French department name (e.g. Seine-Maritime, Paris).
postcode['string', 'null']Postal code (code postal).
seller_type['string', 'null']private or dealer.
seller_name['string', 'null']Seller / dealer (store) name when present.
critair['string', 'null']Crit'Air air-quality sticker classification when published.
photo_urlsarrayList of listing photo URLs (full-size).
description['string', 'null']Full French listing description (plain text). Present from the search payload; enriched from the detail page when reques
posted_date['string', 'null']ISO timestamp when the listing was first published.
scraped_atstringISO timestamp when this row was recorded.

Example output

{
"listing_id": "3117822207",
"listing_url": "https://www.leboncoin.fr/ad/voitures/3117822207",
"title": "Morris Mini COOPER 1275 S",
"make": "MORRIS",
"model": "Autre",
"year": 1968,
"price": 34900,
"currency": "EUR",
"mileage_km": 101890,
"fuel_type": "Essence",
"transmission": "Manuelle",
"engine_power_hp": null,
"engine_size_cc": null,
"body_type": "Citadine",
"color": "Vert",
"first_registration": "07/1968",
"location": "Saint-Jean-du-Cardonnay",
"region": "Seine-Maritime",
"postcode": "76150",
"seller_type": "dealer",
"seller_name": "MECA SPORT",
"critair": "Non class\u00e9",
"photo_urls": [
"https://img.leboncoin.fr/api/v1/lbcpb1/images/12/99/eb/1299eb9f07aa41b5f0430ce684d22b4e689dc47c.jpg?rule=ad-image"
],
"description": "Magnifique Morris Mini Cooper 1275 S restaur\u00e9e.",
"posted_date": "2025-12-26 14:04:00",
"scraped_at": "2026-06-02T00:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.002PPE event

Example: 1 000 results at the rates above ≈ $0.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

leboncoin.fr is fronted by bot protection — a residential proxy is required and the Actor rotates its session on any block. Pagination is 35 listings per page and very deep result sets eventually stop returning new pages, so large queries cap out well before the full inventory. Engine power (chevaux) and displacement are only populated when the seller fills those optional fields. Some listings hide the seller name in the search payload.

❓ FAQ

Do I need a leboncoin account or API key?

No. leboncoin.fr offers no public API. This Actor scrapes the public Voitures listings politely — see the ToS Notice in the README.

How do I scrape a filtered search?

Apply your filters on leboncoin.fr, copy the resulting URL from your browser, and paste it into searchUrl. We walk the result pages from there.

Why does this need a residential proxy?

leboncoin.fr is fronted by bot protection. Datacenter IPs get challenged or blocked; Apify residential exits ride past it reliably. The default proxy config already requests RESIDENTIAL.

Is the detail enrichment worth it?

The search payload already carries the description, price, brand/model, year, mileage, fuel, gearbox, colour, seller, location, and photos. Enrichment re-fetches the full description from each listing's own page for the freshest copy — set enrichDetails to false to halve requests.

What currency are prices in?

Always EUR (euros). price is an integer; mileage is always in kilometres.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.