Google Playのアプリを貼り付けて、国を選んでください。Web Unlockerが「4.7」「500M+」の裏にある正確な評価とインストール数、バージョン、価格、デベロッパーの返信付きレビュー20件を返します。アプリ1,000件で$0.98です。
無料リクエスト1,000件 · 課金は成功時のみ · 195以上の国 · Claude対応
チームについて簡単にご記入いただくと、次の内容をお届けします。
Google Playは表示する数字を「4.7」「500M+」のように丸めています。ページの内部には正確な数字があり、1回のリクエストでレビュー20件とともに返ります。Googleアカウントは不要です。
1回のリクエストで、アプリのページ全体(評価、インストール数、バージョン、価格、レビュー20件)が届き、Web Unlockerは1ページとして課金します。ApifyとBright Dataはアプリとそのレビューを1件ずつ1行として課金し、SerpApiは検索ごとに課金します。
レビュー20件付きのアプリ1件は、Apifyでは21行。
ここでは1ページです。
読み込みに失敗したページは無料です。同じアプリの別の国のページ、データセーフティのページ、キーワード検索も、それぞれページが1つ増えるだけです。
レビュー20件付きのアプリ1,000件の料金
詳細とレビュー20件付きのアプリページ1,000件、公開価格で
Gologin:Growthプランで1,000ページあたり$0.98。Apify:アプリ1,000行とレビュー20,000行で、一方のアクターは1行あたり$0.0007と$0.00011、もう一方は1,000件あたり$0.30。SerpApi:$25プランでアプリ検索1,000件。Bright Data:21,000レコードを1,000件あたり$1.50、従量課金。
ご自身のアプリで実行しますか?APIキーと無料リクエストを入手しましょう。
Google Playスクレイピングのテスト:1時間おいて2回実施。アメリカのアプリ10件を各3回、ドイツのアプリ3件、キーワード検索2件、データセーフティのページ2件を、上のデモと同じく各最大3回までリクエストしました。
88件中78件が1回目で返りました。
残りの10件は2回目か3回目で返りました。
オープンソースのgoogle-play-scraperライブラリ、ApifyのGoogle Playアクター、Bright DataのGoogle Play Scraper API。同じアプリ1,000件にそれぞれいくらかかり、何がご自身の作業として残るかは次のとおりです。
| 必要なもの | google-play-scraper | |||
|---|---|---|---|---|
| 課金の対象 | 1ページ | ご自身のサーバー | 行ごと | レコードごと |
| レビュー20件付きアプリ1,000件 | $0.98 | 無料、ご自身のIPから | $2.90〜$6.30 | $31.50 |
| アプリごとのレビュー数 | 20件、Cloud Browserでさらに | ページ送り、1回200件 | 最大100,000件 | 設定した件数 |
| キーワード検索 | あり | あり | あり | なし |
| 無料で開始 | 1,000リクエスト | 無料 | 月$5 | 月5,000件 |
| ページ全体をHTMLで | あり | なし | なし | なし |
| 他のどのサイトでも同じ料金 | あり | Google Playのみ | なし | なし |
Google Play以外もスクレイピングしますか?Web Unlockerなら、どのページも同じ方法、同じ料金で返します。
Web Unlockerが返すのは、アプリページにあるレビュー20件で、残りはGoogleのレビューフィードにあります。Gologinの別製品で独自のプランを持つCloud Browserは、アプリページからそのフィードを呼び出し、Duolingoの最新レビュー2,000件を4.5秒で取得しました。
評価、インストール数、価格、検索順位、上位20件のレビューは、すべてWeb Unlockerだけで取得できます。Cloud Browserはレビューの全履歴のためのものです。
開いたアプリページから、Cloud BrowserがGoogleのフィードに新しい順で1回100件ずつレビューを要求します。20回の呼び出しで2,000件、4.5秒です。
Cloud BrowserはWeb Unlockerのリクエストには含まれません。PlaywrightやPuppeteerのコード、またはClaudeで操作します。レジデンシャルIP込みです。
Playwright、PuppeteerまたはClaudeから実行できます。Cloud Browserを見る。
Google Playはアプリのデータを、ページ内のJSONとして持っています。オープンソースのgoogle-play-scraperが読み取るのと同じJSONです。Web Unlockerが選んだ国からそのページを返し、数行のコードでアプリ、レビュー20件、キーワードの検索結果を読み取れます。
上のフォームにご記入ください。キーは1営業日以内にメールで届きます。
詳細とレビューならアプリページ、順位なら検索ページ、アプリが収集するデータならデータセーフティのページを選びます。
ページからアプリのデータを切り出し、データのないページが返ったときは別のURLでもう一度リクエストします。
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`);ご自身のアプリで実行しますか?APIキーと無料リクエストを入手しましょう。
1つのアカウント、1つのプロキシネットワーク、1つのエコシステム。用途に合った製品をお選びください。
ほかのサイトもスクレイピングしますか?YouTube、Reddit、Instagramのスクレイパー、またはすべてのWebスクレイピングツールをご覧ください。
Google Playスクレイパー(Playストアスクレイパー)は、公開されているGoogle Playのページを読み取り、データに変えるツールです。アプリの評価、インストール数、バージョン、価格、レビュー、またはキーワード検索に表示されるアプリが対象です。GologinのGoogle PlayスクレイパーAPIはWeb Unlockerで、アプリのアドレスを送ると、そのデータが載ったページを1,000ページあたり$0.98で返します。
Google Playストアをスクレイピングするには、アプリのアドレス(play.google.com/store/apps/details?id=にパッケージ名を続けたもの)を、取得したい国を指定してWeb Unlockerに送ります。訪問者のブラウザが読み込むとおりのページが、Google Play自身のJSON(アプリの詳細と上位レビュー20件)を含めて返ります。上のコードなら数行で読み取れます。
アプリページにはどれもレビューが20件載っており、星の数、本文、日付、「役に立った」の数、アプリのバージョン、デベロッパーの返信が付いています。Web Unlockerはそれをアプリとともに返します。国と言語ごとに、それぞれの20件が表示されます。20件より多く必要なら、Gologinの別製品で独自のプランを持つCloud Browserを追加してください。アプリページからGoogleのレビューフィードを新しい順に1回100件ずつ呼び出し、テストではDuolingoの最新レビュー2,000件を4.5秒で返しました。
他のデベロッパーのアプリについてはありません。そうしたアプリ向けの公開Google Play Store APIは存在しません。Google Play Developer APIに含まれるGoogle Playのレビュー用APIは、ご自身のアプリにしか使えず、返すのは過去1週間のレビューです。ほかのアプリの評価、インストール数、価格、レビューは公開されたGoogle Playのページにあり、Google Playスクレイパーが読み取るのはそのページです。
requestsライブラリでアプリのアドレスをWeb Unlockerに送り、ページからGoogle PlayのJSONを読み取ります。上のPythonタブは完全なスクリプトで、実際のAPIでテスト済みです。アプリの評価、評価数、正確なインストール数、バージョン、価格、レビュー20件を出力します。
Node.js版とPython版のgoogle-play-scraperライブラリは無料で、同じJSONをご自身のサーバーから読み取ります。Node.js版の作者はすでにメンテナンスしておらず、Google Playがページを変えると動かなくなると注意しています。また、1つのIPから大量に使うと、約1時間503エラーのページが返ります。Web Unlockerは選んだ国のレジデンシャルIPから各ページを読み込み、失敗したページは無料です。
アプリページからは、タイトル、デベロッパー、ジャンル、正確な評価、評価数、星ごとの件数、インストール数、価格と通貨、アプリ内課金の価格帯、広告の有無、バージョン、更新日とリリース日、コンテンツのレーティング、ランキング順位、スクリーンショット、レビュー20件が取得できます。検索ページからはGoogle Playの表示順どおりのアプリ、データセーフティのページからはアプリが収集・共有するデータが取得できます。
アプリストア最適化(ASO)のチームは、国ごとにキーワードでのアプリの順位を追跡します。パブリッシャーは競合の評価、インストール数、バージョン、価格を日々チェックします。プロダクトチームやリサーチチームはレビューから不満や機能の要望を読み取り、アナリストはインストール数やランキングから市場規模を見積もります。上のコードはデータをJSONまたはCSVで保存します。
はい。Google Playは500M+のような丸めた数字を表示しますが、正確な数はページのデータに入っています。2026年11月11日時点のDuolingoは995,744,335でした。Web Unlockerはその両方を返します。
はい。キーワード検索のページは、Google Playの表示順どおりにアプリを返します。テストでは「meditation」で21〜30件が返り、それぞれにID、タイトル、評価、ジャンル、価格が付いていました。同じ検索を複数の国で実行すれば、国ごとの順位がわかります。上の「国別の順位」タブでは、Calmはアメリカで7位、ドイツで6位、オーストラリアで4位です。
はい。デモでは10か国、APIでは195以上の国から選べます。国ごとに評価、現地通貨の価格、その国の言語のレビューが異なります。Spotifyはドイツで4.17、アメリカで4.35です。
1,000ページあたり$0.98で、どのページも同じ料金です。レビュー20件付きのアプリも1ページ、検索も1ページです。失敗したリクエストは無料です。プランは50,000リクエストで月$49からです。
Web Unlockerには1,000件の無料リクエストが付き、レビュー付きのアプリ1,000件に相当します。オープンソースのgoogle-play-scraperライブラリも無料ですが、ご自身のサーバーとIPで動かす必要があり、Google Playの変更に合わせて動作を保つのはご自身の役目です。
Web Unlockerなら不要です。195以上の国のレジデンシャルIPを備え、リクエストごとに1つを選びます。ご自身のスクレイパーを動かす場合は、Gologin Proxiesが同じネットワークです。
はい。Claudeなどのエージェントは、ほかのAPIと同じようにWeb Unlockerを呼び出します。MCP & AI Skillsなら、「この5つのアプリのドイツでの評価を比較して」といった普通の依頼が、動くツールになります。
Google Playのアプリページ、レビュー、検索結果はGoogleアカウントなしで読み込める公開ページです。何を収集し、どう使うかはお客様の判断ですので、プロジェクトに適用されるルールに照らして確認してください。特にレビュー投稿者の名前にはご注意ください。
チームについて簡単にご記入いただくと、次の内容をお届けします。