Collez n'importe quelle appli Google Play et choisissez un pays. Web Unlocker renvoie la note et les installations exactes derrière « 4.7 » et « 500M+ », la version, le prix et 20 avis avec les réponses du développeur. $0.98 pour 1 000 applis.
1 000 requêtes gratuites · Facturé en cas de succès · 195+ pays · Prêt pour Claude
Les pages Google Play mettent de 3 à 10 secondes à se charger. Le travail continue, inutile de cliquer à nouveau.
Prêt pour vos propres applis ? Obtenez une clé API ou réservez une démo.
Parlez-nous un peu de votre équipe et recevez :
Google Play arrondit ce qu'il affiche : « 4.7 », « 500M+ ». La page en dessous contient les chiffres exacts, et une seule requête les renvoie avec 20 avis. Sans compte Google.
Une requête apporte la page entière d'une appli : note, installations, version, prix et 20 avis. Web Unlocker la facture comme une page. Apify et Bright Data facturent l'appli et chacun de ses avis comme une ligne, et SerpApi facture chaque recherche.
Une appli avec 20 avis, c'est 21 lignes sur Apify.
Ici, c'est une page.
Une page qui ne se charge pas ne coûte rien. La même appli depuis un autre pays, sa page de sécurité des données ou une recherche par mot-clé, c'est une page de plus.
Ce que coûtent 1 000 applis avec 20 avis chacune
1 000 pages d'appli, détails et 20 avis, aux prix publiés
Gologin : $0.98 pour 1 000 pages avec le forfait Growth. Apify : 1 000 lignes d'appli et 20 000 lignes d'avis, à $0.0007 et $0.00011 la ligne sur un Actor, et $0.30 pour 1 000 résultats sur l'autre. SerpApi : 1 000 recherches d'applis avec son forfait à $25. Bright Data : 21 000 enregistrements à $1.50 pour 1 000, au paiement à l'usage.
Prêt à le lancer sur vos propres applis ? Obtenez votre clé API et des requêtes gratuites.
Notre test de scraping Google Play, lancé deux fois à une heure d'intervalle : 10 applis américaines trois fois chacune, 3 allemandes, 2 recherches et 2 pages de sécurité des données, jusqu'à 3 essais chacune.
78 sur 88 reviennent du premier coup.
Les 10 autres au deuxième ou au troisième essai.
La bibliothèque open source google-play-scraper, les Actors Google Play d'Apify et la Google Play Scraper API de Bright Data : ce que chacun coûte pour les mêmes 1 000 applis, et ce qu'il vous laisse à faire.
| Ce que cela demande | google-play-scraper | |||
|---|---|---|---|---|
| Vous payez | Une page | Vos propres serveurs | Chaque ligne | Chaque enregistrement |
| 1 000 applis avec 20 avis | $0.98 | Gratuit, depuis vos IP | $2.90 à $6.30 | $31.50 |
| Avis par appli | 20 ; plus avec Cloud Browser | Paginés, 200 par appel | Jusqu'à 100 000 | Le nombre que vous fixez |
| Recherche par mot-clé | Oui | Oui | Oui | Non |
| Gratuit pour démarrer | 1 000 requêtes | Gratuit | $5 par mois | 5 000 par mois |
| La page entière en HTML | Oui | Non | Non | Non |
| Même prix sur tout autre site | Oui | Google Play seulement | Non | Non |
Vous scrapez d'autres sites que Google Play ? Web Unlocker renvoie n'importe quelle page de la même façon, au même prix.
Web Unlocker renvoie les 20 avis d'une page d'appli, les autres sont dans le flux d'avis de Google. Cloud Browser, un produit Gologin distinct avec ses propres forfaits, appelle ce flux depuis la page de l'appli : 2 000 des avis les plus récents de Duolingo en 4.5 secondes.
Notes, installations, prix, classements de recherche et les 20 premiers avis viennent tous de Web Unlocker seul. Cloud Browser sert à l'historique complet des avis.
Depuis la page de l'appli ouverte, Cloud Browser demande au flux de Google 100 avis à la fois, les plus récents d'abord : 20 appels, 2 000 avis, 4.5 secondes.
Cloud Browser ne fait pas partie des requêtes Web Unlocker. Votre code Playwright ou Puppeteer, ou Claude, le pilote. IP résidentielles incluses.
Lancez-le depuis Playwright, Puppeteer ou Claude. Voir Cloud Browser.
Google Play garde les données d'une appli sous forme de JSON dans sa page, le même JSON que lit la bibliothèque open source google-play-scraper. Web Unlocker renvoie cette page depuis le pays de votre choix, et quelques lignes en extraient l'appli, ses 20 avis ou les résultats de recherche d'un mot-clé.
Remplissez le formulaire ci-dessus. La clé arrive par e-mail sous un jour ouvré.
Une page d'appli pour ses détails et ses avis, une page de recherche pour les classements, une page de sécurité des données pour ce que l'appli collecte.
Découpez les données de l'appli dans la page, et redemandez-la avec une nouvelle URL quand la page est arrivée sans elles.
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`);Prêt à le lancer sur vos propres applis ? Obtenez votre clé API et des requêtes gratuites.
Un compte, un réseau de proxys, un écosystème. Choisissez le produit dont la tâche a besoin.
Vous scrapez d'autres sites ? Voir les scrapers YouTube, Reddit et Instagram, ou tous les outils de web scraping.
Un Google Play scraper, ou Play Store scraper, est un outil qui lit les pages Google Play publiques et les transforme en données : la note, les installations, la version, le prix et les avis d'une appli, ou les applis qu'affiche une recherche par mot-clé. La Google Play scraper API de Gologin, c'est Web Unlocker : envoyez-lui l'adresse d'une appli et il renvoie la page avec ces données, à $0.98 pour 1 000 pages.
Pour scraper le Google Play Store, envoyez à Web Unlocker l'adresse de l'appli, play.google.com/store/apps/details?id= suivi du nom de package, avec le pays voulu. Il renvoie la page telle que la charge le navigateur d'un visiteur, avec le JSON propre à Google Play à l'intérieur : les détails de l'appli et ses 20 avis principaux. Le code ci-dessus le lit en quelques lignes.
Chaque page d'appli contient 20 avis avec les étoiles, le texte, la date, les votes utiles, la version de l'appli et la réponse du développeur, et Web Unlocker les renvoie avec l'appli. Chaque pays et chaque langue affichent leurs propres 20 avis. Au-delà de 20, ajoutez Cloud Browser, un produit Gologin distinct avec ses propres forfaits : depuis la page de l'appli, il appelle le flux d'avis de Google 100 avis à la fois, les plus récents d'abord, et a renvoyé 2 000 des avis les plus récents de Duolingo en 4.5 secondes lors de notre test.
Pas pour les applis d'autres développeurs : il n'existe pas de Google Play Store API publique pour elles. La Google Play reviews API, qui fait partie de la Google Play Developer API, ne fonctionne que pour vos propres applis et renvoie les avis de la dernière semaine. La note, les installations, le prix et les avis de toute autre appli figurent sur sa page Google Play publique, et c'est ce que lit un Google Play scraper.
Envoyez l'adresse de l'appli à Web Unlocker avec la bibliothèque requests et lisez le JSON de Google Play dans la page. L'onglet Python ci-dessus est un script complet, testé sur l'API en production : il affiche la note de l'appli, le nombre de notes, les installations exactes, la version, le prix et 20 avis.
Les bibliothèques google-play-scraper pour Node.js et Python sont gratuites et lisent le même JSON depuis votre propre serveur. L'auteur de la version Node.js ne la maintient plus et prévient qu'elle casse quand Google Play modifie ses pages, et un usage intensif depuis une seule IP renvoie des pages d'erreur 503 pendant environ une heure. Web Unlocker charge chaque page depuis une IP résidentielle dans le pays de votre choix, et une page en échec ne coûte rien.
Une page d'appli donne le titre, le développeur, le genre, la note exacte, le nombre de notes, le nombre par étoile, les installations, le prix et la devise, la fourchette de prix des achats in-app, les annonces, la version, les dates de mise à jour et de sortie, la classification du contenu, la place dans le classement, les captures d'écran et 20 avis. Une page de recherche donne les applis dans l'ordre de Google Play, et une page de sécurité des données ce que l'appli collecte et partage.
Les équipes d'App Store Optimization suivent le classement des applis sur un mot-clé dans chaque pays. Les éditeurs surveillent jour après jour les notes, installations, versions et prix de leurs concurrents. Les équipes produit et recherche lisent les avis pour repérer les plaintes et les demandes de fonctionnalités, et les analystes évaluent la taille des marchés à partir des installations et des classements. Le code ci-dessus les enregistre en JSON ou en CSV.
Oui. Google Play affiche un chiffre arrondi comme 500M+, et garde le nombre exact dans les données de la page : 995 744 335 pour Duolingo le 11 novembre 2026. Web Unlocker renvoie les deux.
Oui. Une page de recherche par mot-clé renvoie les applis dans l'ordre où Google Play les affiche, de 21 à 30 pour « meditation » lors de notre test, chacune avec son ID, son titre, sa note, son genre et son prix. Lancez la même recherche dans plusieurs pays pour voir le rang d'une appli dans chacun : dans l'onglet Classement par pays ci-dessus, Calm est 7e aux États-Unis, 6e en Allemagne et 4e en Australie.
Oui. La démo propose 10 pays et l'API en accepte plus de 195. Chaque pays voit sa propre note, des prix dans sa propre devise et des avis dans sa propre langue : Spotify a 4.17 en Allemagne et 4.35 aux États-Unis.
$0.98 pour 1 000 pages, le même prix pour chaque page : une appli avec ses 20 avis est une page, une recherche est une page. Une requête en échec ne coûte rien. Les forfaits démarrent à $49 par mois pour 50 000 requêtes.
Web Unlocker inclut 1 000 requêtes gratuites, de quoi couvrir 1 000 applis avec leurs avis. Les bibliothèques open source google-play-scraper sont gratuites aussi : elles tournent sur vos propres serveurs et IP, et c'est à vous de les maintenir en état de marche quand Google Play change.
Pas avec Web Unlocker : il apporte des IP résidentielles dans plus de 195 pays et en choisit une pour chaque requête. Si vous faites tourner votre propre scraper, Gologin Proxies utilise le même réseau.
Oui. Claude et d'autres agents appellent Web Unlocker comme n'importe quelle API, et MCP & AI Skills transforment une simple demande, comme « comparez les notes de ces cinq applis en Allemagne », en outil qui fonctionne.
Les pages d'applis, les avis et les résultats de recherche Google Play se chargent sans compte Google : ce sont des pages publiques. Ce que vous collectez et l'usage que vous en faites relèvent de vous : vérifiez-le au regard des règles applicables à votre projet, en particulier pour les noms des auteurs d'avis.
Parlez-nous un peu de votre équipe et recevez :