Leboncoin FR $1πŸ’° URL | Filters | Deep Search Scraper avatar

Leboncoin FR $1πŸ’° URL | Filters | Deep Search Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Leboncoin FR $1πŸ’° URL | Filters | Deep Search Scraper

Leboncoin FR $1πŸ’° URL | Filters | Deep Search Scraper

Pull public leboncoin.fr listings across cars, property, jobs, electronics, furniture, and 35+ categories. Returns 60–78 fields, including price, GPS, seller info, attributes, and images. Search by filters or URL with pagination and listing ID dedupe.

Pricing

from $0.80 / 1,000 results

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

0

Monthly active users

15 days ago

Last modified

Share

Leboncoin.fr Scraper

Pull every public field from leboncoin.fr classified listings: cars, property, jobs, electronics, furniture, and 35 more categories. 60-78 flat fields per record including price, GPS coordinates, full seller info, exploded category attributes (mileage, fuel type, year, rooms, surface area), and the full image gallery. Search by filters or paste a Leboncoin search URL; both modes walk pagination forward and dedupe by listing ID.

Why this scraper?

  • 60-78 flat fields per listing (most rivals stop at 40)
  • Two modes: build searches from filters, or paste raw Leboncoin search URLs
  • Multi-location, multi-URL, multi-category in one run
  • Optional detail-page enrichment for full body text and image gallery
  • Optional seller-reviews enrichment (star rating + text reviews)
  • Optional seller-other-listings enrichment (catalogue of pro sellers' active ads)
  • Per-search budget cap so a 5-city run returns 5 cities, not just the first one
  • Fast: 100 listings in ~13 seconds, 150 listings in ~16 seconds (verified on cloud, FR-residential)
  • Session cache cuts repeat-run latency by half (subsequent runs within 22 minutes skip the cold-start)
  • Works with FR-residential by default; any EU residential country also accepted (DE, BE, IT, ES, NL, PT, AT, ...)
  • Resume & recurring updates β€” turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED listings on repeat runs of the same search, or use Resume to continue one interrupted crawl

Data You Get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
id"0000000000"
list_id0000000000
subject"Sample Listing Title"
body"Full seller description text appears here when fetchDetails=true."
url"https://www.leboncoin.fr/ad/voitures/0000000000"
category_id"2"
category_name"Voitures"
ad_type"offer"
status"active"
brand"leboncoin"
price0
price_maxnull
price_cents0
publication_date"2026-01-01 00:00:00"
index_date"2026-01-01 00:00:00"
expiration_date"2026-04-01 00:00:00"
has_phonetrue
is_boostedfalse
is_urgentfalse
city"Paris"
zipcode"75001"
department_id"75"
department"Paris"
region_id"12"
region"Ile-de-France"
latitude48.8566
longitude2.3522
owner_type"private"
owner_name"Sample Seller"
owner_user_id"00000000"
owner_store_id"00000000"
owner_rawfull upstream owner block (verbatim β€” captures siren, store address, response stats, and any field the platform adds)
image_count5
thumb_url"https://img.leboncoin.fr/api/v1/lbcpb1/images/00/00/00/000000.jpg?rule=ad-thumb"
image_urls["https://img.leboncoin.fr/...?rule=ad-image", "..."]
view_count0
favorite_count0
attr_year"2020"
attr_mileage"50000"
attr_fuel"Diesel"
attr_gearbox"Manuelle"
attr_rooms"3 pièces"
attr_square"60 mΒ²"
attr_energy_rate"D"
attr_ges"C"
raw_attributes[{"key": "year", "value": "2020", "value_label": "2020"}, ...]
seller_rating_avg4.8 (when fetchSellerReviews=true)
seller_review_count42 (when fetchSellerReviews=true)
seller_reviews[{"rating": 5, "comment": "...", "author": "...", "created_at": "..."}, ...] (when fetchSellerReviews=true)
seller_other_listings_count17 (when fetchSellerOtherListings=true)
seller_other_listings[{"id": "0000000000", "subject": "...", "price": 0, "url": "...", "thumb_url": "..."}, ...] (when fetchSellerOtherListings=true)

Category attributes (attr_*) vary by category. Cars carry mileage, fuel, gearbox, year. Property carries rooms, square, energy_rate, ges. The full set is preserved in raw_attributes for advanced consumers.

Seller enrichment fields are only populated when the corresponding input toggle is on. Private sellers without a public profile yield empty arrays. Sellers with no reviews yet yield seller_review_count: 0 and an empty seller_reviews array.

Incremental mode only. When incrementalMode is on, every returned record also carries:

FieldDescription
changeTypeNEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED
changedFieldsTop-level fields that changed since last seen; non-empty only for UPDATED
firstSeenAtWhen this listing was first observed by this monitoring campaign
lastSeenAtWhen this listing was last observed

How to Use

Search by filters (cars in Paris under 15k EUR)

{
"mode": "search",
"category": "voitures",
"locations": ["Paris"],
"minPrice": 5000,
"maxPrice": 15000,
"maxMileage": 50000,
"fuel": "diesel",
"sortBy": "price_asc",
"maxPages": 5,
"maxListings": 100
}

Search across multiple cities

{
"mode": "search",
"category": "ventes_immobilieres",
"locations": ["Paris", "Lyon", "Marseille", "Bordeaux"],
"minSquare": 40,
"maxSquare": 120,
"rooms": ["2", "3", "4"],
"ownerType": "pro",
"maxPages": 3,
"maxListings": 200
}

Paste Leboncoin search URLs (URL mode)

{
"mode": "url",
"urls": [
"https://www.leboncoin.fr/recherche?category=2&locations=Paris&fuel=2",
"https://www.leboncoin.fr/recherche?category=9&locations=Lyon&price=200000-500000"
],
"maxPages": 5,
"maxListings": 200
}

Free-text query

{
"mode": "search",
"text": "iphone 14 pro",
"category": "telephonie",
"locations": ["Paris", "Lyon"],
"maxListings": 50,
"fetchDetails": true
}

Input Parameters

ParameterTypeDefaultDescription
modestring"search""search" builds the URL from filters; "url" takes raw Leboncoin search URLs
textstringnoneFree-text keyword query (search mode)
categorystring"all"Top-level category (cars, property, electronics, ...)
locationsarray["Paris"]Cities, regions, or department codes (search mode, multi-select)
ownerTypestring"all"Filter by seller: "all", "private", "pro"
minPrice / maxPriceintegernonePrice range in EUR
minSquare / maxSquareintegernoneSurface area in mΒ² (property categories)
roomsarraynoneNumber of rooms (property; multi-select e.g. ["2", "3"])
minMileage / maxMileageintegernoneMileage in km (vehicle categories)
fuelstring"all""all", "petrol", "diesel", "hybrid", "electric", "gpl", "other"
sortBystring"relevance""relevance", "date_desc", "date_asc", "price_asc", "price_desc"
urlsarraynoneDirect Leboncoin search URLs (URL mode, multi-URL)
maxPagesinteger2000Max pages per search (100 listings per page). The actual page count is bounded by maxListings, so the high default just means "walk until budget hits."
maxListingsinteger100Total listings cap across all searches; 0 = unlimited
fetchDetailsbooleanfalseVisit each listing's detail page for full body + image gallery (adds 1 fetch per item)
fetchSellerReviewsbooleanfalsePull the seller's star rating + textual reviews. Adds 1 lightweight call per listing (no extra credits). Empty array for sellers with no reviews yet.
fetchSellerOtherListingsbooleanfalsePull the seller's other active ads (subject, price, URL, image). Adds 1 lightweight call per listing (no extra credits). Useful for mapping pro-seller catalogues.
resumeFromRunIdstringnoneContinue one specific previous run/dataset: listings already collected there are skipped. For recurring monitoring, use Incremental mode instead β€” see "Resume & recurring updates" below.
incrementalModebooleanfalseDaily/recurring monitoring of this same search. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See "Resume & recurring updates" below.
stateKeystringnoneIncremental mode only. Name this monitoring campaign, or leave empty to derive one automatically from the search/filter/detail settings.
emitUnchangedbooleanfalseIncremental mode only. Also return listings unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have.
emitExpiredbooleanfalseIncremental mode only. Also return listings from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search (not capped, not a resume). Adds and bills extra synthetic rows.
proxyobjectresidential FRProxy config; residential required. Default country is FR. Any EU country accepted (DE, BE, IT, ES, NL, PT, AT, CH, LU, IE, DK, SE, FI, PL, CZ, GR, HU, RO, BG).

Resume & recurring updates

There are two different things here β€” pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId
Run the same search every day and receive only changesincrementalMode
Keep separate daily campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips listings already collected there, returning only the remaining new ones.

What counts as a change. A few fields are deliberately not used to decide UPDATED, so a run is not reported as changed by activity that is not the listing itself: view_count, favorite_count, index_date (leboncoin's own re-index timestamp, not the ad's publication_date), and the seller-profile fields seller_rating_avg, seller_review_count, seller_reviews, seller_other_listings_count, seller_other_listings (these describe the seller, not the ad). Every one of these fields is still returned in full on every row β€” they are excluded only from change detection. So a listing whose seller gains a review is reported UNCHANGED, while a change to the ad itself (price, title, description, photos, location) is reported UPDATED.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED listings by default β€” duplicates and unchanged listings are suppressed (never pushed, never billed). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated per search/URL and filter/detail-mode setup automatically; set stateKey to name or deliberately share a monitoring campaign.

Identity is tracked by list_id β€” leboncoin's own ad id (also exposed as the string id field). A handful of fields are excluded from change detection because they are not really "the ad changing": view_count / favorite_count (engagement counters that tick on their own), index_date (a backend reindex timestamp), and the seller_* fields (they describe the seller, not this specific listing β€” a new review or another ad from the same seller must not flag this one UPDATED).

Scheduled-run example β€” same search, run daily:

Day 1 (first run ever for this search):

{ "mode": "search", "category": "voitures", "locations": ["Lyon"], "incrementalMode": true }

β†’ every listing comes back with "changeType": "NEW".

Day 2 (the schedule fires again, identical input):

{ "mode": "search", "category": "voitures", "locations": ["Lyon"], "incrementalMode": true }

β†’ listings whose price/attributes/etc. changed come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new listings come back as "changeType": "NEW", listings that vanished and came back come back as "changeType": "REAPPEARED" β€” and listings that are still there, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on. EXPIRED tombstones for listings no longer found are only produced when emitExpired is on and the run fully scanned the tracked search (not capped by Max listings, not a resume).

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record β€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify β†’ Settings β†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output Example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"id": "0000000000",
"list_id": 0000000000,
"subject": "Sample Listing Title",
"body": "Full seller description text appears here when fetchDetails=true.",
"url": "https://www.leboncoin.fr/ad/voitures/0000000000",
"category_id": "2",
"category_name": "Voitures",
"ad_type": "offer",
"status": "active",
"brand": "leboncoin",
"price": 0,
"price_max": null,
"price_cents": 0,
"publication_date": "2026-01-01 00:00:00",
"has_phone": true,
"is_boosted": false,
"city": "Paris",
"zipcode": "75001",
"department_id": "75",
"department": "Paris",
"latitude": 48.8566,
"longitude": 2.3522,
"owner_type": "private",
"owner_name": "Sample Seller",
"owner_user_id": "00000000",
"image_count": 5,
"thumb_url": "https://img.leboncoin.fr/api/v1/lbcpb1/images/00/00/00/000000.jpg?rule=ad-thumb",
"image_urls": ["https://img.leboncoin.fr/api/v1/lbcpb1/images/00/00/00/000000.jpg?rule=ad-image"],
"attr_year": "2020",
"attr_mileage": "50000",
"attr_fuel": "Diesel",
"attr_gearbox": "Manuelle",
"raw_attributes": [],
"seller_rating_avg": 4.8,
"seller_review_count": 42,
"seller_reviews": [
{
"rating": 5,
"comment": "Vendeur sΓ©rieux, transaction rapide.",
"author": "Sample Buyer",
"created_at": "2026-03-15T12:00:00Z"
}
],
"seller_other_listings_count": 17,
"seller_other_listings": [
{
"id": "0000000001",
"subject": "Another listing from same seller",
"price": 9500,
"url": "https://www.leboncoin.fr/ad/voitures/0000000001",
"thumb_url": "https://img.leboncoin.fr/.../thumb.jpg"
}
]
}

seller_* fields are populated only when the corresponding input toggle is on (fetchSellerReviews, fetchSellerOtherListings). Each toggle adds about 0.5 seconds per listing and no additional result charge.

Plan Requirement

Leboncoin.fr's edge filter rejects datacenter traffic. Residential proxy is required β€” without it, the run will return 0 items. Recommended:

{
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "FR" }
}

Country selection: FR is the default and works best (Leboncoin is a French marketplace). If FR returns 0 items on your account, try other EU countries β€” the actor accepts FR, BE, DE, ES, IT, NL, PT, AT, CH, LU, IE, DK, SE, FI, PL, CZ, GR, HU, RO, BG. Each Apify account has its own pool per country, so quality can vary; experiment with what works for you.

Apify's free plan does not include residential proxy credit. For best results upgrade to Starter or higher (https://apify.com/pricing). Datacenter proxies and non-EU exits will trigger a warning at startup.