Reply to Reviews

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. The lastModified 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 hour

  • POST 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.