DEV Community

Aniruddha Garje
Aniruddha Garje

Posted on AI-assisted

How to export Google Play reviews to CSV for any app and country

If you need reviews for an app you do not own, or for many apps and countries at once, you have to export them yourself. Here is what a Google Play review export looks like, what is missing from it, and the one request I use to get a CSV.

What one review row holds

Each row I export has these fields:

  • rating, text and date, in ISO 8601 and UTC
  • appVersion, the version the reviewer used
  • developerReply and developerReplyDate
  • thumbsUpCount
  • country and language
  • reviewId and reviewUrl, a link that opens the review on Google Play

Reviewer names are off by default. Most analysis does not need them, and leaving them out keeps the file free of personal data.

What 400 reviews showed me

I exported the 400 newest US reviews of one large app, Spotify (run DkHhBhzqyaoiUPzj3).

  • They spanned under 16 hours, from 2026-10-09 11:31 to 2026-10-10 03:22 UTC. For a popular app, the review list never stands still. Export on a schedule and keep only what is new.
  • 67 of the 400 (16.8%) had no app version. Plan for empty values before you group by version.
  • 61 of the 400 (15.3%) carried a developer reply.
  • 243 (60.8%) were 5 stars and 69 (17.3%) were 1 star.

Reviews are collected per country

I collect each country separately, and every row carries the country it came from. Ask for two countries and you get both in one table, with the country on each row.

If you also need App Store reviews

Apple's public feed stops at 10 pages of 50 reviews (500) per country and sort order. Page 11 answers HTTP 400. So collect each country separately, and collect often, so new reviews are captured before they drop out of that window.

The two stores do not hold the same fields. In one run with 50 App Store and 50 Google Play reviews of the same app (run uwff59RL3Sq0bfG6i), the App Store rows had no developer reply or language, and the Google Play rows had no title. I keep both stores in one schema: a field a store does not have is empty, never missing. That way both stores line up in one sheet.

The request I use

I built an Apify Actor for this, so my export is one HTTP request. You need an Apify account and your API token in the APIFY_TOKEN environment variable.

import os

import requests

url = "https://api.apify.com/v2/acts/garje~app-store-play-reviews-scraper/run-sync-get-dataset-items"
run_input = {
    "apps": ["com.spotify.music"],
    "stores": ["googlePlay"],
    "countries": ["us", "gb"],
    "sort": "newest",
    "maxReviewsPerApp": 100,
}
resp = requests.post(
    url,
    params={"format": "csv"},
    json=run_input,
    headers={"Authorization": f"Bearer {os.environ['APIFY_TOKEN']}"},
    timeout=300,
)
resp.raise_for_status()
with open("reviews.csv", "wb") as f:
    f.write(resp.content)
Enter fullscreen mode Exit fullscreen mode

maxReviewsPerApp applies to each country. I ran the same request with 5 reviews for each of 2 countries, and it returned a CSV with 10 reviews (run jyfg8laqCOZLLKxGq). The price is $0.12 per 1,000 reviews, and you are charged only for reviews saved.

Keep the export fresh

Add "since": "2026-10-05" to the input and you get only reviews posted on or after that date. Run it on a schedule and move the date forward each time.

If you would rather click than code, the same setup is saved as a public example you can run: Monitor new app reviews since a date.

Sources

What Where it comes from
400 newest reviews: time span, versions, replies, ratings run DkHhBhzqyaoiUPzj3
Fields each store does not have run uwff59RL3Sq0bfG6i
The request above, 10 reviews run jyfg8laqCOZLLKxGq
since returns only reviews on or after the date run YWTUOzRZnqWD2Uaze
Apple's 500 limit, page 11 answers HTTP 400 checked for both sort orders on 8 Oct 2026

I built the App Store and Google Play reviews scraper used above, and every week I check it against the live stores. I drafted this article with AI help; every number comes from the runs in the table.

Top comments (0)