Ce qui change
Selon la documentation de Google, la Custom Search JSON API est fermée aux nouveaux clients, et les clients existants ont jusqu’au 1er janvier 2027 pour passer à une solution alternative. La même page décrit l’API comme un moyen d’obtenir des résultats web et images depuis un Programmable Search Engine, le moteur que vous configurez et identifiez avec cx.
Les dates et les conditions sont celles de Google et peuvent changer ; vérifiez-les sur la page de Google avant de fixer une échéance.
Ce que Serper.live renvoie à la place
Serper.live est une API SERP Google en temps réel : chaque requête lance une vraie recherche Google pour le pays et l’appareil choisis et renvoie en JSON les résultats organiques affichés à ce moment-là, jusqu’à 100 par requête (10 par défaut).
Ce n’est ni un moteur de recherche à part entière ni une recherche interne de site : aucun moteur à configurer, aucun index de vos pages. Une requête prend généralement 2–3 secondes, car elle charge Google en direct, et elle est facturée à la requête depuis un solde prépayé.
Si votre intégration Custom Search vous montrait ce que Google classe pour une requête, c’est la solution la plus proche. Si elle alimentait la recherche dans votre propre site ou sur une liste fixe de domaines, il vous faut plutôt un produit de recherche interne : dans ce cas, la documentation de Google oriente vers Vertex AI Search.
Correspondance des paramètres
Custom Search JSON API à gauche, Serper.live à droite :
q→query: le mot-clé, de 2 à 120 caractères.gl→country: le code à deux lettres d’un marché ouvert, issu deGET /v1/countries(actuellement Allemagne, France, Royaume-Uni, Turquie, Ukraine et États-Unis).hl→language: la langue de l’interface Google ; facultatif, par défaut la langue du pays.num→limit: résultats organiques par requête, de 1 à 100 (10 par défaut ; chaque bloc de 10 entamé coûte un prix du marché).start→ pas d’équivalent : au lieu de paginer, augmentezlimit, et un seul appel renvoie jusqu’à 100 résultats organiques.cx→ inutile : il n’y a pas de moteur à configurer, la requête interroge Google pour le marché.key→ un en-têteAuthorization: Beareravec votre jetonsl_live_.items[]→organic[]:linkdevienturl,displayLinkcorrespond à peu près àdomain;titleetsnippetgardent leur nom, etsnippetpeut valoirnull.
Étapes de la migration
La requête ci-dessous constitue toute l’intégration ; voici les étapes autour :
- Créez un compte et un jeton, puis rechargez à partir de 5 $ en USDT ou USDC.
- Remplacez le GET vers l’endpoint Custom Search par
POST https://api.serper.live/v1/search, un corps JSON et l’en-têteAuthorization. - Faites correspondre les paramètres comme ci-dessus ; supprimez
cxetstart. - Lisez
organic[]au lieu deitems[], renommezlinkenurlet gérez unsnippetànull. - Portez le délai d’attente HTTP à au moins 100 secondes et placez l’appel dans une file d’attente au lieu de l’exécuter dans la requête de l’utilisateur : une recherche en direct prend généralement 2–3 secondes, la première vers un marché après une pause davantage.
- Envoyez une
Idempotency-Keypour qu’un appel répété ne soit jamais facturé deux fois. - Faites tourner les deux en parallèle pendant quelques jours, comparez, puis basculez.
curl -X POST https://api.serper.live/v1/search \
-H "Authorization: Bearer sl_live_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"best coffee shops","country":"DE"}'
const response = await fetch('https://api.serper.live/v1/search', {
method: 'POST',
headers: {
Authorization: 'Bearer sl_live_YOUR_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ query: 'best coffee shops', country: 'DE' }),
signal: AbortSignal.timeout(100000),
});
const result = await response.json();
console.log(result.organic);
import requests
response = requests.post(
"https://api.serper.live/v1/search",
headers={"Authorization": "Bearer sl_live_YOUR_TOKEN"},
json={"query": "best coffee shops", "country": "DE"},
timeout=100,
)
print(response.json()["organic"])