Google Play Reviews Scraper & API avatar

Google Play Reviews Scraper & API

Pricing

from $0.10 / 1,000 reviews

Go to Apify Store
Google Play Reviews Scraper & API

Google Play Reviews Scraper & API

Scrape Google Play reviews for any app and language, from app links or package names: rating, text, author, date, app version, helpful votes, developer reply. Full history, filters by rating, date and keyword.

Pricing

from $0.10 / 1,000 reviews

Rating

0.0

(0)

Developer

Quarra Labs

Quarra Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Get the reviews of any app on Google Play, in bulk, without an account or API key. Give it app links or package names, and the languages you want. Each review comes back with its rating, text, author name as shown in the store, date, app version, helpful votes and the developer's reply with its date when there is one. Full history, three sorts, and filters by rating, date and keyword. Export as JSON, CSV or Excel, or read it through the Apify API.

$0.10 per 1,000 reviews, plus a small start fee per run. Reviews that do not match your filters, repeats and inputs that fail are not charged, and each review is charged once per run at most.

Quick start

  1. Paste app links (https://play.google.com/store/apps/details?id=com.whatsapp) or package names (com.whatsapp) into App links or package names.
  2. Pick the Languages and Max reviews per app and language.
  3. Click Start and read the reviews in the run's Output tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make, Zapier, n8n or Apify's MCP server for AI agents.

What it is used for

  • Product feedback: what users of your app (or a competitor's) complain about or love, version by version.
  • Release monitoring: newest reviews since a date, run every day, to catch a bad release early.
  • Support: low ratings that still have no developer reply.
  • Market research: the same question across languages, or across the apps of a category.
  • AI agents and sentiment analysis: one clean record per review, the same fields on every store.

What you get

Review ID (stable: use it to deduplicate between runs)yes
Rating and textyes
Author name and public avatar, as shown in the storeyes
Date (UTC, ISO 8601)yes
App version the review was written foryes, when Google Play gives it
Helpful votesyes
Developer reply, who replied, and the date of the replyyes, when there is one
App name, store page, country, languageyes
Position in the chosen sortyes

The same field names are used by our Apple App Store Reviews Scraper, so you can mix both stores in one pipeline. A field a store does not give is null, never missing.

Inputs

  • App links or package names: Google Play links in any language, or package names. Up to 500 app and language pairs per run.
  • Languages: language codes (en, fr, zh-TW…). Each app is read in each language (a regional variant such as pt-BR gives the same reviews as pt: see Limits). Left empty, the language of the link is used, otherwise en.
  • Country (countries in the API): a two-letter code (us, fr, in…). Google Play shows the same reviews in every country (we checked it from several countries), so one is enough: only the first is used, and the run says so. It only changes the order of "most relevant" and the app's average rating. Left empty, the country of the link is used, otherwise us.
  • Max reviews per app and language and Max reviews in total: counted exactly.
  • Sort: newest first, most relevant, by rating. Only "newest first" lets Since stop early.
  • Minimum rating, Maximum rating, Since, Until (a date such as 2026-01-31, or a duration such as 30 days), and Review contains (up to 50 words, one per line). Ratings are whole stars. With a date filter, the rare reviews that have no date are left out.

Example, through the API:

{
"apps": ["com.whatsapp"],
"countries": ["us"],
"languages": ["en"],
"sort": "newest",
"maxRating": 2,
"since": "30 days",
"maxReviewsPerApp": 1000,
"maxItems": 5000
}

Output

One record per review in the dataset. A shortened review:

{
"type": "review",
"status": "ok",
"platform": "google-play",
"reviewId": "dd0ac9db-67bd-4b25-aa0f-ab53da6cec6f",
"appId": "com.whatsapp",
"appName": "WhatsApp Messenger",
"country": "us",
"language": "en",
"rating": 5,
"title": null,
"text": "very good",
"author": "Mide Ogundari",
"authorImageUrl": "https://play-lh.googleusercontent.com/a/…",
"date": "2026-10-13T11:17:50Z",
"isEdited": null,
"appVersion": "2.26.38.73",
"helpfulVotes": 0,
"totalVotes": null,
"replyText": null,
"replyAuthor": null,
"replyDate": null,
"reviewUrl": null,
"appUrl": "https://play.google.com/store/apps/details?id=com.whatsapp&hl=en&gl=us",
"input": "com.whatsapp",
"position": 1,
"scrapedAt": "2026-10-17T06:30:02Z"
}
  • status: ok (delivered, charged) or error (free; errorCode and error say why, retryable says if a later run may work). A package that does not exist gets a free app_not_found record.
  • position is the rank of the review in the chosen sort for that app and language.
  • country is the country used to read the reviews; Google Play reviews do not belong to a country.
  • title, isEdited, totalVotes and reviewUrl are kept for the shared layout and are null on this store.

The run summary (counts per app, name, rating, why the run stopped, notes) is the OUTPUT record of the run's key-value store.

Pricing

Pay per event:

EventPrice
Review$0.10 per 1,000
Run start$0.0006 per GB of memory (1 GB minimum; $0.0006 at the default 256 MB)

Never charged: reviews that do not match your filters, error records, repeats (a review already delivered in the same run, for another language or input, is skipped). Set Maximum cost per run in the run options and the run stops before going over it, with the reviews delivered so far.

Limits

  • Language counts, country does not. Google Play groups reviews by language, and shows the same reviews in every country. Regional variants of a language give the same reviews as the language itself (en-GB = en, fr-CA = fr, pt-BR = pt…; only Chinese has two sets: traditional zh-TW, zh-HK, and simplified zh, zh-CN), so they are read once and the run says so. A language the app has no reviews in gives an empty result, with a note.
  • Filters on rating, date and words are applied while reading (a single rating is applied by Google Play itself). Google Play is read from the newest review on, so an older date range is reached by reading everything newer, and reading that finds nothing has a limit per run (it is not charged): about 10,000 reviews. On a very big app (WhatsApp gets about 2,000 English reviews a day) that is a few days back; the run says how far back it read. Only matching reviews are charged.
  • Developer replies are returned with the review they answer; a reply is not a review of its own.
  • Anything missing from a result is said: in the run's status, in the note of each app in the OUTPUT record, or in a free error record.
  • If Google Play limits access during a run, the run says so in its status and keeps what it delivered; running it again later gives the rest.

FAQ

Do I need a Google account or API key? No.

What if the run is restarted by the platform (migration or reboot)? It resumes where it was: reviews already in the dataset are not delivered or charged again.

Why do I get fewer reviews than the app's rating count? Ratings without text are counted by Google Play but have no review.

Is it legal? It collects public reviews shown to any visitor of Google Play. Check the rules that apply to your use of the data, in particular for personal data such as author names.

Does the Actor send anything to Quarra? Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.