AppStore API endpoint
Returns one page of customer reviews for an App Store app, identified by `id` (numeric track ID) or `app_id` (bundle ID). `page` runs 1 to 10 and `sort` is `mostRecent` (default) or `mostHelpful`. Reviews carry `score`, `title`, `text`, `version`, `user_name` and `updated`. Returns 503 when reviews cannot be retrieved, and 404 when the app is not in that `country` storefront.
/appstore/reviewsMCP tool: appstore_reviews
Query parameters:
id: optional. App Store track ID. Must be numeric (digits only), e.g. 553834731.app_id: optional. App Store bundle ID, e.g. com.midasplayer.apps.candycrushsaga.country: optional. Two-letter storefront country code.page: optional. Review page number, 1 to 10.sort: optional. Sort order. Default: mostRecent. Allowed values: mostRecent, mostHelpful.lang: optional. Result language tag.Provide either id or app_id; when only app_id (bundle ID) is given it is resolved to the track ID first. A non-numeric id returns 400; pass a bundle ID as app_id instead.
Notable response behavior: the upstream App Store reviews feed is intermittently unavailable and can return an empty page even for apps that have reviews. When that happens the request is retried automatically; if reviews still cannot be retrieved the endpoint responds with 503 (temporarily unavailable) rather than an empty 200, so an empty data array reliably means "no reviews on this page". Retry on 503.
If the app is not published in the requested storefront, the endpoint responds with 404 instead of 503, because that condition is permanent and retrying cannot help. Check the country value, or query a storefront where the app is available.
| Field | Filled in, of 50 checked | Values in the sample |
|---|---|---|
| id | 50 | |
| user_name | 50 | |
| user_url | 50 | itunes.apple.com |
| version | 50 | |
| score | 50 | 1 to 5, median 5 |
| title | 50 | |
| text | 50 | |
| url | 50 | itunes.apple.com |
| updated | 50 | 2026-10-11 to 2026-10-12 |
| 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 | |
| page | integer | No | Review page number (1-10) | 1 | |
| sort | string | No | Sort order Allowed values: mostRecent, mostHelpful. | ||
| 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/reviews?country=us&page=1&sort=mostRecent&lang=en" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": [
{
"id": "review-1",
"user_name": "App Store User",
"user_url": "https://itunes.apple.com/us/reviews/id123456789",
"version": "1.2.3",
"score": 5,
"title": "Helpful assistant",
"text": "Great for writing and research.",
"url": "https://itunes.apple.com/us/review?id=987654321",
"updated": "2026-06-12T01:00:00-07:00"
}
]
}Request schema
No body schema
Response schema
#/definitions/appstore.reviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | array | No | ||||
| data[].id | string | No | App Store review ID. | |||
| data[].score | integer | No | Rating the reviewer gave the app. | |||
| data[].text | string | No | Text of the review. | |||
| data[].title | string | No | Headline of the review. | |||
| data[].updated | string | No | Date and time the review was last updated, in ISO 8601. | |||
| data[].url | string | No | URL of the review. | |||
| data[].user_name | string | No | Display name of the reviewer. | |||
| data[].user_url | string | No | URL of the reviewer's profile. | |||
| data[].version | string | No | App version the review was written for. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | App not found, or not published in the requested storefront | #/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/reviews?country=us&page=1&sort=mostRecent&lang=en" \
-H "x-api-key: $CRAWLORA_API_KEY"