apihq/google-play-reviews-scraper · Google Play
Google Play Reviews Scraper
Export a Google Play app's reviews to JSON from a package name or store URL. One record per review with rating, text, author, developer reply, and date.
$0.00008/review · failed items $0.0000 — on your existing Apify account, a one-item first run costs under a cent.
What does Google Play Reviews Scraper do?
Scrape Google Play Store reviews to JSON by app package name or URL. No Google Play account. One record per review with rating, text, author, developer reply, thumbs-up, app version, and date. Apps with no reviews cost $0. $0.08 per 1,000 reviews.
Use it for sentiment analysis, competitor and market research, release-quality monitoring across app versions, and building review datasets for LLM pipelines. The billing matters most when the job runs unattended and one bad package must not take down the batch.
Reviews are localized. Google Play serves one country and language per run (defaults us / en). To cover another market, run the app again with a different country and language.
Example run
{ "appIds": ["com.spotify.music", "com.duolingo"], "sort": "newest", "maxReviews": 50 }outcome
- Up to 50 success: true review rows per app, newest first — billed
- An app with no reviews returns success: false, code: NO_REVIEWS — not billed
- Run status: SUCCEEDED
- Charged: up to 100 reviews = $0.008
Good input returns billed rows. Bad input returns free error rows in the same dataset, and the run still succeeds.
Why pipelines pick it
No Google Play account, no Play Console
Play Console only shows reviews for apps you own. This actor reads any public app's reviews from a plain package name or Play Store URL.
You pay only for reviews
The charge fires per review delivered, not per dataset write. There is no start fee, so a run that returns nothing costs $0.
A bad package never breaks the batch
An unrecognizable package or an app with no reviews returns a success:false row with a machine-readable code. The rest of the batch keeps going.
Hard 30-second deadline per page
If Google Play or the proxy network stalls, the actor writes an unbilled success: false row with code DEADLINE_EXCEEDED (status_code 504) and continues the batch.
Best for: Use it for sentiment analysis, competitor and market research, release-quality monitoring across app versions, and building review datasets for LLM pipelines. The billing matters most when the job runs unattended and one bad package must not take down the batch.
Input & output
{
"appIds": [
"com.spotify.music",
"https://play.google.com/store/apps/details?id=com.duolingo",
"com.whatsapp"
],
"maxReviews": 500,
"sort": "newest",
"country": "us",
"language": "en"
}{
"success": true,
"review_id": "41a06364-b9f1-42d5-8b06-1b6682321902",
"app_id": "com.spotify.music",
"user_name": "Mark Ogden",
"score": 5,
"text": "Update - Really enjoying Spotify, seems more stable, audio books are a big plus.",
"thumbs_up": 1090,
"posted_at": "2025-02-19T07:49:57.000Z",
"app_version": "9.0.18.604",
"reply_text": "Hey! We're sorry to hear this. We're open to feedback...",
"reply_posted_at": "2023-11-17T00:38:44.000Z",
"criteria": [{ "feature": "vaf_phase1_dj_feature", "rating": 3 }],
"url": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=41a06364-b9f1-42d5-8b06-1b6682321902"
}{
"success": false,
"app_id": "com.example.does.not.exist",
"code": "NO_REVIEWS",
"error": "Google Play returned no reviews for app: com.example.does.not.exist",
"request_id": "req_911f37d2e55644ff9d9e4a3f",
"status_code": 404
}Branch on the success field to split hits from misses. Quote the request_id in any support issue and we can trace the exact request.
output fields
| field | type | what it is |
|---|---|---|
| success | boolean | true for a review (billed), false for an app that returned nothing (free). |
| review_id | string | Google Play's unique review ID. |
| app_id | string | The app package name the review belongs to. Copied onto every row so each row stands alone. |
| user_name | string | Reviewer display name. |
| user_image | string | Reviewer avatar URL. May be absent. |
| score | integer | Star rating, 1 to 5. |
| text | string | The review body. May be empty; Google Play allows a rating with no text. |
| thumbs_up | integer | Number of users who marked the review helpful. |
| posted_at | string | ISO 8601 UTC timestamp the review was posted. |
| app_version | string | App version the review was written against. Absent when not exposed. |
| reply_text | string | The developer's reply body. Absent when there is no reply. |
| reply_posted_at | string | ISO 8601 UTC timestamp of the developer reply. Absent when there is no reply. |
| criteria | array | Feature-specific ratings (feature name plus rating 1-5), when Google Play attaches them. |
| url | string | Permalink to the review on Google Play. |
Error codes, stable across releases
Every failure record carries one of these machine-readable codes. None of them are ever charged.
| code | billed | meaning |
|---|---|---|
| NO_REVIEWS | $0.0000 | The app has no reviews in the requested locale, or the app does not exist. |
| VALIDATION_FAILED | $0.0000 | The input was not a recognizable package name or Play Store URL. |
| PLAY_REVIEWS_TIMEOUT | $0.0000 | Listing the app's reviews timed out. |
| DEADLINE_EXCEEDED | $0.0000 | The 30-second per-page deadline was hit. Returned as an unbilled row with status_code 504. |
What a run costs
The charge fires only when a result is delivered, and platform compute is included in the per-result price. To cap the spend of a run, set a limit in Apify's Run Limits panel. The actor stops at the cap and reports how far it got.
What this actor doesn't do
- Reviews are localized. Google Play serves one country and language per run (defaults us / en). To cover another market, run the app again with a different country and language.
- Developer replies and feature ratings are only present when Google attaches them. Most reviews have no reply; reply_text is simply absent on those rows.
- It reads reviews, not store metadata. Ratings histograms, install counts, screenshots, and the app's overall score are out of scope.
- It reads public reviews only, the same set a signed-out visitor sees on the Play Store listing.
Frequently asked questions
- Do I need a Google account or Play Console access?
- No. The Actor reads public Play Store reviews directly by package name. Play Console only exposes reviews for apps you own; this works for any public app.
- How do I point it at an app?
- Use the package name (com.instagram.android) or a Play Store URL. Both resolve to the same app. An unrecognizable value comes back as success:false with code VALIDATION_FAILED, not a rejected run.
- How many reviews can I get per app?
- As many as the app has, capped by maxReviews. The Actor walks review pages in order until it hits your cap or the app runs out.
- Can I get reviews in other languages or countries?
- Yes. Set country (gb, de) and language (de, pt-BR). One run covers one locale; run the app again per market for wider coverage.
- What if an app has no reviews?
- It comes back as a success:false record with code NO_REVIEWS. You are not charged.
- How does billing know an app returned nothing?
- Billing fires on an explicit per-review charge event, not on dataset writes. The Actor only fires it when a review is delivered, so success:false records sit in your dataset for free.
Guides for this API
Automation templates
- Daily Google Play review snapshot n8n workflow100 newest reviews per day cost $0.008 — about $0.24 per month per app.
- Negative Play-review Slack alerts n8n workflow100 newest reviews per day cost $0.008 — about $0.24 per month per app, whether or not any alert fires.
- Google Play reviews snapshot (Make) Make blueprint100 newest reviews per day cost $0.008 — about $0.24 per month per app.
- Google Play reviews → git history (GitHub Actions) GitHub Actions workflow100 newest reviews per day cost $0.008 — about $0.24 per month per app.
Pairs with
App Store Reviews Scraper
Export Apple App Store reviews and developer replies to JSON from an app ID or apps.apple.com URL. One record per review with rating, title, text, author, developer reply, and date.
TripAdvisor Reviews Scraper
Export TripAdvisor reviews to JSON from a hotel, restaurant, or attraction URL or location ID. Filter by rating, traveler type, and date; owner replies, photos, and sub-ratings included.
Run it on the Apify account you already have
Paste one input into the actor's console and check the dataset it returns. A one-item first run costs under a cent — no new subscription, pay only for delivered results.
Get an app's reviews