Bulk SERP API

Bulk SERP API per raccogliere dati Google su larga scala

Metti in coda un milione di ricerche Google in pochi minuti e lascia che sia Semscraper a raccoglierle. Fino a 1.000 parole chiave per chiamata API, elaborazione asincrona, callback firmate e recupero gratuito di ogni risultato.

  • 1.000 parole chiave per chiamata
  • Asincrona con callback firmate
  • Circa 30 € ogni 100.000 SERP
  • 1.000 SERP gratuite
  • Nessuna carta di credito

Metti in coda 1 milione di ricerche Google in pochi minuti

Invia fino a 1.000 parole chiave per chiamata API, fino a 500 chiamate al minuto, senza aspettare che i batch precedenti siano completati. Le tue richieste entrano subito in coda e vengono elaborate man mano che si libera capacità. La capacità di invio non coincide con il throughput di elaborazione: i tempi effettivi di completamento dipendono dal carico della coda e dalla capacità disponibile, che ampliamo con la crescita della domanda.

1. Invii

Batch da 1.000 parole chiave, con tutte le chiamate che ti servono. Ogni parola chiave ha il suo paese, la sua lingua, la sua città, il suo dispositivo e la sua profondità.

2. Noi raccogliamo

Ogni SERP viene renderizzata in un vero browser. Ogni account ha la propria coda, gli account vengono serviti a turno e una priorità da 1 a 10 stabilisce l'ordine delle tue richieste.

3. Ricevi

Ogni risultato viene inviato al tuo URL di callback appena è pronto, oppure recuperi i risultati completati a blocchi, quando vuoi.

Pensata per volumi di produzione

Quello che serve davvero a un team che esegue decine di migliaia di ricerche al giorno.

Callback firmate

Ogni callback contiene nell'header X-Signature una firma HMAC SHA-256 del suo body, calcolata con la chiave che trovi nel menu delle chiavi API.

Recupero affidabile e gratuito

I risultati completati e mai recuperati restano disponibili e puoi elencarli con una sola chiamata. Recuperare i risultati è gratuito e ripetibile: viene addebitata solo la creazione di una ricerca.

SERP complete, fino a 10 pagine

Risultati organici con posizione e posizione in pixel, AI Overviews, annunci, local pack e tutti gli altri blocchi, in JSON o HTML. Trovi l'elenco completo nella pagina API Google Search.

Quanto costa su larga scala

Paghi a SERP, senza abbonamento. Il tuo credito non scade mai.

SERPPagina 1 (circa 10 risultati)10 pagine (circa 100 risultati)
10.0003,00 €21,00 €
100.00030,00 €210,00 €
1.000.000300,00 €2.100,00 €

Tariffa standard, prima dello sconto dall'1 al 10% sulle ricariche. Se Google restituisce meno pagine di quelle richieste, paghi solo le pagine trovate. Prezzi dettagliati.

Un esempio funzionante, testato

Python: metti in coda una lista di parole chiave, verifica le callback e recupera tutto ciò che il tuo server si è perso. Eseguito sull'API in produzione il 9 ottobre 2026: callback ricevute con firme valide, ciclo di recupero eseguito due volte senza più nulla da recuperare al secondo passaggio, e nessun addebito per il recupero. Questo esempio punta a Google.com in inglese: per Google Italia usa location "it" e language "it".

1. bulk.py: metti in coda tutte le parole chiave
# bulk.py  -  python bulk.py queue keywords.txt   then later   python bulk.py catch-up
import json, sys, time
import requests

API = "https://api.semscraper.com/v1/serp"
HEADERS = {"Authorization": "Bearer API_KEY"}
CALLBACK = "https://your-server.com/serp-callback"  # or None: catch-up only

def save(serp, path="serps.jsonl"):
    with open(path, "a", encoding="utf-8") as f:
        f.write(json.dumps(serp, ensure_ascii=False) + "\n")

def queue(keywords):
    for i in range(0, len(keywords), 1000):  # 1,000 keywords per call
        batch = [{
            "search_engine": "google_search",
            "keyword": kw,  # a keyword must not contain a comma
            "device": "desktop",
            "location": "en",
            "language": "en",
            "depth": 1,
            **({"callback_url": CALLBACK} if CALLBACK else {}),
        } for kw in keywords[i:i + 1000]]
        for attempt in range(6):
            r = requests.post(API, json=batch, headers=HEADERS, timeout=60)
            if r.status_code != 429:  # 429: over 500 calls/minute, nothing was queued
                break
            time.sleep(10 * (attempt + 1))
        r.raise_for_status()
        print(r.json()["count"], "keywords queued")
2. callback_server.py: ricevi e verifica ogni callback (Flask)
# callback_server.py  -  flask --app callback_server run
import hashlib, hmac, json
from flask import Flask, request

SECRET = b"hmac_..."  # HMAC key from your API keys menu
app = Flask(__name__)

def save(serp, path="serps.jsonl"):
    with open(path, "a", encoding="utf-8") as f:
        f.write(json.dumps(serp, ensure_ascii=False) + "\n")

@app.post("/serp-callback")
def serp_callback():
    raw = request.get_data()
    expected = hmac.new(SECRET, raw, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(expected, request.headers.get("X-Signature", "")):
        return "Invalid signature", 401
    for serp in json.loads(raw):  # a list holding the finished SERP
        save(serp)
    return {"status": "ok"}       # anything but 200 leaves it unfetched
3. bulk.py, seguito: recupera tutto ciò che manca
# bulk.py, continued: finished results that were never fetched
def catch_up():
    while True:
        r = requests.get(API, headers=HEADERS, timeout=60)  # up to 1,000 per call
        r.raise_for_status()
        ids = [p["id"] for p in r.json().get("data", [])]
        if not ids:
            break
        for i in range(0, len(ids), 100):
            r = requests.get(API, headers=HEADERS, timeout=60,
                             params={"ids": ",".join(ids[i:i + 100]), "output": "json"})
            r.raise_for_status()
            for serp in r.json()["data"]:
                save(serp)  # fetching marks it as fetched, and is never billed

if __name__ == "__main__":
    if sys.argv[1] == "queue":
        queue(open(sys.argv[2], encoding="utf-8").read().splitlines())
    else:
        catch_up()

Misurata su 958.176 SERP

Il nostro studio sulle AI Overviews ha raccolto in totale oltre 2,15 milioni di SERP, desktop e mobile. Una delle sue campagne ha messo in coda quasi un milione di parole chiave francesi il 12 settembre 2026. Tutte le 958.176 SERP sono state raccolte e recuperate entro 4 h 23 min dalla prima richiesta, senza alcun errore. L'ora di picco ha prodotto 237.043 SERP. Si tratta di una raccolta reale sul nostro account, non di un throughput garantito: il tempo di completamento dipende dalla profondità, dal numero di richieste in attesa e dalla capacità disponibile.

958.176

SERP di una pagina raccolte e recuperate, senza alcun errore.

4 h 23 min

dalla prima richiesta all'ultimo risultato.

237.043

SERP nell'ora di picco della raccolta.

Cosa aspettarti

ArgomentoCome funziona
Una SERP o un intero batchUna singola SERP richiede un tempo mediano di circa trenta secondi, circa un minuto per 10 pagine, perché viene renderizzata in un vero browser. Molti robot lavorano in parallelo, quindi un batch viene elaborato progressivamente e termina molto prima della somma delle sue SERP.
CapacitàLa nostra flotta di robot cresce con la domanda: aggiungiamo capacità man mano che i volumi aumentano. Se prevedi volumi molto elevati e ricorrenti, avvisaci in anticipo e la dimensioneremo per te.
Invio delle callbackOgni risultato viene inviato una sola volta. Se il tuo endpoint non risponde HTTP 200, il risultato resta semplicemente da recuperare e il ciclo di recupero lo prende in carico.
Recupero per IDFino a 100 ID per chiamata. Per grandi volumi, affidati alle callback o all'elenco dei risultati completati e non ancora recuperati (fino a 1.000 per chiamata).
Tempo realePensata per la raccolta su larga scala, non per rispondere a un chatbot all'istante. Per dataset e agenti AI, consulta la SERP API per l'AI.
FAQ

Domande frequenti

Quante parole chiave posso inviare in una volta?
Fino a 1.000 per chiamata e fino a 500 chiamate al minuto. Non serve aspettare che un batch finisca prima di inviare il successivo: tutto entra subito in coda e viene elaborato progressivamente.
Cosa succede se il mio endpoint di callback era irraggiungibile?
Non si perde nulla. Una callback che non riceve un HTTP 200 lascia il risultato da recuperare. Chiamando GET /v1/serp senza ID ottieni l'elenco di fino a 1.000 risultati completati e non ancora recuperati, che poi recuperi per ID. Il recupero non viene mai addebitato.
Come verifico che una callback provenga da Semscraper?
Calcola un HMAC SHA-256 del body grezzo della richiesta con la chiave HMAC indicata nel menu delle chiavi API (inizia con hmac_) e confrontalo con l'header X-Signature usando un confronto a tempo costante.
Un batch può mescolare paesi, dispositivi e profondità?
Sì. Ogni elemento del batch ha la propria località, lingua, geolocalizzazione, dispositivo, profondità e priorità. Una sola regola: una parola chiave non deve contenere virgole, altrimenti verrebbe divisa in due ricerche.
Quanto tempo servirà per 100.000 SERP?
Non garantiamo una durata: dipende dalla profondità e dal carico della coda al momento dell'invio. Come riferimento, la nostra raccolta di 958.176 SERP di una pagina è stata completata in 4 h 23 min. La nostra infrastruttura cresce con la domanda: per volumi molto elevati e ricorrenti, contattaci prima e aggiungeremo la capacità che ti serve.

Parti dalla tua lista di parole chiave

1.000 SERP gratuite, nessuna carta di credito richiesta.