How to get Google Play reviews older than 7 days
The Play Developer API only returns the last week of reviews. Here is how to get full Google Play review history from Play Console CSV exports in Cloud Storage.
If you have ever built a Google Play review integration, you have probably hit this: the Google Play Developer API happily returns this week's reviews, and nothing older. Ask for last month and you get an empty page. This is documented behavior, not a bug.
The full history does exist. Google Play Console writes it to monthly CSV reports in a Google Cloud Storage bucket that belongs to your developer account. This guide explains why the API window is so short, how to find and read the CSV exports, how to give a service account access, and how to combine the two into one complete, up-to-date review history.
Why the Play Developer API only returns the last week
The reviews resource in the Google Play Developer API (also called the Android Publisher API) has two main methods: reviews.list to fetch reviews and reviews.reply to respond to them. Google's Reply to Reviews documentation states two limits that matter for history:
- You can only retrieve reviews that were created or modified within the last week. A review that was edited recently shows up again; one that hasn't changed in a month does not.
- Only reviews that include a comment are returned. Star-only ratings without text are not available through this endpoint.
The API is designed for replying to fresh feedback, not for analytics or archiving. The same page also documents quotas for read and reply requests, so check it before you design a polling schedule. Replies themselves are limited to 350 characters.
In practice this means any tool, script or bot that only calls reviews.list starts with at most a week of history on day one. It also misses everything that happened while it was switched off for more than a week.
Where the full history lives: Play Console review reports
Play Console publishes several bulk reports (reviews, statistics, financial reports and more) to a Cloud Storage bucket tied to your developer account. Google describes them in Download and export monthly reports.
Find the reports in Play Console
- Open Google Play Console and select your developer account (not a specific app).
- Go to Download reports and choose Reviews.
- Pick an app and month to download a single file in the browser, or copy the Cloud Storage URI shown on the page. It looks like
gs://pubsite_prod_rev_0123456789…/reviews/.
What the files look like
- One CSV per app per month, named
reviews_<package>_<YYYYMM>.csv, for examplereviews_com.example.app_202609.csv. - Each row is a review with fields such as package name, app version, reviewer language, device, submit and last-updated timestamps, star rating, review title and text, and developer reply text and time. Column names can change over time, so read the header row instead of relying on position.
- The current month's file is updated over the course of the month, so treat it as a moving target and re-read it rather than importing it once.
- The files are typically encoded as UTF-16. If your CSV parser shows garbled characters or null bytes, decode as UTF-16 first.
The exports include star-only ratings as well as reviews with text, so they hold more than the API returns even for recent weeks.
Listing and downloading the CSVs with gsutil
With the Google Cloud SDK installed and authenticated as a user (or service account) that has access, you can list and copy the files directly:
# List every monthly review file in the bucket
gsutil ls gs://pubsite_prod_rev_<id>/reviews/
# Copy one app's history locally
gsutil -m cp "gs://pubsite_prod_rev_<id>/reviews/reviews_com.example.app_*.csv" ./reviews/
# Convert one file from UTF-16 to UTF-8 for tools that expect it
iconv -f UTF-16 -t UTF-8 reviews/reviews_com.example.app_202609.csv > 202609.utf8.csvReplace <id> with the bucket ID from the Cloud Storage URI on the Download reports page. The newer gcloud storage ls and gcloud storage cp commands work the same way. You can't browse this bucket from your own Google Cloud project's console, because it is owned by Google Play. Access is granted through Play Console permissions.
Granting a service account access
For an automated job you will want a service account rather than your personal login. The same service account can call the Play Developer API and read the report bucket.
- In Google Cloud, create (or reuse) a project, enable the Google Play Android Developer API, create a service account and download a JSON key.
- In Play Console, open Users and permissions, invite the service account's email address as a user, and grant the permissions it needs. For reports, that is the permission to view app information and download bulk reports. To reply to reviews, it also needs the permission to reply to reviews.
- Wait for the permission change to propagate. Access to the reports bucket is often not immediate. If
gsutil lsreturns a 403 right after you grant access, try again later. - Authenticate with the key, for example
gcloud auth activate-service-account --key-file=key.json, or use a Cloud Storage client library in your job.
Treat the JSON key like a password: store it in a secrets manager, grant only the permissions you need, and rotate it if it leaks.
The DIY approach: merge CSV history with the API
A complete review history needs both sources. The CSVs cover the past; the API covers recent changes and lets you reply. A simple design:
- Backfill once. List every
reviews_*.csvfor your package, decode them, and upsert each row into your database. - Poll the API on a schedule. Call
reviews.listfor each app (paging withnextPageToken) and upsert reviews and developer replies. Polling every few minutes keeps you well inside the one-week window, within the documented quotas. - Re-read the current month's CSV regularly, for example daily, to pick up star-only ratings and anything the API didn't return.
- Deduplicate carefully. The API returns a
reviewId; check which columns in your CSV export identify the same review (recent exports include a review link) and fall back to matching on author, timestamp and text if needed. Keep the most recently modified version, since users can edit reviews. - Handle failures. If the API job is down for more than a week, the CSVs are your only way to recover the gap, so make the backfill job safe to re-run.
It is not a huge project, but it involves encodings, schema drift, permissions and scheduling. It also tends to break quietly when a key is rotated or a column is renamed.
How Review Expert backfills Google Play history
Review Expert does the merge for you. When you connect a Google Play app under Apps & Businesses with a service account:
- It reads your Play Console review CSV exports from Google Cloud Storage to import historical reviews beyond the API's one-week window (currently the last 36 monthly reports).
- It uses the Google Play Developer API for recent reviews and existing developer replies.
- After the initial history sync, it syncs incrementally roughly every 5 minutes.
- You can reply from Review Expert, and the reply is posted back to Google Play. You can filter by rating, platform and date, and route reviews to Slack, Linear and other destinations.
Setup details are on the Google Play source page. Review Expert currently supports Google Play and the App Store; other sources are coming soon.
Troubleshooting common problems
reviews.listreturns nothing: the app may have had no reviews with text created or modified in the last week. Check the CSVs.- 403 on the bucket: the service account is missing the bulk-reports permission in Play Console, or the change hasn't propagated yet.
- No reviews folder or no file for a month: files only exist for months in which the app received reviews. Very new apps may not have any yet.
- Garbled text: decode as UTF-16 rather than UTF-8.
- Counts don't match the Play Console UI: the CSVs include star-only ratings and the API does not. Make sure you compare like with like.
