Google Play Reviews API
Google's Play Developer API returns reviews — but only from the last 7 days, only for one app at a time, and only after you've set up a service account and wired the permissions. ReviewHook gives you one REST endpoint to fetch, filter, and reply to Google Play reviews across every app you manage. Connect once — we backfill your full review history and keep syncing, so nothing disappears after Google's 7-day window.
Quick Start
- 01
Sign up at reviewhook.dev
Get your API key in seconds.
- 02
Connect your service account
Create a service account for your Play Console (we walk you through it), grant it the "Reply to reviews" permission, and upload the JSON key to ReviewHook once. We handle authentication from there.
- 03
Start making API calls
Use one endpoint to fetch and reply to reviews across every app. We backfill your historical reviews at connection and sync continuously from there.
Fetch Google Play Reviews
Pull reviews for an app — or across every app in your account — through one REST call. Full history included, not just Google's 7-day window.
const response = await fetch('https://api.reviewhook.dev/reviews?platform=google_play', {
headers: {
'api-key': 'rev_live_...',
'Content-Type': 'application/json'
}
});
const { data, pagination } = await response.json();
console.log(data[0].id); // '85d9e48d25f9417d {
"data": [
{
"id": "85d9e48d25f9417d",
"platformReviewId": "gp:AOqpTOH9x2k7...",
"platform": "google_play",
"rating": 5,
"title": null,
"text": "Battery life jumped after the last update and the new dark mode is gorgeous. Runs great on my Pixel 8.",
"authorId": null,
"authorName": "Priya N.",
"productId": "com.acme.notes",
"productName": "Acme Notes",
"appVersion": "5.1.0",
"deviceInfo": {
"device": "Pixel 8",
"osVersion": "Android 14",
"language": "en_US"
},
"createdAt": "2026-04-12T16:22:08.000Z",
"updatedAt": "2026-04-12T16:22:08.000Z",
"hasResponse": false
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 184,
"totalPages": 10
}
} Response schema 2 fields +4 nested
Array of Google Play reviews. Up to limit items.
Cursor metadata for the current page.
Unified review ID assigned by reviewhook.
Original review ID from the source platform.
Source platform enum. app_store · google_play · g2 · google_business · trustpilot · yelp.
Star rating on a 1–5 scale, normalized across platforms.
Review headline. Omitted where the platform has no title field.
Full review body, UTF-8.
Platform-specific author identifier. Omitted when anonymous.
Display name as shown on the platform. Omitted when anonymous.
Product identifier on the source platform.
Product or listing name at time of review.
App build the reviewer was on (mobile stores only).
Device metadata for mobile-store reviews.
When the review was posted on the source platform.
Last modification — edits, translations, or response changes.
True when the brand has replied to this review.
Upstream delivery state of the reply — queued · sent · failed.
Nested response object. Present only when hasResponse is true.
Reply body as posted to the platform.
Identifier of the team member who replied.
Display name attached to the reply.
When the reply was posted upstream.
Device model reported by the source, e.g. Pixel 8 or iPhone 15 Pro.
Operating-system version string reported by the source, e.g. iOS 17.4 or Android 14.
Reviewer locale at time of review, e.g. en_US.
1-indexed page number echoed back.
Items per page that were returned.
Total reviews matching the filter.
Ceiling of total / limit.
Reply to Google Play Review
const response = await fetch('https://api.reviewhook.dev/reviews/rev_9f2e1a84/reply', {
method: 'POST',
headers: {
'Authorization': 'Bearer rev_live_...',
'Content-Type': 'application/json'
},
body: JSON.stringify({ text: 'Thanks for flagging this — the crash on Pixel devices is fixed in 5.1.1, rolling out now.' })
});
const review = await response.json();
console.log(review.hasResponse); // true {
"id": "rev_9f2e1a84",
"platformReviewId": "gp:AOqpTOH9x2k7...",
"platform": "google_play",
"rating": 2,
"title": null,
"text": "App keeps crashing on launch since the last update. Pixel 8, Android 14.",
"authorId": null,
"authorName": "Priya N.",
"productId": "com.acme.notes",
"productName": "Acme Notes",
"appVersion": "5.1.0",
"deviceInfo": {
"device": "Pixel 8",
"osVersion": "Android 14",
"language": "en_US"
},
"createdAt": "2026-04-12T16:22:08.000Z",
"updatedAt": "2026-05-11T09:14:02.000Z",
"hasResponse": true,
"responseStatus": "queued",
"response": {
"text": "Thanks for flagging this — the crash on Pixel devices is fixed in 5.1.1, rolling out now.",
"authorId": "u_team_09",
"authorName": "Acme Notes",
"createdAt": "2026-05-11T09:14:02.000Z"
}
} Response schema 5 fields +3 nested
Unified review ID — unchanged from the request.
Now true after a successful reply.
Upstream delivery state — typically queued immediately after posting.
The reply you just posted, echoed back.
All other Review fields are returned unchanged. See the Review schema below.
Unified review ID assigned by reviewhook.
Original review ID from the source platform.
Source platform enum. app_store · google_play · g2 · google_business · trustpilot · yelp.
Star rating on a 1–5 scale, normalized across platforms.
Review headline. Omitted where the platform has no title field.
Full review body, UTF-8.
Platform-specific author identifier. Omitted when anonymous.
Display name as shown on the platform. Omitted when anonymous.
Product identifier on the source platform.
Product or listing name at time of review.
App build the reviewer was on (mobile stores only).
Device metadata for mobile-store reviews.
When the review was posted on the source platform.
Last modification — edits, translations, or response changes.
True when the brand has replied to this review.
Upstream delivery state of the reply — queued · sent · failed.
Nested response object. Present only when hasResponse is true.
Reply body as posted to the platform.
Identifier of the team member who replied.
Display name attached to the reply.
When the reply was posted upstream.
Device model reported by the source, e.g. Pixel 8 or iPhone 15 Pro.
Operating-system version string reported by the source, e.g. iOS 17.4 or Android 14.
Reviewer locale at time of review, e.g. en_US.
Endpoints
Every action you can take on Google Play reviews, exposed through ReviewHook's unified API.
Filtering parameters
Common filters for the /reviews endpoint:
| Parameter | Description |
|---|---|
platform | Filter by source platform — pass google_play for Google Play reviews |
appId | Filter by Google Play app (package) |
rating | Exact star rating (1–5). Overrides minRating / maxRating when set |
minRating | Minimum star rating (1–5) |
maxRating | Maximum star rating (1–5) |
hasResponse | Return only reviews with (true) or without (false) a reply |
fromDate | Lower bound on createdAt. ISO-8601 date or date-time |
toDate | Upper bound on createdAt. ISO-8601 date or date-time |
authorName | Substring match on the reviewer's display name |
appVersion | Filter by the app version the review was left on |
For the full list of filters and response fields, see the API reference.
Features
- Full review history backfilled at onboarding — not just Google's 7-day window
- Continuous sync, so the rolling window never silently costs you reviews
- Fetch across every app without per-package loops
- Reply programmatically with one POST — no service-account token plumbing in your code
- Device, OS version, and language metadata on every review
- Same API covers App Store, Google Business, G2 — useful if you ever expand
Direct API vs ReviewHook
What it actually takes to ship a Google Play reviews integration, with and without us.
| Google Play Developer API | ReviewHook | |
|---|---|---|
| Setup time | Days to weeks | Minutes |
| Review history | Last 7 days only — full history means parsing monthly CSV exports from Cloud Storage | Full history through one endpoint |
| Auth handling | Create a service account, manage JSON keys, wire Play Console permissions | Connect once, we handle it |
| Multi-app | Manual iteration per package | Single endpoint |
| Read limits | 200 requests/hour against Google | No limits |
| Cross-platform | Google Play only | Same endpoint covers App Store, Google Business, G2 |
Start building with the Google Play Reviews API
Free during beta · No credit card required · Get 3 months free at launch.
Frequently asked
Yes. Google Play's API authenticates through a service account: you create one for your Play Console, grant it the "Reply to reviews" permission, and upload the JSON key to ReviewHook once. We walk you through it during onboarding — about ten minutes. Note that only the Play Console account owner can create service accounts.
That's a Google Play platform limitation — the reviews endpoint only returns reviews created or modified within the past week, with no way to page further back. ReviewHook works around it: we backfill your historical reviews at onboarding and sync continuously from then on, so your full history is available through one endpoint.
Yes. POST /reviews/{id}/reply posts a developer response. Google Play limits replies to 350 characters, and posting a new reply to the same review updates the existing one.
No — Google's Play Developer API doesn't support deleting developer replies. You can update a reply by posting a new one, but removal isn't available through the API on any tool. This is a platform limitation, not a ReviewHook one; the App Store API does support reply deletion.
No. This API only accesses reviews for apps in your own Play Console account. It isn't a scraper for arbitrary public app reviews.
Google's API only returns reviews that include a written comment. Ratings without text aren't accessible through the API — so star-only ratings appear in your Play Console statistics but not in any API-based tool.
Yes. The same API and endpoints cover Apple App Store reviews — just pass platform=app_store. See our App Store Reviews API page for the Apple-specific details.