Microsoft Store API endpoint
Returns a curated Microsoft Store chart (top free, top paid, top grossing, trending, deals, new releases, getting-started picks, or -- apps only -- most popular), optionally scoped to a category/subcategory and, for games, by Xbox Game Pass availability or player count. Some charts (notably NewAndRising) can legitimately return fewer items than page_size even at the first page -- that reflects real sparsity for that chart.
/microsoftstore/chartsReturns a curated Microsoft Store chart (top free, top paid, top grossing, trending, deals, new releases, getting-started picks, or — apps only — most popular), optionally scoped to a category/subcategory and, for games, by Xbox Game Pass availability or player count. This is exactly the data behind the real site's /collections/computed/<media_type>/<list>[/<category>] pages and their "Top free / Top paid / Specials / Best selling / Most popular / Top trending / Latest Trending" filter pills, plus the "Filters" panel's Discount/Subscription type/Number of players controls.
Query parameters:
list (required) — chart to fetch. One of TopFree, TopPaid, TopGrossing, toptrending, NewAndRising, Deal, GettingStartedApps, MostPopular. MostPopular is apps only. (The real UI's "Latest Trending" pill is the same chart as toptrending under an A/B-tested label — confirmed to return byte-identical data — so it is not exposed as a separate value.)media_type (optional, default apps) — department to scope the chart to. One of apps, games.category (optional) — further scope the chart to one category within media_type (the accepted set depends on media_type — see /microsoftstore/categories). Omit for the department-wide chart.subcategory (optional, apps only) — further scope to one subcategory within category (see /microsoftstore/categories for which categories have subcategories). Requires category to also be set; a 400 otherwise.discount_filter (optional) — onsale to show only currently-discounted items. Applies to both apps and games.subscription_filter (optional, games only) — gamepass to show only titles included with Xbox Game Pass. A 400 when set for media_type=apps.num_players_filter (optional, games only) — one of AllPlayers, SinglePlayer, OnlineMultiplayerWithGold, LocalMultiplayer, CoopSupportOnline, CoopSupportLocal. A 400 when set for media_type=apps.page (optional, default 1) — 1-based page number.page_size (optional, default 20, max 24) — items per page.country (optional, default US) — store country/region code (ISO-2).locale (optional, default en-US) — display locale (BCP-47).A note on how these filter params were found: the store's own "Filters" panel discovery API (Reco/GetCollectionFiltersList) advertises this same discount/subscription/player-count UI under different internal ids (discount, subscriptionType, NumberOfPlayers) — but passing those exact names to this chart endpoint is silently ignored; it has no effect. The real, working query parameter names (discountFilter, subscriptionFilter, numPlayersFilter, subcategoryFilter) were only found by driving the real filter UI in a browser and reading the actual network request it fires. Every filter above was independently confirmed live to produce a genuinely different, correctly-filtered item list, not just accepted without error.
Known upstream quirk, worked around automatically: some charts (confirmed on NewAndRising) return far fewer items than requested — or zero — at a small noItems, even though totalCount reports real inventory (e.g. 500). This client always requests at least 24 items from upstream internally and trims to page_size. Some charts, notably NewAndRising, can still legitimately return fewer items than page_size even at this floor — that reflects genuine upstream sparsity for that chart, not a parsing gap in this client.
Returns list, title (the chart's own display title, e.g. "Must-have free apps"), media_type, category/subcategory (echoed back when set), discount_filter/subscription_filter/num_players_filter (echoed back when set), page, page_size, count, items[] (same shape as /microsoftstore/search's items[]), and source_url.
Example responses:
{"code":200,"msg":"OK","data":{"list":"TopFree","title":"Must-have free apps","media_type":"apps","page":1,"page_size":3,"count":3,"items":[{"product_id":"9nksqgp7f2nh","title":"WhatsApp","publisher":"Meta Platforms, Inc.","media_type":"Apps","kind":"app","price":0,"display_price":"Free","free":true,"url":"https://apps.microsoft.com/detail/9nksqgp7f2nh"}],"source_url":"https://apps.microsoft.com/api/Reco/GetComputedProductsList?filteredCategories=AllProducts&listName=TopFree&mediaType=apps&noItems=24&pgNo=1&gl=US&hl=en-US"}}
Game Pass–only games chart:
{"code":200,"msg":"OK","data":{"list":"TopFree","title":"Must-play free games","media_type":"games","subscription_filter":"gamepass","page":1,"page_size":5,"count":5,"items":[{"product_id":"9wzdncrfhwd2","title":"Microsoft Solitaire Collection"},{"product_id":"9pgw18npbzv5","title":"Minecraft Launcher"},{"product_id":"bt5p2x999vh2","title":"Fortnite"},{"product_id":"9nwqmvsb63n4","title":"Call of Duty®: Modern Warfare® III"}],"source_url":"https://apps.microsoft.com/api/Reco/GetComputedProductsList?filteredCategories=AllProducts&listName=TopFree&mediaType=games&noItems=24&pgNo=1&subscriptionFilter=gamepass&gl=US&hl=en-US"}}
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| product_id | 20 | |
| title | 20 | “WhatsApp” and 19 other values |
| description | 20 | median 455 characters |
| publisher | 20 | “WhatsApp Inc.” and 16 other values |
| categories | 20 | median 1 entry |
| media_type | 20 | Apps in all 20 |
| kind | 20 | app in all 20 |
| average_rating | 20 | 2.4 to 4.9, median 4.1 |
| rating_count | 20 | “312K” and 16 other values |
| price | 20 | 0 |
| display_price | 20 | Free in all 20 |
| free | 20 | true in 20 of 20 |
| icon_url | 20 | store-images.s-microsoft.com and 2 other hosts |
| poster_art_url | 20 | store-images.s-microsoft.com and 2 other hosts |
| release_date_utc | 14 | 2010-10-18 to 2026-03-04 |
| url | 20 | apps.microsoft.com |
| is_application | 20 | true in 20 of 20 |
| is_pwa | 4 | true in 4 of 4 |
| award | 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| list | string | Yes | Chart to fetch Allowed values: TopFree, TopPaid, TopGrossing, toptrending, NewAndRising, Deal, GettingStartedApps, MostPopular. | TopFree | |
| media_type | string | No | Department to scope the chart to Allowed values: apps, games. | ||
| category | string | No | Optional category to scope the chart to further | Photo & video | |
| subcategory | string | No | Optional finer subcategory within category (apps only; requires category to also be set) | E-reader | |
| discount_filter | string | No | Optional discount filter Allowed values: onsale. | ||
| subscription_filter | string | No | Optional subscription filter (games only) Allowed values: gamepass. | ||
| num_players_filter | string | No | Optional player-count filter (games only) Allowed values: AllPlayers, SinglePlayer, OnlineMultiplayerWithGold, LocalMultiplayer, CoopSupportOnline, CoopSupportLocal. | ||
| page | integer | No | 1-based page number | ||
| page_size | integer | No | Items per page (max 24) | ||
| country | string | No | Store country/region code (ISO-2) | ||
| locale | string | No | Display locale (BCP-47) | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/microsoftstore/charts?list=TopFree&media_type=apps&discount_filter=onsale&subscription_filter=gamepass&num_players_filter=AllPlayers&page=1&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"list": "TopFree",
"title": "Must-have free apps",
"media_type": "apps",
"page": 1,
"page_size": 3,
"count": 3,
"items": [
{
"product_id": "9nksqgp7f2nh",
"title": "WhatsApp",
"publisher": "Meta Platforms, Inc.",
"media_type": "Apps",
"kind": "app",
"price": 0,
"display_price": "Free",
"free": true,
"url": "https://apps.microsoft.com/detail/9nksqgp7f2nh"
}
],
"source_url": "https://apps.microsoft.com/api/Reco/GetComputedProductsList?filteredCategories=AllProducts&listName=TopFree&mediaType=apps&noItems=24&pgNo=1&gl=US&hl=en-US"
}
}Request schema
No body schema
Response schema
#/definitions/microsoftstore.chartsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | microsoftstore.ChartsResponse | No | ||||
| data.category | string | No | Photo & video | |||
| data.count | integer | No | 20 | |||
| data.discount_filter | string | No | onsale | |||
| data.items | array | No | ||||
| data.items[].average_rating | number | No | 4.3 | |||
| data.items[].award | microsoftstore.Award | No | ||||
| data.items[].award.category | string | No | Productivity category | |||
| data.items[].award.description | string | No | The Microsoft Store Awards celebrate apps and games that emphasize exceptional experiences for their users. | |||
| data.items[].award.editorial_id | string | No | Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h | |||
| data.items[].award.title | string | No | Microsoft Store Awards 2025 | |||
| data.items[].award.year | integer | No | 2025 | |||
| data.items[].categories | array | No | ["Music"] | |||
| data.items[].description | string | No | Love music and podcasts? Play your favorite songs... | |||
| data.items[].display_price | string | No | Free | |||
| data.items[].free | boolean | No | true | |||
| data.items[].icon_url | string | No | https://store-images.s-microsoft.com/image/apps.10546... | |||
| data.items[].is_application | boolean | No | true | |||
| data.items[].is_game | boolean | No | ||||
| data.items[].is_pwa | boolean | No | ||||
| data.items[].is_subscription | boolean | No | ||||
| data.items[].is_theme | boolean | No | ||||
| data.items[].kind | string | No | app | |||
| data.items[].media_type | string | No | Apps | |||
| data.items[].poster_art_url | string | No | ||||
| data.items[].price | number | No | 0 | |||
| data.items[].product_id | string | No | 9ncbcszsjrsb | |||
| data.items[].publisher | string | No | Spotify AB | |||
| data.items[].rating_count | string | No | 34K | |||
| data.items[].release_date_utc | string | No | 2017-10-24T12:04:25Z | |||
| data.items[].title | string | No | Spotify - Music and Podcasts | |||
| data.items[].url | string | No | https://apps.microsoft.com/detail/9ncbcszsjrsb | |||
| data.list | string | No | TopFree | |||
| data.media_type | string | No | apps | |||
| data.num_players_filter | string | No | SinglePlayer | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 20 | |||
| data.source_url | string | No | ||||
| data.subcategory | string | No | E-reader | |||
| data.subscription_filter | string | No | gamepass | |||
| data.title | string | No | Must-have free apps | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/microsoftstore/charts?list=TopFree&media_type=apps&discount_filter=onsale&subscription_filter=gamepass&num_players_filter=AllPlayers&page=1&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"