Escribe un lugar y Web Unlocker devuelve su página de reseñas de Google: la valoración, cuántas valoraciones recibió cada estrella, los temas que mencionan las personas y las mejores reseñas con su texto, cobrado como una página. Una página que no carga no cuesta nada.
1000 solicitudes gratis · Solo pagas si funciona · 195+ países · Listo para Claude
Una página de Google Maps tarda de 5 a 20 segundos, y si vuelve vacía se pide otra vez. Sigue en proceso, no hace falta volver a hacer clic.
¿Listo para tus propios lugares? Obtén una clave de API o reserva una demo.
Cuéntanos un poco sobre tu equipo y recibe:
La página de un lugar en Google Maps contiene su valoración, el recuento de cada estrella, los temas que mencionan las personas y las mejores reseñas, y Web Unlocker la cobra como una página. La Google Places API cobra cada llamada y devuelve 5 reseñas. Los scrapers de reseñas cobran cada reseña.
Una página difícil cuesta
lo mismo que una fácil.
Una página que no carga no cuesta nada. Pagas por una página renderizada, nada más.
Lo que cuestan las reseñas de Google de 1000 lugares
1000 páginas de lugar con sus mejores reseñas, a precios publicados
Web Unlocker en el plan Growth, $0.98 por 1000 páginas. Los demás cobran las 3000 reseñas de esas páginas, o 1000 llamadas con 5 reseñas cada una.
La API oficial se detiene en 5 reseñas por lugar y cobra cada llamada. Los scrapers de reseñas cobran cada reseña. Esto es lo que exige cada vía para los mismos 1000 lugares.
| Lo que exige | Google Places API | Apify | Outscraper | |
|---|---|---|---|---|
| Empezar sin una clave de API de Google | Sí | No | Sí | Sí |
| Pagas por | Una página | Cada llamada | Cada reseña | Cada reseña |
| 1000 lugares con sus mejores reseñas | $0.98 | $25 | $1.80 | $9 |
| Valoraciones desglosadas por estrellas, de 5 a 1 | Sí | No, solo el promedio | No | Sí |
| Temas de reseñas con recuento | Sí | No | No | No |
| La página completa en HTML o Markdown | Sí | No | No | No |
¿Haces scraping de algo más que reseñas de Google? Web Unlocker devuelve cualquier página de la misma forma y al mismo precio.
Web Unlocker no tiene alertas propias. Tu script abre la página de cada ubicación una vez al día: si la valoración o el número de reseñas cambió, hay reseñas nuevas que leer. 1000 ubicaciones salen por $0.98 al día.
Las herramientas de monitoreo de reseñas empiezan en $65 al mes por ubicación.
Tu propia comprobación cuesta $0.001.
Una solicitud por lugar: envía la dirección de Google Maps del lugar, recibe la página renderizada y lee la valoración, el recuento por estrellas, los temas y las reseñas. La demo de arriba ejecuta el mismo parser.
Rellena el formulario de arriba. La clave llega por correo en un día laborable.
google.com/maps/search/ más el lugar y su ciudad, y el país desde el que abrirlo.
La página incluye la valoración, el recuento de cada estrella, los temas con su recuento y las mejores reseñas, cada una con el autor, las estrellas, la fecha y el texto.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python google_reviews.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import re
import time
from urllib.parse import quote_plus
import requests
place = "Franklin Barbecue Austin"
address = f"https://www.google.com/maps/search/{quote_plus(place)}?hl=en&ucbcb=1"
html = ""
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
params={
"url": address if attempt == 0 else f"{address}&_r={int(time.time())}",
"render_js": "true",
"wait": "9000",
"geo": "us",
"format": "json",
},
timeout=120,
)
html = response.json().get("data", {}).get("html", "")
if 'data-review-id="' in html:
break
def first(pattern):
match = re.search(pattern, html)
return match.group(1) if match else None
blocks = {}
for match in re.finditer(r'data-review-id="([^"]+)"', html):
blocks.setdefault(match.group(1), match.start())
starts = sorted(blocks.values()) + [len(html)]
reviews = []
for start, end in zip(starts, starts[1:]):
block = html[start:end]
author = re.search(r'class="d4r55[^"]*"[^>]*>([^<]+)<', block)
text = re.search(r'class="wiI7pd"[^>]*>([^<]*)<', block)
if author and text:
stars = re.search(r'aria-label="(\d) stars?"', block)
date = re.search(r'class="rsqaWe"[^>]*>([^<]+)<', block)
reviews.append({
"author": author.group(1),
"stars": int(stars.group(1)) if stars else None,
"date": date.group(1) if date else None,
"text": text.group(1),
})
print(json.dumps({
"name": first(r"<h1[^>]*>([^<]+)"),
"rating": first(r'class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)<'),
"ratings": first(r'aria-label="([\d,]+) reviews?">\('),
"stars": {level: first(rf'aria-label="{level} stars?, ([\d,]+) reviews?"') for level in "54321"},
"topics": dict(re.findall(r'aria-label="([^",]+), mentioned in ([\d,]+) reviews?"', html)),
"reviews": reviews,
}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node reviews-batch.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst places = [
'Franklin Barbecue Austin',
'Katz Delicatessen New York',
'Relax and Smile Dental Care Miami',
];
const number = (text) => (text ? Number(text.replace(/,/g, '')) : null);
async function pageOf(place, attempt) {
const address = `https://www.google.com/maps/search/${encodeURIComponent(place).replace(/%20/g, '+')}?hl=en&ucbcb=1`;
const params = new URLSearchParams({
url: attempt === 1 ? address : `${address}&_r=${Date.now()}`,
render_js: 'true',
wait: '9000',
geo: 'us',
format: 'json',
});
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
return (await response.json()).data?.html ?? '';
}
async function reviewsOf(place) {
let html = '';
for (let attempt = 1; attempt <= 3 && !html.includes('data-review-id='); attempt += 1) {
html = await pageOf(place, attempt);
}
const star = (level) => number(html.match(new RegExp(`aria-label="${level} stars?, ([\\d,]+) reviews?"`))?.[1]);
return {
place: html.match(/<h1[^>]*>([^<]+)/)?.[1] ?? place,
rating: number(html.match(/class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)</)?.[1]),
ratings: number(html.match(/aria-label="([\d,]+) reviews?">\(/)?.[1]),
fiveStar: star(5),
oneStar: star(1),
topReview: html.match(/class="wiI7pd"[^>]*>([^<]{0,80})/)?.[1],
};
}
const rows = [];
for (const place of places) rows.push(await reviewsOf(place));
console.table(rows);GOLOGIN_SCRAPING_API_KEY=your_key node reviews-watch.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { readFile, writeFile } from 'node:fs/promises';
const places = ['Franklin Barbecue Austin', 'Katz Delicatessen New York', 'Relax and Smile Dental Care Miami'];
const FILE = 'reviews.json';
const number = (text) => (text ? Number(text.replace(/,/g, '')) : null);
async function pageOf(place, attempt) {
const address = `https://www.google.com/maps/search/${encodeURIComponent(place).replace(/%20/g, '+')}?hl=en&ucbcb=1`;
const params = new URLSearchParams({
url: attempt === 1 ? address : `${address}&_r=${Date.now()}`,
render_js: 'true',
wait: '9000',
geo: 'us',
format: 'json',
});
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
return (await response.json()).data?.html ?? '';
}
async function countOf(place) {
let html = '';
for (let attempt = 1; attempt <= 3 && !html.includes('data-review-id='); attempt += 1) {
html = await pageOf(place, attempt);
}
return {
rating: number(html.match(/class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)</)?.[1]),
ratings: number(html.match(/aria-label="([\d,]+) reviews?">\(/)?.[1]),
};
}
const before = JSON.parse(await readFile(FILE, 'utf8').catch(() => '{}'));
const today = { ...before };
for (const place of places) {
const now = await countOf(place);
const was = before[place]?.ratings ?? null;
if (now.ratings === null) console.log(`${place}: no page today, ask again`);
else if (was === null) console.log(`${place}: first check, ${now.ratings} ratings, ${now.rating} stars`);
else if (now.ratings > was) console.log(`${place}: ${now.ratings - was} new, now ${now.ratings} ratings, ${now.rating} stars`);
else console.log(`${place}: nothing new`);
if (now.ratings !== null) today[place] = now;
}
await writeFile(FILE, JSON.stringify(today, null, 2));¿Primero necesitas los lugares? El scraper de Google Maps lista todos los lugares de una categoría en una ciudad, y cada uno es una página más aquí.
Una cuenta, una red de proxies, un ecosistema. Elige el producto que necesita cada tarea.
¿Haces scraping también de los lugares? Consulta el scraper de Google Maps, los scrapers de Reddit y YouTube, o todas las herramientas de web scraping.
Envía la dirección de Google Maps del lugar a Web Unlocker: google.com/maps/search/ más el nombre y la ciudad. Abre la página en un navegador real desde el país que elijas y la devuelve con la valoración, el recuento de cada estrella, los temas que mencionan las personas y las mejores reseñas, cada una con el autor, las estrellas, la fecha y el texto. El código de arriba hace exactamente eso.
Envía la dirección del lugar a Web Unlocker con la biblioteca requests y lee los campos de la página. La pestaña Python de arriba es un script completo, probado en la API real.
Sí. La página de un lugar en Google Maps es pública y carga sin iniciar sesión. Web Unlocker la devuelve como la ve el navegador de un visitante, sin proyecto de Google Cloud, sin clave de API y sin aprobación.
Dos oficiales. La Google Places API devuelve la valoración de un lugar y hasta 5 reseñas, a $25 por 1000 llamadas. La Google Business Profile API devuelve todas las reseñas, gratis, pero solo de las ubicaciones que posees o gestionas. Para las reseñas de otros lugares más allá de esas 5, con el desglose por estrellas, Web Unlocker devuelve la propia página de Maps.
Es su límite documentado: Place Details devuelve como máximo 5 reseñas por lugar, ordenadas por relevancia, en el SKU que cuesta $25 por 1000 llamadas. Da la valoración promedio y no el desglose por estrellas. La página de Maps incluye el recuento de cada estrella y los temas de las reseñas, y Web Unlocker devuelve la página completa.
Las 3 mejores reseñas con su texto completo, además de la valoración, el recuento de cada nivel de estrellas y los temas con su recuento. Desde septiembre de 2026 Google Maps muestra la lista completa de reseñas de un lugar solo después de iniciar sesión, así que eso es lo que obtiene cualquier herramienta que lea la página pública. Para tus propias ubicaciones, la Google Business Profile API lista todas las reseñas gratis.
No desde la página pública: Google guarda la lista completa y las opciones de orden detrás de un inicio de sesión de Google. Lo que sigue siendo público es el resumen y las mejores reseñas, y eso llega como una página a un precio.
El orden también está detrás del inicio de sesión. La página incluye las mejores reseñas. Para encontrar las nuevas, compara el número de reseñas y la valoración con tu última ejecución: la pestaña Revisión diaria de arriba lo hace para una lista de lugares.
Sí: cuántas valoraciones recibió cada nivel de estrellas, de 5 a 1, para cada lugar. Franklin Barbecue en Austin el día de nuestra prueba: 6053 valoraciones de cinco estrellas, 695 de cuatro, 285 de tres, 104 de dos y 199 de una.
Sí, en dos pasos. El scraper de Google Maps lista los lugares de una categoría cuadrícula por cuadrícula, y luego cada lugar es una página más aquí. 146 dentistas de Miami salieron de 25 páginas de búsqueda; sus 146 páginas de reseñas suman 171 páginas, unos 17 centavos en total.
Si posees o gestionas la ficha, usa la Google Business Profile API: lista todas las reseñas de tus ubicaciones gratis, 50 por página, una vez que Google apruebe tu proyecto. Web Unlocker es para los lugares que no gestionas.
Web Unlocker devuelve la página, no una tabla, así que no se recorta nada antes de que la veas. Convertirla en un CSV son unas pocas líneas de código, o un solo prompt: pasa la página a Claude con la skill de scraping de Gologin y pide un CSV.
Menos de $1 por 1000 páginas, y el mismo precio para cada página: 1000 lugares con sus reseñas salen por $0.98. Una página que no carga no cuesta nada. Los planes empiezan en $49 al mes por 50 000 solicitudes.
Sí, para empezar: Web Unlocker incluye 1000 solicitudes gratis, suficientes para 1000 lugares con sus reseñas.
No. Web Unlocker elige la IP por ti, en más de 195 países, y abre la página desde el país que elijas.
Depende de lo que necesites. Apify y Outscraper venden filas ya hechas y cobran cada reseña. Web Unlocker devuelve la página completa de Maps a un precio por página, con el desglose por estrellas y los temas que las filas dejan fuera, y la analizas a tu manera.
La página de un lugar en Maps es pública y carga sin iniciar sesión. Web Unlocker la carga como lo hace el navegador de un visitante y devuelve la página. Qué recoges y cómo lo usas es decisión tuya, así que compruébalo con las normas que se apliquen a tu proyecto.
Cuéntanos un poco sobre tu equipo y recibe: