AppStore API endpoint
Returns app items embedded in an Apple room or EDS collection page. Discover IDs with `appstore_collections`. `platform` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. `collection_id` must be a numeric room ID or `eds.UUID` ID returned by the discovery endpoint.
/appstore/collectionMCP tool: appstore_collection
Returns the app items embedded in one App Store room or EDS collection page.
Discover IDs with appstore_collections first. A collection ID is scoped to
the platform and storefront where it was discovered.
Query parameters:
platform: required. Apple device catalog. Allowed values: iphone,
ipad, mac, vision, watch, tv.collection_id: required. Numeric room ID or eds.UUID collection ID
returned by appstore_collections.country: optional. Two-letter storefront country code. Defaults to us.lang: optional. Result language tag, such as en-US.Example response (platform=iphone&collection_id=6757461219):
{
"code": 200,
"msg": "OK",
"data": {
"id": "6757461219",
"kind": "room",
"platform": "iphone",
"title": "Apps in Heavy Rotation",
"apps": [
{
"kind": "Lockup",
"id": 835599320,
"bundle_id": "com.example.app",
"title": "Example App",
"developer_name": "Example Developer",
"url": "https://apps.apple.com/us/app/example-app/id835599320"
}
]
}
}
| Field | Filled in, of 41 checked | Values in the sample |
|---|---|---|
| kind | 41 | Lockup in all 41 |
| id | 41 | |
| bundle_id | 41 | |
| title | 41 | “TikTok - Videos, Shop & LIVE” and 40 other values |
| subtitle | 41 | “Watch, discover and stream!” and 40 other values |
| developer_name | 41 | “TikTok Ltd.” and 38 other values |
| age_rating | 41 | 12+ (22), 17+ (9), 4+ (8) and 1 more |
| rating | 41 | 4.2 to 5, median 4.7 |
| icon_url | 41 | is1-ssl.mzstatic.com |
| url | 41 | apps.apple.com |
| destination_id | 41 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| platform | string | Yes | Apple device catalog Allowed values: iphone, ipad, mac, vision, watch, tv. | iphone | |
| collection_id | string | Yes | Room ID or EDS UUID collection ID from appstore_collections | 6757461219 | |
| country | string | No | Two-letter storefront country code | us | |
| lang | string | No | Result language tag | en-us | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/appstore/collection?platform=iphone&collection_id=6757461219&country=us&lang=en" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"id": "6757461219",
"kind": "room",
"platform": "iphone",
"title": "Apps in Heavy Rotation",
"apps": [
{
"kind": "Lockup",
"id": 835599320,
"bundle_id": "com.example.app",
"title": "Example App",
"developer_name": "Example Developer",
"url": "https://apps.apple.com/us/app/example-app/id835599320"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/appstore.collectionResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | appstore.AppStoreCollectionPage | No | ||||
| data.apps | array | No | ||||
| data.apps[].age_rating | string | No | Age rating shown on the item, for example `4+`. | |||
| data.apps[].bundle_id | string | No | Bundle ID of the app, when the item is a single app. | |||
| data.apps[].destination_id | string | No | DestinationID is the item's clickAction.destination.id. For a "Browse by Category" shelf item this is the target category's editorial page ID — pass it as EditorialCategoryOption.CategoryID for the SAME device. Live-verified this is NOT unique to category links, though: a regular single-app item (e.g. Lockup) carries its own ID here too (a self-referential page link, duplicating ID/AdamID) — so callers looking for a category ID should scope to the shelf titled "Browse by Category" rather than taking the first non-empty DestinationID from any shelf. | |||
| data.apps[].developer_name | string | No | Name of the developer shown on the item. | |||
| data.apps[].icon_url | string | No | template URL with unresolved size tokens | |||
| data.apps[].id | integer | No | App Store numeric track ID, when this item is a single app (same ID space as App.ID) | |||
| data.apps[].kind | string | No | raw Apple "$kind" | |||
| data.apps[].rating | number | No | Average rating shown on the item. | |||
| data.apps[].rating_count | integer | No | Number of ratings shown on the item. | |||
| data.apps[].subtitle | string | No | Subtitle shown on the item. | |||
| data.apps[].title | string | No | Title shown on the item. | |||
| data.apps[].url | string | No | the item's own apps.apple.com page, when it links to one | |||
| data.id | string | No | ||||
| data.kind | string | No | ||||
| data.platform | string | No | ||||
| data.title | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | Collection not found | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/appstore/collection?platform=iphone&collection_id=6757461219&country=us&lang=en" \
-H "x-api-key: $CRAWLORA_API_KEY"