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.