Apify Actors / App Store and Google Play reviews in one table

Apify Actor

App Store and Google Play reviews in one table

Review data is easy to collect badly. There are two stores, two formats, different pagination, and duplicates when the same review shows up in several countries. This Actor returns both stores in one schema, deduplicated, with a summary row per app.

Give it app IDs, App Store URLs, Google Play package names or store URLs. You get one row per review with rating, title, text, date, version and the developer reply, plus an optional summary row with the rating histogram, reply rate and the top 15 keywords.

Run it on ApifySee input and output

$0.0001 per review ($0.10 per 1,000) · pay per result, no subscription

Price

EventPriceCharged when
Review$0.0001Once per review row saved, after the rating and date filters and duplicate removal
Example runUnitsCost
The prefilled first run (2 apps, US, 50 each)100 reviews$0.01
1,000 reviews of one app1,000 reviews$0.10
Daily monitor, 1 app, sinceDate: "3 days"about 2,700 reviews a monthabout $0.27 a month

What you get

Input

Set the run options in the Apify console, or send the same object through the API.

{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "languages": [
    "en"
  ],
  "maxReviewsPerApp": 50,
  "sort": "newest",
  "sinceDate": "3 days",
  "includeSummary": true
}

The prefilled input has one App Store URL and one Google Play package name. You can also pass numeric App Store IDs and Play store URLs.

Output

{
  "type": "review",
  "store": "appstore",
  "appId": "324684580",
  "appName": "Spotify: Music and Podcasts",
  "country": "us",
  "lang": null,
  "reviewId": "14746997096",
  "rating": 5,
  "title": "Staggering difference in my music quality",
  "text": "Spotify changed my life from being a decent music lover (vinyl, etc) to truly A level.",
  "author": null,
  "date": "2026-11-03T19:41:44.000Z",
  "version": null,
  "thumbsUp": null,
  "developerReply": null,
  "url": "https://apps.apple.com/us/app/id324684580?see-all=reviews"
}

One real review row. type is review or summary; summary rows carry reviewCount, avgRating, ratingHistogram, developerReplyRate, oldestReviewDate, newestReviewDate and topKeywords.

Run it from your own code

The Actor takes the same input as a JSON body. This call starts a run, waits for it and returns the dataset items.

curl -X POST "https://api.apify.com/v2/acts/zovo-one~app-store-google-play-reviews/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580", "com.spotify.music"], "countries": ["us"], "languages": ["en"], "maxReviewsPerApp": 50, "sort": "newest", "sinceDate": "3 days", "includeSummary": true}'

A sync call waits at most 300 seconds. For longer runs, start a run with POST /v2/acts/zovo-one~app-store-google-play-reviews/runs, wait for it, then read /v2/datasets/<defaultDatasetId>/items.

Limits

Per run you can ask for up to 200 apps, 50 countries and 20 languages, and at most 2,000 app x country tasks. maxReviewsPerApp goes up to 20,000. The App Store pages about 1,000 to 3,000 reviews a minute per task; Google Play returns up to 150 per request. The stores cannot filter by stars, so a rating filter reads up to 10x maxReviewsPerApp and drops the rest. Neither store publishes star-only ratings as reviews, so those are not included.

Questions

How do I get App Store reviews for an app?

Pass the apps.apple.com URL or the numeric app ID (324684580 for Spotify). Numeric IDs are the safer choice, because they don't change when Apple renames a listing. The Actor returns one row per review with rating, title, text and date.

Can I scrape Google Play and the App Store in one run?

Yes, that is the point. Put App Store URLs or IDs and Play package names or URLs in the same apps list. Both stores land in one dataset with the same columns, and store tells you which is which.

How do I collect only new reviews every day?

Schedule a daily run with sort: "newest" and sinceDate: "3 days", then drop reviewId values you already have. Reading stops as soon as older reviews start, so the run is short. A review can appear in up to three daily runs, and it is charged each time it is saved, because the Actor does not remember reviews between runs.

Why are version and thumbsUp empty on App Store rows?

Apple's public review data has no app version and no helpful votes. Google Play has both, so those columns fill in for Play reviews only.

Why does a second country add so few Google Play reviews?

Google Play shows mostly the same reviews in every country for one language, and the Actor removes duplicates so you don't pay twice. For more distinct Play reviews, add languages such as ["en", "de", "fr"] instead of countries. App Store reviews do differ by country.

Are reviewer names included?

Only if you turn on includeAuthor. Profile pictures and user IDs are never collected. The Actor reads only reviews that anyone can see on the public store pages without logging in.

Support this work

If this Actor saves you time, you can support the work on GitHub Sponsors. Monthly tiers start at $5, and one-time tiers start at $15. Sponsorship is optional, and the tool works the same without it.

Built and maintained by Zovo. Actor on Apify · All Actors.