Google Play app JSON: the record schema

Every object in an app record and the types to expect, with notes on nulls.

{
  "id": "string (package name)",
  "title": "string", "summary": "string|null", "description": "string|null",
  "installs": {"label": "string", "min": "int", "real": "int|null"},
  "rating": {"score": "float|null", "ratings": "int", "reviews": "int", "histogram": "[int x5]"},
  "pricing": {"free": "bool", "price": "float", "currency": "string",
              "offers_iap": "bool", "iap_range": "string|null", "contains_ads": "bool"},
  "category": {"id": "string", "name": "string", "all": "[string]"},
  "content_rating": {"rating": "string", "description": "string|null"},
  "developer": {"id": "string", "name": "string", "website": "string|null", "site_domain": "string|null"},
  "released": "date", "updated": "date", "version": "string", "android_min": "string",
  "status": {"removed": "bool", "removed_seen_at": "datetime|null", "fetched_at": "datetime"},
  "media": {"icon": "url", "header_image": "url|null", "screenshots": "[url]", "video": "url|null"}
}

Nulls

New apps often have no rating yet (score: null). Paid apps have a price; free ones have 0. version and android_min may read "Varies with device".

Dates

All dates are ISO 8601 in UTC. released and updated come from the store, fetched_at from the last refresh.

Images

Image URLs point to Google's image CDN; append =w96 or =h480 to get a resized copy.