tools / audit
audit
read-onlyASO research bundle
The whole research pass — listing, word pool, scored keyword candidates — in one call.
audit compresses the opening hours of an ASO engagement into one tool call per storefront. It fetches the app's current listing (title plus web-scraped subtitle), derives the visible word pool, seeds App Store autocomplete with that pool to discover what users actually type, and scores every candidate — demand (popularity, the volume model), competition, incumbent strength (medianTopRatings) and this app's current rank for the term.
Each candidate is scored from a single shared search, where separate volume + rank calls would search twice. Supply your own phrases and they are always scored alongside the discoveries; supply seeds to steer discovery somewhere specific.
The result is a decision table, not a report: high popularity, low medianTopRatings, and a null rank is the shape of an opportunity. The tool is deliberately autocomplete-only in its discovery — mine reviews for vocabulary and competitors for who wins each phrase, then draft with coverage.
worked example
Audit HabitKit's US listing with up to 8 discovered candidates.
{ "name": "audit", "arguments": { "appId": 6443918070, "countries": [ "US" ], "limit": 8 } }
{ "appId": 6443918070, "storefronts": [ { "country": "US", "app": { "trackName": "Habit Tracker - HabitKit", "subtitle": "Streaks & Accountability", … }, "pool": [ { "word": "habit", "field": "title" }, { "word": "tracker", "field": "title" }, { "word": "habitkit", "field": "title" }, { "word": "streaks", "field": "subtitle" }, { "word": "accountability", "field": "subtitle" } ], "seeds": ["habit", "tracker", "habitkit", "streaks", "accountability"], "candidates": [ { "keyword": "habit tracker", "popularity": 82, "label": "Very high", "competition": 189, "medianTopRatings": 14002, "rank": 2 }, { "keyword": "accountability partner", "popularity": 65, "label": "High", "competition": 186, "medianTopRatings": 439, "rank": 88 }, { "keyword": "streaks", "popularity": 49, "label": "Medium", "competition": 188, "medianTopRatings": 12238, "rank": 3 }, … 5 more candidates, including autocomplete noise like "the habit burger grill" … ] } ] }
real response, captured 2026-07-29 — trimmed only where marked with …
accountability partneris the finding: demand 65, incumbents with a median of just 439 ratings, and the app already at rank 88 — winnable ground the current metadata barely serves.- Discovery is honest about its source: autocomplete also surfaces
the habit burger grill(popularity 83) — an agent readingmedianTopRatings: 636905and the restaurant genre discards it in one glance. - Expect roughly
seeds + 4 × candidatesseconds per storefront: every candidate is a real, throttled search against Apple. Progress notifications stream when the client requests them.
when to use it
- The first call on any new app — yours or a competitor's. It replaces the manual loop of lookup → suggest → volume → rank per candidate.
- Rebaselining after a metadata ship: rerun and watch which candidates' ranks moved.
- Feeding the drafting step: candidate
popularityvalues become coverage phrase weights ({phrase, value}) so the 30/30/100 characters chase measured demand. - The packaged
optimize_metadataprompt on the server orchestrates this end to end: audit → draft → regression-check → verify → track.