DEV Community

Hay Equipos
Hay Equipos

Posted on

How to export App Store and Google Play reviews to a spreadsheet

After a release, the fastest signal on what broke is the review section. But Apple and Google show reviews in different places, with different fields, and neither gives you a simple export. If you look after an app on both platforms, or watch competitor apps, you end up reading two stores by hand.

The App Store and Google Play Reviews Scraper, published by Hay Equipos on the Apify Store, pulls public reviews from both stores in one run and returns them in one identical table. You paste app IDs or store links, choose a country and a sort order, and get ratings, review text, app versions, dates, helpful votes and, for Google Play, developer replies.

What you get back

One row per review, with the same fields for both stores (illustrative values):

{
  "store": "google",
  "appId": "com.example.notes",
  "appName": "Example Notes",
  "country": "us",
  "language": "en",
  "reviewId": "0f3c2a10-1111-2222-3333-444455556666",
  "rating": 2,
  "title": null,
  "text": "Sync stopped working after the last update.",
  "appVersion": "4.12.0",
  "reviewedAt": "2026-09-20T14:02:11.000Z",
  "helpfulVotes": 7,
  "developerReply": "Thanks, a fix is rolling out this week.",
  "developerRepliedAt": "2026-09-21T09:30:00.000Z",
  "reviewUrl": "https://play.google.com/store/apps/details?id=com.example.notes&reviewId=0f3c2a10-1111-2222-3333-444455556666"
}
Enter fullscreen mode Exit fullscreen mode

As a table, a few rows might look like this:

store appName rating appVersion reviewedAt text
apple Example Notes 5 4.12.0 22 Sep 2026 Best notes app I have used
apple Example Notes 1 4.12.0 21 Sep 2026 Crashes on launch
google Example Notes 2 4.12.0 20 Sep 2026 Sync stopped working

Reviewer names are removed by default. A SUMMARY record in the key value store lists reviews per app and any error per app.

Step by step in the Apify Console

  1. Open the actor on the Apify Store and start it in the Console.
  2. In Apps, add one app per line. Accepted: a numeric App Store ID, an App Store link, a Google Play package name like com.example.notes, or a Google Play link. You can mix both stores.
  3. Set Country (two letter code, default us). Apple keeps separate reviews for each country store.
  4. Set Language (Google Play) (default en). Apple ignores this.
  5. Set Maximum reviews per app (default 100).
  6. Choose Sort order: newest, most helpful, or by rating (Google Play only; Apple falls back to newest).
  7. Leave Include reviewer display names off unless you have a lawful reason to process names.
  8. Click Start and export the dataset as CSV, Excel or JSON.

Calling it from code

curl:

curl -X POST \
  "https://api.apify.com/v2/acts/pistachio_implementation~app-store-google-play-reviews/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["310633997", "com.whatsapp"], "country": "us", "maxReviewsPerApp": 50, "sort": "newest"}'
Enter fullscreen mode Exit fullscreen mode

Python with apify-client:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("pistachio_implementation/app-store-google-play-reviews").call(
    run_input={
        "apps": [
            "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
            "https://play.google.com/store/apps/details?id=com.whatsapp",
        ],
        "country": "us",
        "language": "en",
        "maxReviewsPerApp": 200,
        "sort": "newest",
    }
)

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["store"], review["rating"], review["appVersion"], (review["text"] or "")[:80])
Enter fullscreen mode Exit fullscreen mode

To monitor new reviews every day, save the input as a task, add a schedule, use the newest sort with a modest cap, and remove duplicates by reviewId on your side.

Pricing

Pay per event: $0.0004 per review saved to your dataset, which is $0.40 per 1,000 reviews. Apps that fail or return nothing are not charged. You can set a maximum charge for a run and the actor stops when it is reached.

Limits and what it does not do

  • Apple's public feed holds about 500 reviews per country and sort order (10 pages of 50). For more iOS history, run other countries or combine the newest and most helpful sorts.
  • App Store rows have no developer reply, because Apple's feed does not include it. Their reviewUrl points to the app's reviews page, not to the single review.
  • Google Play titles are usually empty, and Google Play returns reviews in the language you choose. Run again with another language to get more.
  • No ratings summary. Total ratings and average score are not included; this tool is for the reviews themselves.
  • It reads only public endpoints (Apple's customer reviews feed and lookup API, and Google Play's public store pages through an open source library). No login, account or key.
  • Apps are processed two at a time by default, with pauses between pages, so very large pulls take a while.

Please use the review data in line with Apple's and Google's terms, and treat any reviewer names you choose to collect as personal data.

Try it on the Apify Store: https://apify.com/pistachio_implementation/app-store-google-play-reviews

Top comments (0)