Google Play Reviews Scraper avatar

Google Play Reviews Scraper

Pricing

from $7.00 / 1,000 review scrapeds

Go to Apify Store
Google Play Reviews Scraper

Google Play Reviews Scraper

Scrape Google Play reviews at scale with features competitors don't offer. Perfect for sentiment analysis, competitor research, and automation workflows.

Pricing

from $7.00 / 1,000 review scrapeds

Rating

5.0

(1)

Developer

WebDataLabs

WebDataLabs

Maintained by Community

Actor stats

1

Bookmarked

163

Total users

14

Monthly active users

6 days ago

Last modified

Share

Paste one or more Google Play app URLs, get their reviews as clean, flat rows.

What you get

One row per review, 14 fields, ready for a spreadsheet, a database, or an n8n/Zapier/Make step:

FieldTypeDescription
reviewIdstringUnique Google Play review ID. Stable across runs - use it as your primary key.
appIdstringPackage ID of the app the review belongs to
ratingintegerStar rating, 1-5
textstring | nullReview body. null when the user left stars but wrote nothing.
userNamestring | nullReviewer display name
userImagestring | nullReviewer avatar URL
reviewDatestring | nullWhen it was posted, ISO 8601 UTC
thumbsUpinteger | nullHow many people marked the review helpful (often 0)
versionstring | nullApp version the reviewer was running
replyTextstring | nullThe developer's public reply, null if there is none
replyDatestring | nullWhen the developer replied, ISO 8601 UTC
urlstring | nullDirect link to the review on Google Play
criteriaRatingsarray | nullStructured tags Google attaches to some reviews (mostly games)
scrapedAtstringWhen this run fetched the review, ISO 8601 UTC

Fields Google does not provide come back as null. They are never filled with "", "Anonymous", 0, or today's date. An empty cell means Google had nothing, not that the scraper guessed.

How often each optional field is actually filled

Measured on real runs, not estimated. Fill rates depend entirely on the app:

FieldMinecraft (3,816 reviews)Spotify (300)Duolingo (80)
text, userName, userImage, reviewDate, url, thumbsUp100%100%100%
version74.7%84.3%95.0%
criteriaRatings (non-empty)23.5%30.7%8.8%
thumbsUp greater than 033.8%4.7%1.3%
replyText / replyDate0%9.0%0%

replyText is 0% for developers who do not reply publicly. That is a real finding about the app, not a scraper failure.

Example row

{
"reviewId": "b12666f2-b2b9-4fa7-b02a-e40271faabeb",
"appId": "com.mojang.minecraftpe",
"rating": 5,
"text": "this pal is the best game ever bro",
"userName": "Steven Oliver",
"userImage": "https://play-lh.googleusercontent.com/a-/ALV-UjXg-IEmSRVgQhI6IghHASxYMh7VxeM",
"reviewDate": "2026-08-09T14:05:35.853Z",
"thumbsUp": 0,
"version": "1.26.40.5",
"replyText": null,
"replyDate": null,
"url": "https://play.google.com/store/apps/details?id=com.mojang.minecraftpe&reviewId=b12666f2-b2b9-4fa7-b02a-e40271faabeb",
"criteriaRatings": [
{ "criteria": "vaf_app_quality_battery_efficiency", "rating": 1 },
{ "criteria": "vaf_app_quality_performance", "rating": 3 }
],
"scrapedAt": "2026-08-10T14:13:51.162Z"
}

Input

Six settings, one of them required.

SettingTypeDefaultDescription
Google Play App URLs (startUrls)array-Required. Full https://play.google.com/store/apps/details?id=... URLs, one per app. Bare package IDs are rejected by Apify's URL validation, so paste the whole URL.
Max Reviews (maxReviews)integer100Reviews to keep per app, 1-100,000
Sort By (sortBy)selectMost RecentNEWEST, RATING (highest first) or HELPFULNESS
Rating Filter (rating)selectAll reviewsALL, NEGATIVE (1-2 stars only) or POSITIVE (4-5 stars only)
Language (language)stringenTwo-letter language code. Google returns reviews written in that language.
Proxy Configuration (proxyConfiguration)objectApify ProxyPresent for compatibility. It currently has no effect - requests go out directly from the Apify platform, which Google Play accepts without a proxy.
{
"startUrls": [
{ "url": "https://play.google.com/store/apps/details?id=com.duolingo" },
{ "url": "https://play.google.com/store/apps/details?id=com.spotify.music" }
],
"maxReviews": 500,
"sortBy": "NEWEST",
"rating": "NEGATIVE"
}

Two things the input does not do

  • Country is fixed to the US storefront. There is no country setting; reviews are always read from country=us. language still works and changes which reviews Google returns.
  • Rating Filter is applied after fetching. Google has no server-side star filter here, so asking for 500 negative reviews reads several thousand reviews to find them. It costs you nothing extra - you are only billed for the rows you receive - but it takes longer.

How many reviews can you actually get?

Short answer: as many as you ask for, up to your run's cost limit.

  • Google serves reviews 150 at a time. The actor pages through them until it has what you asked for or Google runs out.
  • Verified on 2026-08-10: a single run against com.mojang.minecraftpe requesting 30,000 reviews read 200 consecutive full pages - 30,000 reviews, zero short pages, in about 2 minutes. Google did not cut pagination off. Older versions of this actor stopped at 15,000; that limit is gone.
  • The real ceiling for most runs is Apify's Maximum cost per run budget, not Google. When the run reaches it the actor stops, says so in the log, and reports how many reviews it actually delivered. Raise the limit in the run options if you need more in one go.

If a run stops early you will see the reason in the log: max-reviews-reached, no-more-pages, page-budget-exhausted, or the charge-limit message. It is never silent.

When the run fails

This actor is designed to fail loudly rather than return an empty dataset and call it a success.

  • App ID does not resolve - reported per app by name, with the storefront and language it was looked up under. The other apps in the run continue.
  • All requested apps failed - the run fails with a message listing every app ID and why. It does not exit green with zero rows.
  • Some apps worked, some did not - the run succeeds, delivers the data it got, and prints a Partial success summary naming the failures.
  • App exists but no review matched your rating filter - this succeeds with zero rows for that app. That is a real answer, and it is reported differently from "app not found".

A per-app breakdown (status, reviews read, reviews delivered, pages fetched, stop reason) is saved to the key-value store record STATS on every run.

Pricing

Pay-per-event. Two events:

EventFreeBronzeSilverGold+
Review scraped (per review row delivered)$0.010$0.009$0.008$0.007
Actor start (per GB of run memory, once per run)$0.004$0.003$0.002$0.001

So 1,000 reviews on the Bronze tier is about $9.00 plus the start event. You are charged per review row that reaches your dataset - rows that could not be delivered are not billed. The Console shows your exact tier price before you run.

Limitations, stated plainly

  • US storefront only.
  • Sub-ratings (criteriaRatings) use Google's own undocumented tag IDs. The numbers in them are small integers (1, 2, 3 observed), not star scores, and Google does not publish what they mean.
  • No incremental / "only new reviews since last run" mode. Every run fetches from the top of the sort order. De-duplicate on reviewId if you run on a schedule.
  • No webhook delivery from inside the actor. Use Apify's own webhooks or an integration on the run.
  • Google does not expose a review title, so there is no title field.

FAQ

Where do I get the app URL? Open the app on play.google.com and copy the address bar. It looks like https://play.google.com/store/apps/details?id=com.duolingo.

Can I scrape several apps at once? Yes. Add one URL per app; maxReviews applies to each app separately.

How do I get only 1-2 star reviews? Set Rating Filter to "Negative only". If you also set Sort By to "Highest Rating" the actor switches you to "Most Recent" and says so, because sorting by rating puts the negative reviews last.

Why is text null on some rows? Google Play lets people rate an app without writing anything. Those reviews are real and are included, with text: null.

How do I export to CSV? Dataset tab -> Export -> CSV.

Run it from the API

curl -X POST "https://api.apify.com/v2/acts/webdatalabs~google-play-reviews-scraper/runs" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"startUrls": [{ "url": "https://play.google.com/store/apps/details?id=com.duolingo" }],
"maxReviews": 500,
"sortBy": "NEWEST"
}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('webdatalabs/google-play-reviews-scraper').call({
startUrls: [{ url: 'https://play.google.com/store/apps/details?id=com.duolingo' }],
maxReviews: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Explore more of our actors

ActorDescription
Shopify Scraper ProExtract complete Shopify product data with variants and sales estimates
Etsy Scraper ProFast Etsy product scraper with ratings, reviews, and shop data
Amazon Reviews ScraperExtract Amazon customer reviews for sentiment analysis

The full catalogue is at apify.com/webdatalabs.

Need this data as a managed feed?

If you would rather receive this data on a schedule than run the Actor yourself, we can build and operate the feed: the fields you specify, the cadence you set, delivered to a dataset, S3, a webhook, or your database. Every scheduled run is checked against an agreed shape rather than assumed to be fine, missing values are reported as null instead of filled with placeholders, and repairing the collector when the source changes is covered by the monthly rate. Priced as a one-time setup fee plus a monthly rate, scoped in writing before anything is built.

Contact: support@webdatalabs.net

Leave a review

Is this actor saving you time? A quick review on the Store helps other people find it — and tells us which fields to add next. Rate this actor →

This actor is a general-purpose tool for analyzing publicly accessible web data. The user bears sole responsibility for ensuring their specific use complies with:

  • Applicable laws (GDPR/DSGVO, copyright law)
  • The target website's Terms of Service
  • Apify's Terms of Service

The provider (webdatalabs) expressly disclaims liability for any unauthorized or unlawful use. By using this actor, the user agrees to indemnify the provider against any third-party claims arising from their use of the data.


This tool is not affiliated with Google. All trademarks belong to their respective owners.