The Google Play Developer Reply to Reviews API allows you to view user feedback for your app and reply to this feedback. You can use this API to interact with users directly within your existing customer support toolkit, such as a CRM system.
The Reply to Reviews API allows you to access feedback only for production versions of your app. If you want to see feedback on alpha or beta versions of your app, use the Google Play Console instead. Also, note that the API shows only the reviews that include comments. If a user rates your app but does not provide a comment, their feedback is not accessible from the API.
Gaining Access
To work with the Reply to Reviews API, you provide authorization using either an OAuth client or a service account. If you're using a service account, enable the "Reply to reviews" permission within this account. For more information about establishing authorized access to this API, see Setting Up API Access Clients.
Retrieving Reviews
When using the Reply to Reviews API, you can retrieve a list of all recent reviews for your app, or you can see an individual review.
Retrieving a set of reviews
Use the GET
method to request a list of reviews for your app. In your request,
include the fully-qualified package name for your app—such as
com.google.android.apps.maps
—and the authorization token you received when
gaining access to the API.
GET https://www.googleapis.com/androidpublisher/v3/applications/your_package_name/reviews? access_token=your_auth_token
The response is a JSON string that contains a list of reviews for your app. The first result in the list shows the user comment that was most recently created or modified.
In the following example, the first review shows metadata that appears in all results, and the second review shows metadata that appears only in some results:
{ "reviews": [ { "reviewId": "12345678", "authorName": "Jane Bloggs", "comments": [ { "userComment": { "text": "This is the best app ever!", "lastModified": { "seconds": "1443676826", "nanos": 713000000 }, "starRating": 5 } } ] }, { "reviewId": "11223344", "authorName": "John Doe", "comments": [ { "userComment": { "text": "I love using this app!", "lastModified": { "seconds": "141582134", "nanos": 213000000 }, "starRating": 5, "reviewerLanguage": "en", "device": "trltecan", "androidOsVersion": 21, "appVersionCode": 12345, "appVersionName": "1.2.3", "thumbsUpCount": 10, "thumbsDownCount": 3, "deviceMetadata": { "productName": "E5333 (Xperia™ C4 Dual)", "manufacturer": "Sony", "deviceClass": "phone", "screenWidthPx": 1080, "screenHeightPx": 1920, "nativePlatform": "armeabi-v7a,armeabi,arm64-v8a", "screenDensityDpi": 480, "glEsVersion": 196608, "cpuModel": "MT6752", "cpuMake": "Mediatek", "ramMb": 2048 } } }, { "developerComment": { "text": "That's great to hear!", "lastModified": { "seconds": "1423101467", "nanos": 813000000 } } } ] } ], "tokenPagination": { "nextPageToken": "12334566" } }
Each result includes the following metadata:
- reviewId
- Uniquely identifies this review. It also indicates a specific user's review, since users can write only one review for a particular app.
- authorName
The name of the user who writes the review.
Note: In rare cases, the
authorName
might not appear in a given result.- comments
A list that includes the user's feedback on the app. If this review includes a title, then this title and the review's body text both appear in the
text
element, and a tab character separates the title and body text. ThelastModified
element indicates the time at which the user most recently submitted their review.If you have already responded to this review, your feedback appears as the second element in the list of comments.
- starRating
The user's evaluation of your app on a 1 to 5 scale. A score of 5 indicates that the user is highly satisfied with your app.
By default, 10 reviews appear on each page. You can display up to 100 reviews
per page by setting the maxResults
parameter in your request.
If the list of reviews continues onto another page, the API includes a
tokenPagination
element in the response. When requesting the next page of
reviews, include the token
element. Set this element’s value to the
nextPageToken
value, which appears in the original response.
Note: You can retrieve only the reviews that users have created or modified within the last week. If you want to retrieve all reviews for your app since the beginning of time, you can download your reviews as a CSV file using the Google Play Console.
The following example of a GET
request displays the next page of reviews. This
request assumes that the current page of reviews (as shown in the response of
the previous request) contains a nextPageToken
value of "12334566"
. The
request also indicates that the next page should show up to 50 reviews.
GET https://www.googleapis.com/androidpublisher/v3/applications/your_package_name/reviews? access_token=your_auth_token&token=12334566&maxResults=50
Retrieving an individual review
You can also use the GET
method to retrieve an individual review. You provide
the same URL as the one used for
retrieving a set of reviews, except that you
also include the review_id
corresponding to the review that you wish to see:
GET https://www.googleapis.com/androidpublisher/v3/applications/your_package_name/reviews/ review_id?access_token=your_auth_token
The corresponding response is a JSON string that contains content and metadata for a single review:
{ "reviewId": "87654321", "authorName": "Joan Smith", "comments": [ { "userComment": { "text": "This app is awesome!", "lastModified": { "seconds": "1452114723", "nanos": 913000000 }, "starRating": 5 } } ] }
Translating Review Text
Review text can be automatically translated before being returned from the
reviews API. When retrieving either a list of reviews or a single review, add
a translationLanguage
parameter to the query. For example:
GET https://www.googleapis.com/androidpublisher/v3/applications/your_package_name/reviews? access_token=your_auth_token&translationLanguage=en
The translationLanguage
parameter can specify a language with or without
country. For example, both "en" and "en_GB" are valid.
If you specify a translation language that is different than the original
text, the system returns the translated text in the text
property and the
original text in the originalText
property. Here's an example:
{ "reviewId": "12345678", "authorName": "Jane Bloggs", "comments": [ { "userComment": { "text": "This is the best app ever!", "lastModified": { "seconds": "1443676826", "nanos": 713000000 }, "starRating": 5, "originalText": "Dies ist die beste App überhaupt!" } } ] }
Replying to Reviews
You can also engage with your app's users by replying to their reviews. After you submit your reply, the user receives a notification, indicating that you have responded to their feedback.
We discourage the use of automated replies to reviews, with the intention of updating those replies manually at a later time. Also, although you can reply to a review as many times as you'd like, the user receives a notification only after the first time you reply to a created or modified review. The following table illustrates how the user is notified during your interactions with them:
User-Developer Interaction | Notification Sent to User? |
---|---|
User writes review; developer submits reply | Yes |
Developer updates reply to original review | No |
User updates review; developer updates reply | Yes |
Note: Because your replies to reviews appear publicly on the app store page, it's important that you don't include sensitive information about users when you write these replies.
To submit a reply to a user review, use the POST
method. In your request,
indicate that the Content-Type
is application/json
, and include a JSON
document that contains your reply:
POST https://www.googleapis.com/androidpublisher/v3/applications/your_package_name/reviews/ review_id:reply?access_token=your_access_token Content-Type: application/json { "replyText": "Thanks for your feedback!" }
Note: The replyText
that you include with your
POST
request can contain at most 350 characters. You should use
plain text in your reply; well-formed HTML tags are removed and are not
included in the character count for your reply. The content that you place
inside well-formed HTML tags is preserved, however.
If your request succeeds, you receive the following JSON string as a response.
The lastEdited
element indicates the time at which the API records your reply
to the user's review.
{ "result": { "replyText": "Thanks for your feedback!", "lastEdited": { "seconds": "1453978803", "nanos": 796000000 } } }
If your POST
request is invalid, however, the response displays one of the
following error codes instead:
400 Bad Reply Request
- The
replyText
is too long or is missing. 404 Not Found
- The review with the given
review_id
does not exist.
Quotas
As a courtesy to other developers, the Reply to Reviews API enforces several quotas. These quotas are enforced separately on a per-app basis:
GET
requests (for retrieving lists of reviews and individual reviews) – 200 per hourPOST
requests (for replying to reviews) – 2000 per day
If your app needs to retrieve or reply to a higher volume of reviews than these quotas allow, send a request to increase your app's quota.