Scraping Leboncoin : Quelle est la meilleur solution en 2026 ?

Carte des bouchons de Lyon sur un mobile

Ecrit par le 03/06/2026

Les résultat de notre comparatif d'Octobre 2026 sont les suivants : OpenScraper constitue la meilleure API de scraping permetant d'extraire les données du site Leboncoin.fr pour la plupart des utilisteurs. Avec un taux de complétude des données de 100 %, un temps de réponse d’environ XXX secondes par requête et un prix de 0,21 $ les 1000 annonces extraites il devance Piloterr, APIfy et Lobstr, qui néanmoins ne déméritent pas. Lobstr.io convient aux personnes cherchant une solution rapide d'execussion et APIfy à ceux qui ont besoins de données précises sur les vendeurs.‍



Dans, nous avons mis en concurrence les trois APIs les plus connues (Lobst, APIfy et Piloterr) pour scraper Leboncoin avec un acteur aux performances qui semblent très prometeuses : OpenScraper. Les critère du classement sont: la vitesse, la complétude et la propreté des des données, le prix ainsi que la présence d’éventuelles données pertinentes mais abscentes des autres solutions. Nous nous basons pour comparer les prix sur l'offre d'entrée de gamme de chaque solution, c'est-à-dire l'option la moins chère disponible (hors essais gratuits et pay-as-you-go).

Sénario du benchmark : Après des années à payer 1 200 € pour 25 m² à Paris, notre cobaye a pris une décision radicale : quitter la capitale. Sa nouvelle ambition : trouver une maison d'au moins 80 m² et trois chambres… le tout pour moins de 140 000 €.
En terme de recherche sur leboncoin ça donne ça.

Les données des annonces présentes dans cette URL de recherche seront utilisés comme étalon de notre comparatif. Les scripts utilisés pour lancer les processus de scraping récupérer les données sont partagés dans l'article  pour que vous puissez les réutiliser ou vérifier nos résutats. Les données obtenus grâce à chaque solutions sont aussi partagées < dans l'artcile / à la fin de l'article> pour que vous puissiez voir si elles vous confiennent.

A notter que le nombre d'annonces fluctu en temps réel, le nombre d'annonces récupérés a donc varié selon le moment ou nos scripts ont tournés.

Classement

1. OpenScraper.ai

Vue de l'utilisation de la plateforme OpenScraper lors du scraping de Google Maps

C’est la solution française OpenScraper qui monte sur la plus haute marche du podium 🇫🇷.
‍
Si vous cherchez le meilleur rapport qualité-prix pour remplir votre base de données sans vider votre portefeuille, ne cherchez pas plus loin : l'outil nous a sorti un tarif imbattable, ultra-compétitif de 0,21 $ les 1000 annonces extraites avec un abonnement mensule du montant de votre choix au dessus de 70$.
Vous pouvez aussi disposer de leur offre flexible dite de Pay-as-you-go qui parmet, sans abonnement de créditer votre compte au fur et à mesure de votre utilisation de la plateforme avec les montant de votre choix (1$ = 1 crédit). En Pay-as-you-go vous passerez à un prix toujours imbatable de 0.25 $ les 1000 annonces scrapées.


Par ailleurs vous avez le droit à 2,5$ de crédits gratuits à
l'inscription ce qui vous permets de menner pas mal de tests !

Vue de l'utilisation de la plateforme OpenScraper lors du scraping de Google Maps

OpensScraper permet de choisir si vous voulez récolter toutes les données disponibles hormis les description textuelle écrite par le vendeur auquel cas vous payez 0,21 $ les 1000 annonces. Pour récupérer aussi cette donnée il vous faut débourser 0,6 $ de plus. Dans tous les cas de figures cette offre reste la moins cher du marché (0,6 $ + 0,21 $ = 0,81 $ / 1000 annonces) devant APIfy (1$ / 1000 annonces). Comme nous le verrons plus tard Piloterr applique un fonctionnement semblable.

Vue de l'utilisation de la plateforme OpenScraper lors du scraping de Google Maps

Pour comparer toutes les solution Piloterr et OpenScraper sur des résultats similaires à ceux de Lobstr et APIfy, nous avons fait tourné notre programme de test sur la configuration de récupération des annonces avec les données des descriptions.


En terme de complétude des données récuprées tout est nickel ! Toutes les 223 annonces présentes sur le site Leboncoin au moment du lancement de notre script sont présente dans le fichier Excel et aucun doublon n'est à signaler.

Notre programme a mis 718 segondes pour toutner ce qui nous donne 3,2 segondes par annonces récupérée. En terme de vitesse, OpenScraper se classe troisième sur quatre. On peut dire que c'est son principal défaut même si l'on reste dans un ordre de grandeur raisonnable. Le plus rapide, Lobstr étant à 2,3 segondes par annonce récupérée.

Voici le script que j'ai utilisé pour le test et qui enregistre les résultats en CSV. Veillez juste à remplacer "YOUR_API_KEY" par votre clé API OpenScraper (que vous pouvez récupérer gratuitement en vous inscrivant sur leur plateforme) !

Noubliez pas aussi d'intaller pandas et requests pour executer les scripts de cet article. Pour cela, voici les commandes pip à executer dans votre terminal :
‍
pip install pandas
pip install requests

‍

import json
import time
from pathlib import Path

import pandas as pd
import requests

OUTPUT_XLSX = "openscraper_leboncoin_with_details.xlsx"


def flatten(value, parent_key=""):
    # Aplatit un résultat pour que 100 % des champs apparaissent en colonnes
    # Excel : les dicts imbriqués (ex. attributes) sont préfixés, les listes de
    # dicts sont numérotées, les listes de valeurs simples (ex. images) sont
    # jointes en une seule cellule.
    flat = {}

    if isinstance(value, dict):
        for key, sub_value in value.items():
            new_key = f"{parent_key}_{key}" if parent_key else key
            flat.update(flatten(sub_value, new_key))
    elif isinstance(value, list):
        if not value:
            flat[parent_key] = ""
        elif all(isinstance(item, dict) for item in value):
            for i, item in enumerate(value):
                flat.update(flatten(item, f"{parent_key}_{i}"))
        else:
            flat[parent_key] = " | ".join(str(item) for item in value)
    else:
        flat[parent_key] = value

    return flat


start_time = time.time()

HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

response = requests.post(
    "https://api.openscraper.ai/runs",
    headers=HEADERS,
    json={
    "module": "leboncoin_matrix",
    "params": {
        "url": "https://www.leboncoin.fr/recherche?category=9&locations=r_12&price=min-140000&bedrooms=3-6&real_estate_type=1",
        "max_results": 3000,
        "include_details": True,
    },
    "sync": False,
},
    timeout=180,
)
response.raise_for_status()
data = response.json()

print("Data:", data)

run_id = data["task_id"]

# Waits for the run to finish by periodically polling its status.
while data["status"] in ("pending", "running"):
    status_response = requests.get(
        f"https://api.openscraper.ai/runs/{run_id}",
        headers=HEADERS,
        timeout=60,
    )
    status_response.raise_for_status()
    data = status_response.json()
    # progress_summary.text: status, rows so far / total, %, elapsed, last step.
    print((data.get("progress_summary") or {}).get("text") or data["status"])
    time.sleep(2)

if data["status"] != "done":
    print("\n--- Failure ---")
    print(json.dumps(data.get("error"), indent=2, ensure_ascii=False))
else:
    result = data.get("result") or []

    print("\n--- Summary ---")
    # Summary rather than the full detail, to avoid flooding the terminal.
    summary = {
        "results_found (count)": len(result),
        "sample (first 3)": result[:3],
    }

    # For the full detail, save everything to a file next to this script
    # (the current working directory may be read-only).
    output_path = Path(__file__).with_name("openscraper_leboncoin.json")
    with open(output_path, "w", encoding="utf-8") as f:
        json.dump(data, f, indent=2, ensure_ascii=False)
    print(f"\nFull result saved to {output_path}")

    # Export Excel : une ligne par annonce, une colonne par champ
    df = pd.DataFrame([flatten(item) for item in result])
    xlsx_path = Path(__file__).with_name(OUTPUT_XLSX)
    df.to_excel(xlsx_path, index=False)
    print(f"Excel saved to {xlsx_path} ({len(df)} rows, {len(df.columns)} columns)")

elapsed = time.time() - start_time
minutes, seconds = divmod(elapsed, 60)
print(f"\nTemps d'exécution : {int(minutes)} min {seconds:.1f} s")

On appréciera  :
    • Un tarif imbattable de 0,81 $ les 1000 annonces extraites.
    • Les données récoltées sont complètes 🌾🚜

‍

2. Piloterr :

Vue de l'utilisation de la plateforme APIfy lors du scraping de Google Maps

   À la deuxième place de notre classement, on retrouve Piloterr.com. Sur chaque critaire d'évaluation la solutionne présente aucun défaut majeure :

Vitesse : 3 segondes par annonce scrapée. C'est bien tout en restant un cran au dessus de Lobstr (2,3 segondes).

Prix : 3,78 $ / 1000 annonces scrapées, ce n'est pas la plus chère mais ça reste plus de trois fois plus chère que OpenScraper et APIfy. A noter que vous avez droit à 500 crédit gratuit à l'inscription poiur tester la solution. Ce qui n'est pas énormle mais suffisant, notre test nous ayant coûté 214 crédit (7 pages + 207 annonces).

Complétude des données : Sur 208 annonces présentes lors du lancement, 207 lignes nous ont été données en résultats et une ligne était en doublon. On a donc eu 206 vrais résultats sur 208. Dommage mais pas éliminatoire pour autant !

Plans d'abonnement du site APIfy

On appréciera  :
    • Un scraping très rapide ⚡
    • Très paramétrable

On aime moins :
    • Des trous dans la requête (données incomplètes)
‍

3. Hasdata :

Vue de l'utilisation de la plateforme Hasdata lors du scraping de Google Maps

  Sur la troisième marche du podium, on retrouve Hasdata. Pour le coup, pas de jaloux sur la quantité : le scraper a ramené 127 résultats dans ses filets. Après un petit nettoyage des données, on a débusqué deux doublons, ce qui nous ramène exactement à un total réel de 125 établissements, soit un sans-faute identique à celui d'Openscraper en termes de complétude. En revanche, l'outil se montre un peu moins compétitif sur le reste. Côté chrono, il lui faut 29,22 secondes pour faire le tour de la question, ce qui reste tout à fait honorable mais plus lent que le peloton de tête. C'est surtout au moment de passer à la caisse que l'expérience se corse : à 0,0098 $ par ligne, le tarif grimpe nettement (40 crédits). De plus, la plateforme ne propose pas d'option en Pay-as-you-go, ce qui vous obligera à souscrire à un forfait mensuel fixe même pour des besoins ponctuels. Les forfaits en question :

Plans d'abonnement du site Hasdata

Comme pour Openscraper, on a besoin de coder pour l’utiliser correctement sur Google Maps en se connectant à leur API. Leur plateforme SaaS seule ne permettant pas de récupérer des résultats au delà du 20ème résultat par url.

Voici un code pour extraire les résultats en formats Excel (remplacez bien "YOUR_API_KEY" par votre clé API 😉) :
‍

import http.client
import json
import time

def scrape_all_pages():
    """
    Scrapes Google Maps search results by paginating through them
    and saves the combined results to a JSON file.
    """
    all_results = []
    headers = {
        'x-api-key': "YOUR_API_KEY",
        'Content-Type': "application/json"
    }

    # Boucle de 0 à 140 par pas de 20
    for start in range(0, 141, 20):
        print(f"Récupération des résultats à partir de l'index {start}...")
        conn = http.client.HTTPSConnection("api.hasdata.com")
        
        # Construit le chemin de la requête avec le paramètre 'start' dynamique
        path = (f"/scrape/google-maps/search?q=bouchon%2C+Lyon&domain=google.fr&gl=fr&hl=fr"
                f"&start={start}&ll=%4045.7613904%2C4.830659%2C15z")
        
        conn.request("GET", path, headers=headers)
        res = conn.getresponse()
        data = res.read()
        response_json = json.loads(data.decode("utf-8"))
        # Correction : la bonne clé est "localResults" et non "results"
        results_on_page = response_json.get("localResults", [])
        all_results.extend(results_on_page)
        
        conn.close()
        time.sleep(1) # Petite pause pour être respectueux envers l'API

    output_filename = "hasdata_results.json"
    with open(output_filename, 'w', encoding='utf-8') as f:
        json.dump(all_results, f, indent=2, ensure_ascii=False)

    print(f"\nExtraction terminée. {len(all_results)} résultats ont été sauvegardés dans '{output_filename}'.")

if __name__ == "__main__":
    start_time = time.time()
    try:
        scrape_all_pages()
    except Exception as e:
        print(f"Une erreur inattendue est survenue : {e}")
    finally:
        end_time = time.time()
        duration = end_time - start_time
        print(f"\nTemps d'exécution total : {duration:.2f} secondes.")

On appréciera  :
    • Les données récoltées sont complètes ✅

On aime moins :
    • Le prix 💳💥
‍

4. Phantombuster :

Vue de l'utilisation de la plateforme Phantombuster lors du scraping de Google Maps

   La plateforme de Phantombuster est très facile d’utilisation ce qui est parfait quand on est en proie aux terribles pics glycémiques liés à la digestion après la fréquentation d’un Bouchon Lyonnais. Il n’y a pas sur Phantombuster de décompte des crédits mais un décompte du temps de scraping utilisé par leurs scrapers.
Pour télécharger les données vous devez opter au minimum pour leur offre Start à 56 euros par mois et vous avez le droit à 20h d'exécution. Ce qui n’est pas tant que ça vu la lenteur de leurs produits 😥 Il nous a fallu 11 minutes pour scraper tous les lieux de notre url. Phantombuster en a trouvé 114 (ce qui n'est pas tout à fait complet). Au prorata des 20h pour 56 € cela nous donne 0,0047€ par résultat (0,0053$).

Voici leurs abonnements :

Plans d'abonnement du site Phantombuster

On appréciera  :
    • La simplicité d'utilisation ✨

On aime moins :
    • La terrible lenteur (est-elle vraiement nécessaire ?)
‍

5. Outscraper :

Vue de l'utilisation de la plateforme Outscraper lors du scraping de Google Maps

   Outscraper est souvent bien classé dans les différents comparatifs d'outils de scraping trouvables sur internet. Avec un prix de 0.003$ / lieu dans leur plus petite formule, nous avons affaire au deuxième scraper le moins cher du marché derrière Openscraper. Néanmoins deux gros bémols apparaissent : 
‍
1. La complétude des données. Étonnamment dans nos différents essais, sur les plus de 120 lieux normalement récupérables, il n’y en a jamais eu plus de 51 dans les résultats. Espérons que ce bug qui apparaissait sur notre url de test sera rapidement corrigé.
2. Le temps de fonctionnement, toujours supérieur à 30 minutes sur nos différents tests

On appréciera  :
    • Le prix

On aime moins :
    • Uniquement la moitié des restaurants récupérés
    • Temps de fonctionnement très lent
‍

Conclusion : Quel scraper Google Maps choisir pour vos projets ?

Site Temps de réponse Pay-as-you-go Prix par lieu Complétude
Openscraper 17,5 s Oui 0,00112 $ 125 / 125 (Complet)
Apify 12,0 s Non 0,00410 $ 109 / 125
Hasdata 29,22 s Non 0,00980 $ 125 / 125 (Complet)
Phantombuster 11 min Non 0,00530 $ 114 / 125
Outscraper 39 min Non 0,00300 $ 51 / 125

Cette investigation au cœur des bouchons lyonnais met en lumière une réalité évidente : toutes les soutions de scraping Google Maps ne se valent pas. Derrière des promesses marketing souvent similaires, on observe en réalité de gros écarts dans les prix, la vitesse d'exécution et la complétude des données.
‍

En fin de compte, si vous cherchez la simplicité absolue sans coder (ce qui est pourtant facile avec les LLM), une plateforme No Code s'envisage, mais au prix fort et avec un temps d'attente prolongé. En revanche, si vous visez la performance maximale, une complétude totale de vos leads et le meilleur tarif du marché, l'intégration d'une solution performante comme OpenScraper.ai ou APIfy s'avère, et de loin, la meilleure recette pour nourrir vos bases de données.
‍

Est-ce légale de scraper Google Maps ?

Conditions d'utilisation vs Cadre légal :

Bien que Google interdise l'accès automatisé dans ses Conditions d'utilisation, aux USA, la jurisprudence (notamment l'arrêt de la Cour d'appel du 9ᵉ circuit dans l'affaire hiQ Labs vs LinkedIn) établit que scraper des données publiques n'est pas illégal en soi dès lors qu'aucun système de sécurité n'est contourné (absence de login ou de paywall).

Protection des données personnelles (RGPD & CCPA) :

La collecte d'informations personnelles (noms d'indépendants, téléphones directs, e-mails) doit respecter le RGPD en Europe et le CCPA aux États-Unis. En France, la CNIL rappelle que les traitements reposant sur l'intérêt légitime doivent respecter les obligations d'information prévues par l'Article 14 du RGPD et garantir un droit d'opposition.

Propriété intellectuelle et bonnes pratiques. La réutilisation directe du contenu généré par les utilisateurs (UGC) pose des risques juridiques et techniques précis :
‍

API Google Places :

Si cela vous tient à coeur de respecter les condition d'utilisatation de google ou d'avoir les données 100% officielles, vous pouvez utiliser l'API officielle Google Places. Cependant, elle s'avère très coûteuse (environ $17 pour 1 000 requêtes).
‍

© Scrapster 2026, mentions légales