Alternative à Google Custom Search JSON API :
Google a fermé la Custom Search JSON API aux nouveaux clients et l'arrête pour tous le 1er janvier 2027. Semscraper collecte la vraie page de résultats Google, rendue dans un navigateur, jusqu'à 10 pages par mot-clé, soit environ 100 résultats selon la requête, au crédit et sans abonnement.
- Vraie SERP Google, pas un index réduit
- Jusqu'à 10 pages par mot-clé
- 1 000 recherches d'une page pour 0,30 €
- 1 000 SERP gratuites
- Pas de carte de crédit
Ce que Google a annoncé,
D'après la documentation de Google (developers.google.com/custom-search/v1/overview et l'aide Programmable Search Engine), consultée le 10 octobre 2026.
Depuis le 20 janvier 2026
Les nouveaux moteurs Programmable Search Engine sont limités à 50 domaines choisis : l'option « rechercher sur tout le Web » n'est plus proposée. Les moteurs existants qui l'utilisent la gardent jusqu'au 1er janvier 2027.
Fermée aux nouveaux clients
Un nouveau projet ne peut plus activer la Custom Search JSON API. Pour chercher sur 50 domaines au plus, Google oriente vers Vertex AI Search ; la recherche sur tout le Web se demande à Google.
1er janvier 2027
Fin de la Custom Search JSON API pour les clients existants. Toute application qui l'appelle encore doit avoir migré.
Pour quels usages
Semscraper n'est pas une copie conforme de Custom Search : c'est une API de collecte de la page Google telle qu'un internaute la voit. Elle remplace bien certains usages, pas tous.
Oui : suivre Google
Suivi de positions, veille concurrentielle, études de SERP, AI Overviews : vous obtenez les résultats réels de google.fr, google.com ou d'un autre pays, ville et appareil compris.
Oui : alimenter des outils et des agents
Datasets, enrichissement, agents et RAG qui ont besoin de ce que Google affiche vraiment. Le traitement est asynchrone : comptez une vingtaine de secondes de collecte par recherche, pas une réponse instantanée.
Non : la recherche interne de votre site
Une barre de recherche qui doit répondre en une fraction de seconde sur vos propres pages relève d'un moteur de recherche de site, ou de Vertex AI Search que Google propose pour 50 domaines.
Custom Search JSON API ou Semscraper :
| Critère | Custom Search JSON API | Semscraper |
|---|---|---|
| Source des résultats | Votre moteur Programmable Search Engine. Même réglé sur tout le Web, Google précise qu'il ne couvre qu'une partie de son index et met en avant vos propres sites. | La page de résultats Google réelle, rendue dans un vrai navigateur. |
| Contenu | Une liste de résultats web, sans les fonctionnalités de la recherche Google (Oneboxes, recherche universelle). | Chaque bloc de la page : résultats naturels, annonces, pack local, People Also Ask, AI Overviews avec leurs sources, et plus. |
| Nombre de résultats | 10 par requête, 100 au maximum en paginant (start + num ne peut pas dépasser 100). | Jusqu'à 10 pages Google en un seul appel, soit environ 100 résultats selon la requête. |
| Pays, langue, ville, appareil | gl favorise les résultats d'un pays, hl règle la langue de l'interface, lr et cr filtrent les documents. | Version de Google (pays et langue), ville ou coordonnées GPS, desktop ou mobile. |
| Fonctionnement | Synchrone : la réponse arrive dans l'appel. | Asynchrone : vous créez les recherches (jusqu'à 1 000 par appel), puis vous récupérez les résultats par identifiant ou sur une URL de callback. Une vingtaine de secondes de collecte en médiane pour une page, une cinquantaine pour 10, plus l'attente dans la file de votre compte (mesure sur 12 millions de SERP, dont 5,3 millions à une page et 260 000 à 10 pages, du 12 septembre au 10 octobre 2026). |
| Prix | 100 requêtes gratuites par jour, puis 5 $ les 1 000, dans la limite de 10 000 par jour. | 0,30 € les 1 000 recherches d'une page, 2,10 € les 1 000 recherches de 10 pages. Pas d'abonnement ni de plafond quotidien, solde sans expiration. |
| Recherche sur des domaines définis | Oui, c'est désormais le seul mode des nouveaux moteurs (50 domaines). | Pas de liste de domaines enregistrée : l'opérateur site: dans le mot-clé limite une recherche à un domaine. |
| Recherche d'images | Oui (searchType=image). | Non. Seul le bloc Images, quand Google l'affiche dans la page de résultats, est renvoyé. |
Adapter
Les paramètres ne sont pas interchangeables : voici comment adapter vos appels. Les opérateurs Google passent tels quels dans le mot-clé.
| Custom Search | Semscraper |
|---|---|
q | keyword |
gl | location, la version de Google, qui n'est pas un code pays : gl=fr devient location=fr (google.fr), gl=us devient location=en (google.com) |
hl | language, qui forme une paire valide avec location : fr/fr, en/en, de/de... |
num, start | depth, de 1 à 10 pages Google, toutes renvoyées par le même appel |
siteSearch | site:exemple.fr dans le mot-clé |
exactTerms | Des guillemets dans le mot-clé |
excludeTerms | -mot dans le mot-clé |
fileType | filetype:pdf dans le mot-clé |
lr, cr | Pas d'équivalent direct : choisissez la version de Google et la langue |
searchType=image | Pas d'équivalent |
key, cx | Une seule clé API, envoyée en en-tête Authorization: Bearer |
Migrer un appel,
Le même besoin en Python : les 10 premiers résultats naturels d'une requête sur google.fr. La différence principale est le passage en deux temps, création puis récupération.
import requests
r = requests.get("https://www.googleapis.com/customsearch/v1", params={
"key": "GOOGLE_API_KEY",
"cx": "SEARCH_ENGINE_ID",
"q": "chaussure running",
"gl": "fr",
"hl": "fr",
"num": 10,
})
for item in r.json().get("items", []):
print(item["link"], item["title"], item["snippet"])
import time
import requests
API = "https://api.semscraper.com/v1/serp"
HEADERS = {"Authorization": "Bearer API_KEY"}
# 1. create the search (up to 1,000 keywords per call)
r = requests.post(API, headers=HEADERS, timeout=60, json=[{
"search_engine": "google_search",
"keyword": "chaussure running",
"location": "fr",
"language": "fr",
"device": "desktop",
"depth": 1,
}])
r.raise_for_status()
ids = [row["id"] for row in r.json()["data"]]
# 2. fetch the results once ready (about 20 s of collection for a depth-1 search,
# plus queue time), 10 minutes at most
deadline = time.time() + 600
while ids and time.time() < deadline:
time.sleep(10)
r = requests.get(API, headers=HEADERS, timeout=60,
params={"ids": ",".join(ids[:100]), "output": "json"}) # 100 IDs per call
r.raise_for_status()
for row in r.json()["data"]:
if row["status"] != "done":
continue
ids.remove(row["id"])
for block in row["results"]:
if block["type"] == "organic":
for item in block["items"]:
print(item["url"], item["title"], item["description"])
if ids:
print("Still pending, fetch them later by ID:", ids)
Le champ link devient url, snippet devient description. Chaque résultat porte en plus sa position dans son bloc (rank_type), sa position sur la page (rank_serp), sa page Google et sa position en pixels. Pour des milliers de mots-clés : créez-les par lots de 1 000, récupérez les résultats par lots de 100 identifiants, ou recevez-les sur une URL de callback. Voir la Bulk SERP API.
Basculer
Une migration se prépare : comptez quelques jours de tests avant de couper l'ancienne API.
1. Tester
Lancez vos requêtes représentatives avec les 1 000 SERP offertes à l'inscription.
2. Adapter
Paramètres (gl devient location), passage à l'asynchrone, et champs de réponse (link devient url, snippet devient description).
3. Comparer
Pertinence, couverture des résultats, délais et consommation, sur un échantillon de vos vraies requêtes.
4. Basculer
Passez votre application sur Semscraper une fois les résultats validés, bien avant le 1er janvier 2027.
Le coût,
Prix publics : Google relevé le 10 octobre 2026, Semscraper au tarif de base, avant remise sur les recharges.
| Besoin | Custom Search JSON API | Semscraper |
|---|---|---|
| 1 000 mots-clés, 1 page (environ 10 résultats) | 5 $ (1 000 requêtes payantes, hors quota gratuit du jour) | 0,30 € |
| 1 000 mots-clés, 10 pages (environ 100 résultats) | 50 $ (10 requêtes payantes par mot-clé, hors quota gratuit du jour) | 2,10 € |
| Plus de 10 000 requêtes par jour | Impossible : plafond de 10 000 par jour | Aucun plafond quotidien |
Si les 100 requêtes gratuites du jour n'ont pas encore servi, comptez 4,50 $ et 49,50 $. La Custom Search JSON API n'est plus accessible aux nouveaux clients : ces prix ne concernent que les comptes existants, jusqu'au 1er janvier 2027. Tarifs détaillés de Semscraper.
Questions fréquentes
Quand la Custom Search JSON API s'arrête-t-elle ?
Semscraper renvoie-t-il les mêmes résultats que Custom Search ?
Puis-je limiter la recherche à mes domaines ?
La réponse est-elle immédiate ?
Quels sont les tarifs après la migration ?
Pour aller plus loin
Comment scraper Google en 2026
Récupérer les résultats de Google à grande échelle n'a jamais été aussi exigeant : 100 résultats par page supprimés, AI Overviews chargées après coup, SERP qui changent selon la ville. Voici les options et les pièges.
Lire le guide →SERP géolocalisées : les résultats Google vus depuis une ville
Deux personnes qui tapent la même recherche à Lyon et à Lille ne voient pas la même page. Pour mesurer le SEO local, il faut collecter la SERP depuis la bonne localisation.
Lire le guide →Alternative à SerpApi : le comparatif honnête
SerpApi est l'une des API SERP les plus connues. Si vous cherchez une alternative pour Google Search et Google Maps, voici ce qui différencie les deux services, y compris là où SerpApi fait mieux.
Lire le guide →Testez vos requêtes avant l'échéance
1 000 SERP offertes, sans carte bancaire.