Get everything about one app (metadata, ratings, price, markets, linked app in the other store).

GEThttps://api.appgoat.ai/v1/apps/{app}
1+ credits1 + 1 per country refreshed from the store (max 10)MCP tool get_appoperationId getApp

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"

Path parameters

appstringrequired
Any 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).
countrystring
ISO country code(s): us (default), a comma list (paid plans), or all (Studio).

Default "us"

includestring
Comma list of extra sections.
max_ageinteger
Refresh from the store when our data is older than this many seconds (0 = always). Default 604800 (7 days).

Default 604800

waitboolean
Block up to ~25 s for a refresh (default). false = answer immediately from cache with a job id.

Default true

fieldsstring
Comma 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.

storeStore
app_idstring
bundle_idstring | null
urlstring
titlestring | null
subtitlestring | null
App Store subtitle / Play short description.
descriptionstring | null
developerobject
developer.idstring | null
developer.namestring | null
categorystring | null
genresstring[]
content_ratingstring | null
freeboolean | null
pricenumber | null
currencystring | null
has_iapboolean | null
has_adsboolean | null
ratingnumber | null
ratings_countinteger | null
reviews_countinteger | null
histograminteger[] | null
1★…5★ counts.
installs_mininteger | null
installs_exactinteger | null
installs_textstring | null
versionstring | null
release_notesstring | null
min_osstring | null
size_bytesinteger | null
released_atstring | null
updated_atstring | null
icon_urlstring | null
screenshotsstring[]
languagesstring[]
status"pending" | "active" | "delisted" | "error"
first_seen_atstring
last_fetched_atstring | null
marketsMarket[]
The requested countries (all with include=markets).
linkedobject | null
The same app in the other store.
linked.storeStore
linked.app_idstring
linked.titlestring | null
linked.icon_urlstring | null
linked.match"bundle_id" | "developer"
iapobject
include=iap: items (App Store) or price_range (Play).
versionsobject[]
versions[].versionstring
versions[].first_seen_atstring
versions[].release_notesstring | null
privacyobject
include=privacy: App Store privacy labels.
estimatesobject[]
estimates[].countrystring
estimates[].monthstring
estimates[].downloadsinteger | null
estimates[].revenue_usdinteger | null
estimates[].confidencenumber | null
chartsobject[]
charts[].countrystring
charts[].chartstring
charts[].categorystring
charts[].datestring
charts[].rankinteger
Example
{
  "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.
Too many requests per second for your plan.