Guías y buenas prácticas15 min read

Cómo scrapear reseñas de Google (y por qué la API solo te da cinco)

Cómo scrapear reseñas de Google (y por qué la API solo te da cinco)

Cómo scrapear reseñas de Google (y por qué la API solo te da cinco)

Puedes extraer reseñas de Google desde la ficha de un negocio en Google Maps, pero no puedes obtenerlas de forma masiva con la API oficial: la Places API devuelve un máximo de cinco reseñas por lugar, y la Business Profile API solo funciona con las fichas que tú administras. Ese hueco es la razón por la que existe toda una industria de scraping de reseñas.

Si necesitas el historial completo de reseñas de un negocio, o cualquier reseña de un competidor, los endpoints oficiales no te van a servir. En esta guía vas a ver qué te dan realmente las APIs, las tres vías para extraer reseñas, los campos que vale la pena capturar, qué se rompe cuando lo construyes tú y dónde están los límites legales.

Por qué la API oficial no es la solución

Esta es la parte que casi todas las guías se saltan, y es la que define todo el enfoque.

Google expone datos de reseñas a través de dos productos distintos, y ninguno hace lo que necesita un proyecto de reputación o de inteligencia competitiva.

VíaQué obtienesEl problema
Places API (Place Details)Hasta cinco reseñas de usuarios por lugar, más un resumen de reseñas generado con IACinco es un techo duro, no un tamaño de página. No hay paginación para ver la sexta. Pedir el campo
reviews
se factura en el nivel Enterprise + Atmosphere, el más caro
Business Profile API (
accounts.locations.reviews
)
Todas las reseñas de una ficha, paginadas con un token, más el promedio y el totalFunciona solo con fichas que administras y tienes verificadas. El acceso está condicionado a una solicitud que Google revisa a mano, y parte de la v4 tiene calendario de cierre
Scraping de la ficha públicaTodo lo visible públicamente: historial completo, respuestas del dueño, metadatos del autor, cualquier negocioLo construyes y lo mantienes tú, y las decisiones de cumplimiento son tuyas

La consecuencia práctica: la Business Profile API está bien para gestionar la bandeja de reseñas de una sola marca, y por eso casi todas las herramientas de respuesta a reseñas están construidas sobre ella. Deja de servir en el momento en que tu pregunta involucra a un competidor, un mercado o una categoría, porque esas fichas no son tuyas.

Si tu pregunta es "cómo están calificados los doce comercios de mi ciudad y de qué se queja la gente", no hay API para eso. Hay datos públicos y una decisión sobre cómo recolectarlos.

Qué debería contener un registro de reseña

Un scraper que devuelve estrellas y texto es fácil de escribir y casi inútil para analizar. El valor está en los metadatos, porque son los que te permiten filtrar ruido, detectar manipulación y medir cambios en el tiempo.

CampoPor qué importa
place_id
, nombre y dirección del negocio
Tu clave de cruce. El place ID es estable; los nombres y direcciones no
rating
(1–5)
El evidente, y débil por sí solo
review_text
Donde está la señal real. Viene vacío en las reseñas que solo dan estrellas, que son muchas
relative_date
y
absolute_date
Google muestra "hace 3 meses". Para armar una serie necesitas una fecha real: resuélvela al momento de la captura y guarda también la fecha de captura
reviewer_name
, URL del perfil
Son datos personales. Mira la sección de cumplimiento: quizá convenga hashearlos o descartarlos
reviewer_review_count
, estado de Local Guide
La señal más barata contra reseñas falsas. Una cuenta con una reseña y un Local Guide con 400 no valen lo mismo
owner_response
+ fecha de respuesta
Cómo maneja el negocio las críticas. Muchas veces es más interesante comercialmente que la reseña misma
likes
/ votos de utilidad
Señal de ponderación
language
+ texto original vs. traducido
Google traduce automáticamente. Medir sentimiento sobre una traducción automática da resultados que no puedes auditar
review_id
Deduplicación. Sin esto, cada nueva corrida infla tu base

El campo de idioma es el que más problemas causa. Si calculas sentimiento sobre el texto traducido de Google en lugar del original, tus números se desvían de una forma que nadie va a poder explicar tres meses después.

Tres formas de extraer reseñas de Google

1. Herramientas no-code y extensiones

Los scrapers de apuntar y hacer clic y las extensiones de navegador exportan reseñas a CSV o XLSX. Hay muchas, y para una extracción puntual de unas pocas fichas son la opción correcta: tienes los datos en veinte minutos.

Donde dejan de funcionar: corridas programadas, cientos o miles de fichas, un esquema consistente a lo largo de meses, y cualquier cosa que tenga que terminar en una base de datos y no en una hoja de cálculo. Las extensiones además se rompen cada vez que Google cambia el layout, y suelen enterarte cuando una exportación vuelve vacía. Comparamos esta categoría en herramientas de scraping sin código.

2. Construir tu propio scraper

Control total sobre campos, frecuencia y almacenamiento. Es realista de construir, y bastante más difícil de mantener andando que de construir, que es justo la sección siguiente.

3. Un servicio de datos gestionado

Tú defines fuentes, campos y frecuencia; otro se encarga del mantenimiento, de la infraestructura de proxies y de que se rompa a las 3 de la mañana. Eso es nuestro trabajo de gestión de reputación: menciones estructuradas entregadas en CSV, Excel, JSON o directo a tu base de datos, con frecuencia diaria, semanal o a medida.

La regla honesta para decidir: si los datos de reseñas alimentan un producto o una decisión recurrente, lo que define es la carga de mantenimiento, no el costo de construcción. Si es un estudio de mercado puntual, constrúyelo o usa una herramienta y sigue adelante. En cuánto cuesta implementar un servicio de scraping desglosamos los números.

Qué se rompe de verdad cuando lo construyes

Las reseñas de Google son uno de los objetivos públicos más difíciles. Estos son los problemas que se comen el tiempo.

Las reseñas cargan de forma dinámica, dentro de un panel con scroll. El contenido no está en el HTML inicial. Necesitas un navegador real y tienes que hacer scroll sobre un contenedor interno concreto, no sobre la página, hasta que deje de generar nodos nuevos. Hacer scroll en la ventana no sirve de nada.

No hay número de página. No puedes pedir la página 7. Haces scroll, y tienes que decidir cuándo terminaste: sin reseñas nuevas después de N intentos, o cuando llegaste al total que informa la ficha. Si esto queda mal, capturas en silencio las primeras 40 reseñas de un negocio que tiene 900.

El orden cambia lo que obtienes. El criterio por defecto de Google es "más relevantes", que es un subconjunto curado y no un feed cronológico. Si quieres el historial completo o una serie confiable, cambia a "más recientes": si no, tu base queda moldeada por el ranking de Google y no es reproducible.

Fricción anti-bot. Límites de tasa, CAPTCHAs e interstitials de consentimiento, sobre todo desde IPs de datacenter. Ayudan los proxies residenciales con geolocalización correcta y bajar el ritmo a algo parecido a lo humano. Las mecánicas generales están en scraper bloqueado: cómo resolverlo con rotación de IP.

Los resultados dependen de la geografía y el idioma. La misma ficha devuelve conjuntos distintos de reseñas según desde dónde parezcas navegar y qué idioma pidas. Para tener datos comparables en un mercado, fija el locale y documéntalo. Si no lo haces, no vas a poder explicar las variaciones de un mes a otro.

Los selectores están ofuscados y rotan. Los nombres de clase de Google son generados y cambian sin aviso. Ánclate en la estructura y en los roles ARIA, no en cadenas de clases, y agrega una validación que te avise cuando una corrida devuelve un número sospechosamente redondo o un campo queda completamente nulo. La degradación silenciosa es la falla real: no un error, sino tres semanas de

review_text
vacío que nadie notó.

Un esqueleto mínimo con Playwright

Esto es la forma del problema, no un scraper de producción. Los selectores de Google Maps cambian seguido: considera que todos los de abajo vas a tener que volver a derivarlos.

import asyncio
from playwright.async_api import async_playwright

PANEL_RESENAS = 'div[role="main"] div.m6QErb[aria-label]'

async def extraer_resenas(url_ficha: str, max_scrolls_sin_cambio: int = 3):
    async with async_playwright() as p:
        navegador = await p.chromium.launch(headless=True)
        pagina = await navegador.new_page(locale="es-MX")
        await pagina.goto(url_ficha, wait_until="networkidle")

        # Abrir la pestaña de reseñas y cambiar el orden a "Más recientes".
        # "Más relevantes" es un subconjunto curado y no es reproducible.
        await pagina.get_by_role("tab", name="Reseñas").click()
        await pagina.wait_for_timeout(2000)

        panel = pagina.locator(PANEL_RESENAS).first
        vistas, sin_cambio = 0, 0

        # No hay paginación: scroll del panel interno hasta que deje de crecer.
        while sin_cambio < max_scrolls_sin_cambio:
            await panel.evaluate("el => el.scrollTo(0, el.scrollHeight)")
            await pagina.wait_for_timeout(1500)
            total = await pagina.locator("div[data-review-id]").count()
            sin_cambio = sin_cambio + 1 if total == vistas else 0
            vistas = total

        tarjetas = await pagina.locator("div[data-review-id]").all()
        resenas = []
        for tarjeta in tarjetas:
            estrellas = tarjeta.locator('span[role="img"]').first
            texto = tarjeta.locator("span.wiI7pd").first
            resenas.append({
                "review_id": await tarjeta.get_attribute("data-review-id"),
                "rating": await estrellas.get_attribute("aria-label"),
                "fecha_relativa": await tarjeta.locator("span.rsqaWe").first.inner_text(),
                # Las reseñas de solo estrellas no tienen nodo de texto: no debe fallar.
                "texto": await texto.inner_text() if await texto.count() else None,
            })

        await navegador.close()
        return resenas

if __name__ == "__main__":
    print(len(asyncio.run(extraer_resenas("https://maps.google.com/?cid=TU_CID"))))

Dos cosas que a este esqueleto le faltan antes de producción: convertir

fecha_relativa
en una fecha real, y expandir las reseñas truncadas haciendo clic en cada botón "Más" antes de leer el texto. Ese segundo punto es el bug más frecuente en scrapers de reseñas: capturas los primeros 200 caracteres de cada reseña larga y nunca te das cuenta.

Si recién empiezas con scraping en Python, arranca con tu primer scraper en Python y vuelve después.

Legalidad y cumplimiento: lo que sí importa

Esto es información general, no asesoría legal. Consulta a un abogado sobre tu caso antes de recolectar a escala.

Los Términos de Servicio de Google restringen el acceso automatizado. Hacer scraping de páginas públicas no es lo mismo que cometer un delito, y los tribunales de Estados Unidos han tratado los datos de acceso público de forma distinta a los datos detrás de un login. Pero la restricción de los Términos existe, es un asunto contractual y conviene decidirlo a propósito en lugar de descubrirlo después. El panorama general está en leyes sobre extracción de datos.

Si usas la Places API, no puedes cachear casi nada de lo que devuelve. Las políticas de la Places API exceptúan únicamente al place ID de las restricciones de caché: puedes almacenar valores de place ID de forma indefinida. Todo lo demás queda sujeto a las restricciones de caché de los Términos de Maps Platform. Hay equipos que montan un almacén de reseñas sobre respuestas de la API sin leer esto y se crean un problema de cumplimiento.

El texto de las reseñas y los nombres de los autores son datos personales. Bajo el RGPD, la LFPDPPP en México y la Ley 25.326 en Argentina, el nombre, el perfil y el contenido de una reseña pueden identificar a una persona: eso implica una base legal, un plazo de conservación y una vía para atender solicitudes del titular. La mitigación práctica es barata: decide al momento de la ingesta si realmente necesitas la identidad del autor. Para análisis de sentimiento y de temas casi nunca la necesitas: hashea el ID del autor, quédate con la señal de cantidad de reseñas y descarta el nombre. Los datos que nunca recolectaste son datos que nunca tienes que defender. Más en cómo evitar problemas legales y de cumplimiento en el web scraping.

Republicar es una pregunta distinta de recolectar. Usar datos de reseñas para análisis interno no es lo mismo que reproducir el texto de las reseñas en un producto de cara al público. Son dos decisiones separadas.

De los datos de reseñas al monitoreo de reputación

Las reseñas extraídas son materia prima. El software de monitoreo de reputación sostiene CPCs de más de 80 dólares justamente porque alguien tiene que convertir esa materia prima en algo que un equipo de marketing u operaciones pueda usar cada semana.

Un pipeline que funciona se ve así:

  1. Recolectar en las plataformas que importan en tu categoría, no solo Google. Trustpilot, G2, Yelp, Capterra, Glassdoor, Indeed y Tripadvisor cargan conversaciones distintas.
  2. Normalizar las calificaciones a una escala común y deduplicar por review ID.
  3. Enriquecer con extracción de temas y sentimiento, sobre el texto en idioma original.
  4. Seguir la serie, no la foto. Un promedio de 4,3 no dice nada por sí solo; un 4,6 que se volvió 4,3 en seis semanas es un problema con fecha de inicio.
  5. Alertar por umbrales, en lugar de esperar que alguien lea el tablero.

Los pasos 1 y 2 son un problema de ingeniería de datos, que es donde trabajamos. Los pasos 3 a 5 son donde vive tu conocimiento de la categoría, y tercerizar ese criterio suele ser un error. En nuestros proyectos de gestión de reputación entregamos el sentimiento como campo adicional opcional precisamente por eso: la interpretación de negocio le corresponde al cliente.

Si además quieres las reseñas junto con el resto de los datos de la ficha (horarios, categorías, fotos, atributos), eso es extracción de registros de Google Maps más que scraping de reseñas, y en la práctica los dos se construyen juntos.

Cuándo conviene tercerizar

Constrúyelo tú cuando sea un estudio puntual, cuando tengas capacidad de ingeniería realmente libre, o cuando los datos de reseñas sean tu producto y el pipeline un activo central que quieras controlar.

Trae un proveedor cuando los datos tengan que llegar en fecha sin importar si Google cambió su markup esa semana, cuando necesites decenas o cientos de fichas en varias plataformas con un esquema consistente, o cuando el costo de oportunidad de tener a un ingeniero manteniendo selectores sea mayor que el servicio. En cómo elegir el proveedor de web scraping adecuado está qué preguntar.

Llevamos más de 350 proyectos de datos en más de 15 industrias y más de 6 años de trabajo, y los datos de reseñas y menciones son uno de los pedidos más frecuentes. Casi siempre llega de un equipo que probó primero la Places API, chocó con el muro de las cinco reseñas y se dio cuenta de que el problema era más grande de lo que parecía.

Preguntas frecuentes

**¿Es legal scrapear reseñas de Google?**Recolectar reseñas visibles públicamente es una pregunta legal distinta a acceder a datos privados, y los tribunales estadounidenses han distinguido ambos casos. Pero los Términos de Servicio de Google restringen el acceso automatizado, y el texto de una reseña con el nombre de su autor es dato personal bajo el RGPD, la LFPDPPP y la Ley 25.326. Tómalo como una decisión deliberada, con asesoría, y minimiza lo que recolectas.

**¿Por qué la API de Google solo devuelve cinco reseñas?**Google diseñó la Places API para descubrir y mostrar lugares, no para analizar reseñas. Cinco es un techo duro y no hay paginación más allá. El acceso completo a reseñas por la Business Profile API está reservado a los dueños verificados de la ficha.

**¿Cómo consigo todas las reseñas de un negocio?**Si administras y tienes verificada la ficha, usa el endpoint de reseñas de la Business Profile API con paginación por token. Para cualquier otro negocio, la única vía al historial completo es extraer la ficha pública.

**¿Cuántas reseñas puedo extraer por día?**No hay un límite publicado: depende de tu infraestructura de proxies y del ritmo. El scraping agresivo desde IPs de datacenter dispara CAPTCHAs en minutos. El volumen sostenible viene de proxies residenciales con geolocalización correcta, ritmo parecido al humano y una estrategia de reintentos.

**¿Puedo extraer las reseñas de la competencia?**Sí. Las reseñas públicas de la ficha de un competidor son visibles para cualquiera, y el análisis competitivo de reseñas es uno de los usos más comunes de estos datos. Aplican las mismas consideraciones de Términos de Servicio y privacidad que con tu propia ficha.

**¿Qué diferencia hay entre scraping de reseñas y monitoreo de reputación?**El scraping de reseñas es el paso de extracción. El monitoreo de reputación es el flujo completo: recolección multiplataforma, normalización, análisis de sentimiento y temas, seguimiento de tendencia y alertas. El scraping es el insumo del monitoreo.

**¿Necesito un navegador headless para extraer reseñas de Google?**En la práctica, sí. El contenido de las reseñas carga de forma dinámica dentro de un panel con scroll, así que una petición HTTP simple devuelve una página sin reseñas. Playwright, Puppeteer y Selenium son las opciones habituales.


¿Necesitas datos de reseñas y menciones en fecha, en lugar de un scraper que mantener? Recolectamos reseñas y menciones públicas de tu marca en Google, Trustpilot, G2, Yelp y las plataformas que importan en tu categoría, y las entregamos estructuradas, deduplicadas y listas para analizar. Conoce el servicio de gestión de reputación.

Angelica Yasmin Meca Molina

Written by

Angelica Yasmin Meca Molina

Apasionada por la intersección entre la tecnología, el diseño y la innovación digital, soy diseñadora gráfica y desarrolladora Front-End. Mi trabajo se enfoca en transformar ideas complejas en soluciones visuales y funcionales, combinando estética con lógica para crear experiencias digitales significativas. Comprometida con el aprendizaje constante, busco compartir conocimiento de forma clara y práctica, aportando valor tanto a profesionales como a quienes están dando sus primeros pasos en el mundo digital.

Stay in the loop

Web scraping tips, industry news and use cases — weekly, no spam.

Share this article

Did you find it useful?

Related Articles

More from the same category