# Leboncoin & Vinted Scraper 🇫🇷 | Prices, Deals & Arbitrage (`excellence_scraping/leboncoin-vinted-scraper`) Actor

Scrape Leboncoin and Vinted in one run: prices, photos, location, seller. Datadome-safe with residential proxies. Turn on Deal Radar to flag underpriced listings and cross-platform bargains. Pay per result.

- **URL**: https://apify.com/excellence\_scraping/leboncoin-vinted-scraper.md
- **Developed by:** [Excellence Scraping](https://apify.com/excellence_scraping) (community)
- **Categories:** E-commerce, Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Leboncoin & Vinted Scraper 🇫🇷 — Prices, Deals & Arbitrage

**The only scraper that covers France's two biggest resale markets — Leboncoin _and_ Vinted — in a single run.** Get clean, structured listings (price, photos, location, seller) and flip on **Deal Radar** to automatically surface underpriced listings and cross-platform bargains.

Built on a browser TLS-impersonation engine that **passes Datadome**, so it stays fast and reliable where other Leboncoin scrapers get blocked.

---

### Why this one

- 🇫🇷 **Two marketplaces, one API** — Leboncoin + Vinted together. Nobody else does both.
- 🛡️ **Datadome-safe** — TLS fingerprint impersonation, no fragile headless browser. Residential proxies supported out of the box.
- 💸 **Deal Radar** — flag listings priced well below the going rate, ready for reselling and arbitrage.
- ⚡ **Pay per result** — no subscription, no surprises. You pay only for listings returned.
- 🧱 **Clean output** — structured JSON with images, ready for Sheets, CSV, or your automation.

### Use cases

Market & price research · reselling and arbitrage · real-estate and car sourcing · lead generation · competitor and inventory monitoring.

### Input

```json
{
  "platform": "both",
  "queries": ["iphone 13", "iphone 14"],
  "priceMax": 500,
  "sort": "NEWEST",
  "pages": 2,
  "dealRadar": true,
  "dealRatio": 0.7
}
````

| Field | What it does |
|---|---|
| `platform` | `leboncoin`, `vinted`, or `both` |
| `queries` | One or more search keywords |
| `category` | Leboncoin category (e.g. `ELECTRONIQUE_TELEPHONES_OBJETS_CONNECTES`) |
| `priceMin` / `priceMax` | Price filter (€) |
| `lat` / `lng` / `radius` | Geo center + radius (m) for Leboncoin |
| `sort` | `NEWEST`, `RELEVANCE`, `PRICE` |
| `pages` | Pages per query |
| `dealRadar` | Flag underpriced listings (`is_deal`) |
| `dealRatio` | A listing is a deal if priced ≤ this × the median for its search (default `0.7`) |
| `proxyConfiguration` | Residential + FR recommended for Leboncoin |

### Output (one item per listing)

```json
{
  "platform": "leboncoin",
  "query": "iphone 13",
  "titre": "iPhone 13 128Go très bon état",
  "prix": 340,
  "lieu": "Paris",
  "zip": "75011",
  "url": "https://www.leboncoin.fr/ad/...",
  "img": "https://img.leboncoin.fr/...",
  "imgs": ["...", "..."],
  "is_deal": true,
  "deal_discount_pct": 34
}
```

The dataset **Overview** tab shows listings as a photo table — scan deals visually at a glance.

### Pricing

Pay per result (~**$1 / 1,000 listings**). With Deal Radar on, flagged bargains are billed as a small premium event — you only pay for the deals it finds.

### Notes

- For Leboncoin, use **residential proxies (country: FR)** for best reliability against Datadome.
- Vinted uses the public catalog API and is lighter on anti-bot.
- Not affiliated with Leboncoin or Vinted. Respect each site's terms and applicable law.

# Actor input Schema

## `platform` (type: `string`):

Which site(s) to scrape.

## `queries` (type: `array`):

One or more keyword searches (e.g. "iphone 13", "canapé cuir").

## `category` (type: `string`):

Leboncoin category name (e.g. TOUTES\_CATEGORIES, ELECTRONIQUE\_TELEPHONES\_OBJETS\_CONNECTES). Ignored for Vinted.

## `priceMin` (type: `integer`):

Lower price bound in euros. 0 = no lower bound.

## `priceMax` (type: `integer`):

Upper price bound in euros. 0 = no upper bound.

## `lat` (type: `number`):

Leboncoin geo center latitude (default: Paris).

## `lng` (type: `number`):

Leboncoin geo center longitude (default: Paris).

## `radius` (type: `integer`):

Search radius around the geo center, in meters.

## `sort` (type: `string`):

Result ordering.

## `pages` (type: `integer`):

Number of result pages to fetch per query (35 listings per page).

## `maxItems` (type: `integer`):

Hard cap on results pushed.

## `dealRadar` (type: `boolean`):

Flag underpriced listings (is\_deal) — great for reselling and arbitrage.

## `dealRatio` (type: `number`):

A listing is a deal if its price is ≤ this × the median price for its search (e.g. 0.7 = 30% below median). Needs Deal Radar on.

## `dealFloorRatio` (type: `number`):

Ignore listings priced below this × median as noise (a €4 case is not a discounted phone). Default 0.35.

## `proxyConfiguration` (type: `object`):

Residential proxy is strongly recommended for Leboncoin (Datadome). FR country recommended.

## Actor input object example

```json
{
  "platform": "leboncoin",
  "queries": [
    "iphone 13"
  ],
  "category": "TOUTES_CATEGORIES",
  "priceMin": 0,
  "priceMax": 0,
  "lat": 48.8566,
  "lng": 2.3522,
  "radius": 12000,
  "sort": "NEWEST",
  "pages": 1,
  "maxItems": 200,
  "dealRadar": false,
  "dealRatio": 0.7,
  "dealFloorRatio": 0.35,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "iphone 13"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("excellence_scraping/leboncoin-vinted-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": ["iphone 13"] }

# Run the Actor and wait for it to finish
run = client.actor("excellence_scraping/leboncoin-vinted-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "iphone 13"
  ]
}' |
apify call excellence_scraping/leboncoin-vinted-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=excellence_scraping/leboncoin-vinted-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Leboncoin & Vinted Scraper 🇫🇷 | Prices, Deals & Arbitrage",
        "description": "Scrape Leboncoin and Vinted in one run: prices, photos, location, seller. Datadome-safe with residential proxies. Turn on Deal Radar to flag underpriced listings and cross-platform bargains. Pay per result.",
        "version": "0.1",
        "x-build-id": "eOEKuO0eHEUVXPMRs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/excellence_scraping~leboncoin-vinted-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-excellence_scraping-leboncoin-vinted-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/excellence_scraping~leboncoin-vinted-scraper/runs": {
            "post": {
                "operationId": "runs-sync-excellence_scraping-leboncoin-vinted-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/excellence_scraping~leboncoin-vinted-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-excellence_scraping-leboncoin-vinted-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries"
                ],
                "properties": {
                    "platform": {
                        "title": "Platform",
                        "enum": [
                            "leboncoin",
                            "vinted",
                            "both"
                        ],
                        "type": "string",
                        "description": "Which site(s) to scrape.",
                        "default": "leboncoin"
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "One or more keyword searches (e.g. \"iphone 13\", \"canapé cuir\").",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Leboncoin category",
                        "type": "string",
                        "description": "Leboncoin category name (e.g. TOUTES_CATEGORIES, ELECTRONIQUE_TELEPHONES_OBJETS_CONNECTES). Ignored for Vinted.",
                        "default": "TOUTES_CATEGORIES"
                    },
                    "priceMin": {
                        "title": "Min price (€)",
                        "type": "integer",
                        "description": "Lower price bound in euros. 0 = no lower bound.",
                        "default": 0
                    },
                    "priceMax": {
                        "title": "Max price (€)",
                        "type": "integer",
                        "description": "Upper price bound in euros. 0 = no upper bound.",
                        "default": 0
                    },
                    "lat": {
                        "title": "Latitude",
                        "type": "number",
                        "description": "Leboncoin geo center latitude (default: Paris).",
                        "default": 48.8566
                    },
                    "lng": {
                        "title": "Longitude",
                        "type": "number",
                        "description": "Leboncoin geo center longitude (default: Paris).",
                        "default": 2.3522
                    },
                    "radius": {
                        "title": "Radius (m)",
                        "type": "integer",
                        "description": "Search radius around the geo center, in meters.",
                        "default": 12000
                    },
                    "sort": {
                        "title": "Sort",
                        "enum": [
                            "NEWEST",
                            "RELEVANCE",
                            "PRICE"
                        ],
                        "type": "string",
                        "description": "Result ordering.",
                        "default": "NEWEST"
                    },
                    "pages": {
                        "title": "Pages per query",
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of result pages to fetch per query (35 listings per page).",
                        "default": 1
                    },
                    "maxItems": {
                        "title": "Max items",
                        "type": "integer",
                        "description": "Hard cap on results pushed.",
                        "default": 200
                    },
                    "dealRadar": {
                        "title": "Deal Radar 💸",
                        "type": "boolean",
                        "description": "Flag underpriced listings (is_deal) — great for reselling and arbitrage.",
                        "default": false
                    },
                    "dealRatio": {
                        "title": "Deal threshold",
                        "type": "number",
                        "description": "A listing is a deal if its price is ≤ this × the median price for its search (e.g. 0.7 = 30% below median). Needs Deal Radar on.",
                        "default": 0.7
                    },
                    "dealFloorRatio": {
                        "title": "Deal price floor",
                        "type": "number",
                        "description": "Ignore listings priced below this × median as noise (a €4 case is not a discounted phone). Default 0.35.",
                        "default": 0.35
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Residential proxy is strongly recommended for Leboncoin (Datadome). FR country recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "FR"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
