Using the Play Console website, you can download monthly reports about individual apps to help you track and understand your app's performance.
Types of reports
Detailed reportsDetailed reports include data on individual events.
- Reviews
- Financial: estimated sales, earnings, rewarded products, Korean Play balance funded
Aggregated reports include consolidated data (averages, daily totals, etc) for app statistics.
- Statistics: installs, crashes, ratings and subscriptions
- User acquisition: retained installers, buyers (7 days after install), subscribers
Download reports
- Sign in to your Play Console.
- Click Download reports
.
- On the left menu, select a report.
- Under 'Select an application', type and select your app's name.
- Select the year and month of the report you want to download.
Note: Financial reports include all apps in your account.
Download reports from Google Cloud Storage
Reports are available from Google Cloud Storage. Reports are generated daily and accumulated in monthly CSV files. They are stored in a private Google Cloud Storage bucket for your Google Play Developer account.
You can access reports using Google Cloud Storage on your browser or programmatically using gsutil. You can also use other tools to programmatically access your Cloud Storage bucket.
Tip: If you want to import your reports from Google Cloud Storage into BigQuery, you need to convert the CSV files from UTF-16
to UTF-8
.
Find your Google Cloud Storage URI
You can copy your Google Cloud Storage URI by clicking the Copy Cloud Storage URI button next to the corresponding section header on the Download reports pages.
Your Cloud Storage URI begins with pubsite_prod_rev
(example: pubsite_prod_rev_01234567890987654321
).
- Install the gsutil tool.
- Make sure that you authenticate your account using an account with access to your Play Console.
- During the setup process, if you're using gsutil for the first time and don't have any other projects configured in Google Cloud Storage, you can type your app's name when you're prompted for a project ID.
- Find your reporting bucket ID by clicking the Copy Cloud Storage URI button next to the corresponding section header on the Download reports pages.
- Your Cloud Storage URI begins with:
pubsite_prod_rev
(Example:pubsite_prod_rev_01234567890987654321
).
- Your Cloud Storage URI begins with:
- Use the
gsutil cp
command to download reports.- For additional commands to help you access your reports, go to the gsutil documentation.
Reports are organised in directories named after each type of report. CSV file names include the type of report, package name, time period and the dimension (if applicable).
Step 1: Create a service account
- Sign in to the Google Developers Console (console.developers.google.com).
- If you already have a project, use the drop-down to select a project. If you don't have a project listed or want to create a new one, click Create project.
- Select the Menu icon
> Permissions > Service accounts > Create service account.
- Follow the on-screen instructions and select Create.
- Copy the email address listed.
- Example:
accountName@project.iam.gserviceaccount.com
- Example:
Step 2: Add the service account on your Play Console
- Sign in to your Play Console.
- Select Settings
> User accounts & rights > Invite new user.
- Paste or type the email address associated with your service account.
- Based on the types of reports needed, select permissions.
- Tip: Read the Add developer account users and manage permissions article to understand the different access levels that users have and the rights that different permissions grant them.
- Click Add user. Your service account will be added to your account.
Step 3: Fetch reports using an API call
- Install the API client library for your preferred code language.
- Configure the code performing the API call to use
OAuth2
server-to-server authentication and to request permission to theOAuth2
scope (https://www.googleapis.com/auth/devstorage.read_only). - Issue authenticated API calls to fetch reports.
If you used Python to fetch reports, here's a code example:
import json
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build
# Change these variables to fit your case
client_email = 'your service account here'
json_file = 'path_to_json_file_obtained_when_creating_the_service_account'
cloud_storage_bucket = 'pubsite_prod_rev_…'
report_to_download = ‘earnings/earnings_….zip’
private_key = json.loads(open(json_file).read())['private_key']
credentials = SignedJwtAssertionCredentials(client_email, private_key,
'https://www.googleapis.com/auth/devstorage.read_only')
storage = build('storage', 'v1', http=credentials.authorize(Http()))
print storage.objects().get(
bucket=cloud_storage_bucket,
object=report_to_download).execute()
Control access to Google Cloud Storage
Reports available on Google Cloud Storage use the same access restrictions that control data access on your Play Console. This means that account users with access to areas of a Play Console account have access to the corresponding reports in Google Cloud Storage.
Account owners can update permissions for individual users at any time.
- To access bulk reports, your 'View app information' permission must be set to 'Global'.
- To download financial reports, your 'View financial data' permission must be set to 'Global'.
Commands & file formats for detailed reports
Crashes & ANRs
As of May 2018, you can no longer download detailed reports for crashes and ANRs.
Reviews
ReviewsCommand
gs://[developer_bucket_id]/reviews/reviews_[package_name]_YYYYMM.csv
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Package name | String | NO | com.company.app |
App version code | integer | YES | Production APKs only |
App version name | String | YES | |
Reviewer language | String – ISO 639-1 two-letter abbreviation | YES | en-GB |
Device | String | YES | hammerhead |
Review Submit Date and Time | ISO_8601 including time, UTC time zone | NO | 2014-06-19T19:12:32Z |
Review Submit Millis Since Epoch | integer, milliseconds since epoch | NO | |
Review Last Update Date and Time | ISO_8601 including time, UTC time zone | YES | 2014-06-19T19:12:32Z |
Review Last Update Millis Since Epoch | integer, milliseconds since epoch | YES | |
Star Rating | integer (between 1 and 5) | NO | |
Review title | String, in the reviewer's local language (stripping newlines) | YES | |
Review Text | String, in the reviewer's local language (stripping newlines) | YES | |
Developer Reply Date and Time | ISO_8601 including time, UTC time zone | YES | 2014-06-19T19:12:32Z |
Developer Reply Millis Since Epoch | integer, milliseconds since epoch | YES | |
Developer Reply Text | String (stripping newlines and compressing whitespace) | YES | |
Review Link | String | YES | https://play.google.com/apps/publish/?dev_acc=<...>#ReviewPlace:id=<..> |
Example
If you want to download all reports generated in 2014 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/reviews/reviews_com.example.app_2014* /your/local/directory
Financial reports
Estimated salesAbout
You can use the estimated sales report to view low latency information about app, in-app product or subscription sales. This report contains the amount paid by buyers and doesn't deduct taxes or Google fees from the totals.
You can use this report for analytics or trend analysis, but it's not recommended for accounting. Instead, see the Earnings report.
You may notice differences between this report and your earnings for a number of reasons. For example, the estimated sales report doesn't take into account withholding taxes or chargebacks. This report contains amounts paid by buyers in their local currency and doesn't contain converted amounts in your payout currency.
Command
gs://[developer_bucket_id]/sales/salesreport_YYYYMM.zip
Example
If you want to download all reports generated in 2014 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/sales/salesreport_2014* /your/local/directory
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Order number |
String |
No |
Unique ID assigned to this order. Subscription order IDs include the renewal cycle number at the end. |
Order charged date |
String |
No |
Date of this order based on the UTC time zone (in YYYY-MM-DD format). |
Order Charged Timestamp |
Integer |
No |
The UNIX timestamp when the order was charged to the user. Measured in seconds since epoch. |
Financial status |
String |
No |
If you fully refund an order after issuing a partial refund:
|
Device model |
String |
No |
Android device model used to make the purchase. For subscription orders, this refers to the device used for the original purchase. |
Product title |
String |
No |
Developer-specified name of the product. Displayed in the buyer's locale. |
Product ID |
String |
No |
Package name of the app where the product was sold. |
Product type |
String |
No |
|
SKU ID |
String |
No |
Developer-specified unique ID of the SKU. |
Currency of sale |
String |
No |
|
Item price |
Integer |
No |
Shown in the buyer's local currency. With ',' as a thousands separator. |
Taxes collected |
Integer |
Yes |
In the buyer's local currency. With ',' as a thousands separator. |
Charged amount |
Integer |
No |
In the buyer's local currency. This is the sum of item price and taxes collected. With ',' as a thousands separator. |
City of buyer |
String |
Yes |
Only populated for sales where you are the merchant of record. |
State of buyer |
String |
Yes |
Only populated for sales where you are the merchant of record. |
Postcode of buyer |
String |
Yes |
Only populated for sales where you are the merchant of record. |
Country of Buyer |
String |
No |
|
About
You can use the earnings report to understand your payout and transactions. Each line in the report represents a type of transaction, like when you charge a customer money or pay Google a fee, along with the original and converted amounts.
Earnings reports contain invoices raised in the prior month. You'll receive an invoice if you've met the minimum payment amount. You'll receive the payout several weeks after the earnings report becomes available.
Occasionally, Google may make adjustments to your earnings to correct miscalculations. If this happens, we'll contact you to inform you of the issue and create an additional earnings file containing only the adjusted transactions for your records.
Note: Since Google is the merchant of record for products sold to users in the European Economic Area (EEA), you'll see one line per order for sales in the impacted countries (with 'Charge' as the transaction type). Sales in other countries will also include a 'Google fee' transaction type.
Command
gs://[developer_bucket_id]/earnings/earnings_YYYYMM.zip
Example
If you want to download all reports generated in 2014 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/earnings/earnings_2014* /your/local/directory
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Description |
String |
No |
Unique ID assigned to this order. Subscription order IDs include the renewal cycle number at the end. |
Transaction Date |
String |
No |
Date of this order based on the PDT time zone (in MMM DD, YYYY format). |
Transaction Time |
String |
No |
|
Tax Type |
String |
Yes |
Blank for non-tax lines. |
Transaction Type |
String |
No |
|
Refund type |
String |
Yes |
Refunds where the buyer was reimbursed their full spend will be marked as 'Full'. Refunds for part of a user’s payment amount will be marked as 'Partial'. |
Product Title |
String |
No |
Developer-specified name of the product. Shown in the buyer's locale. |
Product ID |
String |
No |
Package name of the app where the product was sold. |
Product type |
Integer |
Yes |
Used to identify the type of product sold. '0' represents the sale of a paid app, '1' represents the sale of an in-app product or subscription. |
SKU ID |
String |
No |
Developer-specified unique ID of the SKU. |
Hardware |
String |
No |
Android device model used to make the purchase. For subscription orders, this refers to the model used for the original purchase. |
Buyer country |
String |
No |
|
Buyer State |
String |
Yes |
Only populated for sales where you are the merchant of record. |
Buyer Postal Code |
String |
Yes |
Only populated for sales where you are the merchant of record. |
Buyer Currency |
String |
No |
|
Amount (Buyer Currency) |
Integer |
No |
Total amount for this invoice line before currency conversion. |
Currency Conversion Rate |
Integer |
No |
Exchange rate used when converting buyer amounts to payout amounts in merchant currency. |
Merchant Currency | String | No |
Currency to which the order was converted. This is the local currency you are paid in. |
Amount (Merchant Currency) | Integer | No |
Total amount for this invoice line after currency conversion. |
About
If you are a merchant that is required to issue cash receipts in South Korea under applicable rules and regulations, or if you have voluntarily registered to issue cash receipts, then you must issue cash receipts upon request by app purchasers for paid app or in-app product purchases made with Google Play Gift Cards in Korean Won (KRW).
The Korean Play balance funded report contains Play balance sales made in Korean Won, for the purpose of sending a cash receipt to the user.
Note: Users can add to Play balance from multiple sources, including promotional credit from Google or our partners. Before issuing a cash receipt, it's important to ensure that the user added to their balance using a cash equivalent (for example, a gift card).
Command
gs://[developer_bucket_id]/play_balance_krw/play_balance_krw_YYYYMM.zip
Example
If you want to download all reports generated in 2018 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/play_balance_krw/play_balance_krw_2018* /your/local/directory
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Order number |
Integer |
No |
Unique ID assigned to this order. Subscription order IDs include the renewal cycle number at the end. |
Order charged date |
String |
No |
Date of this order based on the UTC time zone (in YYYY-MM-DD format). |
Financial status |
String |
No |
|
Play balance funding amount |
String |
No |
Amount of the transaction. |
Play Balance Currency | String | No | KRW For Korean Play balance funded reports, this is always Korean Won (KRW). |
Order Charged Timestamp | Integer | No | 1480507200
The UNIX timestamp when the order was charged to the user. Measured in seconds since epoch. |
Subscriptions
Cancellation survey responsesCommand
gs://[developer_bucket_id]/subscriptions/cancellations/freeform_[package_name].csv
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Cancellation date | String | NO | 2016-11-30 |
Sku Id | String | NO | treasure_chest_for_new_users Developer-specified unique ID of the SKU. |
Country | String | NO | US, CA, etc. |
Response | String | NO |
Commands & file formats for aggregated reports
Statistics
InstallsCommand
gs://[developer_bucket_id]/stats/installs/installs_[package_name]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Example |
---|---|---|---|
Date | YYYY-mm-dd | NO | 2014-06-19 |
Package name | String | NO | com.my.app |
Device (or any other supported dimension) | String | YES | hammerhead |
Current Device Installs | integer | NO | |
Installs On Active Devices | integer | NO | |
Daily Device Installs | integer | NO | |
Daily Device Uninstallations | integer | NO | |
Daily Device Upgrades | integer | NO | |
Current User Installs | integer | NO | |
Total User Installs | integer | NO | |
Daily User Installs | integer | NO | |
Daily User Uninstalls | integer | NO |
Supported dimensions
Dimension | File name |
---|---|
App version code | ..._app_version.csv |
Operator | ..._carrier.csv |
Country | ..._country.csv |
Device | ..._device.csv |
Language | ..._language.csv |
Android OS Version | ..._os_version.csv |
Example
If you want to download all reports generated in 2014 from the report bucket id pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/stats/installs/installs_com.example.app_2014* /your/local/directory
Note: As of January 2018, exports include data from the new data source and match the information on your app's Statistics page. Exports from before January 2018 are only available for data collected from the previous data source.
Command
gs://[developer_bucket_id]/stats/crashes/crashes_[package_name]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Example |
---|---|---|---|
Date | YYYY-mm-dd | NO | 2014-06-19 |
Package name | String | NO | com.my.app |
Device (or any other supported dimension) | String | YES | hammerhead |
Daily crashes | integer | NO | |
Daily ANRs | integer | NO |
Supported dimensions
Dimension | File name |
---|---|
App version code | ..._app_version.csv |
Device | ..._device.csv |
Android OS Version | ..._os_version.csv |
Example
If you want to download all reports generated in 2014 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/stats/crashes/crashes_com.example.app_2014* /your/local/directory
Command
gs://[developer_bucket_id]/stats/ratings/ratings_[package_name]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Example |
---|---|---|---|
Date | YYYY-mm-dd | NO | 2014-06-19 |
Package name | String | NO | com.my.app |
Device (or any other supported dimension) | String | YES | hammerhead |
Daily Average Rating | %.2f | YES | |
Total Average Rating | %.2f | Yes | 4.16 |
Supported dimensions
Dimension | File name |
---|---|
App version code | ..._app_version.csv |
Operator | ..._carrier.csv |
Country | ..._country.csv |
Device | ..._device.csv |
Language | ..._language.csv |
Android OS Version | ..._os_version.csv |
Example
If you want to download all reports generated in 2014 from the report bucket ID pubsite_prod_rev_0123456789
for your app with the package name com.example.app, the command is:
gsutil cp -r gs://pubsite_prod_rev_0123456789/stats/ratings/ratings_com.example.app_2014* /your/local/directory
Command
gs://[developer_bucket_id]/financial-stats/subscriptions/subscriptions_[package_name]_[product_id]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Example |
---|---|---|---|
Date | YYYY-mm-dd | NO | 2016-03-28 |
Package name | String | NO | com.my.app |
Product ID | String | NO | monthly.subscription |
Country or Device | String | NO | Must include either country or device |
New subscriptions | Integer | NO | |
Cancelled subscriptions | Integer | NO | |
Active subscriptions | Integer | NO |
Note: For more information on new, cancelled and active subscription statistics, go to review your app's revenue and buyer data.
Supported dimensions
Dimension | File name |
---|---|
Country | ..._country.csv |
Device | ..._device.csv |
User acquisition
The Retained Installers and Buyers reports provide programmatic access to data for the old acquisition report. To export data for the new acquisition report, use the Export report button on the Conversion analysis page in the new Play Console UI.
Learn more about Google Play acquisition sources and metrics.
Note: The Subscribers report is no longer supported as of November 2019.
Retained installersCommand
gs://[developer_bucket_id]/acquisition/retained_installers/retained_installers_[package_name]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Date | YYYY-mm-dd | NO |
Date the user visited your Store Listing Note: Adding unique Store Listing Visitors across several days will result in a higher number of Store Listing Visitors than what you see in weekly or monthly cohort views. Weekly and monthly cohort views count each visitor once, even if they visit multiple times. |
Acquisition channel | String | YES |
Present for 'Acquisition channel' dimension Note: 'Play Store (organic)' channel is the sum of 'Play Store (organic) search' and 'Play Store (organic) browse'. To avoid double-counting visitors in this report, ignore either the total 'Play Store (organic)' row or both search and browse rows. |
Country | String | YES | Present for 'Country' and 'Country (Play Store organic)' dimensions |
UTM source/campaign | String | YES |
Present for 'Tracked channels (UTM)' dimension |
Keyword | String | YES |
Present for 'Play Store Search (organic)' |
Store-listing visitors | Integer | NO | |
Installers | Integer | NO | |
Visitor-to-Installer conversion rate | Decimal | NO | |
Median Visitor to Installer conversion rate benchmark | Decimal | YES |
Not populated as of August 2019. An updated set of benchmarks, using a new calculation, is available in the Acquisition reports page. |
Installers retained for 1 day | Integer | NO | |
Installer-to-1 day retention rate | Decimal | NO | |
Installers retained for 7 days | Integer | NO | |
Installer-to-7 days retention rate | Decimal | NO | |
Installers retained for 15 days | Integer | NO | |
Installer-to-15 days retention rate | Decimal | NO | |
Installers retained for 30 days | Integer | NO | |
Installer-to-30 days retention rate | Decimal | NO |
Supported dimensions
Dimension | File name |
---|---|
Acquisition channel * | ..._channel.csv |
Country | ..._country.csv |
Country (Play Store organic) | ..._play_country.csv |
Play Store (organic) search | ..._play_search.csv |
Tracked channels (UTM) | ..._utm_tagged.csv |
* Note: The 'Play Store (organic)' channel is the sum of 'Play Store (organic) search' and 'Play Store (organic) browse'. To avoid double-counting visitors in this report, ignore either the total 'Play Store (organic)' row or both search and browse rows.
The Google Search (organic) dimension is no longer supported as of June 2019.
Command
gs://[developer_bucket_id]/acquisition/buyers_7d/buyers_7d_[package_name]_yyyyMM_[dimension].csv
File format
Field | Format | Optional | Examples & notes |
---|---|---|---|
Date | YYYY-mm-dd | NO |
Date the user visited your Store Listing Note: Adding unique Store Listing Visitors across several days will result in a higher number of Store Listing Visitors than what you see in weekly or monthly cohort views. Weekly and monthly cohort views count each visitor once, even if they visit multiple times. |
Acquisition channel | String | YES |
Present for 'Acquisition channel' dimension Note: 'Play Store (organic)' channel is the sum of 'Play Store (organic) search' and 'Play Store (organic) browse'. To avoid double-counting visitors in this report, ignore either the total 'Play Store (organic)' row or both search and browse rows. |
Country | String | YES | Present for 'Country' and 'Country (Play Store organic)' dimensions |
UTM source/campaign | String | YES | Present for 'Tracked channels (UTM)' dimension |
Keyword | String | YES |
Present for 'Play Store Search (organic)' |
Store-listing visitors | Integer | NO | |
Installers | Integer | NO | |
Visitor to Installer conversion rate | Decimal | NO | |
Median Visitor to Installer conversion rate benchmark | Decimal | YES |
Not populated as of August 2019. An updated set of benchmarks, using a new calculation, is available in the Acquisition reports page. |
Buyers | Integer | NO | |
Installer to Buyer conversion rate | Decimal | NO | |
Repeat Buyers | Integer | NO | |
Installer to Repeat Buyer conversion rate | Decimal | NO | |
Buyer to Repeat Buyer conversion rate | Integer | NO |
Supported dimensions
Dimension | File name |
---|---|
Acquisition channel * | ..._channel.csv |
Country |
..._country.csv |
Country (Play Store organic) |
..._play_country.csv |
Play Store (organic) search | ..._play_search.csv |
Tracked channels (UTM) | ..._utm_tagged.csv |
* Note: The 'Play Store (organic)' channel is the sum of 'Play Store (organic) search' and 'Play Store (organic) browse'. To avoid double-counting visitors in this report, ignore either the total 'Play Store (organic)' row or both search and browse rows.
The Google Search (organic) dimension is no longer supported as of June 2019.