Piotr VassevPiotr Vassev

How to Research Leboncoin Listings and Track New Matches

The Leboncoin Listings Scraper collects French classified listings by keyword and filters or a search-page URL. I maintain the Actor. This walkthrough looks for used electric bicycles around Lyon, then shows how to review condition and remember new listing IDs.

A low asking price needs context. For an electric bicycle, a missing or worn-out battery can matter more than the difference between two headline prices.

How to Scrape Leboncoin Listings

Use filters or a saved search URL

The example uses searchQueries, locations, and euro price bounds. Locations use the City_zipcode format, such as Lyon_69000. ownerType: "private" limits the search to private sellers; it does not verify the seller's identity.

If you supply startUrls, those URLs take precedence over query filters. Copy an already filtered search URL when you want that mode, and do not expect extra price or location fields to override it.

Residential proxies are strongly recommended because Leboncoin's DataDome protection can block datacenter requests after a few pages. The default uses residential proxies. Keep the initial page and item limits small while checking access and result relevance.

Budget for the sample

Pricing as of September 6, 2026. A product listing is $0.001. With includeDetails enabled, the alternative item-details event is $0.004 per item. The Actor-start event is $0.00005 per GB of allocated memory, with a minimum of one event. A pricing change is scheduled for 2026-09-09; recheck the rate before a later run or recurring schedule. Check current Actor pricing and the run charge breakdown; these calculations describe Actor events, and separately billed platform or proxy resources may also apply.

Collect forty local listings

Open the Actor on Apify. In Input, switch to the JSON editor and paste:

{
  "searchQueries": [
    "vélo électrique"
  ],
  "locations": [
    "Lyon_69000"
  ],
  "priceMin": 500,
  "priceMax": 2000,
  "ownerType": "private",
  "shippableOnly": false,
  "sort": "time",
  "includeDetails": false,
  "maxItems": 40,
  "maxPages": 5
}

Click Start, then open the completed run’s output dataset.

maxItems: 40 caps the run; maxPages: 5 caps pages for each search query. Both matter. Leboncoin itself limits a search to 100 pages, approximately 3,500 results, so setting zero for the item cap does not produce an unlimited catalog.

After completion, check that the location, seller type, and bicycle titles match your intended search. Inspect the log for access failures before treating a short dataset as evidence of a thin local market.

Read the returned fields

FieldHow to use it
listIdLeboncoin listing identifier
titleListing title
priceAsking price in euros
locationNested city, postcode, and region
urlListing URL
sellerNested seller name and type
firstPublicationDateFirst publication timestamp

Keep price in euros separate from priceCents. Comparing or summing both creates a hundredfold error. firstPublicationDate is the first publication timestamp; lastIndexDate is a separate source update/indexing value, and scrapedAt records collection time.

The historical README example describes a bicycle whose battery needs replacing. It illustrates why a title such as Vélo électrique and a condition label cannot settle whether two bicycles are comparable. Use full descriptions and photos for the shortlisted items.

Historical leboncoin listings scraper output

Build a reviewable bicycle shortlist

Export JSON to retain nested location, seller, image, and attribute data. In a working sheet keep listId, title, URL, price, city, seller type, first-publication date, and collection time. Add model, frame size, battery notes, and review outcome.

Deduplicate by listId. Separate full bicycles from parts, damaged bicycles, and other matches. Check frame size and battery condition before computing a price range. If the listing snippet is insufficient, rerun a bounded search with includeDetails: true for full descriptions and join records by ID.

The two searches may return different sets as listings change, so do not match them by row number. Review images and the original listing before acting. A hasPhone flag is not a returned telephone number, and buyerFee: 0 in one sample does not prove that every purchase has no additional cost.

For a recurring watch, save the input as an Apify task and keep a destination table of previously seen IDs. Insert newly observed listings, then alert on rows that pass your price and review criteria. Keep delivery status separately so failed alerts can be retried from the saved dataset.

Store later observations instead of overwriting the first price. A disappeared listing should be marked not observed in the latest search, not automatically sold.

Check precedence and access before changing the search

If filters seem ignored, remove unintended startUrls or edit the filters in the URL itself. If results are empty, verify the location format and relax one price bound before broadening everything.

Avoid guessed category IDs: the current README's category table and sample do not agree on every mapping. Use a verified category URL when a category is essential. If requests are blocked, inspect residential proxy access and the log; larger page limits cannot repair that problem.

The OLX and Kleinanzeigen guides provide comparable classified-search workflows for other markets.

For saving Leboncoin search snapshots, see the Node.js example. Use the current input fields above if the example differs.

Frequently asked questions

Why are my price filters ignored?

If startUrls is supplied, its search URLs take precedence over the separate query and filter fields. Edit the URL or remove that mode.

Does zero maxItems mean all Leboncoin listings?

No. It removes the Actor item cap, but page limits and Leboncoin’s search ceiling still restrict coverage.

Which field records the original posting date?

Use firstPublicationDate. Keep it separate from lastIndexDate and scrapedAt, which describe different events.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn