Get everything about one app (metadata, ratings, price, markets, linked app in the other store).
Use this first when a user mentions an app. Pass any identifier or a name in {app}. Data older than
max_age (default 7 days) is refreshed from the store; an app we never saw is fetched on the spot (if it
is still being fetched after ~25 s you get HTTP 202 with data: null and a job_id).
include adds sections: markets (every storefront), iap (in-app purchases), versions (version
history with release notes), privacy (App Store privacy labels), estimates (modelled downloads /
revenue), charts (current top-chart positions), summary (AI summary, coming soon).
Request
curl "https://api.appgoat.ai/v1/apps/com.spotify.music?include=versions" \
-H "x-api-key: $APPGOAT_API_KEY"const res = await fetch("https://api.appgoat.ai/v1/apps/com.spotify.music?include=versions", {
headers: {
"x-api-key": process.env.APPGOAT_API_KEY,
},
});
const { data, meta } = await res.json();import os, requests
res = requests.get(
"https://api.appgoat.ai/v1/apps/com.spotify.music?include=versions",
headers={"x-api-key": os.environ["APPGOAT_API_KEY"]}
)
body = res.json()Path parameters
appstringrequiredAny app identifier: App Store id (
284882215, id284882215), Play package (com.spotify.music), Apple bundle id (com.spotify.client), store URL (URL-encoded), apple:<id> / play:<id>, or a name (spotify).Query parameters
store"apple" | "play"Disambiguates
{app} (a bundle id vs a Play package, or a name).countrystringISO country code(s):
us (default), a comma list (paid plans), or all (Studio).Default "us"
includestringComma list of extra sections.
max_ageintegerRefresh from the store when our data is older than this many seconds (0 = always). Default 604800 (7 days).
Default 604800
waitbooleanBlock up to ~25 s for a refresh (default). false = answer immediately from cache with a job id.
Default true
fieldsstringComma list of top-level fields to return (identifiers are always kept), e.g.
title,rating,version.Response
200 with data: App. See the envelope for meta.
storeStoreapp_idstringbundle_idstring | nullurlstringtitlestring | nullsubtitlestring | nullApp Store subtitle / Play short description.
descriptionstring | nulldeveloperobjectdeveloper.idstring | nulldeveloper.namestring | nullcategorystring | nullgenresstring[]content_ratingstring | nullfreeboolean | nullpricenumber | nullcurrencystring | nullhas_iapboolean | nullhas_adsboolean | nullratingnumber | nullratings_countinteger | nullreviews_countinteger | nullhistograminteger[] | null1★…5★ counts.
installs_mininteger | nullinstalls_exactinteger | nullinstalls_textstring | nullversionstring | nullrelease_notesstring | nullmin_osstring | nullsize_bytesinteger | nullreleased_atstring | nullupdated_atstring | nullicon_urlstring | nullscreenshotsstring[]languagesstring[]status"pending" | "active" | "delisted" | "error"first_seen_atstringlast_fetched_atstring | nullmarketsMarket[]The requested countries (all with include=markets).
linkedobject | nullThe same app in the other store.
linked.storeStorelinked.app_idstringlinked.titlestring | nulllinked.icon_urlstring | nulllinked.match"bundle_id" | "developer"iapobjectinclude=iap: items (App Store) or price_range (Play).
versionsobject[]versions[].versionstringversions[].first_seen_atstringversions[].release_notesstring | nullprivacyobjectinclude=privacy: App Store privacy labels.
estimatesobject[]estimates[].countrystringestimates[].monthstringestimates[].downloadsinteger | nullestimates[].revenue_usdinteger | nullestimates[].confidencenumber | nullchartsobject[]charts[].countrystringcharts[].chartstringcharts[].categorystringcharts[].datestringcharts[].rankintegerExample
{
"data": {
"store": "apple",
"app_id": "324684580",
"bundle_id": "com.spotify.client",
"title": "Spotify: Music and Podcasts",
"developer": {
"id": "324684583",
"name": "Spotify"
},
"rating": 4.78,
"ratings_count": 42668141,
"version": "9.1.92",
"markets": [
{
"country": "us",
"available": true,
"price": 0,
"currency": "USD",
"rating": 4.78,
"ratings_count": 42668141,
"version": "9.1.92",
"fetched_at": "2026-10-22T15:03:07Z"
}
],
"linked": {
"store": "play",
"app_id": "com.spotify.music",
"title": "Spotify: Music and Podcasts",
"icon_url": "https://…",
"match": "developer"
}
},
"meta": {
"credits_used": 1,
"credits_remaining": 9981,
"store": "apple",
"freshness": {
"fetched_at": "2026-10-22T15:03:07Z",
"age_seconds": 3600,
"stale": false,
"refreshing": false,
"job_id": null
},
"request_id": "req_123"
}
}Status codes
200
The app.
202
Not in the catalog yet and still being fetched; poll
GET /v1/jobs/{meta.freshness.job_id} and call again.A parameter is missing or invalid (
error.param names it).Missing or invalid API key.
insufficient_credits (the call costs more than you have left; nothing was done) or plan_limit (a feature of a higher plan).Nothing matches
{app}, or the store does not have it.429
rate_limitedToo many requests per second for your plan.