tools / volume
volume
read-onlyKeyword demand (Apple Search Ads popularity)
Keyword demand (popularity 0-100) plus competition count, per storefront. popularity is Apple's real Search Ads Search Popularity (5-100) when source is "apple". Apple floors low-demand keywords at 5 and returns nothing for terms below its threshold or in storefronts outside Apple Ads coverage (~95 of 175 storefronts have it); source is then "proxy" and popularity is an independently-derived estimate blending autocomplete-prefix probing, rating mass of top apps, competition depth and keyword-in-title saturation (per-signal values in components). floored marks keywords Apple carries no signal for; applePopularity echoes Apple's raw value (5 when floored, null when unavailable); estimate is always the independent number. Costs one search plus up to 3 autocomplete probes per storefront (throttled ~1/s), plus a cached Apple Ads lookup when configured. competition saturates at 200 (the search API's cap).
input
keyword *
string
App Store search term
countries
string[]
2-letter storefront codes, e.g. ["US", "GB", "JP"]. Each storefront is queried separately.(default ["US"])
example call
tools/call → volume
{ "name": "volume", "arguments": { "keyword": "habit tracker" } }
output
keyword *
string
storefronts *
object[]
country *
string
popularity *
integer
headline demand — Apple's real popularity (source apple) or the estimate (source proxy)
source *
"apple" | "proxy"
apple = real Apple Search Ads popularity; proxy = independent estimate
applePopularity *
integer | null
raw Apple Search Ads popularity 5-100; 5 when floored, null when Apple has no data
floored *
boolean
Apple floored the keyword at 5 (or had no data); popularity fell back to the estimate
estimate *
integer
the independent blended demand estimate (always computed)
label *
"Low" | "Medium" | "High" | "Very high"
competition *
integer
apps surfaced by the search (capped at 200)
topAppsConsidered *
integer
medianTopRatings *
integer
components *
object
per-signal 0-100 scores feeding the estimate
autocomplete *
integer | null
null when no probes ran
ratings *
integer
competition *
integer
titleMatch *
integer
autocompleteProbes *
object[]
prefixes probed against App Store autocomplete, shortest first; failed probes are omitted (the score renormalizes over the rest)
prefix *
string
weight *
number
rank weight of this prefix in the score
matched *
boolean
position *
integer | null
1-based suggestion position; null when not matched
note *
string
endpoint https://openaso-806591819206.us-west1.run.app/mcp · auth Authorization: Bearer <key> · get a key