Google Play Reviews Scraper - $0.09/1k, No Key avatar

Google Play Reviews Scraper - $0.09/1k, No Key

Pricing

from $0.09 / 1,000 google play reviews

Go to Apify Store
Google Play Reviews Scraper - $0.09/1k, No Key

Google Play Reviews Scraper - $0.09/1k, No Key

Every Google Play storefront holds its own reviews, in the languages people wrote them. The German listing is not a translated American one. Any country and language, star and date filters, app metadata in the same run. Up to 5,000 per app. $0.09 per 1,000 reviews.

Pricing

from $0.09 / 1,000 google play reviews

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Play Reviews Scraper

Every Google Play storefront holds its own set of reviews, in whatever language people wrote them, so the German listing is not a translated version of the American one. Name a storefront and an Android package ID like com.spotify.music, or paste the Play Store URL, and it pages through that store's reviews and writes one row each: score, text, title, userName, date, thumbsUp, the app version reviewed, and replyText / replyDate when the developer answered.

No Google account, no API key, no Play Console access. Direct HTTP requests by default, so there's no proxy bill either.

$0.09 per 1,000 reviews ($0.00009 each), plus $0.001 when a run starts. Same rate on the free plan as on a paid one.

Input

{
"appIds": ["com.spotify.music", "com.whatsapp"],
"country": "us",
"language": "en",
"sort": "newest",
"maxReviewsPerApp": 500,
"starRating": "1",
"dateCutoff": "2026-01-01",
"includeAppMetadata": true
}
FieldDefaultWhat it does
appIdsPackage IDs. Play Store URLs are accepted here too.
appUrlsPlay Store details URLs. Merged with appIds and deduplicated.
countryusTwo-letter storefront code.
languageenTwo-letter review and store language.
sortnewestnewest, rating or helpfulness.
maxReviewsPerApp100Rows kept per app after filtering. Ceiling is 5,000.
starRatingallall, or one value from 1 to 5.
dateCutoffKeep reviews on or after this YYYY-MM-DD UTC date.
includeAppMetadatatrueOne extra lookup per app; attaches title, developer, rating, installs, genre, version, icon and price to every review row.
requestsPerSecond3Shared request rate, 1 to 10.
proxyConfigurationoffOptional fallback if Google Play starts refusing you.

Nothing is required, so an empty run finishes successfully with one labelled _sample: true row and charges nothing for it.

A row

{
"ok": true,
"_sample": false,
"appId": "com.spotify.music",
"appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music",
"appTitle": "Spotify: Music and Podcasts",
"appDeveloper": "Spotify AB",
"appScore": 4.3,
"appRatings": 33000000,
"appInstalls": "1,000,000,000+",
"appGenre": "Music & Audio",
"appVersion": "Varies with device",
"appIcon": "https://play-lh.googleusercontent.com/...",
"reviewId": "gp:AOqpTOH...",
"reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=...",
"userName": "Reviewer",
"userImage": "https://play-lh.googleusercontent.com/...",
"date": "2026-07-24T16:10:00.000Z",
"score": 5,
"scoreText": "5",
"title": null,
"text": "The review text.",
"thumbsUp": 12,
"version": "9.0.0",
"replyDate": null,
"replyText": null,
"criterias": [],
"country": "us",
"language": "en",
"sort": "newest"
}

Google Play doesn't always have every field. Missing values come back as null, an empty array or an empty string rather than being dropped.

Limits

5,000 reviews per app per run, and a hard stop at 100 pagination pages. If an app has more than that and you want the lot, split it across runs by dateCutoff or by sort order.

maxReviewsPerApp counts rows kept, not rows read. Filtering to 1-star reviews on a well-reviewed app means the scraper reads a lot of pages to fill your quota, and it may hit the 100-page stop first.

With sort: "newest" and a dateCutoff, it stops as soon as a page crosses the cutoff, because everything after it is older. With rating or helpfulness sorting it can't do that, so it keeps paging.

Country and language are Google's, not a translation layer. country: "de" gets you the German storefront's reviews, in whatever language people wrote them.

No official API exists for Play Store review data. This reads public pages and the endpoints the store's own front-end uses, so formats can change. When something breaks you get a diagnostic row, not a failed run.

Diagnostics

Errors and empty results end the run successfully with an uncharged row where ok is false. Read errorCode, error and details.

CodeMeaning
BAD_INPUTAn app ID, URL, locale, filter, limit or proxy setting is invalid.
NOT_FOUNDThe app isn't available in the country you asked for.
RATE_LIMITEDGoogle Play rate-limited the run after retries.
BLOCKEDA captcha, consent wall or access block came back.
PARSE_ERRORThe response format changed.
NETWORKThe request couldn't complete.
NO_RESULTSNothing matched the app, locale and filters.

One app failing doesn't stop the others. If pagination breaks halfway, the rows already collected are kept and the diagnostic carries partial: true.

Billing

$0.09 per 1,000 reviews, plus $0.001 per run start. So 1,000 reviews is $0.091 all-in.

Rows are written in page-sized batches and only charged after the batch is safely saved. These are never charged: the empty-input sample row, every diagnostic, duplicate reviews, and reviews your star or date filter threw out. A run that finds nothing costs the start fee.

Direct requests are the default, so there's no proxy line on your bill unless you turn one on. Residential bandwidth is billed to you by Apify on top of the review fee and can easily exceed it on a small run, so keep it as a fallback for genuinely blocked high-volume work rather than a default.

Proxy guidance

Google Play usually answers fine without one. If a big run starts returning RATE_LIMITED or BLOCKED: lower requestsPerSecond first, then wait for the block to clear, and only then enable a proxy. Note that country is what selects the storefront; a proxy only matters when you need strict geolocation on top of that.

Data source

Parsing and pagination sit on the @mradex77/google-play-scraper package, pinned to an exact version rather than a range, so an upstream release can't change your output without a rebuild here.

Not affiliated with Google. Public data, used at your own responsibility under Google's terms and your local rules.