Google Play Scraper — Details, Reviews & Search
Pricing
Pay per usage
Google Play Scraper — Details, Reviews & Search
Fast, reliable Google Play scraper: app details + deep-paginated customer reviews as structured JSON. Monitored daily. No login.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Martin Čech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Google Play Scraper — App Details, Reviews & Search (Always Fresh)
Scrape Google Play app details, customer reviews, ratings, ratings histogram, and keyword search results as clean structured JSON — no API key, no proxy setup, no monthly fee. Fast HTTP, pay-per-use.

✅ Last verified working: 2026-06-01. Monitored by an automated daily canary. When Google changes its page structure, we patch fast and log it in the changelog — so your data pipeline doesn't silently break.
Why this Google Play scraper
Most Google Play scrapers go stale and break. You'll see the same complaints across the Store: "crashes on a dead app," "returns nothing," "only 30 results," "stopped working weeks ago." When the data feeding your dashboard or model silently dies, you find out from your boss, not your logs.
This one is built to stay working:
- 🛡️ Doesn't crash on bad input. Each app is fetched in its own try/catch. A dead, removed, or 404 package is skipped and logged, never a run-killer — that's the exact failure mode that breaks the popular incumbent actor.
- 🔄 Rate-limit resistant. The reviews engine detects Google's throttle/block responses (missing RPC marker) and retries with exponential backoff + jitter and datacenter IP rotation, instead of quietly returning zero rows.
- 📦 Comprehensive details — 25+ fields including the full 1–5★ ratings histogram, exact rating, description, screenshots, genre, price, currency, content rating, and "contains ads" — not just title + rating.
- 🔢 Deep, token-paginated reviews — up to 4,000 per app, de-duplicated, with developer replies and reply dates.
- 🧱 Stable output schema (
_schemaVersionon every record). If Google reshapes a positional array upstream, the affected field degrades tonull— your job keeps running. - 🔬 A daily canary runs
details+reviewsagainst a live app and writes a pass/fail status. The "last verified working" date above is real, not decorative.
What data you get
Three modes, one actor:
| Mode | What it returns |
|---|---|
details | Full app metadata for each package name you supply. |
reviews | Paginated customer reviews for each package name (with developer replies). |
search | Searches the Play Store by keyword, then returns full details for every matching app (tagged with the search term). |
details / search output fields:
| Field | Type | Description |
|---|---|---|
appId | string | Package name, e.g. com.spotify.music. |
title | string | App name. |
developer | string | Developer / publisher name. |
developerWebsite | string | Developer site, if listed. |
summary | string | Short tagline. |
description | string | Full store description. |
rating | number | Exact average rating (e.g. 4.33). |
ratingCount | number | Total number of ratings. |
ratingHistogram | object | {1,2,3,4,5} star counts. |
installs | string | Install bucket, e.g. 1,000,000,000+. |
price / free / currency | number / bool / string | Price, free flag, currency code. |
genre / genreId | string | Category name + ID. |
contentRating | string | e.g. Teen, Everyone. |
containsAds | boolean | Whether the app contains ads. |
updated | string | Last-updated timestamp (ISO). |
icon / headerImage / screenshots[] | string / array | Media URLs. |
url | string | Canonical Play Store URL. |
_searchTerm | string | (search mode only) the keyword that surfaced this app. |
reviews output fields: reviewId, userName, userImage, rating, body, thumbsUp, date, appVersion, developerResponse, developerResponseDate, reviewUrl, plus appId and country. Sort by newest, mostHelpful, or rating.
Every record also carries _type, _schemaVersion, _source, and _scrapedAt.
Use cases
- App Store Optimization (ASO) & competitor analysis — track ratings, install buckets, descriptions, and the ratings histogram across rival apps over time. The kind of "Google Play app data API" coverage ASO tools sell, at pay-per-use cost.
- Review monitoring & support triage — pull new Google Play reviews (and your developer replies) on a schedule, route negative ones to Slack, and watch sentiment per app version.
- Sentiment / ML training datasets — collect clean review text + ratings +
appVersionat scale for fine-tuning or classification. No HTML parsing on your side. - Market & category research — run
searchmode on keywords like "budget tracker" or "habit app" to map a niche: who ranks, their ratings, pricing, and whether they're ad-supported.
Input
| Field | Type | Notes |
|---|---|---|
mode | string | details, reviews, or search. Default details. |
appIds | string[] | Package names, e.g. com.spotify.music (the id= part of the URL). For details + reviews. |
searchTerms | string[] | Keywords to search the Play Store. For search mode. |
maxSearchResults | int | Apps returned per keyword, 1–100. Default 30. |
country | string | Two-letter storefront code (us, gb, de, …). Default us. |
lang | string | Two-letter language code (en, de, es, …). Default en. |
maxReviewsPerApp | int | Reviews cap per app, 1–4000. Default 200. |
reviewsSort | string | newest, mostHelpful, or rating. Default newest. |
Example — details
{ "mode": "details", "appIds": ["com.spotify.music", "com.whatsapp"], "country": "us" }
Example — reviews
{ "mode": "reviews", "appIds": ["com.spotify.music"], "maxReviewsPerApp": 1000, "reviewsSort": "newest" }
Example — search
{ "mode": "search", "searchTerms": ["habit tracker", "budget app"], "maxSearchResults": 20, "country": "us" }
Output sample
A single details record (abridged):
{"_type": "app_details","_schemaVersion": "1.0","_source": "play","appId": "com.spotify.music","country": "us","title": "Spotify: Music and Podcasts","developer": "Spotify AB","rating": 4.33,"ratingCount": 35677435,"ratingHistogram": { "1": 3695081, "2": 1079953, "3": 1332269, "4": 3058122, "5": 26511993 },"installs": "1,000,000,000+","free": true,"currency": "USD","genre": "Music & Audio","contentRating": "Teen","containsAds": true,"updated": "2026-05-26T14:23:49.000Z","icon": "https://play-lh.googleusercontent.com/...","screenshots": ["https://play-lh.googleusercontent.com/..."],"url": "https://play.google.com/store/apps/details?id=com.spotify.music","_scrapedAt": "2026-06-01T08:20:00.000Z"}
A single reviews record:
{"_type": "review","appId": "com.spotify.music","reviewId": "7e1815f2-36d1-4187-a936-12f969747892","userName": "Catherine Hempel","rating": 5,"body": "The paid version is excellent but very expensive...","thumbsUp": 14,"date": "2026-04-21T11:35:57.000Z","appVersion": "9.1.40.1486","developerResponse": null,"reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=7e1815f2-..."}
Pricing
Pay-per-event — no subscription, no platform rental. You're charged only for data actually returned:
| Event | Price (USD) |
|---|---|
| App details fetched (per app) | $0.002 |
| Review fetched (per review) | $0.0001 |
search mode charges the per-app details event for each matching app it returns.
How much do 100 results cost?
- 100 app details → 100 × $0.002 = $0.20.
- 100 reviews (one popular app) → 100 × $0.0001 = $0.01.
- A 1,000-review pull → 1,000 × $0.0001 = $0.10.
- A
searchrun returning 20 apps for a keyword → 20 × $0.002 = $0.04.
So a competitor-tracking job covering 50 apps' details plus 200 reviews each costs roughly 50 × $0.002 + 50 × 200 × $0.0001 = $0.10 + $1.00 = $1.10 per run.
FAQ
Is scraping Google Play legal? This actor collects public store data — app listings and publicly visible reviews — with no login and no personal account access. Public-data scraping is broadly permitted, but you are responsible for how you use the output. Use it responsibly and in line with applicable terms and laws; don't republish personal data.
Do I need an API key? No. Google Play has no official public data API for this. You provide package names or search terms and get JSON back — no key, no OAuth, no proxy account to manage.
Should I pass a URL or a package name? Use the package name — the id= part of the app URL. For https://play.google.com/store/apps/details?id=com.spotify.music, the appId is com.spotify.music.
Why are there fewer reviews than the rating count? Google's displayed number is total ratings; only a fraction of users write a review. This actor returns the written reviews, which is why a 35M-rating app yields far fewer review rows.
How many reviews can I get per app? Up to 4,000 via maxReviewsPerApp, paginated and de-duplicated. Set the sort with reviewsSort (newest, mostHelpful, rating).
Which countries and languages are supported? Any — set country (e.g. us, gb, de) and lang (e.g. en, de, es). Ratings, descriptions, and reviews are returned for that storefront.
Can I search Google Play by keyword? Yes — use search mode with searchTerms. It returns full details for each matching app, tagged with the _searchTerm that surfaced it, capped by maxSearchResults (1–100).
Does it return the ratings histogram? Yes — details includes ratingHistogram with per-star (1–5) counts, plus the exact average rating and total ratingCount.
What happens if an app is removed or doesn't exist? It's skipped and logged, and the run continues. One bad package never kills the whole job.
How often is it updated and maintained? A daily automated canary verifies details and reviews against a live app. When Google changes its page structure, we patch quickly and record it in the changelog below — that's the whole point of FreshActors.
Other FreshActors tools
| FreshActors actor | What it scrapes |
|---|---|
| App Store Scraper | Apple App Store — app details, search, reviews |
| Google Play Scraper | Google Play — app details + reviews |
| Shopify App Store Scraper | Shopify App Store — app details, reviews, discovery |
| Redfin Scraper | Redfin — US real-estate listings |
| Greenhouse & Lever Jobs Scraper | Greenhouse + Lever — normalized job postings |
Reliability
Staying fresh is the product. An automated daily canary runs real details and reviews requests against a live app and records a pass/fail status; the "Last verified working" date at the top reflects that check. Every output record carries a _schemaVersion, and parsers access Google's positional data defensively, so an upstream reshape degrades one field to null rather than crashing your run. Fixes are shipped fast and recorded in the changelog. Found a problem? Open an issue on the Issues tab — it's answered quickly.
Legal note. This actor scrapes public Google Play pages only: app listings and publicly visible reviews. No login, no personal account data, no circumvention of access controls. You are responsible for complying with applicable terms and laws and for how you use and store the data, including any personal data contained in reviews.