If you have ever tried to get structured data out of the Apple App Store, you know the options are bad: scrape apps.apple.com and parse HTML that breaks every quarter, lean on the undocumented iTunes Search API for the handful of fields it exposes, or glue together an open-source scraper package and babysit it forever. The App Store API replaces all three with one versioned REST endpoint that returns clean JSON.
This guide is examples-first. Every request below is a real curl you can paste into a terminal right now; they all use the public demo key, so you don't need to sign up to follow along. Let's start with the requests and the data that comes back.
The shape of a request
Three things are constant across every call:
- Base URL:
https://api.appsigma.io/v1 - Auth: an
X-API-Keyheader on every request - Format: JSON in, JSON out, ISO 8601 timestamps in UTC, Apple's numeric
trackIdas the identifier for every app
One thing to know up front: responses come from AppSigma's own App Store dataset, refreshed on a regular cadence, not fetched from Apple on every call. So an app's rating, chart slot, or search ranking reflects the last refresh, not the exact second you call.
The demo key (X-API-Key: demo) returns real App Store data (not mocks), scoped to a small curated slice: the apps YouTube (544007664) and Facebook (284882215), the search terms youtube, instagram, spotify, facebook, and the full charts. It's unbilled and rate-limited. A real key unlocks the entire catalog.
Look up one app
The workhorse endpoint. Give it Apple's track ID (the number at the end of any apps.apple.com/...id<ID> URL) and get back everything Apple publishes about the app.
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/applications/544007664"
{
"id": 544007664,
"name": "YouTube",
"shortName": "YouTube",
"subtitle": "Videos, Music and Live Streams",
"description": "Get the official YouTube app on iPhones and iPads...",
"developer": { "id": 281956209, "name": "Google LLC" },
"primaryGenre": { "id": 6008, "name": "Photo & Video" },
"genres": [
{ "id": 6016, "name": "Entertainment" },
{ "id": 6008, "name": "Photo & Video" }
],
"icon": "https://is1-ssl.mzstatic.com/image/thumb/.../logo_youtube_2024_q4_color.png",
"rating": {
"averageScore": 4.67091,
"count": 47850326,
"currentVersionScore": 4.67091,
"currentVersionCount": 47850326,
"histogram": { "1": 1519823, "2": 617483, "3": 1382394, "4": 3945722, "5": 38071681 }
},
"releaseDate": "2012-09-11T07:23:19.000Z",
"hasInAppPurchases": true,
"price": { "amount": 0, "currency": "USD", "formatted": "Free", "discount": false },
"supportsArcade": false,
"supportedDevices": ["appletv", "iphone", "ipad"],
"hasAds": true,
"hasAchievements": false,
"deletedInStoreAt": null,
"screenshots": { "iphone": [ /* MediaItem[] */ ], "ipad": [ /* ... */ ] }
}
A few things worth pointing out in that payload:
rating.histogramis the full 1–5 star distribution, not just an average, so you can see how an app earns its 4.67 rather than just the headline number.price.amountis in integer minor units (cents for USD).0with"formatted": "Free"means a free download; checkhasInAppPurchasesand the in-app-purchases endpoint for how it actually monetizes.deletedInStoreAtisnullfor live apps and carries a timestamp once Apple pulls the app, so you can detect takedowns.
The full app record is the long-form view. Collection endpoints (search, charts, similars) return a trimmed ApplicationShort with the same identity, developer, genre, rating, and price fields, minus the description, screenshots, and in-app purchases.
Pull reviews
Reviews are paginated and filterable by score, country, and sort order. For a sentiment pipeline you'd poll sort=NEWEST_FIRST; for triage you'd pull sort=LOWEST_SCORE_FIRST or filter score=1.
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/applications/544007664/reviews?perPage=2&sort=NEWEST_FIRST"
{
"data": [
{
"id": 14223599877,
"author": "Mcrankenstien",
"title": "Thee bessssttt",
"text": "If it wasn't for YouTube I wouldn't have a life...",
"score": 5,
"developerResponse": null,
"applicationVersion": "21.25.5",
"createdAt": "2026-06-25T07:15:50.000Z",
"voteCount": 0,
"voteSum": 0
},
{
"id": 14223071796,
"author": "Dumbinthehead",
"title": "Ads",
"text": "Too many ads all the time, can't watch 5 minutes of a video...",
"score": 1,
"developerResponse": null,
"applicationVersion": "21.25.5",
"createdAt": "2026-06-25T03:24:53.000Z",
"voteCount": 0,
"voteSum": 0
}
],
"currentPage": 1,
"lastPage": 8408,
"perPage": 2,
"total": 16815
}
Every collection response carries the same four pagination fields (currentPage, lastPage, perPage, total), so you always know how much is left. Each review is tagged with the exact applicationVersion it was written against, which is what lets you correlate a wave of 1-stars with the release that caused them. Note this API returns Apple's raw review text only; it does not generate AI summaries or sentiment scores. Bring your own model for that.
To stream negative reviews across multiple storefronts, stack the filters:
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/applications/544007664/reviews?score=1&countries=us&countries=gb"
Search the way users see it
/search/applications returns App Store search results for a term: the same ranked list a user sees typing it into the App Store, including any sponsored slot Apple injects at the top. This is how you audit keyword rankings against reality, paid placements and all.
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/search/applications?term=spotify&country=us"
{
"data": [
{
"id": 324684580,
"name": "Spotify: Music and Podcasts",
"developer": { "id": 324684583, "name": "Spotify" },
"primaryGenre": { "id": 6011, "name": "Music" },
"rating": { "averageScore": 4.78031, "count": 40620114 }
},
{
"id": 1108187390,
"name": "Apple Music",
"developer": { "id": 284417353, "name": "Apple Distribution International" },
"rating": { "averageScore": 4.86049, "count": 2570149 }
},
{
"id": 1017492454,
"name": "YouTube Music",
"developer": { "id": 281956209, "name": "Google LLC" }
}
],
"ads": []
}
data is the organic rank order; ads holds whatever sponsored result Apple places above it (empty here). Because Apple ranks per storefront, country=us and country=de return different orders for the same term; switch the country parameter to track rankings market by market.
Read the charts (and movement)
/charts/positions is the latest chart snapshot of Top Free, Paid, or Grossing. Each row carries both the current position and the previousPosition, so you get movement without a second call.
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/charts/positions?type=FREE&maxPosition=5"
{
"data": [
{
"position": 1,
"previousPosition": 2,
"chartType": "FREE",
"genreId": null,
"createdAt": "2026-06-29T14:45:05.558Z",
"application": {
"id": 6448311069,
"name": "ChatGPT",
"developer": { "id": 1684349733, "name": "OpenAI OpCo, LLC" },
"primaryGenre": { "id": 6007, "name": "Productivity" }
}
},
{
"position": 2,
"previousPosition": 1,
"chartType": "FREE",
"genreId": null,
"application": {
"id": 1465944282,
"name": "Love Island USA",
"developer": { "id": 1687320230, "name": "ITV America Inc." }
}
}
]
}
position - previousPosition is the rank delta — that's your "movers and shakers" report in one subtraction. Scope to a category by passing Apple's genreId (e.g. 6014 for Games), and createdAt tells you exactly when the snapshot was taken, since AppSigma re-snapshots charts periodically rather than on every request.
What comes back when something's wrong
Every 4XX response uses one consistent Error schema: a stable machine-readable code, a human message, and a requestId for support. Ask the demo key for a term outside its curated slice and you'll see it:
curl -H "X-API-Key: demo" \
"https://api.appsigma.io/v1/search/applications?term=notion"
{
"code": "forbidden",
"message": "This search term is not available in demo mode.",
"requestId": "d0b47475234bc93d44e471ad0685a26f"
}
The codes you'll actually branch on: unauthorized (bad or missing key), forbidden (key can't reach this resource), not_found, bad_request, rate_limited (back off using the Retry-After header), and payment_required (out of credits; top up or upgrade).
How billing works
Requests debit credits from your plan: single-item GETs cost 1 credit, aggregate and histogram endpoints cost 2, list endpoints cost 1 per row returned, and /search/applications is a flat 5. Demo requests are unbilled. When your balance can't cover a request, you get a 402 with the payment_required code instead of a partial result.
Not the App Store Connect API
One clarification, because it trips people up: this is not the App Store Connect API. App Store Connect is Apple's first-party API for managing your own apps (sales reports, builds, TestFlight). The App Store API queries every public app on the store, including your competitors, without you owning any of them. Different job entirely.
Where to go next
The four endpoints above cover the bulk of real-world use, but the surface is wider: version history, price changes, in-app-purchase tiers, ratings broken down by version, similar apps, developer portfolios, editorial features, and in-app events all nest under the same conventions you've seen here. Every endpoint is documented with a try-it console at docs.appsigma.io, and the machine-readable OpenAPI spec is the fastest way to generate a client or point an AI agent at the API.
Grab a free key from your AppSigma organization settings and swap demo for it. Same requests, the whole catalog.
Frequently asked questions
Is the AppSigma App Store API the same as the App Store Connect API?
No. App Store Connect is Apple's first-party API for managing your own apps — sales reports, builds, TestFlight. The AppSigma App Store API queries every public app on the store, including your competitors, without you owning any of them. They solve different problems.
Can I try the App Store API without an API key?
Yes. Use X-API-Key: demo to make free, unbilled requests against a curated slice of real data: the apps YouTube and Facebook, the search terms youtube, instagram, spotify, and facebook, and the full charts. A real key unlocks the entire App Store catalog. Every curl example in this guide runs on the demo key as-is.
How does App Store API billing work?
Requests debit credits from your plan: single-item GETs cost 1 credit, aggregate and histogram endpoints cost 2, list endpoints cost 1 per row returned, and search is a flat 5. Demo requests are unbilled. When your balance can't cover a request, the API returns a 402 with the payment_required code.
Does the App Store API return AI-generated review summaries?
No. The reviews endpoint returns Apple's raw review text, score, version, vote counts, and developer response only — it does not generate AI summaries or sentiment scores. Bring your own model if you want to run sentiment analysis over the feed.