Bulk SERP API

Bulk SERP API para coletar dados do Google em grande escala

Coloque um milhão de buscas do Google na fila em poucos minutos e deixe a Semscraper fazer a coleta. Até 1.000 palavras-chave por chamada de API, processamento assíncrono, callbacks assinados e recuperação gratuita de todos os resultados.

  • 1.000 palavras-chave por chamada
  • Assíncrona, com callbacks assinados
  • Cerca de € 30 a cada 100.000 SERPs
  • 1.000 SERPs grátis
  • Sem cartão de crédito

Coloque 1 milhão de buscas do Google na fila em poucos minutos

Envie até 1.000 palavras-chave por chamada de API, com até 500 chamadas por minuto, sem esperar que os lotes anteriores terminem. Suas requisições entram na fila na hora e são processadas aos poucos, conforme a capacidade fica disponível. Capacidade de envio não é o mesmo que velocidade de processamento: o tempo real de conclusão depende da carga da fila e da capacidade disponível, que ampliamos à medida que a demanda cresce.

1. Você envia

Lotes de 1.000 palavras-chave, quantas chamadas você precisar. Cada palavra-chave tem seu próprio país, idioma, cidade, dispositivo e profundidade.

2. Nós coletamos

Cada SERP é renderizada em um navegador real. Cada conta tem sua própria fila, as contas são atendidas em rodízio e uma prioridade de 1 a 10 define a ordem das suas próprias requisições.

3. Você recebe

Cada resultado é enviado para a sua URL de callback assim que fica pronto, ou você busca os resultados concluídos em lotes, quando quiser.

Feita para volume de produção

O que uma equipe que faz dezenas de milhares de buscas por dia realmente precisa.

Callbacks assinados

Todo callback traz no cabeçalho X-Signature uma assinatura HMAC SHA-256 do corpo, calculada com a chave do seu menu de chaves de API.

Recuperação confiável e gratuita

Os resultados concluídos que nunca foram buscados continuam disponíveis e podem ser listados em uma única chamada. Buscar resultados é gratuito e pode ser repetido: só a criação de uma busca é cobrada.

SERPs completas, até 10 páginas

Resultados orgânicos com posição no ranking e em pixels, AI Overviews, anúncios, local pack e todos os outros blocos, em JSON ou HTML. Veja a lista completa na Google Search API.

Quanto custa em grande escala

Pague por SERP, sem assinatura. Seu saldo nunca expira.

SERPsPágina 1 (cerca de 10 resultados)10 páginas (cerca de 100 resultados)
10.000€ 3,00€ 21,00
100.000€ 30,00€ 210,00
1.000.000€ 300,00€ 2.100,00

Tarifa padrão, antes do desconto de 1 a 10% nas recargas. Se o Google retornar menos páginas do que o solicitado, só as páginas encontradas são cobradas. Preços detalhados.

Um exemplo funcional, testado

Python: coloque uma lista de palavras-chave na fila, verifique os callbacks e depois recupere tudo o que o seu servidor deixou passar. Executado na API em produção em 9 de outubro de 2026: callbacks recebidos com assinaturas válidas, loop de recuperação rodado duas vezes sem nada pendente na segunda passada e nenhuma cobrança pela busca dos resultados. Este exemplo usa o Google.com em inglês; para o Google Brasil, use location "br" e language "pt".

1. bulk.py: colocar todas as palavras-chave na fila
# 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: receber e verificar cada 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, continuação: recuperar o que ficou para trás
# 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()

Medido em 958.176 SERPs

Nosso estudo sobre AI Overviews coletou mais de 2,15 milhões de SERPs no total, em desktop e celular. Uma de suas campanhas colocou na fila cerca de um milhão de palavras-chave francesas em 12 de setembro de 2026. As 958.176 SERPs foram todas coletadas e recuperadas em 4 h 23 min a partir da primeira requisição, sem nenhum erro. A hora de maior movimento entregou 237.043 SERPs. Trata-se de uma coleta real feita na nossa própria conta, não de uma velocidade garantida: o tempo de conclusão depende da profundidade, do número de requisições em espera e da capacidade disponível.

958.176

SERPs de uma página coletadas e recuperadas, sem nenhum erro.

4 h 23 min

da primeira requisição ao último resultado.

237.043

SERPs na hora de maior movimento da coleta.

O que esperar

AssuntoComo funciona
Uma SERP x um lote inteiroUma única SERP leva cerca de trinta segundos na mediana, e cerca de um minuto para 10 páginas, porque é renderizada em um navegador real. Muitos robôs trabalham em paralelo, então um lote é processado aos poucos e termina bem antes da soma de suas SERPs.
CapacidadeNossa frota de robôs cresce com a demanda: aumentamos a capacidade conforme os volumes sobem. Se você planeja volumes muito grandes e recorrentes, avise com antecedência e dimensionaremos tudo para você.
Entrega dos callbacksCada resultado é enviado uma única vez. Se o seu endpoint não responder HTTP 200, o resultado simplesmente fica pendente e o loop de recuperação o busca depois.
Busca por IDAté 100 IDs por chamada. Para grandes volumes, use os callbacks ou a lista de resultados concluídos e ainda não buscados (até 1.000 por chamada).
Tempo realFeita para coleta em grande escala, não para responder a um chatbot no momento. Para datasets e agentes de IA, veja a SERP API para IA.
FAQ

Perguntas frequentes

Quantas palavras-chave posso enviar de uma vez?
Até 1.000 por chamada e até 500 chamadas por minuto. Não é preciso esperar um lote terminar para enviar o próximo: tudo entra na fila na hora e é processado aos poucos.
O que acontece se o meu endpoint de callback estava fora do ar?
Nada se perde. Um callback que não recebe HTTP 200 deixa o resultado pendente. Chamar GET /v1/serp sem IDs lista até 1.000 resultados concluídos e ainda não buscados, que você então busca por ID. A busca dos resultados nunca é cobrada.
Como verifico se um callback vem mesmo da Semscraper?
Calcule um HMAC SHA-256 do corpo bruto da requisição com a chave HMAC exibida no seu menu de chaves de API (ela começa com hmac_) e compare o resultado com o cabeçalho X-Signature usando uma comparação em tempo constante.
Um mesmo lote pode misturar países, dispositivos e profundidades?
Sim. Cada item do lote tem sua própria localização, idioma, geolocalização, dispositivo, profundidade e prioridade. Uma regra: a palavra-chave não pode conter vírgula, senão ela seria dividida em duas buscas.
Quanto tempo levam 100.000 SERPs?
Não garantimos um prazo: ele depende da profundidade e da carga da fila no momento do envio. Como referência, nossa própria coleta de 958.176 SERPs de uma página foi concluída em 4 h 23 min. Nossa infraestrutura acompanha a demanda: para volumes muito grandes e recorrentes, fale com a gente antes e adicionaremos a capacidade de que você precisa.

Comece com a sua própria lista de palavras-chave

1.000 SERPs grátis, sem cartão de crédito.