Google Play Reviews Scraper avatar

Google Play Reviews Scraper

Pricing

$0.10 / 1,000 saved reviews

Go to Apify Store
Google Play Reviews Scraper

Google Play Reviews Scraper

Export written Google Play app reviews with scores, dates, versions and developer replies. Choose language, sort and limits. Stable review IDs and a clear run report.

Pricing

$0.10 / 1,000 saved reviews

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

Get public written reviews from Google Play. Add an app link or Android package ID. Then choose the review language, Google Play country, sort order, and number of reviews you want.

Run the Actor and open the Dataset. This is your results table. You can download it as JSON, CSV, or Excel. Each row contains one review. It can also include the score, app version, helpful vote count, and a developer reply when Google Play provides one.

This Actor is an independent tool. It is not an official Google product and is not linked to, approved by, or supported by Google.

The Actor gets the reviews Google Play shows for the language and sort order you choose. It gets the current available set. It does not promise every review ever posted. Google Play can change, reorder, limit, or block the available results at any time.

Google Play Reviews Scraper: choose an app, collect written reviews and developer replies, export CSV, JSON or Excel

Contents

Quick start

  1. Add a Google Play app link or package ID to Apps.
  2. Choose the review language and sort order.
  3. Set how many reviews you want.
  4. Click Start.
  5. Open Your review results in the Output tab.
  6. Click Export results to download JSON, CSV, or Excel.

The form starts with this small example:

{
"appIds": ["com.google.android.apps.translate"],
"language": "en",
"country": "US",
"sort": "newest",
"maxReviewsPerApp": 10,
"maxTotalReviews": 10,
"includeReviewerProfile": false
}

The unedited form returned 10 useful reviews in the Cloud check on October 10, 2026. Google Play can change. Check the run report when an app returns no rows. The required appIds field has a UI prefill, but no API default. An API request with {} is invalid; it never starts a hidden demo.

What you get

Your review results are saved in the Apify Dataset. One saved row is one unique written review. Common fields include:

  • review text and score;
  • last update time and app version;
  • helpful vote count;
  • developer reply and reply time, when available;
  • the language, Google Play country, and sort order you chose;
  • stable review IDs that help you match the same review in later runs.

Developer replies and some other fields can be empty because Google Play does not provide them for every review. Reviewer name and profile image are left out by default.

Open Run report for a short report about the run (RUN_SUMMARY). It tells you how many reviews were saved and why collection stopped for each app. Check this report when the results table is empty or has fewer rows than expected.

Good fit and use cases

Use this Actor to export written Android app feedback, compare review scores by app version, or check whether a developer has answered a review. Use text for your own topic or sentiment analysis. This Actor does not score sentiment.

  • Product teams: compare score, text and appVersion after a release.
  • Support teams: check developerReply and its update time.
  • Analysts: group exported reviews by app and requested language.
  • Data teams: update records by itemId when review content changes.

It is not a fit for Google Maps business reviews, app discovery, a worldwide review count, country-based reviewer targeting, or an authenticated developer account. It does not provide monitor/diff state, keyword/date/star filters, translation, review images or media, or custom mapping code.

Input reference

All seven fields are listed below. No nested input objects are supported. Unknown fields fail with INPUT_INVALID before source requests.

FieldType and allowed valuesRequiredRuntime defaultNew form prefill
appIdsArray of 1–20 package IDs or canonical HTTPS Google Play app links. Each string: 3–2,048 characters; package ID: at most 255.YesNone["com.google.android.apps.translate"]
languageString: 2–3 letter base code, optionally a two-letter region, such as en, de, pt-BR. all is invalid.NoenUses schema default
countryString: two letters, such as US or DE.NoUSUses schema default
sortString: newest, rating, relevance.NonewestUses schema default
maxReviewsPerAppInteger: 1–5,000. Counts saved unique reviews per app.No10010
maxTotalReviewsInteger: 1–20,000. Counts saved unique reviews in the run.No100010
includeReviewerProfileBoolean. true requires publisher permission; otherwise input fails.NofalseUses schema default

Package IDs are case-preserving. Repeated apps and equivalent links are skipped in first-occurrence order. Apps are processed one at a time. The first reached per-app, global or platform charge limit stops the affected work. Duplicate reviews do not use the result limit. A smaller global limit can leave later apps UNPROCESSED.

Links must use https://play.google.com/store/apps/details with one id query parameter. Login details, fragments, other hosts and extra surrounding spaces are rejected. The package ID must contain dot-separated segments, each starting with a letter. Country is normalized to uppercase. Language base is lowercase, with an uppercase region. Codes request a store context; accepted syntax does not prove that Google supports every code or that the returned text matches it.

rating requests highest scores first. relevance uses Google's changing ranking. There is no date-order promise for those modes. country does not mean the reviewer's country. Reviewer details stay null in the standard configuration; there is no input for credentials, cookies, proxy settings or page tokens.

Output reference

One Dataset item is one saved unique written review. All keys below are present; unavailable optional data uses null, not a missing key. An empty list is []. The contract remains schema version 1.0.

FieldTypeMeaning and empty behavior
schemaVersionStringAlways 1.0.
itemIdStringStable packageId:reviewId. Match updates by this key.
reviewIdStringSource review ID; opaque, not required to be a UUID.
packageIdStringExact normalized app package ID.
appUrlString, HTTPS URLApp details URL with id and reviewId.
requestedLanguageStringRequested language code; not detected text language.
requestedCountryStringRequested store country; not reviewer location.
sortModeStringnewest, rating or relevance.
scoreIntegerReview score from 1 to 5.
textString or nullWritten text. Missing/empty source text becomes null. No HTML execution or sentiment label.
lastModifiedAtString, UTC ISO timestampSource review update time, at millisecond precision. It is not guaranteed to be the first publication date.
thumbsUpCountInteger or nullHelpful vote count, nonnegative when supplied.
appVersionString or nullApp version attached to the review, when supplied.
criteriaArray of objectsSource feature ratings; [] when none.
criteria[].nameStringFeature name.
criteria[].ratingNumber or nullSource feature rating. No invented score or fixed range.
developerReplyObject or nullReply only when both text and time are valid. No separate reply row or fee.
developerReply.textStringDeveloper's reply text.
developerReply.lastModifiedAtString, UTC ISO timestampReply update time, at millisecond precision.
reviewerObject or nullNull by default. Requires both input opt-in and publisher permission.
reviewer.nameString or nullPublic source name when permitted and present.
reviewer.imageUrlString, HTTPS URL, or nullPublic profile image link when permitted; the Actor does not download it.
observedAtString, UTC ISO timestampTime this run began observing the source; not the review date.

Text preserves Unicode, tabs and newlines. Unsafe control characters are removed. Empty optional strings become null. Text is not translated or silently shortened. Malformed required fields, invalid reply pairs or oversized text fail visibly.

The default Dataset contains no status or error rows. The default key-value store has INPUT (platform input) and RUN_SUMMARY (run report). The Output tab links to these stores; there is no separate OUTPUT record or hidden monitor state.

RUN_SUMMARY records schemaVersion, runStatus, UTC startedAt/finishedAt, durationMs, transport, normalized input, counters, partial, chargeLimitReached, stopReason, apps and safe errors. transport records direct HTTP, proxy use (false), client version and HTTP status buckets. input records received/valid/unique/duplicate apps, requested language/country/sort, result limits and profile inclusion. counters records app outcomes, pages, requests, retries, rate-limit responses, received/stored reviews, duplicate skips/conflicts, saved replies, unprocessed apps and response bytes. Each apps[] entry records packageId, status, completeness, pagesFetched, reviewsReceived, reviewsStored, duplicatesSkipped, hasUnconsumedContinuation and error (null or safe code/message/context). Each errors[] entry has code, retryable, message and optional safe appIndex/packageId. It never includes raw reviews or continuation tokens.

A real output example

Selected fields from the October 10, 2026 Cloud run with the quick-start input. The full row has every field listed above. This short public text contains no reviewer name or profile. Live reviews can change.

{
"itemId": "com.google.android.apps.translate:0d19bfba-aa69-408e-8547-674e0572db26",
"reviewId": "0d19bfba-aa69-408e-8547-674e0572db26",
"packageId": "com.google.android.apps.translate",
"score": 5,
"text": "very nicer app",
"lastModifiedAt": "2026-10-08T22:41:54.701Z",
"appVersion": "10.38.67.991942559.4-release",
"developerReply": null,
"reviewer": null,
"requestedLanguage": "en",
"requestedCountry": "US",
"sortMode": "newest",
"observedAt": "2026-10-10T00:50:15.763Z"
}

Pricing

Price: USD 0.10 for 1,000 saved unique reviews.

You pay once for each unique review that is saved to the Dataset (apify-default-dataset-item). There is no start fee under the price active on October 10, 2026. Platform usage is included.

Examples:

  • 10 saved reviews cost USD 0.001;
  • 100 saved reviews cost USD 0.01;
  • 1,000 saved reviews cost USD 0.10.

Repeated reviews are skipped and are not charged again. An empty result has no review charge. If a technical error happens after some reviews were saved, you pay only for those saved reviews. The error itself is not charged.

Scheduled price change

Apify has scheduled a standard apify-actor-start fee of USD 0.0035 for October 24, 2026 at 00:57 UTC. The fee per saved review stays USD 0.0001. This future rate is not the active price on October 10. Check the Store Pricing tab for the rate applied to your run.

At the supported 256 or 512 MB memory settings, Apify charges one start event. Under that scheduled rate, 0 saved reviews cost USD 0.0035, 1 costs USD 0.0036, 10 cost USD 0.0045, 100 cost USD 0.0135, and 1,000 cost USD 0.1035. Replies and skipped duplicates have no separate event fee. A failed run can still have a start fee and fees for reviews already saved. These rates keep platform usage included; they do not add a separate usage bill.

maxTotalChargeUsd is the platform limit for the total Actor charge, including any applied start event. A review-count estimate alone excludes the start fee. An insufficient cap can stop output. The Actor does not manually charge the standard start event. Fully filtered and unchanged-monitor scenarios are not supported because this Actor has no filters or monitor mode.

Empty and incomplete results

Fewer rows do not always mean that the run failed. Open Run report to see the reason.

  • No reviews found (EMPTY): the app page was available, but Google Play returned no written reviews for your choices. Try another language or sort order if that matches your goal.
  • App not found or not available (NOT_FOUND_OR_UNAVAILABLE): check the package ID, app link, and Google Play country.
  • Stopped at your review limit (TRUNCATED): the Actor saved the number you asked for. Increase the limit if you need more.
  • Stopped at your spending limit (TRUNCATED_CHARGE_LIMIT): check the run's maximum charge before you try again.
  • Stopped by a technical problem (PARTIAL_TECHNICAL or FAILED): Google Play may have blocked the request, changed its response, or had a network problem. Reviews saved before the error stay in the Dataset, but the result is incomplete.

A technical problem is never reported as a normal empty result.

Limits

Maximum scope is 20 apps, 5,000 reviews per app and 20,000 per run. The source returns pages of up to 150 reviews. The Actor uses one request stream, at most two request starts per second, up to three attempts per request, and at most 2 MiB per reviews response. An attempt timeout covers headers and body. Source work ends within 10 minutes even if the platform timeout is larger. A shorter platform timeout reserves 30 seconds for the run report. The standard 300-second demo keeps source work within the remaining 270 seconds.

Supported memory is 256 or 512 MB. Invalid run resources produce RESOURCE_INVALID, separately from INPUT_INVALID. Source failures can leave useful partial rows; check the run status and report before treating them as complete. Requests use a changing public endpoint; future blocks or response changes may require maintenance.

This Actor collects written public reviews only. It does not collect rating-only feedback that has no review text.

The review language selects the set Google Play returns. The country selects a Google Play store view. It is not the author's country, location, or nationality.

The Actor does not promise:

  • every review from the full history of an app;
  • reviews from every language or country setting;
  • a stable relevance order between runs;
  • that Google Play will always keep the same data source available;
  • that the app's public review count will match the number of written reviews this Actor can get.

Reviews and developer replies can change while keeping the same itemId. If you need the latest version of each review, update your records by itemId.

API and export

Use the Actor's API button in Apify Console to generate a request for your language. Use this Actor ID: Yy2R2nwjWwDLnzs4f. Send the quick-start JSON as input, set timeoutSecs to 300 for the small demo, and keep memory at 256 MB. Store your Apify token securely; never place it in public examples or Issues. Wait for the run to finish, then read its defaultDatasetId and the RUN_SUMMARY record in its defaultKeyValueStoreId.

Use Apify's Dataset export for JSON, CSV or Excel. Native Apify tasks and schedules can repeat a saved input. Every run is a fresh snapshot; schedule repetition does not add diff or only-new behavior. The Actor does not create schedules or send data to external services itself.

For iOS feedback, use our published Apple App Store Reviews Scraper. It is a separate product with its own input and output contract.

FAQ

Can I download the results as CSV or Excel?

Yes. Open the Dataset, click Export results, and choose JSON, CSV, Excel, or another format supported by Apify.

Can I get reviews from a specific reviewer country?

No. Google Play country changes the store view used for the request. It does not tell you where a reviewer lives.

Why is a developer reply missing?

Google Play does not show a developer reply for every review. When no reply is available, developerReply is null.

Does the Actor get all old reviews?

No. It gets the current set that Google Play returns for your language and sort order. Google Play does not provide a public total that proves full history.

Where can I see why the Actor stopped?

Open Run report in the Output tab. The exact record name is RUN_SUMMARY.

Support

If a run looks wrong, first check your input, the Dataset, and Run report. Then open the Actor's Issues tab on Apify.

Include the run ID, UTC time, build number, language, country, sort order, review limits, final status, safe error code, and expected row count. Do not post API tokens, cookies, authorization headers, full private inputs, raw response data, or private reviewer data.

Support is provided through the Cliqto Media (CliqtoMedia) Apify profile and the Actor's Issues tab. There is no promised response time.

Privacy and unofficial status

This Actor gets public written reviews. Reviewer details are off by default. The Actor does not keep another copy outside the Dataset and key-value store in your Apify run. You control retention and downloads in your Apify account.

Review text and developer replies are content from other people. Treat them as untrusted text. Escape values before using them in HTML, spreadsheets, SQL, logs, or AI prompts. You are responsible for a lawful purpose, data limits, storage time, deletion, and safe use.

Google Play Reviews Scraper is an unofficial independent tool. It is not affiliated with, sponsored by, endorsed by, or authorized by Google. It does not use the official Android Publisher API. Google can change or block the data source without notice.

Technical contract

Match records by itemId, inspect RUN_SUMMARY, and handle failed partial runs explicitly. Retries are bounded for network, timeout, 429 and server errors. Blocks, unsafe redirects, parser changes, repeated tokens and conflicting duplicate IDs are not valid empty results. Exported text is untrusted input.