PeekPanda markpeekpandaDocumentation
For your AI
Dashboard

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

NameInTypeRequiredDescription
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

positionKindstring
storeIdstring
coverage.queriesMatchednumber
coverage.countrystring
coverage.languagestring
coverage.sourcestring
coverage.latestObservedAtstring
coverage.observationCountnumber
summary.top3number
summary.top10number
summary.top50number
summary.bestPositionobject
summary.medianPositionnumber
keywords[].querystring
keywords[].countrystring
keywords[].languagestring
keywords[].sourcestring
keywords[].observedAtstring
keywords[].positionnumber
keywords[].resultCountnumber
keywords[].apps[].storeIdstring
keywords[].apps[].positionnumber
keywords[].apps[].namestring
keywords[].apps[].isSubjectboolean
keywords[].apps[].inCatalogueboolean
keywords[].apps[].ratingnumber
keywords[].apps[].ratingCountnumber
keywords[].history[].observedAtstring
keywords[].history[].positionnumber
keywords[].demand.scorenumber
keywords[].demand.tiernumber
keywords[].demand.countrystring
keywords[].demand.periodStartstring
keywords[].demand.periodEndstring
keywords[].demand.observedAtstring
keywords[].popularityEstimatenull
keywords[].difficulty.scorenumber
rivalsarray
keywordIdeasarray
insights[].kindstring
insights[].titlestring
insights[].detailstring
insights[].keywordsarray
insights[].catalogueStoreIdnull

Authentication

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