Get market overview
Read who is winning one App Store storefront: the market pulse, the advertiser, viral and search-owner boards, the hottest and widest-open searches, and typed findings.
Download Markdown ↓GEThttps://api.peekpanda.com/v1/market/overview
Request
Send country as a query parameter. Unknown parameters are rejected. This GET never starts collection.
Parameters
countryquery^[a-z]{2}$NoApple storefront as two lowercase letters. Defaults to us.Response
The response includes the country, the chart day with how many days of chart history exist, eight weekly dates, the market pulse, three boards, two search lists, typed findings and the suspects. The example uses observations from the US storefront on 10 September 2026, trimmed to one or two rows per list.
Response fields
countrystringchart.daystringchart.previousDaystringchart.historyDaysnumberweeks[]string[]pulse.paidobjectpulse.organicobjectpulse.keywordsobjectboards.advertisers[].storeIdstringboards.advertisers[].namestringboards.advertisers[].iconUrlstringboards.advertisers[].categoryNamestringboards.advertisers[].liveAdsnumberboards.advertisers[].totalAdsnumberboards.advertisers[].startedLast7Daysnumberboards.advertisers[].medianDaysLivenumberboards.advertisers[].longestDaysLivenumberboards.advertisers[].videoSharenumberboards.advertisers[].topCallToActionstringboards.advertisers[].placementobjectboards.viral[].storeIdstringboards.viral[].namestringboards.viral[].iconUrlnullboards.viral[].categoryNamestringboards.viral[].matchedPostsnumberboards.viral[].viewsnumberboards.viral[].medianViewsnumberboards.viral[].bestPostViewsnumberboards.viral[].placementnullboards.searchOwners[].storeIdstringboards.searchOwners[].namestringboards.searchOwners[].iconUrlstringboards.searchOwners[].categoryNamestringboards.searchOwners[].rankednumberboards.searchOwners[].top10numberboards.searchOwners[].top3numberboards.searchOwners[].placementobjectsearches.hottest[].querystringsearches.hottest[].popularitynumbersearches.hottest[].previousPopularitynumbersearches.hottest[].difficultynumbersearches.hottest[].rankingAppsnumbersearches.hottest[].leaderobjectsearches.wideOpen[].querystringsearches.wideOpen[].popularitynumbersearches.wideOpen[].difficultynumbersearches.wideOpen[].opportunitynumbersearches.wideOpen[].rankingAppsnumbersearches.wideOpen[].leaderobjectfindings.climbingAndBuying[].storeIdstringfindings.climbingAndBuying[].namestringfindings.climbingAndBuying[].iconUrlstringfindings.climbingAndBuying[].categoryNamestringfindings.climbingAndBuying[].placementobjectfindings.climbingAndBuying[].startedLast7Daysnumberfindings.climbingAndBuying[].liveAdsnumberfindings.topTenUncollected[].storeIdstringfindings.topTenUncollected[].namestringfindings.topTenUncollected[].iconUrlstringfindings.topTenUncollected[].categoryNamestringfindings.topTenUncollected[].ranknumberfindings.topTenUncollected[].chartTypestringfindings.newEntrants[].storeIdstringfindings.newEntrants[].namestringfindings.newEntrants[].iconUrlstringfindings.newEntrants[].categoryNamestringfindings.newEntrants[].ranknumberfindings.newEntrants[].hasAdsbooleanfindings.newEntrants[].hasOrganicbooleanfindings.newEntrants[].hasKeywordsbooleanfindings.viralNotBuying[].storeIdstringfindings.viralNotBuying[].namestringfindings.viralNotBuying[].iconUrlnullfindings.viralNotBuying[].categoryNamestringfindings.viralNotBuying[].matchedPostsnumberfindings.viralNotBuying[].viewsnumberfindings.buyingNotCharting[].storeIdstringfindings.buyingNotCharting[].namestringfindings.buyingNotCharting[].iconUrlstringfindings.buyingNotCharting[].categoryNamestringfindings.buyingNotCharting[].liveAdsnumberfindings.buyingNotCharting[].placementobjectsuspects[].storeIdstringsuspects[].namestringsuspects[].iconUrlstringsuspects[].categoryNamestringsuspects[].boards[]string[]suspects[].placement.ranknumbersuspects[].placement.previousRanknumbersuspects[].placement.chartTypestringsuspects[].placement.categoryIdstringsuspects[].placement.categoryNamestringsuspects[].placement.daystringsuspects[].paid.liveAdsnumbersuspects[].paid.startedLast7Daysnumbersuspects[].organic.matchedPostsnumbersuspects[].organic.viewsnumbersuspects[].keywords.top10numberAuthentication
Requires Bearer API credential or OAuth access token. Scope context:read. MCP calls get_market with action overview.
Errors
400invalid_request for an unknown query parameter or a country that is not two lowercase letters.401authentication_required for a missing or invalid credential.402subscription_required when access is not entitled.403authorization_required for a missing context:read scope or unavailable preview access.429rate_limited; wait for the Retry-After seconds, then send the same request again.MCP request
Call get_market with action overview. Path fields go in params, filters in query, and a write body in body.
{
"name": "get_market",
"arguments": {
"request": {
"action": "overview"
}
}
}
Source
Chart placements come from dated public App Store chart observations. chart.historyDays says how much chart history exists, so movement is day over day, not a trend. Paid ads are collected per chosen app, so an app without ads has not been collected. An ad counts for the app its own verified App Store link names, or for the app its proven advertiser page runs ads for, web funnels and Google Play links included; the paid pulse counts the same ads. destinations splits them into App Store, Play Store and web-funnel ads, and only App Store ads are counted as appStore. "Last 7 days" and run lengths are UTC calendar days. Organic posts are matched by product name, not account ownership, and their views are as last counted. pulse.organic.viewsCountedAt says when. Keyword positions are observed App Store search result positions, not search volume.
Refresh
This GET reads stored evidence and never calls Apple or an advertising library. Keyword and organic aggregates are precomputed off the request path, and the dates in the payload say how fresh each stream is.
Rate limits
Market reads share the standard read budget of 60 requests per minute with every other PeekPanda read. During the preview the count is kept per client network address, not per plan, and it resets at the end of each one-minute window. A 429 rate_limited response carries Retry-After when the server can say how long to wait: wait that many seconds, then send the same request again. Every call also counts toward your plan's daily API and MCP allowance: 30 calls a day on Peek and 1,000 on Panda, shared by every key and MCP connection on the plan and reset at 00:00 UTC. Past it, calls answer 429 daily_call_limit until the reset. Stored reads do not use your refresh allowance.
Bounded lists
This read has no cursor. Each board holds at most 15 apps and each search list at most 20 queries. Every weekly series has exactly 8 Monday-start weeks, oldest first, and the last one is the current, partial week. Findings and suspects list only the apps that meet their rule, so any of them can be empty. A suspect sits on at least 3 of the four boards: chart, paid, organic and search.
AI agent or LLM? Read this page as markdown