
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape leboncoin.fr ads from search URLs, keywords or ad links: price, full description, attributes (surface, rooms, mileage...), location with GPS, seller type and name, images and dates. No login.
Extract ads from leboncoin.fr, France's largest classifieds site: real estate, cars, motorbikes, electronics, furniture, jobs and everything else. Paste any search URL or type a keyword and get clean rows with the price, the full description, every attribute (surface, rooms, energy class, mileage, year, fuel...), the location with GPS coordinates, the seller and all photos. No login, no browser, and hundreds of ads per second.
| Field | What it does |
|---|---|
startUrls | leboncoin.fr search URLs (/recherche?...), category pages (/c/voitures), city pages (/cl/.../cp_paris_75011) and ad URLs (/ad/.../123456789) |
searchQueries | Keywords, each run as its own search |
maxItems | Maximum number of ads in total (default 20) |
category, location, radiusKm | Category and place for keyword searches. Location takes a city name, a postcode, a department number or d_75 / r_12 |
minPrice, maxPrice, sellerType, sortBy | Price range, private or professional sellers, and order |
searchInTitleOnly, urgentOnly, shippableOnly | Narrow the results |
includeSellerProfile | Add each seller's public profile |
{
"startUrls": ["https://www.leboncoin.fr/recherche?category=9&locations=Lorraine_53300__48.34594_-0.56243_5000_5000&real_estate_type=2"],
"searchQueries": ["renault clio"],
"category": "2",
"location": "Lyon",
"radiusKm": 30,
"maxPrice": 15000,
"sortBy": "newest",
"maxItems": 100
}
Each ad is one row. Main fields:
| Field | Description |
|---|---|
id, url, title, description | Ad id, link, title and full text |
price, oldPrice, currency | Price in euros and the previous price when it was lowered |
category, adType, status | Category name, offer or demand, status |
publishedAt, updatedAt, expiresAt | Dates in UTC |
city, zipcode, district, department, region, latitude, longitude | Location |
sellerType, sellerName, sellerId, storeId, siren, sellerRating, sellerReviewCount, hasPhone | Seller |
surfaceM2, rooms, bedrooms, pricePerM2, energyClass, propertyType | Real estate key facts |
brand, model, year, mileageKm, fuel, gearbox, condition | Vehicle and item key facts |
images, imageCount, thumbnail | Full-size photo links |
attributes, attributeList | Every attribute the ad has, as labels and raw values |
isUrgent, isBoosted, shippable | Ad options |
sellerProfile | Public seller profile (only with "Add seller profiles") |
searchUrl, searchQuery, scrapedAt | Where the row came from |
Example (trimmed, seller details replaced):
{
"id": "3179644829",
"url": "https://www.leboncoin.fr/ad/ventes_immobilieres/3179644829",
"title": "Appartement 4 pièces 77 m²",
"description": "Appartement 4 pièces 77 m²\n\nRèf annonce : 3120-0003\n \n** visite virtuelle disponible**\n\nau 4, passage du pavillon, Appartement T4 (lot 223), de 77,47 m², au 1er étage sans ascenseur comprenant :\n\nune entrée avec placard...",
"price": 109000,
"currency": "EUR",
"oldPrice": null,
"category": "Ventes immobilières",
"categoryId": "9",
"adType": "offer",
"status": "active",
"publishedAt": "2026-09-29T12:11:47Z",
"updatedAt": "2026-10-10T08:32:44Z",
"expiresAt": null,
"city": "Mayenne",
"zipcode": "53100",
"district": "Nord Ouest",
"department": "Mayenne",
"departmentId": "53",
"region": "Pays de la Loire",
"regionId": "18",
"latitude": 48.30402,
"longitude": -0.62107,
"locationPrecision": "streetNumber",
"sellerType": "pro",
"sellerName": "AGENCE EXEMPLE",
"sellerId": "00000000-0000-4000-8000-000000000000",
"storeId": "12345678",
"storeName": null,
"siren": "123456789",
"sellerRating": null,
"sellerReviewCount": null,
"hasPhone": true,
"isUrgent": false,
"isBoosted": false,
"shippable": null,
"favorites": null,
"imageCount": 16,
"thumbnail": "https://img.leboncoin.fr/api/v1/lbcpb1/images/1d/8b/0a/1d8b0a9f01360d39a812d06dff6fe0058ce83b4a.jpg?rule=ad-thumb",
"images": [
"https://img.leboncoin.fr/api/v1/lbcpb1/images/1d/8b/0a/1d8b0a9f01360d39a812d06dff6fe0058ce83b4a.jpg?rule=ad-large",
"https://img.leboncoin.fr/api/v1/lbcpb1/images/b8/01/8b/b8018b0a2e8c21e69a9f46e63104aeb3c96b4a4b.jpg?rule=ad-large"
],
"surfaceM2": 77,
"landSurfaceM2": null,
"rooms": 4,
"bedrooms": 3,
"pricePerM2": 1416,
"energyClass": "C",
"propertyType": "Appartement",
"brand": null,
"model": null,
"year": null,
"mileageKm": null,
"fuel": null,
"gearbox": null,
"condition": "Bon état",
"attributes": {
"real_estate_type": "Appartement",
"square": "77 m²",
"rooms": "4",
"bedrooms": "3 ch.",
"energy_rate": "C",
"ges": "C",
"heating_type": "Individuel",
"elevator": "Non",
"building_year": "1993",
"annual_charges": "1621 €",
"floor_display": "Étage 1/3"
},
"attributeList": [
{
"key": "activity_sector",
"label": null,
"value": "2",
"rawValue": "2"
},
{
"key": "external_ad_id",
"label": null,
"value": "ac3_22266_59661989",
"rawValue": "ac3_22266_59661989"
}
],
"searchUrl": "https://www.leboncoin.fr/recherche?category=9&locations=Lorraine_53300__48.34594_-0.56243_5000_5000&real_estate_type=2",
"searchQuery": null,
"scrapedAt": "2026-10-15T21:11:22Z"
}
You pay $0.75 per 1,000 ads ($0.00075 per ad), plus a small platform usage fee for compute and proxy traffic: about $0.003 per 1,000 ads on the default French datacenter proxy.
Is it legal to scrape leboncoin? The actor only collects data that leboncoin shows publicly to every visitor without logging in. Personal data such as seller names is covered by the GDPR in France, so make sure you have a lawful reason to process it. When in doubt, ask a lawyer.
Do I need a leboncoin account or a proxy? No account. A French proxy is included by default: datacenter addresses first, and the run moves to French residential addresses on its own if the site starts asking for bot checks.
How many ads can I get? Leboncoin shows at most 3,500 ads for one search, and the actor reads all of them. For more, split the search by location, price range or category and add each URL. Duplicates across URLs are removed.
Why is a field empty? Sellers fill in different details. For example, cars have mileage but no surface, and private sellers have no SIREN. Phone numbers sit behind a leboncoin login and are not collected.
Can I schedule it or use the API? Yes. Schedule a run with "Newest first" to watch new ads, and read results through the API or with webhooks and integrations.
Can I scrape one ad?
Yes, paste ad URLs (leboncoin.fr/ad/... or /vi/123.htm) into Leboncoin URLs.
/boutique/...) and profile pages are not supported as inputs yet. Use a search URL instead.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalLeboncoin URLs
Search result URLs copied from leboncoin.fr (leboncoin.fr/recherche?..., with every filter you set on the site: category, location, price, surface, mileage, sort...), category pages (leboncoin.fr/c/voitures) and single ad URLs (leboncoin.fr/ad/.../123456789). Search URLs are paginated automatically.
searchQueriesarrayOptionalSearch keywords
Keywords to search on leboncoin.fr, such as "iphone 15", "renault clio" or "appartement t3". Each keyword runs its own search, combined with the category, location and filters below.
maxItemsintegerOptionaldefault 20Max ads
Maximum number of ads to save across all URLs and keywords. One search returns at most 3,500 ads on leboncoin.fr; split bigger ones by location or price.
Applied to keyword searches. For search URLs they are added only where the URL does not already set the same filter.
categoryenumOptionalCategory
Category for keyword searches. Search URLs keep their own category.
locationstringOptionalLocation
Where to search for keyword searches: a French city name ("Lyon"), a postcode ("75011"), a department number ("33"), or a leboncoin locations value ("d_75", "r_12"). Empty means all of France.
radiusKmintegerOptionalRadius (km)
Search radius around a city or postcode. Defaults to 10 km.
minPriceintegerOptionalMinimum price (EUR)
Only ads priced at or above this value.
maxPriceintegerOptionalMaximum price (EUR)
Only ads priced at or below this value.
sellerTypeenumOptionalSeller type
Private individuals, professionals, or both.
sortByenumOptionalSort by
Order of the results.
searchInTitleOnlybooleanOptionalSearch in titles only
Match keywords against ad titles only, not descriptions.
urgentOnlybooleanOptionalUrgent ads only
Only ads marked "Urgent".
shippableOnlybooleanOptionalShippable ads only
Only ads that offer delivery.
includeSellerProfilebooleanOptionalAdd seller profiles
Add each seller's public profile: member since, number of ads, reply rate and time, last activity and badges. Charged once per seller (see Pricing).
maxConcurrencyintegerOptionaldefault 6Parallel requests
How many pages to load at the same time.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
French datacenter addresses work well and cost least. If the site keeps asking for a bot check, the run moves to French residential addresses on its own.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | Leboncoin ad id |
| url | string | null | |
| title | string | null | |
| price | number | null | |
| description | string | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Ad | One leboncoin ad saved to the dataset: title, full description, price, attributes, location, seller and images. | $0.00075 |
| Seller profile | One seller's public profile added to their ads (only with "Add seller profiles" on): member since, ad count, reply rate and time, last activity, badges. Charged once per seller per run. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/leboncoin-scraper').call({
"startUrls": [
"https://www.leboncoin.fr/recherche?category=9&locations=Lorraine_53300__48.34594_-0.56243_5000_5000&real_estate_type=2"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
],
"scrapelyProxyCountry": "FR"
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/leboncoin-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/leboncoin-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Private-seller car ads within 30 km of Lyon, 3,000 to 15,000 EUR.
Listings plus information about each seller.
Bike ads that offer delivery, sorted by price.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.