ASO Competitor Keyword Gap
Profiles a target app and its competitors on the App Store, deriving or fetching each app's indexed keyword set, catego…
Updated
Use this skill
$ npx skills add seoskills.sh/aso-competitor-keyword-gapAbout this skill
ASO Competitor Keyword Gap is a App Store Optimization skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves keyword and listing optimization for the App Store and Google Play. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.
SKILL.md
ASO Competitor Keyword Gap
AGENT ROLE: Autonomous competitive-ASO agent. Profile the target and its competitors, diff keyword sets, track metadata changes across runs, and emit the JSON in references/output.schema.json. Stateful via --previous.
OBJECTIVE
Expose the keyword opportunities competitors capture that the target does not (gaps), the shared battleground (overlaps), and the target's differentiators (unique_to_you); and, across runs, surface each competitor's title/subtitle/screenshot/description changes together with the keyword rank movements that follow them (correlation, disclosed as such).
INPUTS
target(REQUIRED): the App Store numeric id of your app.competitors(REQUIRED): comma-separated competitor ids.country(OPTIONAL, defaultus): storefront.source(OPTIONAL enumauto|aso|metadata, defaultauto): keyword source strategy.previous(OPTIONAL): prior run'ssnapshotfor change detection; absent on first run (baseline).max_competitors(OPTIONAL, default 15),max_keywords(OPTIONAL, default 100): cost guards.
AUTHENTICATION (iTunes Lookup + ASO Keyword API)
- Listing metadata uses the keyless iTunes Lookup API:
GET https://itunes.apple.com/lookup?id={ids}&country={c}&entity=software(one batched call for target + competitors). - Indexed keyword ranks, subtitle, and category rank REQUIRE env
ASO_API_KEY:GET https://api.asokeyword.io/v1/app_keywords?app_id={id}&country={c}withAuthorization: Bearer {ASO_API_KEY}. - IF
--source asois forced andASO_API_KEYis unset THEN STOPerror.code="AUTH_MISSING_ASO_KEY". IF the key is absent underautoTHEN fall back to metadata-derived keyword sets (ranks unavailable).401→ STOPAUTH_EXPIRED.
EXPECTED TOOL CALLS
- Run
scripts/competitor_keyword_gap.py --target 6001112223 --competitors 111,222,333 --country us [--previous prev.json]. - One batched Lookup call; when
ASO_API_KEYis set, one keyword call per app (capped by--max-competitors).
PROCEDURE (deterministic)
STEP 1 — LOOKUP all app ids in one batched call; STOP if the target is not found for the storefront.
STEP 2 — PROFILE each app: title, subtitle (ASO/override only), primary genre, version, description hash, screenshot-set hash + count, category rank, and a keyword set — from the ASO API when keyed, else derived from title+description n-grams (keyword_source records which).
STEP 3 — UNION the competitor keyword sets, tracking how many competitors carry each term and their average rank.
STEP 4 — GAPS = competitor-union terms absent from the target, sorted by competitors_ranking desc then average competitor rank asc. OVERLAPS = target ∩ union. UNIQUE_TO_YOU = target − union.
STEP 5 — IF --previous present THEN per competitor DIFF metadata fields vs the prior snapshot (metadata_changes) and compute rank_shifts (delta = old_rank − new_rank, positive = improved; lost keywords get new_rank=null); ELSE mark each competitor baseline.
STEP 6 — EMIT gaps/overlaps/unique plus the full snapshot to persist for the next run.
RATE LIMITS & ERROR HANDLING
- Lookup/ASO
429→ backoff2^attempt(max 5) then STOPRATE_LIMITED(Lookup) or degrade to derived keywords (ASO). 5xx/timeout retry ≤3; a competitor that fails to resolve is recordedstatus="not_found"and skipped, not fabricated.- Concurrency ≤ 1;
time.sleep(0.25)between per-app keyword calls; competitor and keyword counts capped by the--max-*guards.
MISSING / INSUFFICIENT DATA
- FIRST RUN (no
--previous) is a baseline:metadata_changesandrank_shiftsare empty and every competitor is flaggedbaseline— NEVER invent change history. - Without
ASO_API_KEY, keyword sets are a visible-metadata proxy (ranksnull, subtitle absent unless supplied); this is disclosed viakeyword_sourceand a warning. - Rank shifts are reported as temporal correlation with metadata changes, never asserted as causation.
OUTPUT
One JSON object per references/output.schema.json. The snapshot MUST be persisted for the next run.
FILES
scripts/competitor_keyword_gap.py— Lookup/ASO profiler, keyword-set diff, stateful metadata-change + rank-shift detection.references/output.schema.json— output contract.
Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.
Embed a badge
Install into your agent
More in App Store Optimization
paseo-committee
Form a committee of two high-reasoning agents to step back, do root cause analysis, and produce a plan. Use when stuck, looping, tunnel-visioning, or facing a hard planning problem.
app-store-optimization
No description available.
aso
No description available.
masonry
No description available.
app-store-aso
Generate optimized Apple App Store metadata recommendations with ASO best practices. Use this skill when analyzing app listings, optimizing metadata (title, subtitle, description, keywords), performing competitive analysis, or validating App Store listing requirements. Triggers on queries about App Store optimization, metadata review, or screenshot strategy.
Store Listing CVR Auditor
Evaluates an App Store or Google Play listing — icon, screenshot sequence, captions, subtitle, description, preview vid…