Pega cualquier app de Google Play y elige un país. Web Unlocker devuelve la valoración y las descargas exactas que hay detrás de "4.7" y "500M+", la versión, el precio y 20 reseñas con las respuestas del desarrollador. $0.98 por 1000 apps.
1000 solicitudes gratis · Solo pagas si funciona · 195+ países · Listo para Claude
Las páginas de Google Play tardan de 3 a 10 segundos. Sigue en proceso, no hace falta volver a hacer clic.
¿Listo para tus propias apps? Obtén una clave de API o reserva una demo.
Cuéntanos un poco sobre tu equipo y recibe:
Google Play redondea lo que muestra: "4.7", "500M+". La página que hay debajo guarda las cifras exactas, y una solicitud las devuelve con 20 reseñas. Sin cuenta de Google.
Una solicitud trae la página completa de una app: valoración, descargas, versión, precio y 20 reseñas. Web Unlocker la cobra como una página. Apify y Bright Data cobran la app y cada una de sus reseñas como una fila, y SerpApi cobra cada búsqueda.
Una app con 20 reseñas son 21 filas en Apify.
Aquí es una página.
Una página que no carga no cuesta nada. La misma app desde otro país, su página de seguridad de los datos o una búsqueda por palabra clave son una página más.
Lo que cuestan 1000 apps con 20 reseñas cada una
1000 páginas de apps, datos más 20 reseñas, a precios publicados
Gologin: $0.98 por 1000 páginas en el plan Growth. Apify: 1000 filas de apps y 20 000 filas de reseñas, a $0.0007 y $0.00011 por fila en un actor y $0.30 por 1000 resultados en el otro. SerpApi: 1000 búsquedas de apps en su plan de $25. Bright Data: 21 000 registros a $1.50 por 1000, con pago por uso.
¿Listo para ejecutarlo con tus propias apps? Obtén tu clave de API y solicitudes gratis.
Nuestra prueba de scraping de Google Play, dos veces con una hora de diferencia: 10 apps de EE. UU. tres veces, 3 de Alemania, 2 búsquedas y 2 páginas de seguridad de los datos, hasta 3 intentos cada una.
78 de 88 volvieron al primer intento.
Las otras 10, al segundo o al tercero.
La biblioteca de código abierto google-play-scraper, los actores de Google Play de Apify y la Google Play Scraper API de Bright Data: lo que cuesta cada uno por las mismas 1000 apps, y lo que te deja a ti.
| Lo que exige | google-play-scraper | |||
|---|---|---|---|---|
| Pagas por | Una página | Tus propios servidores | Cada fila | Cada registro |
| 1000 apps con 20 reseñas | $0.98 | Gratis, desde tus IP | De $2.90 a $6.30 | $31.50 |
| Reseñas por app | 20; más con Cloud Browser | Por páginas, 200 por llamada | Hasta 100 000 | Las que indiques |
| Búsqueda por palabra clave | Sí | Sí | Sí | No |
| Inicio gratis | 1000 solicitudes | Gratis | $5 al mes | 5000 al mes |
| La página completa en HTML | Sí | No | No | No |
| El mismo precio en cualquier otro sitio | Sí | Solo Google Play | No | No |
¿Haces scraping de algo más que Google Play? Web Unlocker devuelve cualquier página de la misma forma y al mismo precio.
Web Unlocker devuelve las 20 reseñas de la página de una app; el resto está en el feed de reseñas de Google. Cloud Browser, un producto aparte de Gologin con sus propios planes, llama a ese feed desde la página de la app: 2000 de las reseñas más recientes de Duolingo en 4.5 segundos.
Valoraciones, descargas, precios, posiciones en búsquedas y las 20 primeras reseñas salen solo de Web Unlocker. Cloud Browser es para el historial completo de reseñas.
Desde la página abierta de la app, Cloud Browser pide al feed de Google 100 reseñas cada vez, las más recientes primero: 20 llamadas, 2000 reseñas, 4.5 segundos.
Cloud Browser no forma parte de las solicitudes de Web Unlocker. Lo maneja tu código de Playwright o Puppeteer, o Claude. IP residenciales incluidas.
Ejecútalo desde Playwright, Puppeteer o Claude. Ver Cloud Browser.
Google Play guarda los datos de una app como JSON dentro de su página, el mismo JSON que lee el google-play-scraper de código abierto. Web Unlocker devuelve esa página desde el país que elijas, y unas pocas líneas leen de ella la app, sus 20 reseñas o los resultados de búsqueda de una palabra clave.
Rellena el formulario de arriba. La clave llega por correo en un día laborable.
La página de una app para sus datos y reseñas, una página de búsqueda para las posiciones, una página de seguridad de los datos para lo que recopila la app.
Extrae de la página los datos de la app, y pídela de nuevo con una URL nueva cuando llegue sin ellos.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python google_play_app.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import re
import time
from datetime import datetime, timezone
import requests
app_id = "com.duolingo"
country = "us"
def scrape(url):
for attempt in range(3):
address = url if attempt == 0 else f"{url}&fresh={int(time.time())}"
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": address, "geo": country, "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if "key: 'ds:5'" in page:
return page
time.sleep(3)
raise RuntimeError("The page came back without the app data, try again later")
def blocks(page):
for key, data in re.findall(r"AF_initDataCallback\(\{key: '(ds:\d+)'.*?data:(.*?), sideChannel: \{\}\}\);</script>", page, re.S):
yield key, json.loads(data)
def at(node, *path):
for step in path:
if not isinstance(node, list) or step >= len(node):
return None
node = node[step]
return node
def day(stamp):
return datetime.fromtimestamp(stamp[0], timezone.utc).date().isoformat() if stamp else None
page = scrape(f"https://play.google.com/store/apps/details?id={app_id}&hl=en&gl={country.upper()}")
data = dict(blocks(page))
d = at(data["ds:5"], 1, 2)
reviews = next(
(value[0] for value in data.values() if isinstance(at(value, 0, 0, 0), str) and re.match(r"^[0-9a-f]{8}-", at(value, 0, 0, 0))),
[],
)
app = {
"id": app_id,
"title": at(d, 0, 0),
"developer": at(d, 68, 0),
"genre": at(d, 79, 0, 0, 0),
"rating": at(d, 51, 0, 1),
"ratings": at(d, 51, 2, 1),
"installs": at(d, 13, 0),
"installs_exact": at(d, 13, 2),
"price": (at(d, 57, 0, 0, 0, 0, 1, 0, 0) or 0) / 1e6,
"currency": at(d, 57, 0, 0, 0, 0, 1, 0, 1),
"version": at(d, 140, 0, 0, 0) or "Varies with device",
"updated": at(d, 145, 0, 0),
"reviews": [
{
"author": at(review, 1, 0),
"stars": at(review, 2),
"text": at(review, 4),
"date": day(at(review, 5)),
"helpful": at(review, 6),
"app_version": at(review, 10),
"reply": at(review, 7, 1),
}
for review in reviews
],
}
print(json.dumps(app, indent=2, ensure_ascii=False))
print(f"{app['title']}: {app['rating']:.2f} from {app['ratings']:,} ratings, {app['installs_exact']:,} installs, {len(app['reviews'])} reviews from one page")GOLOGIN_SCRAPING_API_KEY=your_key node google-play-apps.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const apps = ['com.duolingo', 'com.babbel.mobile.android.en', 'com.memrise.android.memrisecompanion', 'com.busuu.android.enc', 'com.hellotalk'];
const country = 'us';
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}&fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo: country, format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes("key: 'ds:5'")) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const at = (node, ...path) => path.reduce((value, step) => (Array.isArray(value) ? value[step] : undefined), node);
const appData = (page) => {
const block = page.match(/AF_initDataCallback\(\{key: 'ds:5'.*?data:(.*?), sideChannel: \{\}\}\);<\/script>/s)?.[1];
return block ? at(JSON.parse(block), 1, 2) : null;
};
const rows = [];
for (const id of apps) {
const d = appData(await scrape(`https://play.google.com/store/apps/details?id=${id}&hl=en&gl=${country.toUpperCase()}`));
rows.push({
id,
title: at(d, 0, 0),
rating: at(d, 51, 0, 1)?.toFixed(3),
ratings: at(d, 51, 2, 1),
installs: at(d, 13, 2),
version: at(d, 140, 0, 0, 0) ?? 'Varies with device',
updated: at(d, 145, 0, 0),
price: (at(d, 57, 0, 0, 0, 0, 1, 0, 0) ?? 0) / 1e6,
});
}
writeFileSync('apps.csv', ['id,title,rating,ratings,installs,version,updated,price', ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value ?? '')).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} apps in ${rows.length} pages: $${(rows.length * 0.00098).toFixed(4)} on the Growth plan`);GOLOGIN_SCRAPING_API_KEY=your_key node google-play-rank.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst keyword = 'meditation';
const app = 'com.calm.android';
const countries = ['us', 'gb', 'de', 'ca', 'au'];
async function scrape(url, geo) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}&fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo, format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes("key: 'ds:4'")) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const results = (page) => {
const block = page.match(/AF_initDataCallback\(\{key: 'ds:4'.*?data:(.*?), sideChannel: \{\}\}\);<\/script>/s)?.[1];
const sections = block ? JSON.parse(block)?.[0]?.[1] : null;
const items = sections?.find((section) => section?.[22]?.[0])?.[22]?.[0];
return (items ?? []).map(([item]) => ({ id: item[0][0], title: item[3], rating: item[4]?.[1] }));
};
for (const country of countries) {
const found = results(await scrape(`https://play.google.com/store/search?q=${encodeURIComponent(keyword)}&c=apps&hl=en&gl=${country.toUpperCase()}`, country));
const place = found.findIndex((item) => item.id === app) + 1;
console.log(`${country.toUpperCase()}: ${app} is #${place || '-'} of ${found.length} for "${keyword}", top app: ${found[0]?.title} (${found[0]?.rating?.toFixed(1)})`);
}
console.log(`${countries.length} countries in ${countries.length} pages: $${(countries.length * 0.00098).toFixed(4)} on the Growth plan`);¿Listo para ejecutarlo con tus propias apps? Obtén tu clave de API y solicitudes gratis.
Una cuenta, una red de proxies, un ecosistema. Elige el producto que necesita cada tarea.
¿Haces scraping de más sitios? Consulta los scrapers de YouTube, Reddit e Instagram, o todas las herramientas de web scraping.
Un Google Play scraper, o Play Store scraper, es una herramienta que lee páginas públicas de Google Play y las convierte en datos: la valoración, las descargas, la versión, el precio y las reseñas de una app, o las apps que muestra una búsqueda por palabra clave. La Google Play scraper API de Gologin es Web Unlocker: envíale la dirección de una app y devuelve la página con esos datos, a $0.98 por 1000 páginas.
Para hacer scraping de Google Play Store, envía la dirección de la app, play.google.com/store/apps/details?id= seguido del nombre del paquete, a Web Unlocker con el país que quieras. Devuelve la página como la carga el navegador de un visitante, con el JSON propio de Google Play dentro: los datos de la app y sus 20 reseñas principales. El código de arriba la lee en unas pocas líneas.
Cada página de app trae 20 reseñas con estrellas, texto, fecha, votos de utilidad, la versión de la app y la respuesta del desarrollador, y Web Unlocker las devuelve con la app. Cada país e idioma muestra sus propias 20. Para más de 20, añade Cloud Browser, un producto aparte de Gologin con sus propios planes: desde la página de la app llama al feed de reseñas de Google 100 reseñas cada vez, las más recientes primero, y en nuestra prueba devolvió 2000 de las reseñas más recientes de Duolingo en 4.5 segundos.
No para las apps de otros desarrolladores: no hay una Google Play Store API pública para ellas. La API de reseñas de Google Play, parte de la Google Play Developer API, solo funciona con tus propias apps y devuelve las reseñas de la última semana. La valoración, las descargas, el precio y las reseñas de cualquier otra app están en su página pública de Google Play, que es lo que lee un Google Play scraper.
Envía la dirección de la app a Web Unlocker con la biblioteca requests y lee de la página el JSON de Google Play. La pestaña Python de arriba es un script completo, probado en la API real: muestra la valoración de la app, el número de valoraciones, las descargas exactas, la versión, el precio y 20 reseñas.
Las bibliotecas google-play-scraper para Node.js y Python son gratis y leen el mismo JSON desde tu propio servidor. El autor de la de Node.js ya no la mantiene y avisa de que se rompe cuando Google Play cambia sus páginas, y un uso intenso desde una sola IP recibe páginas de error 503 durante más o menos una hora. Web Unlocker carga cada página desde una IP residencial del país que elijas, y una página que falla no cuesta nada.
La página de una app da el título, el desarrollador, la categoría, la valoración exacta, el número de valoraciones, el recuento de cada estrella, las descargas, el precio y la moneda, el rango de precios en la app, los anuncios, la versión, las fechas de actualización y de lanzamiento, la clasificación de contenido, la posición en las listas, las capturas de pantalla y 20 reseñas. Una página de búsqueda da las apps en el orden de Google Play, y una página de seguridad de los datos, lo que la app recopila y comparte.
Los equipos de optimización para tiendas de apps siguen la posición de las apps para una palabra clave en cada país. Los editores vigilan día a día las valoraciones, descargas, versiones y precios de sus competidores. Los equipos de producto y de investigación leen las reseñas en busca de quejas y peticiones de funciones, y los analistas calculan el tamaño de los mercados a partir de las descargas y las listas. El código de arriba lo guarda como JSON o CSV.
Sí. Google Play muestra una cifra redondeada como 500M+, y guarda el recuento exacto en los datos de la página: 995 744 335 para Duolingo el 11 de noviembre de 2026. Web Unlocker devuelve ambos.
Sí. Una página de búsqueda por palabra clave devuelve las apps en el orden en que las muestra Google Play, de 21 a 30 para «meditation» en nuestra prueba, cada una con su ID, título, valoración, categoría y precio. Ejecuta la misma búsqueda en varios países para ver en qué posición está una app en cada uno: en la pestaña Posición por país de arriba, Calm es el n.º 7 en EE. UU., el n.º 6 en Alemania y el n.º 4 en Australia.
Sí. La demo ofrece 10 países y la API acepta cualquiera de más de 195. Cada país ve su propia valoración, precios en su propia moneda y reseñas en su propio idioma: Spotify tiene 4.17 en Alemania y 4.35 en EE. UU.
$0.98 por 1000 páginas, el mismo precio para cada página: una app con sus 20 reseñas es una página, y una búsqueda es una página. Una solicitud que falla no cuesta nada. Los planes empiezan en $49 al mes por 50 000 solicitudes.
Web Unlocker incluye 1000 solicitudes gratis, suficientes para 1000 apps con sus reseñas. Las bibliotecas de código abierto google-play-scraper también son gratis: funcionan en tus propios servidores e IP, y mantenerlas funcionando cuando Google Play cambia depende de ti.
No con Web Unlocker: trae IP residenciales de más de 195 países y elige una para cada solicitud. Si ejecutas tu propio scraper, Gologin Proxies es la misma red.
Sí. Claude y otros agentes llaman a Web Unlocker como a cualquier API, y MCP & AI Skills convierten una petición sencilla, como «compara la valoración de estas cinco apps en Alemania», en una herramienta que funciona.
Las páginas de apps, las reseñas y los resultados de búsqueda de Google Play cargan sin cuenta de Google: son páginas públicas. Qué recoges y cómo lo usas es decisión tuya, así que compruébalo con las normas que se apliquen a tu proyecto, sobre todo en el caso de los nombres de quienes escriben reseñas.
Cuéntanos un poco sobre tu equipo y recibe: