Extraia Avaliações da App Store & Google Play: Endpoints, Limites, Geo
Avaliações de aplicativos são a pesquisa de produto mais barata que você pode comprar - se conseguir superar os limites de paginação, as barreiras de tokens e as lojas por país. Aqui está o mapa completo.
Avaliações de aplicativos são a pesquisa de cliente mais barata disponível: pedidos de recursos sem filtro, relatórios de bugs vinculados a uma versão específica e uma leitura contínua de sentimento sobre cada concorrente na sua categoria. O problema é o acesso. Ambas as lojas mostram um punhado de avaliações na página e escondem o resto atrás de feeds, tokens e lojas por país. Este guia mapeia como extrair avaliações da App Store e Google Play - os endpoints reais, os limites de paginação que ninguém avisa, e as realidades de geo e limite de taxa que decidem se seu pipeline sobrevive além de algumas centenas de linhas.
Apple, o jeito fácil: o feed RSS
A Apple expõe um feed JSON público de avaliações de clientes que não precisa de token. É a maneira mais rápida de começar e retorna registros limpos e estruturados - classificação, título, corpo, autor, versão do aplicativo. A limitação é um teto rígido: o feed serve no máximo 10 páginas de aproximadamente 50 avaliações, então cerca de 500 avaliações por aplicativo por loja, tendendo para as mais recentes. Para monitorar feedbacks novos, isso geralmente é suficiente; para um histórico completo, não é.
import requests
def apple_rss_reviews(app_id, country="us", pages=10):
out = []
for page in range(1, pages + 1): # feed caps out around page 10
url = (f"https://itunes.apple.com/{country}/rss/customerreviews/"
f"page={page}/id={app_id}/sortby=mostrecent/json")
# route through a residential exit in the target storefront's country
proxy = f"http://USER-country-{country}:PASS@gate.quantumproxies.io:8000"
r = requests.get(url, proxies={"https": proxy}, timeout=20)
entries = r.json().get("feed", {}).get("entry", [])
for e in entries[1:]: # first entry is app metadata, skip it
out.append({
"rating": e["im:rating"]["label"],
"version": e["im:version"]["label"],
"title": e["title"]["label"],
"text": e["content"]["label"],
"author": e["author"]["name"]["label"],
})
if len(entries) <= 1:
break
return out
Apple, o jeito profundo: a API da app-store e seu token
Para passar de 500, você usa o mesmo endpoint que a página web da App Store chama (a API AMP / MZStore). Ela retorna registros mais ricos - id da avaliação, sinalizador de edição, respostas do desenvolvedor - mas exige um token de autenticação que você primeiro extrai da página pública do aplicativo, depois reproduz. As avaliações vêm em lotes de aproximadamente vinte, e você pagina mais fundo com um offset; quanto maior o offset, mais antigas tendem a ser as avaliações, porque a Apple não permite que este endpoint ordene diretamente por data.
A verdadeira restrição aqui é o limite de taxa, e ele chega rápido de um único IP. A solução não é mágica - é um atraso deliberado mais backoff exponencial, e distribuir solicitações entre IPs. Praticantes que adicionaram ambos conseguiram extrair cerca de 15.000 avaliações para um aplicativo sem acionar o limitador. É exatamente aí que um pool rotativo residencial compensa: cada lote pode sair de um IP limpo diferente, então o contador por IP nunca sobe para o território de bloqueio.
import time, requests
# token is scraped once from the app's App Store web page, then reused
HEADERS = {"Authorization": "Bearer TOKEN_FROM_APP_PAGE",
"Origin": "https://apps.apple.com"}
def apple_deep_reviews(app_id, country="us", target=2000):
reviews, offset = [], None
while len(reviews) < target:
params = {"l": "en-US", "offset": offset} if offset else {"l": "en-US"}
url = (f"https://amp-api.apps.apple.com/v1/catalog/{country}/apps/"
f"{app_id}/reviews")
proxy = f"http://USER:PASS@rotating.quantumproxies.io:8000"
r = requests.get(url, headers=HEADERS, params=params,
proxies={"https": proxy}, timeout=25)
if r.status_code == 429: # rate limited
time.sleep(8); continue # back off, gateway rotates the IP
data = r.json()
reviews += data.get("data", [])
offset = data.get("next", "").split("offset=")[-1] or None
if not offset:
break
time.sleep(1.5) # be a polite client
return reviews

Google Play: JSON hidratado, não HTML
As avaliações do Play não estão no HTML da página. A loja as carrega através de um endpoint de lote interno que retorna JSON aninhado, paginado com um token de continuação em vez de números de página, e filtrado por ordem de classificação (mais recente, classificação, utilidade). Reconstruir essas solicitações manualmente é complicado, então a maioria das equipes depende das bem mantidas bibliotecas open-source google-play-scraper (Node e Python), que encapsulam o endpoint e expõem os parâmetros country e lang. Como na Apple, os resultados por país diferem, então defina ambos explicitamente.
# pip install google-play-scraper
from google_play_scraper import reviews, Sort
result, token = reviews(
"com.example.app",
lang="en", # review language
country="us", # storefront
sort=Sort.NEWEST,
count=200, # per call; loop with continuation_token for more
)
for r in result[:3]:
print(r["score"], r["reviewCreatedVersion"], r["content"][:80])
Em volume real, o endpoint do Play também limita por IP, e a estrutura JSON muda periodicamente. Se você preferir não lidar com essa manutenção, uma Scraper API que renderiza e retorna os dados hidratados como JSON limpo remove ambos os problemas - ela cuida do proxy e da análise para que você consuma uma forma estável. A mesma lógica de trade-off que descrevemos para extração de avaliações de produtos em escala se aplica diretamente aqui.
Um par de campos confunde as pessoas: idioma e país não são o mesmo botão. A loja (país) decide quais avaliações existem; o parâmetro de idioma decide quais delas você recebe de volta. Em um mercado bilíngue como o Canadá ou a Suíça, você frequentemente quer ambos os idiomas, então defina-os independentemente em vez de assumir que um país implica em um único idioma. Do lado da Apple, os registros mais ricos também expõem respostas de desenvolvedores - a resposta pública que um fornecedor publica sob uma avaliação - que é um sinal silenciosamente valioso de como os concorrentes triagem reclamações e quais problemas escolhem responder publicamente.
Lojas geográficas são o ponto principal
Ambas as lojas são organizadas por loja de país, identificadas por um código de duas letras. As avaliações dos EUA de um aplicativo não dizem nada sobre como ele é recebido na Alemanha, Japão ou Brasil - diferentes idiomas, diferentes reclamações, diferentes lacunas de recursos. Para ler cada loja honestamente, você solicita de um IP de saída naquele país; um IP de datacenter na região errada lhe dá uma resposta inconsistente ou bloqueada. Com saídas residenciais em mais de 200 países, você pode passar o mesmo aplicativo por cada mercado e construir um mapa de sentimento por país - a matéria-prima do trabalho sério de ASO.

De avaliações a sinal de ASO
A extração é a metade entediante. O retorno é o que você calcula em cima: agrupe o texto das avaliações em temas recorrentes, acompanhe o sentimento por versão do aplicativo para detectar a versão que derrubou sua classificação, observe concorrentes para pedidos de recursos que seu produto já atende e compare padrões de reclamações entre lojas. Vincule cada avaliação ao seu campo version e você obtém uma linha do tempo de regressão que nenhum painel de análise oferece. O trabalho de reputação relacionado - mineração de avaliações do Trustpilot - se encaixa perfeitamente ao lado dos dados da app-store para uma imagem completa da voz do cliente.
Obtenha IPs residenciais para cada loja de aplicativos
Perguntas frequentes
Como extraio avaliações da App Store em Python?
Comece com o feed JSON público de avaliações de clientes da Apple - sem token, saída estruturada, mas limitado a aproximadamente 500 avaliações recentes por aplicativo por loja. Para ir mais fundo, chame a API AMP da app-store com um token de autenticação extraído da página web do aplicativo, pagine com um offset e adicione atraso mais backoff. Direcione cada loja através de um IP residencial naquele país.
Existe uma API oficial de avaliações da App Store?
O feed RSS público da Apple é o mais próximo de uma fonte oficial de avaliações sem token, mas é limitado. O endpoint AMP mais rico é o que a própria página web da loja usa e requer um token de autenticação extraído. Nenhum é um produto de desenvolvedor documentado para coleta em massa de avaliações de terceiros, então trate limites de taxa e termos com cuidado.
Como extraio avaliações do Google Play?
O Play serve avaliações de um endpoint de lote interno retornando JSON aninhado, paginado por um token de continuação e filtrável por ordem de classificação. As bibliotecas open-source google-play-scraper mantidas encapsulam isso e expõem country e lang. Defina ambos, faça loop no token de continuação para volume e distribua solicitações entre IPs porque o endpoint limita por endereço.
Por que preciso de proxies para extrair avaliações de aplicativos?
Duas razões. Limite de taxa: ambas as lojas limitam rapidamente um único IP, então saídas residenciais rotativas mantêm o contador por IP baixo o suficiente para extrair milhares de avaliações. Geografia: as avaliações são específicas da loja, então ler as avaliações de um país com precisão significa solicitar de um IP naquele país. IPs de datacenter na região errada obtêm respostas inconsistentes ou bloqueadas.
Dados de app-store são uma mina de ouro cercada por três obstáculos simples - limites, tokens e lojas. Saiba qual endpoint acessar, pagine corretamente e saia do país certo em IPs limpos, e você transforma classificações dispersas em um feed de voz do cliente por versão, por mercado.