Get competitor ASO intelligence
Read stored App Store search observations for one iOS listing.
Download Markdown ↓GEThttps://api.peekpanda.com/v1/competitors/{platform}/{storeId}/aso
Request
Identify the listing. This read returns stored observations.
Parameters
platformpathiosYesThe preview supports iOS only.storeIdpathnumeric stringYesApple App Store identifier.Response
Position is Search API order, not native App Store rank. `demand` is Apple's weekly search popularity for the phrase (1 to 100, with Apple's 1 to 5 tier). Where Apple reports nothing for a US phrase, `popularityEstimate` carries PeekPanda's own estimate: a tier (`very_low`, `low`, `medium` or `high`), never a number on Apple's scale, with `estimatedAt` and the `modelTrainedAt` of the weekly model behind it. The two never appear together: when `demand` is set, `popularityEstimate` is null. Neither is a search count.
Response fields
positionKindstringstoreIdstringcoverage.queriesMatchednumbercoverage.countrystringcoverage.languagestringcoverage.sourcestringcoverage.latestObservedAtstringcoverage.observationCountnumbersummary.top3numbersummary.top10numbersummary.top50numbersummary.bestPositionobjectsummary.medianPositionnumberkeywords[].querystringkeywords[].countrystringkeywords[].languagestringkeywords[].sourcestringkeywords[].observedAtstringkeywords[].positionnumberkeywords[].resultCountnumberkeywords[].apps[].storeIdstringkeywords[].apps[].positionnumberkeywords[].apps[].namestringkeywords[].apps[].isSubjectbooleankeywords[].apps[].inCataloguebooleankeywords[].apps[].ratingnumberkeywords[].apps[].ratingCountnumberkeywords[].history[].observedAtstringkeywords[].history[].positionnumberkeywords[].demand.scorenumberkeywords[].demand.tiernumberkeywords[].demand.countrystringkeywords[].demand.periodStartstringkeywords[].demand.periodEndstringkeywords[].demand.observedAtstringkeywords[].popularityEstimatenullkeywords[].difficulty.scorenumberrivalsarraykeywordIdeasarrayinsights[].kindstringinsights[].titlestringinsights[].detailstringinsights[].keywordsarrayinsights[].catalogueStoreIdnullAuthentication
Requires Bearer API credential or OAuth access token. Scope context:read. MCP calls get_app with action aso.
Errors
400invalid_request for an invalid filter, identity or limit.401authentication_required for a missing or invalid credential.402subscription_required when access is not entitled.403authorization_required for a missing scope or unavailable preview access.403workspace_not_accessible when x-genviral-tenancy names a workspace the credential cannot reach.404not_found when the record is outside the accessible catalogue.429rate_limited; honor Retry-After when present.429daily_call_limit; the plan's daily API and MCP calls are used until 00:00 UTC.MCP request
Call get_app with action aso. Path fields go in params, filters in query, and a write body in body.
{
"name": "get_app",
"arguments": {
"request": {
"action": "aso",
"params": {
"platform": "<platform>",
"storeId": "<storeId>"
}
}
}
}
Source
Dated US English App Store search observations. Position is observed result order, not native App Store rank or search volume.
Refresh
Use the ASO refresh command to request newer coverage. Collection runs asynchronously.
AI agent or LLM? Read this page as markdown