Google Ads est un espace concurrentiel où vous payez pour être visible, et les résultats payants en haut d'une page de recherche vous indiquent exactement quels concurrents sont prêts à enchérir pour chaque requête. Ces emplacements publicitaires sont publics : n'importe qui peut lancer une recherche et lire les titres, URL d'affichage et textes que vos rivaux mettent en avant devant le même public que vous ciblez. Capturés à grande échelle sur vos mots-clés cibles, ces données deviennent une intelligence publicitaire sur laquelle vous pouvez agir.
Ce guide vous montre comment analyser les annonces Google Ads des concurrents en capturant les résultats payants d'une SERP Google via la Crawling API pour une liste de mots-clés, en analysant le titre, l'URL d'affichage et le texte de chaque annonce, puis en déterminant quels concurrents enchérissent sur quels termes. Nous limitons volontairement l'ensemble de la démonstration aux données publicitaires publiques que tout internaute peut voir, et la section sur la légalité vers la fin n'est pas un simple avertissement générique, lisez-la avant de viser un volume réel.
Ce que vous allez construire
Un script Python qui prend une liste de mots-clés cibles, effectue chacun comme recherche Google publique via la Crawling API, et extrait un enregistrement structuré pour chaque annonce payante sur la page. Le scraper Google SERP intégré de la Crawling API renvoie les annonces déjà analysées, donc pour chaque annonce vous obtenez ces champs :
- Position le rang de l'annonce parmi les résultats payants, compté depuis le haut.
- Titre l'accroche de l'annonce, le texte cliquable en gras que l'annonceur a rédigé.
- URL d'affichage la destination visible sous l'accroche, qui est la marque du concurrent.
- Description le texte de l'annonce, les une ou deux lignes de message et d'appel à l'action.
- Liens de site les liens profonds supplémentaires que certains annonceurs ajoutent sous l'annonce principale.
À partir de là, vous consolidez les résultats par mot-clé en une vue concurrentielle simple : quelles marques affichent des annonces sur quels mots-clés, et à quelle fréquence.
Pourquoi une requête classique échoue sur Google
Si vous envoyez une requête HTTP brute à une URL de recherche Google depuis un script, vous obtenez rarement la page que vous voyez dans votre propre navigateur. Google rend une grande partie de la SERP avec JavaScript et surveille attentivement le trafic automatisé. Une requête qui ne ressemble pas à un vrai navigateur reçoit un mur de consentement, un CAPTCHA ou un blocage pur et simple bien avant d'atteindre le balisage publicitaire, et les emplacements publicitaires en particulier sont personnalisés et rendus tardivement, de sorte qu'une récupération brute renvoie souvent une page sans aucune annonce.
Un scraper Google Ads fonctionnel a donc besoin de deux éléments réunis en une seule requête : une adresse IP que la plateforme perçoit comme un vrai visiteur, et un navigateur qui rend la page. Vous pouvez assembler cela vous-même avec un navigateur sans interface graphique et un pool de proxies résidentiels rotatifs, mais les maintenir en bonne santé représente l'essentiel du travail. La Crawling API les réunit en un seul appel : vous lui envoyez l'URL de recherche, elle la récupère depuis une adresse IP résidentielle de confiance et rend la page, et son scraper Google SERP renvoie les annonces déjà analysées en JSON structuré.
Le balisage publicitaire de Google utilise des noms de classes hachés et fréquemment renouvelés, de sorte que les sélecteurs CSS écrits à la main cassent souvent. Le scraper google-serp de la Crawling API analyse la page côté serveur et renvoie un tableau ads propre, vous permettant de lire les champs par nom plutôt que de courir après des noms de classes qui changent à chaque déploiement. Vous pouvez commencer avec jusqu'à 20 000 requêtes gratuites, sans carte bancaire.
Points de données clés à extraire
Avant le code, il vaut la peine d'être clair sur ce que chaque champ vous apprend, car l'analyse n'est aussi bonne que les champs que vous collectez.
- Accroches et descriptions des annonces. Le texte des annonces concurrentes montre quel message ils pensent efficace. Repérez le langage répété, les déclencheurs émotionnels et les appels à l'action qui génèrent des clics.
- Mots-clés ciblés. Si l'annonce d'un concurrent apparaît pour un mot-clé, il enchérit dessus, ce qui est un fort signal que le terme convertit pour lui.
- Placement et classement des annonces. Un annonceur qui occupe constamment le premier emplacement payant enchérit de manière agressive ou diffuse des annonces de haute qualité, les deux valant la peine d'être compris.
- URLs d'affichage et de destination. L'URL d'affichage identifie le concurrent ; la destination montre comment il convertit le trafic, de la conception de la page à l'offre.
- Extensions d'annonces. Les liens de site, les accroches et les extraits structurés rendent une annonce plus grande et plus convaincante. Notez qui les utilise et comment.
Prérequis
Quelques éléments doivent être en place avant d'écrire le moindre code. Aucun ne prend longtemps.
Python de base. Vous devez être à l'aise pour écrire et exécuter un script Python et installer des paquets avec pip. Si l'analyse de la sortie JSON est nouvelle pour vous, notre guide sur le scraping de sites web avec Python couvre les bases supposées dans ce tutoriel.
Python 3.8 ou version ultérieure. Vérifiez votre version avec python --version. Si vous ne l'avez pas, installez-le depuis python.org ou via une distribution comme Anaconda.
Un compte Crawlbase et un token. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token de requête. Vous obtenez jusqu'à 20 000 requêtes gratuites. Le scraper SERP rend la page, utilisez donc votre token de requête normal (JavaScript). Traitez le token comme un mot de passe : il authentifie vos requêtes, ne le mettez donc pas dans un dépôt de code.
Configurer le projet
Installez la bibliothèque Python officielle Crawlbase, qui encapsule la Crawling API et son scraper SERP dans un petit client.
python --version python -m venv ads_env source ads_env/bin/activate pip install crawlbase
Sur Windows, activez l'environnement avec ads_env\Scripts\activate au lieu de la ligne source. Le paquet crawlbase vous donne un client CrawlingAPI qui envoie la requête, applique le scraper Google SERP et renvoie la réponse analysée, vous n'écrivez donc aucun code d'analyse HTML pour les annonces vous-même.
Étape 1 : Récupérer une SERP et extraire les annonces
Commencez par obtenir les annonces pour un seul mot-clé. Écrivez une fonction scrape_google_ads() qui construit l'URL de recherche, l'envoie via la Crawling API avec le scraper google-serp, vérifie le statut et renvoie le tableau ads analysé.
import json from urllib.parse import quote from crawlbase import CrawlingAPI API_TOKEN = "YOUR_CRAWLBASE_TOKEN" # replace with your token crawling_api = CrawlingAPI({"token": API_TOKEN}) def scrape_google_ads(query): url = f"https://www.google.com/search?q={quote(query)}" options = {"scraper": "google-serp"} response = crawling_api.get(url, options) if response["headers"]["cb_status"] != "200": print(f"Failed to fetch '{query}'") return [] parsed = json.loads(response["body"].decode("latin1")) return parsed.get("body", {}).get("ads", []) if __name__ == "__main__": ads = scrape_google_ads("project management software") print(f"Found {len(ads)} ads") print(json.dumps(ads[:1], indent=2, ensure_ascii=False))
Le scraper SERP renvoie une enveloppe JSON. Vous lisez deux choses : response["headers"]["cb_status"] est le statut de la récupération Google sous-jacente, et response["body"] est la charge utile analysée, que vous décodez et chargez avec json.loads. Vérifier sur cb_status (legacy pc_status) signifie qu'un blocage ou un mur de consentement apparaît comme un échec clair plutôt que d'alimenter une page vide dans votre analyse. Les annonces se trouvent sous body.ads, déjà réparties en enregistrements individuels, de sorte qu'un seul mot-clé comme "project management software" revient sous forme d'une liste que vous pouvez inspecter. Exécutez le script et vous devriez voir un compte et la première annonce imprimés, ce qui confirme que la récupération et l'analyse fonctionnent avant de monter en charge.
Ce cb_status lit 200, et le tableau ads revient rempli, parce que la requête a atteint Google comme un vrai visiteur avec la page entièrement rendue. La Crawling API récupère chaque SERP depuis une adresse IP résidentielle rotative, la rend comme le ferait un navigateur, et son scraper Google SERP vous remet les annonces déjà analysées, vous évitant ainsi de gérer une flotte de navigateurs sans interface, de sourcer un pool de proxies et d'écrire des sélecteurs contre les noms de classes hachés de Google. Pointez-la vers une URL de recherche publique sur le niveau gratuit en premier.
Étape 2 : Normaliser les champs des annonces
Les annonces analysées vous donnent tout ce dont vous avez besoin, mais il est utile d'aplatir chacune en un enregistrement cohérent pour que l'étape d'analyse n'ait pas à accéder à des clés imbriquées. Écrivez une petite fonction parse_ads() qui extrait le titre, l'URL d'affichage, la description, la destination et les éventuels liens de site de chaque annonce, et y appose le mot-clé qui l'a produite.
def parse_ads(query, ads): records = [] for ad in ads: site_links = [ { "title": link.get("title"), "url": link.get("url"), } for link in ad.get("siteLinks", []) ] records.append({ "keyword": query, "position": ad.get("position"), "title": ad.get("title"), "displayUrl": ad.get("displayUrl") or ad.get("url"), "description": ad.get("description"), "destination": ad.get("url"), "siteLinks": site_links, }) return records
Chaque enregistrement porte désormais le keyword dont il provient, la position de l'annonce, l'accroche title, la displayUrl (la marque visible, avec repli sur la destination si le champ d'affichage est absent), le texte description, l'URL réelle de destination, et une liste aplatie de tout siteLinks. Apposer le mot-clé sur chaque annonce est ce qui rend l'analyse ultérieure possible : cela vous permet de regrouper les annonces par concurrent sur de nombreux mots-clés sans perdre de vue quel terme chacune a produit.
L'URL d'affichage (ou son domaine enregistré) est le moyen le plus fiable d'identifier qui se cache derrière une annonce. Les accroches et les textes varient selon les campagnes, mais le domaine de la marque est stable, donc regroupez sur displayUrl lorsque vous comptez qui enchérit sur quoi.
Étape 3 : Exécuter une liste de mots-clés et analyser les concurrents
Reliez maintenant tout ensemble. Parcourez vos mots-clés cibles en boucle, scrapez et analysez les annonces pour chacun, collectez chaque enregistrement, puis consolidez les enregistrements en une vue concurrentielle. Cadencez la boucle avec un court délai pour ne pas envoyer les requêtes dos à dos.
import json import time from urllib.parse import quote, urlparse from collections import defaultdict from crawlbase import CrawlingAPI API_TOKEN = "YOUR_CRAWLBASE_TOKEN" crawling_api = CrawlingAPI({"token": API_TOKEN}) KEYWORDS = [ "project management software", "crm for small business", "time tracking app", ] def scrape_google_ads(query): url = f"https://www.google.com/search?q={quote(query)}" response = crawling_api.get(url, {"scraper": "google-serp"}) if response["headers"]["cb_status"] != "200": print(f"Failed to fetch '{query}'") return [] parsed = json.loads(response["body"].decode("latin1")) return parsed.get("body", {}).get("ads", []) def parse_ads(query, ads): return [ { "keyword": query, "position": ad.get("position"), "title": ad.get("title"), "displayUrl": ad.get("displayUrl") or ad.get("url"), "description": ad.get("description"), "destination": ad.get("url"), } for ad in ads ] def domain_of(record): target = record["destination"] or record["displayUrl"] or "" return urlparse(target).netloc or target def main(): all_ads = [] for keyword in KEYWORDS: ads = scrape_google_ads(keyword) all_ads.extend(parse_ads(keyword, ads)) print(f"{keyword}: {len(ads)} ads") time.sleep(2) competitors = defaultdict(list) for record in all_ads: competitors[domain_of(record)].append(record["keyword"]) report = { domain: { "adCount": len(keywords), "keywords": sorted(set(keywords)), } for domain, keywords in competitors.items() } with open("competitor_ads.json", "w", encoding="utf-8") as f: json.dump({"ads": all_ads, "competitors": report}, f, ensure_ascii=False, indent=2) print(f"Saved {len(all_ads)} ads from {len(report)} competitors") if __name__ == "__main__": main()
Exécutez le script complet avec python competitor_ads.py. Il scrape les annonces pour chaque mot-clé dans KEYWORDS, les aplatit en enregistrements, puis regroupe chaque enregistrement par son domaine concurrent avec defaultdict pour construire un rapport du nombre d'annonces diffusées par chaque marque et sur quels mots-clés. Le résultat va dans competitor_ads.json avec à la fois les enregistrements bruts d'annonces et la vue concurrentielle consolidée. Ajoutez plus de termes à KEYWORDS et les mêmes deux fonctions gèrent le reste ; l'analyse grandit avec votre liste.
À quoi ressemble le résultat
Vous obtenez un objet structuré avec les annonces analysées et un résumé concurrentiel, prêt à charger dans un tableur, un notebook ou une base de données pour une analyse plus approfondie.
{ "ads": [ { "keyword": "project management software", "position": 1, "title": "Project Management Tool | Plan, Track and Ship Faster", "displayUrl": "https://www.example-pm.com/", "description": "Run every project in one place. Free 14-day trial, no card required.", "destination": "https://www.example-pm.com/trial" } ], "competitors": { "www.example-pm.com": { "adCount": 2, "keywords": ["crm for small business", "project management software"] } } }
Le bloc competitors est là où réside l'intelligence : il vous indique d'un coup d'œil quelles marques enchérissent sur lesquels de vos termes et combien de vos mots-clés suivis chacune couvre. Un concurrent apparaissant sur plusieurs mots-clés investit largement ; celui qui détient la première position sur votre terme à plus haute valeur mérite un examen plus attentif de son texte et de sa page de destination.
Mise à l'échelle sur les mots-clés et les emplacements
Une petite liste de mots-clés est une démonstration ; un vrai travail suit des dizaines de termes, souvent par régions, et réexécute selon un calendrier pour détecter les nouveaux entrants. La forme reste la même : construire chaque URL de recherche, la récupérer via la Crawling API avec le scraper SERP, et analyser les annonces. Quelques ajouts la rendent prête pour la production.
-
Localiser la SERP. Les enchères publicitaires diffèrent selon les pays, ajoutez donc
&gl=uset&hl=en(ou un autre pays et une autre langue) à l'URL de recherche pour capturer les annonces qu'un internaute de ce marché verrait. - Cadencer la boucle. Maintenez le court délai entre les requêtes plutôt que de les envoyer dos à dos. Répartissez une grande liste de mots-clés plutôt que de marteler Google en rafale serrée.
- Planifier des réexécutions. Les textes et les enchérisseurs changent de semaine en semaine, une réexécution hebdomadaire transforme donc un instantané ponctuel en une tendance que vous pouvez suivre dans le temps.
Crawlbase sert jusqu'à 20 requêtes par seconde par défaut, ce qui est amplement suffisant pour un tracker de mots-clés cadencé, et toute réponse 5XX de l'API est gratuite, les tentatives de réessai sur une URL bloquée ne vous coûtent donc rien. Si vous préférez router votre propre trafic via un pool rotatif, le Smart AI Proxy vous donne la même rotation résidentielle comme point de terminaison de substitution. Pour le guide de stratégie concernant l'analyse et le blocage spécifiques à Google, consultez comment faire tourner des proxies pour scraper les résultats de recherche Google et comment contourner les CAPTCHA lors du scraping de Google.
Combiner le scraping avec la source de transparence officielle
Scraper la SERP en direct vous indique ce qui tourne en ce moment pour vos mots-clés exacts, ce sont les données que vous ne pouvez obtenir d'aucune autre façon. Pour compléter le tableau, associez cela à l'outil gratuit de Google, le Centre de transparence des annonces Google. Il vous permet de rechercher un annonceur et de voir les annonces qu'il diffuse sur le réseau de Google, les formats qu'il utilise et les régions qu'il cible. C'est une source officielle, c'est donc le bon endroit pour étudier en profondeur le contenu créatif d'un concurrent connu.
Les deux approches se complètent : scrapez votre liste de mots-clés pour savoir qui est en concurrence sur chaque terme et comment leur texte se lit en contexte, puis ouvrez le Centre de transparence sur les marques qui comptent pour voir l'empreinte plus large de leur campagne. Au-delà de l'outil de Google, des plateformes payantes comme SEMrush, SpyFu et Ahrefs estiment les dépenses publicitaires et la couverture historique des mots-clés, ce qui est utile pour l'analyse des tendances mais moins précis que lire la SERP en direct vous-même.
Est-il légal de scraper les données Google Ads ?
La légalité du scraping des données Google Ads dépend des conditions d'utilisation de Google, de votre juridiction et de ce que vous faites des données. Les conditions de Google limitent l'accès automatisé à son service de recherche, de sorte que le scraping peut aller à l'encontre de ces conditions quelle que soit la prudence de votre outillage. Les emplacements publicitaires eux-mêmes sont publics, n'importe qui peut les voir en effectuant la même recherche, mais "public" n'est pas la même chose que "sans restriction." Aucun des codes présentés ici ne modifie les conditions de Google ; il rend simplement la partie technique fonctionnelle. Lisez les conditions de Google et son fichier robots.txt, et traitez les deux comme la limite de ce que vous collectez.
Quelques lignes directrices à respecter. Collectez uniquement les données publicitaires publiques : les titres, URL d'affichage, descriptions, positions et liens de site que tout internaute peut voir sur une page de résultats sans compte. Maintenez votre volume de requêtes suffisamment bas pour ne pas solliciter excessivement les serveurs de Google, et cadencez votre crawl plutôt que de le faire tourner à plein régime. Ne scrapez rien derrière une connexion, ne collectez pas de données personnelles, et ne republiez pas le contenu créatif publicitaire protégé par le droit d'auteur d'un concurrent comme le vôtre. Vous rassemblez de l'intelligence concurrentielle pour informer votre stratégie, vous ne construisez pas un miroir des campagnes de quelqu'un d'autre.
Lorsqu'une source officielle existe, préférez-la. Le Centre de transparence des annonces de Google est une façon sanctionnée d'étudier les annonces en cours d'un annonceur donné, et c'est la bonne voie lorsque vous voulez approfondir un concurrent spécifique plutôt qu'une lecture en direct de votre propre liste de mots-clés. Ce guide est délibérément limité aux résultats publicitaires publics et visibles car c'est la limite qui rend ce travail défendable. Si votre projet nécessite plus que cela, un accord de données officiel ou l'une des plateformes d'intelligence publicitaire sous licence est la bonne voie, non un scraper plus astucieux.
Points clés
- Les emplacements publicitaires sont un signal public. Les résultats payants pour vos mots-clés montrent quels concurrents enchérissent, ce qu'ils disent et où ils envoient le trafic, capturés à grande échelle, cela devient de l'intelligence publicitaire.
-
Le scraper SERP fait l'analyse. Envoyez chaque URL de recherche via la Crawling API avec le scraper
google-serpet lisez les annonces depuisbody.ads, au lieu d'écrire des sélecteurs contre les noms de classes hachés de Google. - Apposez le mot-clé sur chaque annonce. Transmettre le mot-clé jusqu'à chaque enregistrement est ce qui vous permet de regrouper les annonces par domaine concurrent et de voir qui enchérit sur quels termes.
- Regroupez sur l'URL d'affichage. Le domaine de la marque est la clé stable pour comptabiliser les concurrents ; les accroches et les textes varient, le domaine non.
- Associez le scraping au Centre de transparence. Scrapez la SERP en direct pour la couverture des mots-clés, puis utilisez le Centre de transparence des annonces officiel de Google pour approfondir un annonceur spécifique, et restez sur les données publiques uniquement.
Foire aux questions
Pourquoi une requête classique renvoie-t-elle une page Google sans annonces ?
Google rend une grande partie de la SERP, y compris les emplacements publicitaires, avec JavaScript et la personnalise par requête, et il bloque le trafic qui ne ressemble pas à un vrai navigateur. Un appel HTTP brut reçoit souvent un mur de consentement, un CAPTCHA ou une page dépouillée sans aucune annonce. Récupérer via la Crawling API, qui utilise des adresses IP résidentielles rotatives et rend la page, fait ressembler la requête à celle d'un visiteur ordinaire, les annonces sont donc effectivement présentes, et son scraper SERP les renvoie déjà analysées.
Quels champs d'annonces puis-je extraire d'une SERP Google ?
Le scraper Google SERP renvoie un tableau ads où chaque annonce porte une position, un titre (l'accroche), une URL d'affichage, une description (le texte), une URL de destination et des liens de site éventuels. Ce tutoriel aplatit ceux-ci en un enregistrement par annonce et y appose le mot-clé qui l'a produite, ce qui est suffisant pour analyser le texte, le placement et quels concurrents enchérissent sur quels termes.
Comment trouver quels concurrents enchérissent sur un mot-clé ?
Exécutez chaque mot-clé cible comme une recherche, collectez les annonces, et regroupez les enregistrements par leur domaine concurrent (dérivé de l'URL d'affichage ou de destination). Une marque qui apparaît pour un mot-clé enchérit dessus. Consolidez ces groupes sur toute votre liste de mots-clés et vous obtenez une vue par concurrent de la couverture, ce qui est au cœur de l'analyse de ce guide.
Dois-je utiliser le Centre de transparence des annonces Google plutôt que le scraping ?
Utilisez les deux. Le Centre de transparence est l'outil officiel de Google pour voir les annonces qu'un annonceur donné diffuse sur le réseau, il est donc idéal pour étudier en profondeur le contenu créatif d'un concurrent connu. Scraper la SERP en direct pour votre propre liste de mots-clés vous indique qui est en concurrence sur chaque terme en ce moment et comment leur texte se lit en contexte, ce que le Centre de transparence ne vous donne pas directement. Ils répondent à des questions différentes.
Comment éviter d'être bloqué lors du scraping de Google Ads ?
Misez sur des adresses IP résidentielles rotatives pour que les requêtes proviennent de nombreuses adresses d'utilisateurs réels, rendez la page pour que les annonces se chargent, et cadencez vos requêtes plutôt que de les envoyer en rafale serrée. La Crawling API gère la rotation et le rendu pour vous ; si vous constituez votre propre pile, ce sont les parties à bien soigner. Lire le statut de chaque réponse vous permet également de reculer dès que Google commence à renvoyer des challenges.
Puis-je suivre les changements d'annonces dans le temps ?
Oui. Parce que chaque exécution écrit un instantané structuré indexé sur le mot-clé et le domaine concurrent, planifier une exécution hebdomadaire et comparer les instantanés vous montre les nouveaux entrants, les annonceurs disparus et les changements de texte ou de position. Pour une utilisation plus large de ce type de données concurrentielles, consultez notre guide sur l'utilisation du web scraping pour l'intelligence des prix.
Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.
Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.
