App Reviews API: Google Play Reviews + App Store Reviews avatar

App Reviews API: Google Play Reviews + App Store Reviews

Pricing

from $0.08 / 1,000 review returneds

Go to Apify Store
App Reviews API: Google Play Reviews + App Store Reviews

App Reviews API: Google Play Reviews + App Store Reviews

App reviews API and app review scraper for Google Play and the App Store: package names, App Store IDs or URLs and iOS bundle IDs in one list, one table of reviews out (rating, text, date, app version, developer reply). Filter by rating, country, date; only-new mode. $0.09/1k reviews. Unofficial.

Pricing

from $0.08 / 1,000 review returneds

Rating

0.0

(0)

Developer

hiver

hiver

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

App Reviews API: Google Play Reviews + App Store Reviews in One Table

Reviews of any public app on Google Play and the Apple App Store, from one API call. Put Google Play package names (com.spotify.music), App Store IDs or URLs and iOS bundle IDs (com.spotify.client) in the same list and get one row per review with the same columns: store, app, rating, title, text, date, app version, developer reply. Newest first, with filters and an only new since last run mode for monitoring.

$0.09 per 1,000 reviews from either store. The three most-used review Actors on Apify Store (455, 321 and 307 monthly users) each cover one store, at $0.10 to $0.15 per 1,000 on the free plan (Store data checked 2026-10-10). Error rows and reviews you already have are free.

Nigeria, 300 newest App Store reviews: 300 of 300 from the Nigerian storefront, 0 US reviews, past the 150 mark (Lab bench, 2026-10-10). Wrong-country reviews and runs that stop near 150 reviews are two problems buyers report on the biggest review Actors' Issues tabs, so our board's Lab bench now tests both.

Measured, not promised. On 2026-10-10 (08:21Z, build 0.1.8) the bench gave this Actor and popular review Actors the same jobs on both stores. For OPay, a Nigerian app, it checked against Apple's own Nigerian review list that the reviews at positions 160 and 240 are returned and that none of the US store's 4 newest reviews are. The other checks: the right app, star ratings 1-5, 2026 dates, the app version and, on Google Play, developer replies.

App Store job (same input for every Actor)This ActorMost-used App Store review ActorOther Actor that covers both stores
Nigeria, OPay, 300 newest300 reviews, 5 of 5 checks, 85% fields filled, 57 s300 reviews, 5 of 5 checks, 71% fields filled, 183 s0 reviews
US, Spotify, 20 newest20 reviews, 3 of 4 checks, 71% fields filled, 7 s20 reviews, 3 of 4 checks, 71% fields filled, 41 s20 reviews, 4 of 4 checks, 86% fields filled, 3 s
Price per 1,000 reviews in these runs$0.09$0.10$0.44

The most-used App Store Actor also returned all 300 Nigerian reviews: on country and depth it ties with this Actor, which filled more fields and finished about 3 times faster.

Google Play job (same input for every Actor), 2026-10-10This ActorMost-used Google Play review ActorOther Actor that covers both stores
OPay, 300 newest English reviews300 reviews, 4 of 4 checks, 97% fields filled, 20 snot measured300 reviews, 3 of 4 checks (no developer replies), 83% fields filled, 6 s
Spotify, 20 newest English reviews20 reviews, 4 of 4 checks, 85% fields filled, 7 snot measured20 reviews, 3 of 4 checks (no developer replies), 84% fields filled, 3 s
Price per 1,000 reviews in these runs$0.09not measured$0.43

On Google Play the other two-store Actor was faster; this Actor returned developer replies and filled more fields, at about a fifth of the price. Google Play lists reviews per language, not per country, so these jobs test depth and fields, not country. The most-used Google Play review Actor is not measured yet: it never started, because the bench sent it a lowercase country code its input does not accept. That was the bench's mistake, not that Actor's; its results go here after the next bench. Two jobs per store is a small sample; the bench runs again after every code change.

Real output rows: Spotify reviews from Google Play and the App Store in the same columns

Watch the 1-minute walkthrough (MP4)

Unofficial. Not affiliated with, endorsed by or sponsored by Google or Apple. It reads the public review pages and endpoints the stores show to anyone without logging in. It returns review content only: no reviewer profiles, no reviewer photos or IDs.

What you can do with it

  • Watch your own app and your competitors' on both stores in one run and one schema.
  • Pull every 1-2 star review since a date to see what broke after a release.
  • Schedule it hourly or daily with "only new" and send new reviews to Slack, email, Google Sheets or a webhook with Apify integrations.
  • Feed an AI agent one call that returns reviews from both stores in a single shape.

App Store reviews by bundle ID

Know your iOS apps by bundle ID (com.spotify.client) rather than by their numeric App Store ID? Paste the bundle IDs into apps. When Google Play has no app with that ID, the Actor looks it up on the App Store in the run's country (the lookup is free) and returns its reviews. Every App Store row carries bundleId, so you can join reviews to App Store Connect exports or your own app list. An ID found on neither store returns one free row that says so.

Board test run W9GrglUWNc1kah7ue, 2026-10-11, build 0.1.12: com.spotify.client and com.calm.calmapp (App Store only), ios:com.zhiliaoapp.musically, the Play package com.spotify.music and a made-up ID in one list gave 12 reviews, each with the right bundleId or null on Google Play, and 1 free error row ("not found on Google Play or the App Store (us)") in 20 s. One of the App Store rows, as returned:

{ "store": "apple", "appId": "324684580", "appName": "Spotify: Music and Podcasts", "bundleId": "com.spotify.client",
"country": "us", "reviewId": "14647223396", "rating": 5, "title": "Best streaming app", "text": "Best streaming app",
"date": "2026-10-09T20:37:39Z", "appVersion": "9.1.90", "isEdited": false, "developerReply": null, "error": null }

Some apps use the same ID on both stores (TikTok com.zhiliaoapp.musically). Without a prefix you get the Google Play app; write ios: in front, as the test run did, or set dottedIdStore to app_store to get the App Store one. The three most-used Actors made only for App Store reviews on Apify Store (459, 121 and 58 monthly users) take numeric App Store IDs or app URLs (one also takes an app name); none of their input schemas mentions bundle IDs (latest builds, checked 2026-10-11). Some general App Store scrapers do take bundle IDs.

Input

FieldWhat it does
appsApp URLs or IDs, mixed stores in one list. Google Play: com.spotify.music or a play.google.com URL. App Store: id324684580, 324684580, an apps.apple.com URL or an iOS bundle ID (com.spotify.client, looked up free on the App Store when Google Play has no such app). Force a store with ios: or android:.
dottedIdStoreWhat unprefixed dotted IDs are: auto (default: Google Play first, then the App Store), app_store (all are iOS bundle IDs) or google_play.
countriesStore countries, e.g. ["us","gb","de"]. Each App Store app is fetched once per country; a country inside an App Store URL (/gb/) wins for that app. Google Play lists reviews per language, so each Play app is fetched once (the gl= of a Play URL, else the first country) and language picks the market (see below).
languageTwo-letter language (en, de, ...). On Google Play it also picks which reviews you get: Play lists reviews per language, so ro returns reviews written in Romanian. On the App Store it sets the interface language; reviews come per country.
sortnewest (default) or mostHelpful.
maxReviewsPerAppMatching reviews per app and country, 1 to 5,000 (default 100).
sinceDateYYYY-MM-DD; older reviews are skipped.
ratingsFor example ["1","2"].
onlyNew + monitorIdReturn only reviews not returned by an earlier run with the same monitor ID. The first run sets the baseline.

Example:

{
"apps": ["com.spotify.music", "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"],
"countries": ["us"],
"maxReviewsPerApp": 100,
"ratings": ["1", "2"],
"sinceDate": "2026-10-01"
}

Output

One row per review. Real rows from board test run W9GrglUWNc1kah7ue on 2026-10-11 (build 0.1.12; text shortened here):

{ "store": "google", "appId": "com.spotify.music", "bundleId": null, "appName": "Spotify: Music and Podcasts", "country": "us",
"reviewId": "ccf4d10d-0555-40d4-900a-0a771fc478ee", "rating": 2, "title": null,
"text": "Constant new breaks and bugs. New one where forward and back inputs randomly swap ...",
"date": "2026-10-10T00:17:45Z", "appVersion": null, "thumbsUp": 0, "isEdited": null,
"developerReply": "Hi. We're open to feedback, and we'd like to get some more info about this ...",
"developerReplyDate": "2026-10-10T14:17:06Z",
"reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=ccf4d10d-0555-40d4-900a-0a771fc478ee", "error": null }
{ "store": "apple", "appId": "324684580", "bundleId": "com.spotify.client", "appName": "Spotify: Music and Podcasts", "country": "us",
"reviewId": "14647218299", "rating": 5, "title": "Amazing Options", "text": "Loving Spotify their selections are amazing ...",
"date": "2026-10-09T20:35:46Z", "appVersion": "9.1.90", "thumbsUp": 0, "isEdited": false,
"developerReply": null, "developerReplyDate": null,
"reviewUrl": "https://itunes.apple.com/us/review?id=324684580&type=Purple%20Software", "error": null }

What each store provides (the Actor never invents what the store does not publish):

FieldGoogle PlayApp Store
rating, text, date, reviewIdyesyes
bundleIdno (null; appId is the package name)yes, from Apple's lookup
titleno (Google reviews have none: null)yes
appVersionwhen published on the reviewfrom Apple RSS for reviews matched by review ID; otherwise null
developerReply and datewhen the developer repliedwhen the developer replied
thumbsUpyesRSS helpful-vote sum for matched reviews; zero is retained, missing is null
isEditednoyes
reviewUrlreview-specific Google linkApple-published RSS related link for matched reviews; this may open the app review page, not an individual-review permalink

Apps that cannot be fetched produce one row with an error note. If any app fails or an input correction is needed, the whole diagnostic run is uncharged. Reviews are spooled to disk until all app outcomes are known, then written to the dataset; normal successful runs still honor the spending cap.

RSS enrichment limits

For each App Store app/country the Actor fetches one public RSS feed of recent reviews and joins metadata by exact review ID. Catalog text, dates, sorting and developer replies remain authoritative. Reviews outside that recent RSS window, unmatched IDs, or unavailable feeds keep null metadata; no current app version is substituted for the version a reviewer used. RSS vote sums are not the number of voters. Google Play behavior is unchanged.

Price

Pay per event: $0.09 per 1,000 reviews ($0.00009 each), the same price for Google Play and App Store reviews. Error rows, empty results and already-seen reviews in only-new mode are free. Platform usage is included.

Good to know

  • Politeness: the Actor spaces its requests per store and backs off when a store answers "too many requests". If a store keeps refusing, it stops using it for that run and tells you in the row's error field. It does not try to get around blocks.
  • Newest first is the default and the only order used by onlyNew and sinceDate early-stop. mostHelpful is the store's own ranking.
  • The App Store keeps reviews per country; Google Play keeps them per language. In the Lab's check on 2026-10-10, OPay's 100 newest English Google Play reviews were the same for the Nigerian, US, UK and Romanian stores, and Romanian or German shared none with English. So the Actor fetches each Google Play app once however many countries you list (the gl= of a Play URL, else the first country) and says so in the run's status message; pick the Play market with language (for example ro for reviews written in Romanian). Since build 0.1.9 a Play run with us, gb and de returns and charges each review once (board test run 2026-10-10: 20 reviews, 20 charges). On the App Store each country is its own list (none of the US store's 4 newest OPay reviews were among the 300 newest Nigerian ones).
  • The stores may not list every review ever written. Numbers in maxReviewsPerApp are an upper bound.
  • Google Play and App Store pages and endpoints can change without notice; if a store changes, rows will carry an error note rather than wrong data.
  • An empty first Google Play page is retried once at the normal request rate. Zero reviews, unavailable apps and unrecognised IDs finish successfully with a status message explaining what to try. Other apps continue. Invalid sinceDate is ignored with a warning. Runs with these diagnostics are uncharged, including any reviews preserved from good apps; a truly empty apps input still fails. Per-app logs show raw page counts and emitted review counts.
  • Review text is user-written content. Check the stores' terms and applicable law for how you use it.

Pricing table & example

Pay per event. Prices per 1,000 events, by Apify plan (higher plans get a discount automatically):

EventFreeStarter (Bronze)Scale (Silver)Business (Gold)
Review returned (review)$0.09$0.09$0.085$0.08

Worked example: 5,000 billable review events on the Free plan cost 5,000 × $0.00009 = $0.45; on Gold, 5,000 × $0.00008 = $0.40. Rows that the Price section lists as free cost nothing. Apify platform usage is included in these prices.

Input example

{
"apps": [
"com.spotify.music"
],
"countries": [
"us"
],
"maxReviewsPerApp": 20
}

FAQ

Which stores and how many reviews?
Google Play and the Apple App Store, any country the store serves. Use the max-reviews input to cap volume and cost; the stores themselves limit how far back their public review pages go.

What is not covered?
Reviewer profiles, photos and IDs are not collected. Reviews the stores do not show publicly cannot be returned.

app-store-scraper returns no App Store reviews. Is this an alternative?
Yes, for reviews. In our check on 2026-10-12 (Python 3.13, one server), the PyPI package app-store-scraper 0.3.5 (last release 2020, repository archived) returned 0 reviews on 4 of 4 calls: it looks for an access token on the App Store web page that is no longer there, and Apple's review endpoint answers 401. The npm package of the same name (0.18.0) returned an empty array on 27 of 31 first-page calls, because Apple's review RSS feed often comes back empty. This Actor pages through Apple's public web review endpoint without a token and returns Google Play reviews in the same table. Put App Store IDs (324684580), URLs or bundle IDs in apps; maxReviewsPerApp and sinceDate replace how_many and after. It returns no reviewer names.

Is there an official Google Play or App Store reviews API?
Only for apps you own. Google's Play Developer API returns your own app's reviews created or modified in the last week (Google's docs, checked 2026-10-10), and Apple's App Store Connect API covers apps in your own developer account. For competitors' apps this Actor reads the public review pages instead; how far back it can go depends on what each store's public pages show.

Can I get only new reviews?
Yes: only-new mode with a monitor ID returns reviews earlier runs did not. Combine it with an Apify schedule.

Is this official?
No. Unofficial and not affiliated with, endorsed by or sponsored by any company or site named in the results or this README.

Something looks wrong or you need a field added?
Open an issue from the Actor's Issues tab with the input and run link.