Ratings

The /reports/ratings resource provides detailed access to current and historic ratings for any apps in a variety of formats.

The main resource gives you a single combined result across the filter parameters you select. The result can be limited by dates, products, and countries.

Using the group_by parameter, you can get a report broken down by products, countries, dates, or any combination thereof.

Important: Google Play no longer exposes the absolute number of ratings by star, or the total number of ratings by country. As such, star counts are not available any total ratings are only available when the country filter is not used.

Scope: All of the resources in this route require read access in the public scope (public:read).

The Public Data API add-on is required to access data for products that are not owned by your account. Free accounts must use the Public Data API, even for products that are in their account.

Getting Simple Totals

Request

GET /reports/ratings/?group_by={group_by}&start_date={start_date}&end_date=(end_date)&granularity={granularity}&products={product_ids}&countries={countries}&format={format}

Arguments

Argument Type Description
start_date Date (yyyy-MM-dd) Date, inclusive, to start reporting from. If you specify a granularity other than daily this will be rounded down to the nearest period. default: the first date we have data for.
end_date Date (yyyy-MM-dd) Date, inclusive, to stop reporting. If you specify a granularity other than daily this will be rounded up to the nearset period. default: yesterday.
group_by List One or more pivots separated by a comma (,). Available pivots: product, country, date.
products List (productId | productId1, productId2, …) specific products to include in the response, default: all active products in account
countries List (isoCode1, isoCode2, …) Countries to limit the report to (can be taken from /data/countries, default: include all countries)
format String Output format: JSON or CSV. Defaults to JSON.

Note: To prevent excessive repetition, when format=csv sub-object (like the product in /sales/products/…) the object will not be fully serialized but only its reference will be.

Response

Field Type Description
breakdown Array An array listing the number of total ratings by star, where index 0 = 1 star and index 4 = 5 stars.
These are the ratings that were observed on the last day of the given time period. If the report is broken down by date, these are the ratings that were observed on the source app store on the result date.

This array returns nulls for Android apps from Google Play.

new Number An array listing the number of new ratings by star, where index 0 = 1 star and index 4 = 5 stars.
These are the ratings that were added in the given time period. If the report is broken down by date, these are the ratings that were added since the preceding day.

This array returns nulls for Android apps from Google Play.

average Number A double representing the weighted average of all ratings.
total Number An int representing the total number of times the app has been rated.

This value will be null when an Android app from Google Play is selected and the country filter is used.

new_average Number A double representing the weighted average of ratings received in the selected time period.
new_total Number An int representing the number of times the app was rated in the selected time period.

This value will be null when an Android app from Google Play is selected and the country filter is used.

positive Number An int representing the total number of 4 and 5 star ratings.

This value will be null when an Android app from Google Play is selected.

negative Number An int representing the total number of 1 and 2 star ratings.

This value will be null when an Android app from Google Play is selected.

neutral Number An int representing the total number of 3 star ratings.

This value will be null when an Android app from Google Play is selected.

new_positive Number An int representing the number of 4 and 5 star ratings received in the selected period.

This value will be null when an Android app from Google Play is selected.

new_negative Number An int representing the number of 1 and 2 star ratings received in the selected period.

This value will be null when an Android app from Google Play is selected.

new_neutral Number An int representing the number of 3 star ratings received in the selected period.

This value will be null when an Android app from Google Play is selected.

one_star_percent Number A double representing the share of 1-star ratings as of the date. If `the response isn’t broken down by date this will be the value as of the end of the selected range.
two_star_percent Number A double representing the share of 2-star ratings as of the date. If `the response isn’t broken down by date this will be the value as of the end of the selected range.
three_star_percent Number A double representing the share of 3-star ratings as of the date. If `the response isn’t broken down by date this will be the value as of the end of the selected range.
four_star_percent Number A double representing the share of 4-star ratings as of the date. If `the response isn’t broken down by date this will be the value as of the end of the selected range.
five_star_percent Number A double representing the share of 5-star ratings as of the date. If `the response isn’t broken down by date this will be the value as of the end of the selected range.

Example

// GET /reports/ratings?start_date=-30&products=280402920612

{
  "breakdown": [
    98019,
    28197,
    92923,
    339374,
    4766539
  ],
  "new": [
    1860,
    492,
    1233,
    5268,
    86944
  ],
  "average": "4.81",
  "total": 5325052,
  "new_average": "4.83",
  "new_total": 95797,
  "positive": 5105913,
  "negative": 126216,
  "neutral": 92923,
  "new_positive": 92212,
  "new_negative": 2352,
  "new_neutral": 1233,
  "one_star_percent": "0.02",
  "two_star_percent": "0.01",
  "three_star_percent": "0.02",
  "four_star_percent": "0.06",
  "five_star_percent": "0.90"
}

This is what the output will look like when an Android app from Google Play is selected:

// GET /reports/ratings?start_date=-30&products=41259149022

{
  "breakdown": [
    null,
    null,
    null,
    null,
    null
  ],
  "new": [
    null,
    null,
    null,
    null,
    null
  ],
  "average": "4.28",
  "total": 26383,
  "new_average": "0.00",
  "new_total": 123,
  "positive": null,
  "negative": null,
  "neutral": null,
  "new_positive": null,
  "new_negative": null,
  "new_neutral": null,
  "one_star_percent": "0.10",
  "two_star_percent": "0.04",
  "three_star_percent": "0.05",
  "four_star_percent": "0.11",
  "five_star_percent": "0.71"
}

Generating a Report By Product, Country, or Date

Request

GET /reports/ratings/?group_by={group_by}&start_date={start_date}&end_date=(end_date)&granularity={granularity}&products={product_ids}&countries={countries}&format={format}

Arguments

Argument Type Description
start_date Date (yyyy-MM-dd) Date, inclusive, to start reporting from. If you specify a granularity other than daily this will be rounded down to the nearest period. default: the first date we have data for.
end_date Date (yyyy-MM-dd) Date, inclusive, to stop reporting. If you specify a granularity other than daily this will be rounded up to the nearset period. default: yesterday.
group_by List One or more pivots separated by a comma (,). Available pivots: product, country, date.
products List (productId | productId1, productId2, …) specific products to include in the response, default: all active products in account
countries List (isoCode1, isoCode2, …) Countries to limit the report to (can be taken from /data/countries, default: include all countries)
format String Output format: JSON or CSV. Defaults to JSON.

Note: To prevent excessive repetition, when format=csv sub-object (like the product in /sales/products/…) the object will not be fully serialized but only its reference will be.

Specifying a group_by that includes date without a start or end will default the start and end dates to the past 30 days.

Response

The response depends on the specified group_by given. No matter which group_by, the deepest part of the representation is similar to the representation you’d get if you don’t specify any grouping (like what you see above).

Here are a few examples of different groupings:

Example Response For Ratings By Date

// GET /reports/ratings?start_date=-30&products=280402920612&group_by=date

{
  "2023-08-05": {
    "breakdown": [
      96228,
      27726,
      91744,
      334310,
      4682870
    ],
    "new": [
      69,
      21,
      54,
      204,
      3275
    ],
    "average": "4.81",
    "total": 5232878,
    "new_average": "4.82",
    "new_total": 3623,
    "positive": 5017180,
    "negative": 123954,
    "neutral": 91744,
    "new_positive": 3479,
    "new_negative": 90,
    "new_neutral": 54,
    "one_star_percent": "0.02",
    "two_star_percent": "0.01",
    "three_star_percent": "0.02",
    "four_star_percent": "0.06",
    "five_star_percent": "0.89",
    "date": "2023-08-05"
  },
  "2023-08-06": {
    ...
  }
}

Example For Ratings By Product + Date

// GET /reports/ratings?start_date=-30&products=280402920612&group_by=product,date

{
  "280402920612": {
    "2023-08-05": {
      "breakdown": [
        96228,
        27726,
        91744,
        334310,
        4682870
      ],
      "new": [
        69,
        21,
        54,
        204,
        3275
      ],
      "average": "4.81",
      "total": 5232878,
      "new_average": "4.82",
      "new_total": 3623,
      "positive": 5017180,
      "negative": 123954,
      "neutral": 91744,
      "new_positive": 3479,
      "new_negative": 90,
      "new_neutral": 54,
      "one_star_percent": "0.02",
      "two_star_percent": "0.01",
      "three_star_percent": "0.02",
      "four_star_percent": "0.06",
      "five_star_percent": "0.89",
      "product_id": 280402920612,
      "date": "2023-08-05"
    },
    "2023-08-06": {
     ...
    }
  }
}