App Store and Google Play app data as JSON: ratings, installs and price with one schema for both stores
Two endpoints, one shape: an iOS app by id or an Android app by package name, returning name, developer, rating, price, category, screenshots and installs.
In short
- /v1/structured/appstore/app?id=… and /v1/structured/googleplay/app?id=… return the same AppSchema, so one client handles both stores.
- Only Google Play exposes the install band ("1B+"); only the App Store exposes the OS requirement. Everything else lines up field for field.
- Both listings are stored for 24 hours and shared. Storefront, language and country are parameters, not guesses from your IP.
App stores publish more than they let you download through an API. Google’s Play Developer API only covers apps you own; Apple’s App Store Connect API is the same. For anyone else’s app, the public listing page is the source, and both stores render their listing with a SoftwareApplication block that carries the facts. These two endpoints read that block, add the few things it lacks, and return one shape.
The two requests
# iOS — numeric id, optional storefront country (default us)
curl "https://api.webscrapingapi.dev/v1/structured/appstore/app?id=284882215&country=us" \
-H "X-API-Key: wsa_your_key"
# Android — package name, optional language (hl) and country (gl)
curl "https://api.webscrapingapi.dev/v1/structured/googleplay/app?id=com.spotify.music&hl=en&gl=US" \
-H "X-API-Key: wsa_your_key"
One schema
| Field | App Store | Google Play |
|---|---|---|
name, url, id, platform | yes | yes |
developer { name, url } | yes | yes |
description, category | yes | yes |
price, currency, free | yes | yes |
rating { value, count } | yes | yes |
icon, screenshots[] | yes | yes |
contentRating | when shown | yes (“Teen”) |
osRequirement | yes (“Requires iOS 15.1 or later.”) | null |
installs | null | yes (“1B+”) |
updatedAt | when shown | yes (“Sep 18, 2026”) |
A Google Play answer looks like this:
{
"site": "googleplay",
"action": "app",
"data": {
"app": {
"name": "Spotify: Music and Podcasts",
"url": "https://play.google.com/store/apps/details?id=com.spotify.music",
"platform": "android",
"id": "com.spotify.music",
"developer": { "name": "Spotify AB", "url": "https://www.spotify.com" },
"category": "MUSIC_AND_AUDIO",
"price": "0", "currency": "USD", "free": true,
"rating": { "value": 4.35, "count": 36339801 },
"installs": "1B+",
"contentRating": "Teen",
"updatedAt": "Sep 18, 2026",
"screenshots": ["https://play-lh.googleusercontent.com/…", "…"]
}
},
"source": "cache",
"age": 5120,
"credits": 0
}
installs is the band Google shows (“1B+”, “500M+”, “10K+”), not an exact number; no public source has the exact number. rating.value is rounded to two decimals. price is a string and free is derived from it, so you do not have to compare currencies to know whether an app costs money.
Storefronts and languages
Nothing is inferred from the caller’s address. The App Store endpoint takes country (two letters, default us). Google Play takes hl for the language and gl for the country, defaulting to en and US. Ask for hl=ko&gl=KR and you get the Korean listing text with Korean-store availability.
Freshness and cost
Listings change slowly, so both endpoints store answers for 24 hours and share them. The first caller pays one credit; the stored copy is free and says how old it is in age. Force a fresh read with max_age=0 when a release just shipped and you want the new version text.
What is missing on purpose
Version numbers and “what’s new” notes are on the App Store page but not in a stable part of it, so they come back null more often than not; the endpoint prefers a null over a wrong value. Reviews, rankings and search are not on the listing page and are not part of these endpoints. If a chart or a review feed is what you need, ask on the board and it either gets built or you are told why not.
The reference pages for the App Store and Google Play list the parameters and the complete response.
Questions people ask
- Where do I find the App Store id?
- It is the number after id in the listing URL, for example 284882215 in apps.apple.com/us/app/facebook/id284882215.
- And the Google Play id?
- The package name in the id= parameter of the listing URL, for example com.spotify.music.
- Is the rating count the number of written reviews?
- It is the count the store publishes with the average: ratings on Google Play, ratings on the App Store's listing JSON. Written reviews are a smaller subset and are not returned.
- Can I read another country's store?
- Yes. App Store: country=de, jp, kr and so on. Google Play: gl=DE with hl=de for the language.