Cole qualquer app do Google Play e escolha um país. O Web Unlocker devolve a nota e as instalações exatas por trás de "4.7" e "500M+", a versão, o preço e 20 avaliações com as respostas do desenvolvedor. $0.98 por 1.000 apps.
1.000 requisições grátis · Pague só se der certo · Mais de 195 países · Pronto para o Claude
As páginas do Google Play levam de 3 a 10 segundos. Ainda está em andamento, não precisa clicar de novo.
Pronto para seus próprios apps? Obtenha uma chave de API ou agende uma demo.
Conte um pouco sobre sua equipe e receba:
O Google Play arredonda o que mostra: "4.7", "500M+". A página por trás guarda os números exatos, e uma requisição os devolve com 20 avaliações. Sem conta do Google.
Uma requisição traz a página inteira de um app: nota, instalações, versão, preço e 20 avaliações. O Web Unlocker a cobra como uma página. A Apify e a Bright Data cobram o app e cada uma das avaliações dele como uma linha, e a SerpApi cobra cada busca.
Um app com 20 avaliações são 21 linhas na Apify.
Aqui é uma página.
Uma página que não carrega não custa nada. O mesmo app a partir de outro país, a página de segurança dos dados dele ou uma busca por palavra-chave é mais uma página.
Quanto custam 1.000 apps com 20 avaliações cada
1.000 páginas de apps, detalhes e 20 avaliações, a preços publicados
Gologin: $0.98 por 1.000 páginas no plano Growth. Apify: 1.000 linhas de apps e 20.000 linhas de avaliações, a $0.0007 e $0.00011 por linha em um actor e $0.30 por 1.000 resultados no outro. SerpApi: 1.000 buscas de apps no plano de $25. Bright Data: 21.000 registros a $1.50 por 1.000, no pagamento por uso.
Pronto para rodar nos seus próprios apps? Obtenha sua chave de API e requisições grátis.
Nosso teste de scraping do Google Play, rodado duas vezes com uma hora de intervalo: 10 apps dos EUA três vezes cada, 3 da Alemanha, 2 buscas e 2 páginas de segurança dos dados, até 3 tentativas cada.
78 de 88 voltaram na primeira tentativa.
As outras 10 na segunda ou na terceira.
A biblioteca open source google-play-scraper, os actors do Google Play da Apify e a Google Play Scraper API da Bright Data: quanto cada um custa pelos mesmos 1.000 apps e o que deixa por sua conta.
| O que é preciso | google-play-scraper | |||
|---|---|---|---|---|
| Você paga por | Uma página | Seus próprios servidores | Cada linha | Cada registro |
| 1.000 apps com 20 avaliações | $0.98 | Grátis, dos seus IPs | $2.90 a $6.30 | $31.50 |
| Avaliações por app | 20; mais com o Cloud Browser | Paginadas, 200 por chamada | Até 100.000 | Quantas você definir |
| Busca por palavra-chave | Sim | Sim | Sim | Não |
| Grátis para começar | 1.000 requisições | Grátis | $5 por mês | 5.000 por mês |
| A página inteira em HTML | Sim | Não | Não | Não |
| Mesmo preço em qualquer outro site | Sim | Só o Google Play | Não | Não |
Faz scraping de mais do que o Google Play? O Web Unlocker devolve qualquer página do mesmo jeito, pelo mesmo preço.
O Web Unlocker devolve as 20 avaliações da página de um app; o resto fica no feed de avaliações do Google. O Cloud Browser, produto separado do Gologin com planos próprios, chama esse feed pela página do app: 2.000 avaliações recentes do Duolingo em 4,5 segundos.
Notas, instalações, preços, posições na busca e as 20 principais avaliações vêm só do Web Unlocker. O Cloud Browser é para o histórico completo de avaliações.
A partir da página aberta do app, o Cloud Browser pede ao feed do Google 100 avaliações por vez, das mais recentes primeiro: 20 chamadas, 2.000 avaliações, 4,5 segundos.
O Cloud Browser não faz parte das requisições do Web Unlocker. Seu código Playwright ou Puppeteer, ou o Claude, o controla. IPs residenciais incluídos.
Rode a partir do Playwright, Puppeteer ou do Claude. Conheça o Cloud Browser.
O Google Play guarda os dados de um app como JSON dentro da página, o mesmo JSON que o google-play-scraper open source lê. O Web Unlocker devolve essa página a partir do país que você escolher, e poucas linhas leem dela o app, as 20 avaliações ou os resultados de busca de uma palavra-chave.
Preencha o formulário acima. A chave chega por e-mail em até um dia útil.
Uma página de app para os detalhes e as avaliações, uma página de busca para os rankings, uma página de segurança dos dados para o que o app coleta.
Extraia os dados do app da página e peça de novo com uma URL nova quando a página vier sem eles.
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`);Pronto para rodar nos seus próprios apps? Obtenha sua chave de API e requisições grátis.
Uma conta, uma rede de proxies, um ecossistema. Escolha o produto de que a tarefa precisa.
Faz scraping de mais sites? Veja os scrapers do YouTube, do Reddit e do Instagram, ou todas as ferramentas de web scraping.
Um Google Play scraper, ou Play Store scraper, é uma ferramenta que lê páginas públicas do Google Play e as transforma em dados: a nota, as instalações, a versão, o preço e as avaliações de um app, ou os apps que uma busca por palavra-chave mostra. A API de Google Play scraper do Gologin é o Web Unlocker: envie o endereço de um app e ele devolve a página com esses dados, a $0.98 por 1.000 páginas.
Para fazer scraping da Google Play Store, envie o endereço do app, play.google.com/store/apps/details?id= seguido do nome do pacote, ao Web Unlocker com o país que você quiser. Ele devolve a página como o navegador de um visitante a carrega, com o próprio JSON do Google Play dentro: os detalhes do app e as 20 principais avaliações. O código acima lê tudo isso em poucas linhas.
Cada página de app traz 20 avaliações com estrelas, texto, data, votos de utilidade, a versão do app e a resposta do desenvolvedor, e o Web Unlocker as devolve com o app. Cada país e idioma mostra as suas próprias 20. Para mais de 20, adicione o Cloud Browser, um produto separado do Gologin com planos próprios: a partir da página do app, ele chama o feed de avaliações do Google 100 avaliações por vez, das mais recentes primeiro, e devolveu 2.000 das avaliações mais recentes do Duolingo em 4,5 segundos no nosso teste.
Não para apps de outros desenvolvedores: não existe uma Google Play Store API pública para eles. A API de avaliações do Google Play, parte da Google Play Developer API, funciona só para os seus próprios apps e devolve avaliações da última semana. A nota, as instalações, o preço e as avaliações de qualquer outro app estão na página pública dele no Google Play, que é o que um Google Play scraper lê.
Envie o endereço do app ao Web Unlocker com a biblioteca requests e leia o JSON do Google Play na página. A aba Python acima é um script completo, testado na API real: ele mostra a nota, o número de avaliações, as instalações exatas, a versão, o preço e as 20 avaliações do app.
As bibliotecas google-play-scraper para Node.js e Python são grátis e leem o mesmo JSON a partir do seu próprio servidor. O autor da versão para Node.js não a mantém mais e avisa que ela quebra quando o Google Play muda as páginas, e o uso intenso a partir de um só IP recebe páginas de erro 503 por cerca de uma hora. O Web Unlocker carrega cada página a partir de um IP residencial no país que você escolher, e uma página que falha não custa nada.
Uma página de app traz o título, o desenvolvedor, o gênero, a nota exata, o número de avaliações, a contagem de cada estrela, as instalações, o preço e a moeda, a faixa de preço das compras no app, os anúncios, a versão, as datas de atualização e de lançamento, a classificação indicativa, a posição nos rankings, as capturas de tela e 20 avaliações. Uma página de busca traz os apps na ordem do Google Play, e uma página de segurança dos dados, o que o app coleta e compartilha.
Equipes de otimização para lojas de apps (ASO) acompanham a posição dos apps para uma palavra-chave em cada país. Publishers acompanham dia a dia as notas, as instalações, as versões e os preços dos concorrentes. Equipes de produto e de pesquisa leem as avaliações em busca de reclamações e pedidos de recursos, e analistas dimensionam mercados a partir das instalações e dos rankings. O código acima salva tudo em JSON ou CSV.
Sim. O Google Play mostra um número arredondado, como 500M+, e guarda a contagem exata nos dados da página: 995.744.335 para o Duolingo em 11 de novembro de 2026. O Web Unlocker devolve os dois.
Sim. Uma página de busca por palavra-chave devolve os apps na ordem em que o Google Play os mostra, de 21 a 30 para "meditation" no nosso teste, cada um com ID, título, nota, gênero e preço. Rode a mesma busca em vários países para ver a posição de um app em cada um: na aba Ranking por país acima, o Calm é #7 nos EUA, #6 na Alemanha e #4 na Austrália.
Sim. A demo oferece 10 países e a API aceita qualquer um de mais de 195. Cada país vê a sua própria nota, preços na sua própria moeda e avaliações no seu próprio idioma: o Spotify tem nota 4,17 na Alemanha e 4,35 nos EUA.
$0.98 por 1.000 páginas, o mesmo preço para toda página: um app com as 20 avaliações é uma página, uma busca é uma página. Uma requisição com falha não custa nada. Os planos começam em $49 por mês para 50.000 requisições.
O Web Unlocker vem com 1.000 requisições grátis, o suficiente para 1.000 apps com as avaliações. As bibliotecas open source google-play-scraper também são grátis: rodam nos seus próprios servidores e IPs, e mantê-las funcionando conforme o Google Play muda fica por sua conta.
Não com o Web Unlocker: ele traz IPs residenciais de mais de 195 países e escolhe um para cada requisição. Se você roda seu próprio scraper, os Gologin Proxies são a mesma rede.
Sim. O Claude e outros agentes chamam o Web Unlocker como qualquer API, e o MCP & AI Skills transforma um pedido simples, como "compare as notas destes cinco apps na Alemanha", em uma ferramenta que funciona.
Páginas de apps, avaliações e resultados de busca do Google Play carregam sem conta do Google: são páginas públicas. O que você coleta e como usa é decisão sua, então confira com as regras que valem para o seu projeto, principalmente no caso dos nomes de quem escreve as avaliações.
Conte um pouco sobre sua equipe e receba: