Skip to main content
Google Play Console endpoints are for apps you own. They complement the public Google Play ASO endpoints (platform=google) that work for any public app. For setup and usage guides, start with Google Play Connect Overview.

Authentication

Google Play Console uses a Google Cloud service account JSON key, not a regular browser/API key.
  1. In Google Cloud Console, create or choose a project.
  2. Enable Google Play Android Developer API and Google Play Developer Reporting API.
  3. Go to IAM & Admin -> Service Accounts, create a service account, then create a JSON key.
  4. In Play Console, open Users and permissions, invite the service account email, and grant the app/global permissions needed for reviews, vitals, report exports, products, releases, and store listing metadata.
Connect once:
curl -X POST "https://api.appeeky.com/v1/connect/google-play/credentials" \
  -H "X-API-Key: YOUR_APEEKY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "serviceAccountJson": { "...": "..." },
    "defaultPackageName": "com.example.app",
    "reportsBucket": "pubsite_prod_rev_0123456789"
  }'
Or pass credentials per request:
HeaderDescription
X-GP-Service-Account-JsonFull service account JSON
X-GP-Client-EmailService account client_email
X-GP-Private-KeyService account private key PEM
X-GP-Private-Key-B64Base64 private key alternative
X-GP-Project-IdOptional project ID
X-GP-Client-IdOptional client ID
The service account must be invited in Play Console with the permissions needed for the data you want to read or mutate.

Owned App Data

GET /v1/connect/google-play/apps
GET /v1/connect/google-play/apps/:packageName/reviews
GET /v1/connect/google-play/apps/:packageName/reviews/:reviewId
POST /v1/connect/google-play/apps/:packageName/reviews/:reviewId/reply
GET /v1/connect/google-play/apps/:packageName/vitals/crashRate
POST /v1/connect/google-play/apps/:packageName/vitals/crashRate/query
GET /v1/connect/google-play/apps/:packageName/anomalies
Review replies use Google’s official reviews.reply endpoint and must be 350 characters or fewer. Supported vitals metric sets: anrRate, crashRate, errorCount, excessiveWakeupRate, lmkRate, slowRenderingRate, slowStartRate, stuckBackgroundWakelockRate.

Publishing Metadata

GET /v1/connect/google-play/apps/:packageName/tracks
GET /v1/connect/google-play/apps/:packageName/tracks/:track/releases
PATCH /v1/connect/google-play/apps/:packageName/tracks/:track?validateOnly=true

GET /v1/connect/google-play/apps/:packageName/listings
GET /v1/connect/google-play/apps/:packageName/listings/:language
PATCH /v1/connect/google-play/apps/:packageName/listings/:language?validateOnly=true
Listing patches accept title, shortDescription, fullDescription, and video. Track patches accept Google Play Track schema fields, usually releases.

Monetization

GET /v1/connect/google-play/apps/:packageName/subscriptions
GET /v1/connect/google-play/apps/:packageName/one-time-products

Report Exports

Google Play sales, earnings, reviews, statistics, acquisition/search-term, and store listing conversion exports live in a private Google Cloud Storage bucket whose name usually starts with pubsite_prod_.
GET /v1/connect/google-play/reports/objects?prefix=stats/store_performance/
GET /v1/connect/google-play/reports/object?objectName=stats/store_performance/store_performance_com.example.app_202601_country.csv
GET /v1/connect/google-play/reports/download?objectName=sales/salesreport_202601.zip
Use reportsBucket in saved credentials, or pass bucket=pubsite_prod_... on each report request. Reports are captured daily, published into monthly CSV files, and can lag Play Console by several days. The service account must be added in Play Console with account-level access to download bulk reports; otherwise GCS object listing will return storage.objects.list permission errors.

Store Analytics

Import monthly statistics CSVs from the Play Console GCS export:
POST /v1/connect/google-play/analytics/import-report
POST /v1/connect/google-play/analytics/import-reports
POST /v1/connect/google-play/apps/:packageName/analytics/vitals-sync
{
  "objectName": "stats/store_performance/store_performance_com.example.app_202601_traffic_source.csv"
}
Supported import prefixes:
stats/installs/
stats/crashes/
stats/ratings/
stats/store_performance/
After import, read Apple-analytics-style rollups:
GET /v1/connect/google-play/analytics?from=2026-01-01&to=2026-01-31
GET /v1/connect/google-play/apps/:packageName/analytics?from=2026-01-01&to=2026-01-31
GET /v1/connect/google-play/apps/:packageName/analytics/sources?from=2026-01-01&to=2026-01-31
GET /v1/connect/google-play/apps/:packageName/analytics/search-terms?from=2026-01-01&to=2026-01-31
The analytics response includes installs/device acquisitions, first opens, MAU, ratings, crash/ANR rates, store_listing_visitors, store_listing_acquisitions, and store_listing_conversion_rate. Search-term rows are populated from the traffic_source store performance report when Google includes the Search term column. Dashboard reads should use these synced analytics endpoints; GCS imports run as background sync jobs.