AppStore API endpoint
Returns App Store search results for a term. Set `ids_only=true` to return only app IDs. `platform` enum: `phone`, `pad`, `mac`.
/appstore/searchMCP tool: appstore_search
Returns Apple App Store search results for a query.
Query parameters:
term: required. App Store search query.num: optional. Number of results to return. Default 50.page: optional. Result page number, starting at 1. Default 1.country: optional. Two-letter storefront country code.lang: optional. Result language tag.ids_only: optional. Return only app IDs instead of full app objects when true. Default false.platform: optional. App Store catalog to search. Default phone. Allowed values: phone, pad, mac.Most universal apps already appear under phone with the same track ID; pad/mac mainly surface iPad-exclusive listings and separate Mac App Store submissions (which have their own track ID, distinct from any iPhone version of the same app).
Apple accepts at most 200 search results and currently ignores an offset parameter. page therefore slices the fetched result window locally: with the default num=50, pages 1–4 can cover that window, while later pages are empty. Use autocomplete-driven terms or the full sitemap/category/chart discovery lanes for broader dataset coverage; do not treat page as an unbounded upstream cursor.
This endpoint intentionally does not expose device-support (iPhone-only vs. iPad-compatible), price, category, sort, or age-rating filters, because Apple's search API has no server-side support for them: entity=software|iPadSoftware|macSoftware has no listed attribute values in Apple's own parameter documentation, and live checks (2026-08-09) confirm attribute and explicit are silently no-ops against these entities — recognized tokens are accepted without error but never change or filter the result set (unrecognized tokens do 400, so Apple does validate the token, it just never applies it to App Store results). Each result already carries the raw fields needed for that kind of filtering client-side — supportedDevices, price/free, primaryGenre/genres, contentAdvisoryRating — so a caller that needs "iPad-compatible only" or "free apps only" etc. should filter the returned array on those fields rather than expect an upstream query param.
| Field | Filled in, of 30 checked | Values in the sample |
|---|---|---|
| id | 30 | |
| app_id | 30 | |
| title | 30 | “ChatGPT” and 29 other values |
| url | 30 | apps.apple.com |
| description | 30 | median 2,362 characters |
| icon | 30 | is1-ssl.mzstatic.com |
| genres | 30 | median 2 entries |
| genre_ids | 30 | |
| primary_genre | 30 | Productivity (24), Photo & Video (2), Utilities (1) and 3 more |
| primary_genre_id | 30 | |
| content_rating | 30 | 12+ (17), 17+ (9), 4+ (3) and 1 more |
| languages | 30 | median 19 entries |
| size | 30 | 4,205,568 to 808,836,096, median 182,049,792 |
| required_os_version | 30 | |
| released | 30 | 2010-10-06 to 2026-09-08 |
| updated | 30 | 2023-12-22 to 2026-10-13 |
| release_notes | 29 | “Bug fixes and small improvements.” and 24 other values |
| version | 30 | |
| price | 30 | 0 |
| currency | 30 | USD in all 30 |
| free | 30 | true in 30 of 30 |
| developer_id | 30 | |
| developer | 30 | “OpenAI OpCo, LLC” and 28 other values |
| developer_url | 30 | apps.apple.com |
| developer_website | 23 | openai.com and 21 other hosts |
| score | 30 | 3.88 to 5, median 4.7 |
| reviews | 30 | 2 to 29,591,453, median 144,621 |
| current_version_score | 30 | |
| current_version_reviews | 30 | |
| screenshots | 30 | median 8 entries |
| ipad_screenshots | 24 | median 8 entries |
| appletv_screenshots | 0 | |
| supported_devices | 30 | median 130 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| term | string | Yes | Search term | panda | |
| num | integer | No | Number of apps per page | 50 | |
| page | integer | No | Search page number (1-based) | 1 | |
| country | string | No | Two-letter storefront country code | us | |
| lang | string | No | Result language tag | en-us | |
| ids_only | boolean | No | Return only app IDs | ||
| platform | string | No | App Store catalog to search: phone, pad, mac Allowed values: phone, pad, mac. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/appstore/search?term=panda&num=10&page=1&country=us&lang=en&ids_only=true&platform=phone" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": [
{
"id": "6448311069",
"title": "ChatGPT",
"developer": "OpenAI",
"score": 4.9,
"url": "https://apps.apple.com/us/app/chatgpt/id6448311069"
}
]
}Request schema
No body schema
Response schema
#/definitions/appstore.searchResultsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | array | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/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/search?term=panda&num=10&page=1&country=us&lang=en&ids_only=true&platform=phone" \
-H "x-api-key: $CRAWLORA_API_KEY"