storebound/skills/aso-basics/SKILL.md
CRT b63f2fdfbc Store operations: TestFlight wait / expire, IAP review submissions, listing pulls, release notes per language, offers, custom product pages, in-app events, reports, triage, keyword ranks, AdAttributionKit scan
- apple testflight wait --build N (progress, timeout, exit 0/1/7) and expire --keep N | --older-than D (dry run, asks)
- apple iap-submit: IAP / subscription / group versions into a review submission; first of a type only with the app
  version (--with-version), --no-submit keeps the draft; read-only MCP plan
- apple listing pull, play listing pull (diff, --write), catalog pull (config proposal, never rewritten)
- whats-new --languages / check / apply: one file per language, agent or hook translation, per-store limits
- apple offer-codes, win-back, promoted, preorder; Play pre-registration as a guide (no API)
- apple cpp and apple events: list, create, upload, submit (asks)
- reports: Apple sales / finance, Play earnings / sales into .storebound/reports with summary and CSV
- triage: TestFlight crash / feedback and Play error reports grouped by signature, device, OS
- aso rank: iTunes Search API ranks and competitors, rate limited
- ads scan: AdAttributionKit / SKAdNetwork Info.plist and source checks
- tests against recorded, sanitized answers; skills, README, CHANGELOG
2026-10-11 23:58:17 +08:00

5 KiB

name description
aso-basics App store optimization basics for a mobile app's or game's text - App Store keyword field rules (100 characters, commas without spaces, no repeats of name / subtitle words, fill 90%+), subtitle and name, cross-localization keyword room per storefront, screenshot captions with real keywords, Google Play title / short / full description keyword placement without stuffing. Keyword rank checks per storefront through the public iTunes Search API. Use when the user writes or improves store listing text, keywords, asks why the app or game is not found in store search, or wants keyword ranks and competitors.

ASO basics

Audit: storebound check --aso (offline, over store/appstore.md + store/listing.md; errors exit 1). Keep claims true; never use competitor or other apps' or games' names, "best / #1", or unrelated popular terms (both stores reject it).

App Store

  • Indexed fields: app name (30), subtitle (30), keyword field (100). The description is not indexed for search.
  • Keyword field: comma separated, no spaces around commas (they cost characters), singular or plural not both, no words already in the name or subtitle (they are indexed anyway), no "app" / "game" / category names, no duplicates. Use at least 90 of the 100 characters. Single words combine on their own ("match,puzzle" also finds "match puzzle"), so prefer words over phrases.
  • Name and subtitle: the strongest words; the name is the brand plus at most one core term, the subtitle is the promise in plain words.
  • Localizations and storefronts: each storefront supports several localizations (Apple's "App Store localizations" table; the US storefront lists English (US), Spanish (Mexico), Portuguese (Brazil), French, Korean, Chinese Simplified and Traditional, Arabic, Russian, Vietnamese). Apple states a localization's keywords are searchable in every storefront that supports its language. That the keyword fields of several localizations stack in one storefront (e.g. extra English words in the es-MX field for US search) is community ASO knowledge, not an Apple statement: if you use it, the localization must still be a real translation for its own users.
  • Screenshot captions: write them with the words people search for ("Budget planner with shared lists", "Match 3 puzzles offline", not "Fun awaits"). Claims that Apple reads caption text for search ranking are unverified; good captions help conversion either way.
  • Changing keywords needs a new version (submitted with it); promotional text (170) changes any time but is not indexed.

Google Play

  • Indexed: title (30), short description (80), full description (4000). There is no keyword field.
  • Put the core phrase in the title (brand + term), again in the short description, and in the first lines of the full description where it reads naturally. Repeat important terms a few times across the full text, not in every line.
  • No stuffing: a word in more than ~3 % of the full description, keyword lists, ALL CAPS titles, emoji in the title, or "best / top / #1" break the metadata policy. check --aso warns on these.
  • Localize every listing you can; Play machine-translates otherwise, which ranks and converts worse.

Workflow

  1. List 20-30 candidate terms with the owner: what people would type to find this app (the job it does, the problem it solves; for a game: genre, mechanic, theme, setting, mood). No paid tool needed to start; store search suggestions are a free signal.
  2. Put the best 1-2 in name / title and subtitle / short description; the rest in the keyword field per locale.
  3. storebound check --aso, fix errors, read warnings.
  4. Push with apple listing / play listing; measure after a few weeks (App Store Connect / Play Console acquisition by search term; storebound analytics snapshot + analytics compare line impressions and conversion up with each committed listing change, store-analytics skill) and change a few terms per release, not all at once.
  5. Track ranks: storebound aso rank --storefronts us,de=de-DE --dry lists the queries, then without --dry (MCP: aso_rank, dry_run false). One query per keyword of the locale's keyword field (plus --keywords) and storefront against Apple's public iTunes Search API, at most one every 3.5 s (Apple allows about 20 calls a minute; a 403 or 429 stops the run with what was read). The table shows the app's position in the first 200 results, the change since the last snapshot (.storebound/aso/<date>.json) and the first competitors (title, developer, rating).

Rank check limits (say them to the owner)

  • The Search API order is close to, not the same as, App Store search (no personalisation, no Search Ads, no in-app event rows). Read ranks as a trend over weeks, not as a promise.
  • Competitor subtitles are not in any public API, so storebound does not show them; it scrapes nothing.
  • Never copy a competitor's name or terms into your keywords (both stores reject it); use the list to see which jobs and words the top apps lead with.