AppStore API endpoint
Returns app metadata from the App Store. Provide either `id` (numeric track ID) or `app_id` (bundle ID). `id`/`app_id` can identify an iPhone, iPad, or Mac App Store listing.
/appstore/appMCP tool: appstore_app
Returns Apple App Store details for a single app.
Query parameters:
id: optional. App Store track ID. Must be numeric (digits only), e.g. 553834731. Can be an iPhone, iPad, or Mac App Store track ID.app_id: optional. App Store bundle ID, e.g. com.midasplayer.apps.candycrushsaga.country: optional. Two-letter storefront country code.lang: optional. Result language tag.ratings: optional. Include rating count and histogram when true. Default false.platforms: optional. Include the full device-platform compatibility list (platforms in the response) when true. Costs one extra upstream page fetch. Default false.Provide either id or app_id. A non-numeric id returns 400; pass a bundle ID as app_id instead.
The response always includes a platforms field listing the Apple device platforms this app is known to run on (values: phone, pad, mac, tv, watch, vision). mac is populated for free whenever id/app_id resolves to a separate Mac App Store listing. The rest (pad, tv, watch, vision, plus a mac tag for apps that ship a Mac Catalyst build under the same track ID) are only populated when platforms=true was requested.
| Field | In the sample | Value in the sample |
|---|---|---|
| id | Has a value | |
| app_id | Has a value | |
| title | Has a value | “ChatGPT” |
| url | Has a value | apps.apple.com |
| description | Has a value | 1,339 characters |
| icon | Has a value | is1-ssl.mzstatic.com |
| genres | Has a value | 2 entries |
| genre_ids | Has a value | |
| primary_genre | Has a value | “Productivity” |
| primary_genre_id | Has a value | |
| content_rating | Has a value | “12+” |
| languages | Has a value | 60 entries |
| size | Has a value | 271,727,616 |
| required_os_version | Has a value | |
| released | Has a value | 2023-05-18 |
| updated | Has a value | 2026-10-06 |
| release_notes | Has a value | “Bug fixes and small improvements.” |
| version | Has a value | |
| price | Has a value | 0 |
| currency | Has a value | “USD” |
| free | Has a value | true |
| developer_id | Has a value | |
| developer | Has a value | “OpenAI OpCo, LLC” |
| developer_url | Has a value | apps.apple.com |
| developer_website | Has a value | openai.com |
| score | Has a value | 4.83 |
| reviews | Has a value | 11,230,660 |
| current_version_score | Has a value | |
| current_version_reviews | Has a value | |
| screenshots | Has a value | 8 entries |
| ipad_screenshots | Has a value | 8 entries |
| appletv_screenshots | Empty | |
| supported_devices | Has a value | 130 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | No | App Store numeric track ID (digits only) | 553834731 | |
| app_id | string | No | App Store bundle ID | com.midasplayer.apps.candycrushsaga | |
| country | string | No | Two-letter storefront country code | us | |
| lang | string | No | Result language tag | en-us | |
| ratings | boolean | No | Include ratings histogram | ||
| platforms | boolean | No | Include the full device-platform compatibility list (adds one extra upstream fetch) | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/appstore/app?country=us&lang=en&ratings=true&platforms=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"id": "6448311069",
"title": "ChatGPT",
"developer": "OpenAI",
"score": 4.9,
"ratings": 1200000,
"version": "1.2026.001",
"url": "https://apps.apple.com/us/app/chatgpt/id6448311069",
"platforms": [
"phone",
"pad",
"mac",
"vision"
]
}
}Request schema
No body schema
Response schema
#/definitions/appstore.appDetailsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | appstore.App | No | ||||
| data.app_id | string | No | Bundle ID of the app, for example `com.openai.chat`. | |||
| data.appletv_screenshots | array | No | URLs of the app's Apple TV screenshots. | |||
| data.content_rating | string | No | Age rating of the app, for example `4+`. | |||
| data.currency | string | No | Currency code of `price`. | |||
| data.current_version_reviews | integer | No | Number of user ratings for the current version. | |||
| data.current_version_score | number | No | Average user rating of the current version. | |||
| data.description | string | No | Full description of the app from its App Store page. | |||
| data.developer | string | No | Name of the app's developer. | |||
| data.developer_id | integer | No | App Store ID of the developer. | |||
| data.developer_url | string | No | App Store page URL of the developer. | |||
| data.developer_website | string | No | Website URL the developer lists for the app. | |||
| data.free | boolean | No | `true` when `price` is 0. | |||
| data.genre_ids | array | No | IDs of all genres the app is listed under. | |||
| data.genres | array | No | Names of all genres the app is listed under. | |||
| data.histogram | object | No | Number of ratings for each star value, keyed by star value. Present only when `ratings=true` was requested. | |||
| data.icon | string | No | URL of the app icon. | |||
| data.id | integer | No | App Store numeric track ID of the app. | |||
| data.ipad_screenshots | array | No | URLs of the app's iPad screenshots. | |||
| data.languages | array | No | Languages the app supports, as two-letter ISO codes. | |||
| data.platforms | array | No | Platforms is the set of Apple platforms this app is known to run on, using Apple's own appPlatforms vocabulary: phone, pad, mac, tv, watch, vision. "mac" is always populated for free when this record IS a Mac App Store listing (a separate catalog entry from the iPhone app, see Kind on lookupItem). The rest (and a "mac" tag for Mac-Catalyst-capable iPhone apps) are only populated when AppOption.Platforms was requested, since they require an extra upstream page fetch. | |||
| data.price | number | No | Price of the app in `currency`. It is 0 for free apps. | |||
| data.primary_genre | string | No | Name of the app's primary genre. | |||
| data.primary_genre_id | integer | No | App Store ID of the app's primary genre. | |||
| data.ratings | integer | No | Total number of user ratings. Present only when `ratings=true` was requested. | |||
| data.release_notes | string | No | Release notes of the current version. | |||
| data.released | string | No | Date and time the app was first released, in ISO 8601. | |||
| data.required_os_version | string | No | Minimum operating system version the app needs. | |||
| data.reviews | integer | No | Number of user ratings the app has across all versions. | |||
| data.score | number | No | Average user rating of the app across all versions. | |||
| data.screenshots | array | No | URLs of the app's screenshots. | |||
| data.size | string | No | File size of the app in bytes, given as a string. | |||
| data.supported_devices | array | No | Device model identifiers the app supports. | |||
| data.title | string | No | Name of the app. | |||
| data.updated | string | No | Date and time the current version was released, in ISO 8601. | |||
| data.url | string | No | App Store page URL of the app. | |||
| data.version | string | No | Current version number of the app. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | App 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/app?country=us&lang=en&ratings=true&platforms=true" \
-H "x-api-key: $CRAWLORA_API_KEY"