Cómo Extraer Resultados de Google Con Anuncios Usando una SERP API
Si le pides a un desarrollador que “extraiga Google”, normalmente piensa en los diez enlaces azules orgánicos. Pero una página de resultados moderna es mucho más que eso. Encima y debajo de los listados orgánicos aparecen los anuncios de pago, y para las consultas comerciales esos anuncios suelen ser los datos más valiosos de la página. Te dicen quién puja por una palabra clave, qué texto usan y hacia qué páginas de destino dirigen el tráfico. Si tu scraper los descarta, te pierdes la mitad de la historia.
Capturar los anuncios de forma fiable es más difícil que capturar los resultados orgánicos, y la mayoría de las herramientas SERP los omiten en silencio, sobre todo porque Google solo muestra anuncios a visitantes que considera personas reales. En este artículo explicamos por qué los resultados de pago son tan escurridizos, qué debería contener una respuesta SERP completa y cómo obtener tanto los resultados orgánicos como los anuncios en JSON limpio, tal y como los vería realmente una persona en un país concreto.
Por Qué los Anuncios Son Más Difíciles de Extraer Que los Resultados Orgánicos
Los resultados orgánicos son relativamente estables. Las posiciones cambian, pero la misma consulta desde dos máquinas similares suele devolver una lista parecida. Los anuncios no se comportan así, y hay varias razones para ello.
Google simplemente no sirve anuncios a un visitante en el que no confía. Esta es, con diferencia, la razón principal, y es la que casi nadie menciona. Cada impresión de anuncio le cuesta dinero a un anunciante, así que Google protege su inventario publicitario mucho más agresivamente que los resultados orgánicos. Si la sesión no parece la de un humano real - huella del navegador, reputación de la IP, cookies, tiempos, señales de interacción -, la subasta de anuncios se omite en silencio. No recibes una página de bloqueo, ni un captcha, ni un error. Recibes una página de resultados de aspecto perfectamente normal, con todos los listados orgánicos presentes y sin ningún bloque patrocinado.
Esa distinción importa: superar el bloqueo no es lo mismo que ser considerado de confianza. Muchas configuraciones automatizadas cargan Google sin problemas, obtienen un HTTP 200 limpio, parsean los resultados orgánicos sin fallos y aun así nunca ven un solo anuncio - para ninguna palabra clave, en ningún país. Entonces los equipos concluyen “no había anuncios para esta consulta” cuando un usuario real en ese mismo mercado está viendo cuatro. Como no hay ningún error que capturar, este fallo es invisible salvo que lo compares a mano con un navegador real.
Ganarse esa confianza no es un problema de parsing, es un problema de infraestructura: un navegador real con una huella coherente, una salida residencial que coincida con el país objetivo, un comportamiento de sesión y de tiempos creíble, y ninguna de las señales de automatización que Google lleva años aprendiendo a detectar. Esa es exactamente la capa que resuelve ScrapeUnblocker: las peticiones llegan como las de un usuario genuino desde el país que elijas, así que la subasta de anuncios se ejecuta con normalidad y los bloques patrocinados vuelven completos, los mismos que vería una persona sentada en ese mercado.
Los anuncios están muy personalizados por ubicación. La subasta de anuncios de Google se ejecuta por consulta, por región y a veces por ciudad. Una búsqueda de “seguro de coche” desde una IP de EE. UU. muestra un conjunto de anunciantes completamente distinto al de la misma búsqueda desde Alemania o el Reino Unido. Si tu scraper sale por una IP de centro de datos aleatoria en el país equivocado, verás los anuncios equivocados o ninguno.
Los anuncios se renderizan tarde. Muchos espacios publicitarios se rellenan mediante JavaScript del lado del cliente un instante después de que cargue la página principal. Una petición HTTP ingenua que captura el HTML inicial suele obtener la página antes de que la subasta de anuncios se haya pintado, así que los resultados parecen no tener anuncios aunque sí los tengan.
Los anuncios están diseñados para parecer resultados orgánicos. Google ha pasado años haciendo que la etiqueta “Patrocinado” sea sutil. Para un parser, un bloque de anuncio y un bloque orgánico pueden verse casi idénticos en el DOM, lo que significa que los selectores frágiles escritos a mano los pierden o los clasifican mal constantemente.
El marcado de los anuncios cambia a menudo. Google reorganiza el diseño de su SERP con frecuencia. Los selectores que funcionaban el mes pasado devuelven silenciosamente arrays vacíos este mes, y no te enteras hasta que tu panel se queda en blanco.
En conjunto, estos factores explican por qué tantos scrapers de SERP devuelven solo datos orgánicos. Obtener también los anuncios significa parecer primero un usuario real y, sobre eso, resolver la segmentación geográfica, el renderizado de JavaScript y una clasificación robusta.
Qué Debería Contener una Respuesta SERP Completa
Una SERP API que merezca la pena debería entregarte la página completa, ya dividida en las partes que te interesan. Como mínimo, eso significa tres grupos:
topAds- los resultados patrocinados que aparecen encima de los listados orgánicos.organic- los resultados estándar, no pagados.bottomAds- los resultados patrocinados que aparecen debajo de los listados orgánicos.
Cada resultado, ya sea de pago u orgánico, debería llevar la misma estructura limpia: un título, la URL de destino real, la URL mostrada (la bonita), un fragmento de descripción y una posición. Cuando los anuncios y los resultados orgánicos comparten un mismo esquema, tu código posterior se mantiene simple: los recorres de la misma forma y solo registras de qué grupo proceden.
Fundamental: los resultados deberían reflejar a un usuario real en el país elegido. Tú eliges el país y la API devuelve la página tal y como la vería alguien que navega desde allí: los mismos anunciantes, el mismo orden, los mismos matices locales. Esa es la diferencia entre “algunos resultados de Google” y “los resultados que tu público realmente ve”.
Cómo Hacer la Petición
El endpoint es una única llamada POST. El único campo obligatorio es tu keyword de búsqueda; todo lo demás es opcional y te da control sobre la profundidad y la ubicación.
keyword(obligatorio) - la consulta de búsqueda, por ejemplobest running shoes.proxy_country- el código ISO de país para la segmentación geográfica, comousode.pages_to_check- cuántas páginas de SERP recopilar, de 1 a 10 (por defecto 1).wait_after_load- segundos de espera tras la carga de la página para que los anuncios de renderizado tardío aparezcan.captcha_pause- segundos de pausa si se encuentra un desafío.
Aquí tienes la llamada más simple posible con curl:
curl -X POST "https://api.scrapeunblocker.com/serpApi" \
-H "x-scrapeunblocker-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keyword": "best running shoes",
"proxy_country": "us",
"pages_to_check": 1,
"wait_after_load": 3
}'
Los dos parámetros que más importan para capturar anuncios son proxy_country y wait_after_load. Ajusta el país a donde esté tu público y dale a la página un par de segundos para que los espacios publicitarios terminen de renderizarse antes de leer los datos. Omitir cualquiera de los dos es la razón más común por la que la gente obtiene datos de anuncios incompletos.
La misma llamada en Python es igual de corta:
import requests
resp = requests.post(
"https://api.scrapeunblocker.com/serpApi",
headers={"x-scrapeunblocker-key": "YOUR_API_KEY"},
json={
"keyword": "best running shoes",
"proxy_country": "us",
"pages_to_check": 1,
"wait_after_load": 3,
},
)
data = resp.json()
print(f"{len(data['topAds'])} top ads, {len(data['organic'])} organic results")
La Respuesta
La respuesta es un único objeto JSON. El nivel superior te dice qué se buscó y desde dónde, y los arrays topAds, bottomAds y organic contienen los resultados. Aquí tienes un ejemplo con datos de marcador de posición:
{
"keyword": "best running shoes",
"proxy_country": "us",
"totalResults": 128000000,
"topAds": [
{
"title": "SwiftSole Pro 2026 - Free 60-Day Returns",
"url": "https://www.swiftsole.example/pro-running",
"displayedUrl": "swiftsole.example/pro",
"description": "Lightweight carbon-plate trainers built for race day. Free shipping both ways.",
"position": 1
},
{
"title": "PaceRunner Outlet - Up to 40% Off",
"url": "https://shop.pacerunner.example/sale",
"displayedUrl": "shop.pacerunner.example/sale",
"description": "Last-season road and trail shoes at clearance prices. Sizes selling fast.",
"position": 2
}
],
"bottomAds": [
{
"title": "TrailheadGear - Trail Running Specialists",
"url": "https://www.trailheadgear.example/shoes",
"displayedUrl": "trailheadgear.example",
"description": "Grippy, waterproof trail shoes tested on real mountain routes.",
"position": 1
}
],
"organic": [
{
"title": "The 12 Best Running Shoes of 2026, Tested",
"url": "https://www.runreview.example/best-running-shoes",
"displayedUrl": "runreview.example > gear > shoes",
"description": "We logged 400 miles in this year's top trainers. Here is what held up.",
"position": 1
},
{
"title": "How to Choose Running Shoes - A Beginner's Guide",
"url": "https://www.stridelab.example/guides/choose-shoes",
"displayedUrl": "stridelab.example/guides",
"description": "Pronation, drop, cushioning: the three things that actually matter.",
"position": 2
}
]
}
Como cada entrada - anuncio u orgánica - usa los mismos cinco campos, iterar es trivial. Puedes aplanar los tres arrays, etiquetar cada fila con su origen y volcarlas directamente en una tabla:
rows = []
for bucket in ("topAds", "bottomAds", "organic"):
for item in data[bucket]:
rows.append({"source": bucket, **item})
Qué Puedes Construir Con Datos SERP Completos
Una vez que tienes juntos los datos orgánicos y los de anuncios, se abren varios casos de uso que los scrapers de solo orgánico no pueden cubrir:
- Monitorización de anuncios de la competencia. Rastrea qué empresas pujan por tus palabras clave principales, observa cómo cambia su texto publicitario con el tiempo y detecta a los nuevos participantes el mismo día en que empiezan a anunciarse.
- Seguimiento de posiciones que refleja la realidad. La posición orgánica que importa es la que ve un usuario después de que los anuncios empujen los listados hacia abajo. Capturar los anuncios te permite medir la visibilidad real, no una posición teórica.
- Protección de marca. Detecta competidores o afiliados que pujan por el nombre de tu marca en países concretos, lo que a menudo es la primera señal de un uso indebido de la marca registrada.
- Investigación de mercado y precios. El texto de los anuncios es un flujo en directo de las promociones, descuentos y mensajes que se están lanzando en tu mercado ahora mismo.
- Análisis de intención local. Como eliges el país, puedes comparar cómo se ve la misma consulta en distintos mercados y adaptar las campañas por región.
El hilo conductor es la geografía. Nada de esto funciona si no puedes ver de forma fiable la página como la ve un usuario local, y por eso la segmentación por país y la captura completa de anuncios van de la mano.
Preguntas Frecuentes
¿Por qué mi scraper no devuelve anuncios ni siquiera para palabras clave comerciales?
La mayoría de las veces porque Google no consideró la sesión como la de un usuario real y se saltó por completo la subasta de anuncios: la página igualmente carga y los resultados orgánicos igualmente se parsean, así que nada parece roto. Las otras dos causas habituales son salir por el país equivocado, con lo que no se sirven anuncios locales, y leer la página antes de que los espacios publicitarios terminaran de renderizarse. Ajusta proxy_country a tu mercado objetivo y añade un breve wait_after_load, pero primero hay que resolver la capa de confianza, y eso no lo arreglan los selectores ni los tiempos de espera.
Mi scraper no recibe ningún bloqueo, ¿por qué sigo sin ver anuncios? Porque evitar el bloqueo y ser tratado como un visitante real son dos listones distintos, y los anuncios están detrás del más alto. Google le entregará encantado a un cliente con pinta de automatizado un HTTP 200 limpio con toda la lista orgánica y, simplemente, dejará fuera los bloques patrocinados. Por eso una respuesta sin anuncios no demuestra que la palabra clave no tenga anunciantes: comprueba la misma consulta en un navegador normal desde el mismo país y normalmente los encontrarás. Las peticiones de ScrapeUnblocker pasan como usuarios genuinos, así que los anuncios están ahí.
¿Puedo recopilar anuncios de más de la primera página?
Sí. Usa pages_to_check para obtener hasta diez páginas de SERP en una sola llamada. Los anuncios del final de página y los listados orgánicos más profundos aparecen a medida que avanzas por los resultados.
¿Cómo distingo los anuncios de los resultados orgánicos?
La respuesta ya los separa por ti. Los resultados patrocinados llegan en topAds y bottomAds, y los no pagados en organic, así que nunca tienes que adivinar basándote en el marcado o en una etiqueta de “Patrocinado”.
¿Los resultados coincidirán con lo que ve un usuario real?
Ese es el objetivo. Al seleccionar un proxy_country, obtienes la página tal y como la vería un visitante genuino de ese país: los mismos anunciantes, el mismo orden y los mismos resultados localizados, en lugar de una vista genérica o sesgada por el centro de datos.
Uniéndolo Todo
Datos de búsqueda completos significa la página entera: los listados orgánicos y los anuncios que los rodean, vistos desde el país que te importa. Esa combinación es lo que convierte un scraper de SERP de una curiosidad en algo sobre lo que puedes construir un producto de inteligencia competitiva o de seguimiento de posiciones.
Si prefieres no mantener tú mismo la lógica de segmentación geográfica, renderizado de JavaScript y clasificación de anuncios, la SERP API de ScrapeUnblocker devuelve los resultados orgánicos y ambos bloques de anuncios en JSON estructurado en una sola llamada, con el país de salida que elijas. Puedes consultar la referencia completa de parámetros y respuesta en la documentación para desarrolladores y empezar a probar consultas desde el panel. Sea cual sea la herramienta que elijas, el principio es el mismo: si quieres la verdad sobre una página de resultados de búsqueda, captúrala entera, anuncios incluidos.
Prueba ScrapeUnblocker gratis
Tasa de éxito del 95%+ · desde 0,55 € por cada 1000 llamadas · 500 solicitudes gratis al registrarte.