Google Play Reviews at a glance
Google Play Reviews is a ready-to-run Apify actor from abotapi for collecting developer tools data. Its documented output includes review id, app id, app, country and language, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.50 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Developer Tools, Social Media, Other
- Pricing
- $1.50 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 28 options
Collect Google Play reviews and ratings for any app across country storefronts. Search by app name or use a Google Play URL. Returns one row per review with rating, text, author, date, app version, thumbs-up count, developer reply, and storefront country.
What Google Play Reviews can do
- Reviews are the primary output. Every row is one full review: rating, body, author, date, app version, thumbs-up, developer reply, plus the storefront country and language.
- Two ways in. Search by app name or keyword, or paste Google Play links: app pages, search pages, developer pages, category pages or collection pages. A bare package id works too, no need to build a full URL.
- Multi-country sweep. Reviews are storefront-specific, so pass a list of country codes, or use "all" for a broad built-in set of major markets, to gather the full picture for one app.
- Sort and filter. Order by newest, most helpful, or by rating, and keep only reviews within a minimum/maximum star band.
- Optional app-metadata enrichment. Attach developer, average score, ratings count, installs, category, price and more to every review from that app.
- Built for schedules. Incremental mode returns only new and changed reviews on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
Choose what to collect
These inputs let you configure Google Play Reviews - App Ratings, Replies & Countries. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | How to select apps. 'search' resolves app names to apps via Google Play; 'url' takes Google Play app links directly. |
queriesarray | App names or keywords to look up (for example 'Instagram', 'Spotify'). Each term resolves to the top matching app(s) and its reviews are collected. Ignored in URL mode. |
appsPerQueryinteger | How many top matching apps to take for each search term, and for each search, developer, category or collection page pasted in URL mode. Use 1 for the single best match. |
urlsarray | Google Play links: app pages (including hl/gl, reviewId, showAllReviews and the legacy market.android.com form), search pages, developer pages (dev?id= or developer?id=), category pages and collection pages. A bare package id (com.instagram.android) also works. Listing pages (search, developer, category, collection) expand to the top apps on the page, capped by Apps per search term. The country in the link (gl=) is used only if you leave Countries empty. |
appIdOrUrlstring | Single-app shortcut: a Google Play app link or package id (e.g. com.supercell.brawlstars). Switches the run to URL mode and replaces the Start URLs list, so only this one app is scraped. Leave empty to use Start URLs or Search queries. |
countriesarray | ISO 2-letter country codes to collect reviews from (for example us, gb, de, jp). Each country is a separate review stream. Leave empty to use the country from each URL (URL mode) or 'us' (search mode). Use 'all' to sweep a broad built-in set of major countries. |
languagestring | Review language / locale (ISO code, for example en, es, de, ja). Controls the language of returned reviews and metadata. |
Show 21 more inputs
| Input | What it controls |
|---|---|
sortBystring | Order reviews are returned in per country. |
minRatinginteger | Keep only reviews with at least this star rating (1 to 5). Leave empty for all. |
maxRatinginteger | Keep only reviews with at most this star rating (1 to 5). Leave empty for all. |
ratinginteger | Keep only reviews with exactly this star rating (1-5). Shortcut for setting both Min and Max rating; an explicit Min/Max wins. |
keywordsarray | Keep only reviews whose text contains at least one of these words or phrases (case-insensitive). Empty = no text filter. Reviews that do not match are never counted toward Max reviews and never billed. |
appVersionarray | Keep only reviews written on exactly one of these app versions (e.g. 69.414). Empty = all versions. |
startDatestring | Keep reviews on or after this day (YYYY-MM-DD, UTC). With newest-first sorting the walk stops as soon as it passes this date. |
endDatestring | Keep reviews on or before this day (YYYY-MM-DD, UTC). |
recentDaysinteger | Keep only reviews from the last N days (0 = no limit). Combined with From date, the later bound wins. |
fetchDetailsboolean | Also attach app metadata (developer, average score, ratings count, installs, category, icon, price, description) to each review. Adds an extra lookup per app. |
maxItemsinteger | Maximum number of reviews to collect in total. 0 means no limit (stops at Max pages per country across all countries). Predictable, keeps the first run cheap. |
maxPagesinteger | Optional per-country safety bound on review pages read (about 40 reviews per page). Leave empty to walk every result page Google Play serves, up to a hard limit of 1000 pages per country. This does NOT cap the number of reviews, the run stops at Max reviews. |
resumeFromRunIdstring | Run id (or dataset id) of an earlier run of this Actor. Reviews it already collected are skipped, so this run only fetches new ones. Leave empty for a normal run. Do not combine with Incremental mode unless this is the very first incremental run for a new State key, an established incremental baseline already tracks what was seen. |
incrementalModeboolean | For scheduling this Actor to run repeatedly against the SAME app/country/filter set. The Actor remembers what it saw last time (keyed by State key below, or an automatic hash of your search/filter settings) and marks each review NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. Unlike Resume from a previous run, you never need to paste a run id. Compared: every review field (rating, text, author, date, thumbs-up, app version, developer reply). Excluded: the app-level fields added by Enrich with app details (appName, appDeveloper, appScore, appRatingsCount, appInstalls and similar), because they describe the app, not the review. Off by default so normal runs are unaffected. |
stateKeystring | Name this monitoring campaign so Incremental mode's memory is explicit and stable, instead of an automatic hash of your search/filter settings. Use different State keys for different campaigns you want tracked separately. Leave empty to let the Actor derive one from mode, queries/urls, countries, language, sortBy, minRating/maxRating, and fetchDetails. |
emitUnchangedboolean | Only used with Incremental mode. When off (default), a review identical to what the previous run saw is skipped, it is not returned and not billed. Turn this on to also return those unchanged reviews (changeType: "UNCHANGED"), this returns, and bills for, extra rows. |
emitExpiredboolean | Only used with Incremental mode. When on, a review the previous run saw but this run no longer finds (deleted, or no longer reachable) is returned once as a tombstone row (changeType: "EXPIRED"), this returns, and bills for, an extra row per disappeared review. Only reported after a run that fully re-walked every tracked app/country stream (no Max reviews cap hit, no Resume from a previous run); a partial run never reports EXPIRED, since it cannot tell "deleted" apart from "not reached yet". |
ignoreFieldsForChangesarray | Only used with Incremental mode. Output field names (for example thumbsUp, developerReply or developerReplyDate; review rows are flat, so no dotted paths are needed) that are left out when deciding whether a review changed, use thumbsUp if you do not want helpful-vote changes to mark a review UPDATED. The ignored fields still appear in the output rows. Changing this list never re-reports unchanged reviews as UPDATED. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. Leave empty to skip; never changes the dataset output. Supported: Notion, Linear, Airtable, Apify. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
reviewIdReview IDappIdApp IDappNameAppcountryCountrylanguageLanguageratingRatingbodyBodyauthorAuthorreviewDateDateappVersionApp versionthumbsUpThumbs updeveloperReplyDeveloper replyShow 18 more fields
reviewUrlReview URLpositionRankchangeTypeChangechangedFieldsChanged fieldsfirstSeenAtFirst seenlastSeenAtLast seenappDeveloperDeveloperappDeveloperWebsiteDeveloper websiteappScoreScoreappRatingsCountRatingsappInstallsInstallsappCategoryCategoryappContentRatingContent ratingappPricePriceappCurrencyCurrencyappUpdatedUpdatedappStoreUrlStore URLdeveloperReplyDateReply dateExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"reviewId": "00000000-0000-0000-0000-000000000000",
"appId": "com.example.app",
"country": "us",
"language": "en",
"rating": 5,
"body": "Full review text appears here.",
"author": "Reviewer Name",
"authorId": "100000000000000000000",
"authorImage": "https://play-lh.googleusercontent.com/...",
"thumbsUp": 12,
"appVersion": "1.0.0",
"reviewDate": "2026-01-01T00:00:00+00:00",
"reviewTimestamp": 1767225600,
"reviewUrl": "https://play.google.com/store/apps/details?id=com.example.app&reviewId=00000000-0000-0000-0000-000000000000",
"developerReply": "Thanks for the feedback!",
"developerReplyDate": "2026-01-02T00:00:00+00:00"
}Ways to use this data
- App Store Optimization (ASO) teams: track rating trends and recurring complaint themes across storefronts to prioritize the release roadmap.
- Customer support and QA teams: catch new low-rated reviews quickly and route them into a ticketing pipeline before ratings drop further.
- Competitive analysis: compare review volume, rating trends and developer response patterns across competing apps.
- Localization and product teams: sweep multiple countries to see how the same app is received in different markets and languages.
- Data science and NLP teams: build labeled datasets of app reviews for sentiment or topic modeling.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Google Play Reviews return?
The documented output for Google Play Reviews includes review id, app id, app, country, language, rating, body and author. Availability of each field depends on the source page and the selected mode.
How much does Google Play Reviews cost?
It costs $1.50 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed reviews on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated reviews for the tracked app/country set, and unchanged ones are not billed.
Why is appName / appDeveloper / appScore empty on my reviews?
Those fields, along with the rest of the app-metadata block, are only attached when Enrich with app details is turned on. With it off (the default), appName is null and every other appXxx field is absent from the output.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
