Bulk SERP API

Bulk SERP API para recopilar datos de Google a gran escala

Pon en cola un millón de búsquedas en Google en minutos y deja que Semscraper las recopile. Hasta 1.000 palabras clave por llamada a la API, procesamiento asíncrono, callbacks firmados y recuperación gratuita de todos los resultados.

  • 1.000 palabras clave por llamada
  • Asíncrona, con callbacks firmados
  • Unos 30 € por 100.000 SERPs
  • 1.000 SERP gratis
  • Sin tarjeta de crédito

Pon en cola 1 millón de búsquedas en Google en minutos

Envía hasta 1.000 palabras clave por llamada a la API, con hasta 500 llamadas por minuto, sin esperar a que terminen los lotes anteriores. Tus peticiones entran en la cola al instante y se procesan de forma progresiva a medida que hay capacidad disponible. La capacidad de envío no es el rendimiento de procesamiento: los plazos reales dependen de la carga de la cola y de la capacidad disponible, que ampliamos a medida que crece la demanda.

1. Envías

Lotes de 1.000 palabras clave, tantas llamadas como necesites. Cada palabra clave lleva su propio país, idioma, ciudad, dispositivo y profundidad.

2. Recopilamos

Cada SERP se renderiza en un navegador real. Cada cuenta tiene su propia cola, las cuentas se atienden por turnos y una prioridad de 1 a 10 ordena tus propias peticiones.

3. Recibes

Cada resultado se envía a tu URL de callback en cuanto está listo, o bien recuperas los resultados terminados por lotes cuando quieras.

Pensada para volúmenes de producción

Lo que de verdad necesita un equipo que lanza decenas de miles de búsquedas al día.

Callbacks firmados

Cada callback incluye en la cabecera X-Signature una firma HMAC SHA-256 de su cuerpo, calculada con la clave de tu menú de claves de API.

Recuperación fiable y gratuita

Los resultados terminados que nunca se recuperaron siguen disponibles y se pueden listar en una sola llamada. Recuperar resultados es gratis y puede repetirse: solo se factura la creación de una búsqueda.

SERPs completas, hasta 10 páginas

Resultados orgánicos con posición y posición en píxeles, AI Overviews, anuncios, local pack y todos los demás bloques, en JSON o HTML. Consulta la API de Google Search para ver la lista completa.

Cuánto cuesta a gran escala

Pagas por SERP, sin suscripción. Tu saldo no caduca nunca.

SERPsPágina 1 (unos 10 resultados)10 páginas (unos 100 resultados)
10.0003,00 €21,00 €
100.00030,00 €210,00 €
1.000.000300,00 €2.100,00 €

Tarifa estándar, antes del descuento del 1 al 10 % en las recargas. Si Google devuelve menos páginas de las solicitadas, solo se facturan las páginas encontradas. Precios detallados.

Un ejemplo funcional, probado

Python: pon en cola una lista de palabras clave, verifica los callbacks y recupera después lo que tu servidor se haya perdido. Ejecutado contra la API en producción el 9 de octubre de 2026: callbacks recibidos con firmas válidas, bucle de recuperación ejecutado dos veces sin nada pendiente en la segunda pasada y ningún cargo por recuperar los resultados. Este ejemplo apunta a Google.com en inglés; para Google España, usa location "es" y language "es".

1. bulk.py: poner en cola todas las palabras clave
# 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: recibir y 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, continuación: recuperar lo que se haya perdido
# 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 sobre 958.176 SERPs

Nuestro estudio sobre los AI Overviews recopiló en total más de 2,15 millones de SERPs, en escritorio y móvil. Una de sus campañas puso en cola cerca de un millón de palabras clave francesas el 12 de septiembre de 2026. Las 958.176 SERPs se recopilaron y recuperaron en 4 h 23 min desde la primera petición, sin ningún error. La hora de mayor actividad entregó 237.043 SERPs. Se trata de una recopilación real con nuestra propia cuenta, no de un rendimiento garantizado: el plazo depende de la profundidad, del número de peticiones en espera y de la capacidad disponible.

958.176

SERPs de una página recopiladas y recuperadas, sin ningún error.

4 h 23 min

desde la primera petición hasta el último resultado.

237.043

SERPs en la hora de mayor actividad de la ejecución.

Qué puedes esperar

AspectoCómo funciona
Una SERP frente a un lote completoUna sola SERP tarda unos treinta segundos de mediana, y alrededor de un minuto con 10 páginas, porque se renderiza en un navegador real. Muchos robots trabajan en paralelo, así que un lote se procesa de forma progresiva y termina mucho antes que la suma de sus SERPs.
CapacidadNuestra flota de robots crece con la demanda: añadimos capacidad a medida que aumentan los volúmenes. Si prevés volúmenes muy grandes de forma recurrente, avísanos con antelación y la dimensionaremos para ti.
Entrega de callbacksCada resultado se envía una sola vez. Si tu endpoint no responde con HTTP 200, el resultado simplemente queda sin recuperar y el bucle de recuperación lo recoge.
Recuperación por IDHasta 100 ID por llamada. Para grandes volúmenes, apóyate en los callbacks o en la lista de resultados terminados y no recuperados (hasta 1.000 por llamada).
Tiempo realPensada para recopilar a gran escala, no para responder a un chatbot en el momento. Para datasets y agentes de IA, consulta la SERP API para IA.
FAQ

Preguntas frecuentes

¿Cuántas palabras clave puedo enviar a la vez?
Hasta 1.000 por llamada y hasta 500 llamadas por minuto. No hace falta esperar a que termine un lote para enviar el siguiente: todo entra en la cola al instante y se procesa de forma progresiva.
¿Qué pasa si mi endpoint de callback estaba caído?
No se pierde nada. Un callback que no recibe un HTTP 200 deja el resultado sin recuperar. Una llamada a GET /v1/serp sin ID lista hasta 1.000 resultados terminados y no recuperados, que después recuperas por ID. La recuperación nunca se factura.
¿Cómo verifico que un callback procede de Semscraper?
Calcula un HMAC SHA-256 del cuerpo bruto de la petición con la clave HMAC que aparece en tu menú de claves de API (empieza por hmac_) y compáralo con la cabecera X-Signature mediante una comparación en tiempo constante.
¿Puede un mismo lote mezclar países, dispositivos y profundidades?
Sí. Cada elemento del lote tiene su propia ubicación, idioma, geolocalización, dispositivo, profundidad y prioridad. Una sola regla: una palabra clave no debe contener comas, porque se dividiría en dos búsquedas.
¿Cuánto tardarán 100.000 SERPs?
No garantizamos ningún plazo: depende de la profundidad y de la carga de la cola en el momento del envío. Como referencia, nuestra propia ejecución de 958.176 SERPs de una página se completó en 4 h 23 min. Nuestra infraestructura escala con la demanda: para volúmenes muy grandes y recurrentes, contacta con nosotros antes y añadiremos la capacidad que necesites.

Empieza con tu propia lista de palabras clave

1.000 SERPs gratis, sin tarjeta de crédito.