From mobile-store-assets
ASO frameworks for generating, auditing, and optimising App Store and Google Play marketing copy. Covers keyword research, metadata optimisation across every field, competitor analysis, and audit scoring. Run this whenever authoring or refining store text for any app — /store-spec consults it for every copy field. Inspired by Eronred's open-source aso-skills toolkit; optionally pairs with the Appeeky MCP for live App Store data.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mobile-store-assets:aso-toolkitThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is the **content brain**. It tells you how to think about an ASO
This skill is the content brain. It tells you how to think about an ASO text problem — what to research, what to write, how to score it. The field-level rules (character limits, indexing weights, banned words) live in the platform-specific skills:
ios-store-requirements — App Store Connect specs and policyandroid-store-requirements — Google Play Console specs and policy/store-spec orchestrates: it reads the spec, uses this skill for the
generation frameworks, and the platform skills for the field rules.
spec.yaml (/store-spec) — for the iOS + Android copy blocksThis skill bundles four frameworks that work together. You can run them individually or as a pipeline.
| Capability | Purpose | Output |
|---|---|---|
| Keyword research | Find the terms users actually search | Tiered keyword list (primary / secondary / long-tail) |
| Metadata optimisation | Author every text field with hierarchy + variants | 3 variants per field with char-counted output |
| Competitor analysis | Steal what works; identify gaps | Keyword-gap table + positioning notes |
| ASO audit | Score an existing listing | 10-factor scorecard with prioritised fixes |
A keyword's value = searchVolume × relevance ÷ difficulty. Without live
data the agent estimates these qualitatively, then upgrades the estimate
when an Appeeky-style data source is connected.
Tiering:
| Tier | Description | Where it goes |
|---|---|---|
| Primary (1–2 terms) | Highest-intent + highest-relevance + reasonable competition. The terms a user would type if they wanted exactly this app. | iOS App Name, Play Title |
| Secondary (3–6 terms) | High relevance, often combined with the primary in compound queries ("mortgage calculator with chart"). | iOS Subtitle, Play Short Description |
| Long-tail (10+ terms) | Lower-volume specific phrases. Easier to rank for; convert better. | iOS Keyword Field, Play Full Description body |
Process when no live data is available:
aso.positioning + app.category + the app's actual core function.spec.yaml aso.primary_keywords /
aso.secondary_keywords. Long-tail lives only in the description body.With Appeeky (or equivalent live data) connected:
For each candidate, fetch search volume + difficulty + your app's current
rank. Sort by volume × (1 − difficulty/10) × relevance. Drop terms with
volume < 10 or difficulty > 8 unless they're brand-defensive (your own name).
Banned words and phrases (verify against platform skills):
android-store-requirements §9.ios-store-requirements §8.For every field, generate 3 variants with explicit framing differences. The user picks one or runs a PPO/Play experiment with multiple. Char counts must be inline so the user sees fit at a glance.
Format: {Brand} {Primary keyword phrase}
Three framing axes:
Coin: Mortgage CalculatorMortgage & Loan CalculatorLoan Math: Mortgage & CarsConstraints (per ios-store-requirements §3): brand + ONE primary keyword;
highest-weight field; never repeat any word in Subtitle or Keyword Field.
Three angles, none repeating words from the Name:
Home + auto loan affordabilitySee interest before you signFor first-home buyersPack with long-tail terms not yet in Name or Subtitle. Apple deduplicates, so repeats waste your budget. Order doesn't matter.
home loan,car loan,refinance,interest rate,monthly payment,amortization,affordability,first time buyer
Always validate: total length ≤ 100, no word appearing in Name or Subtitle.
Pure conversion text. ~97% of visitors stop at the fold (~170 chars):
Three variants vary the tone: confident-helpful / playful-direct / no-nonsense-functional.
Updatable without resubmission. Use for time-sensitive messaging.
Specific over generic. "Faster pie chart rendering and improved slider sensitivity" beats "Performance improvements and bug fixes".
Same shape as iOS App Name. Highest weight on Play.
The single most important Play field you'll author. Indexed AND shown directly in search results — must read as one compelling sentence AND carry a keyword. Three variants vary on which secondary keyword is woven in.
NLP indexed end-to-end. Density target: top 2–3 keywords each at ~2–3% of total chars, repeated naturally ~5× across the body. Structure:
Hook paragraph (with primary keyword)
→ Feature bullets (each starts with a benefit)
→ Use cases (with secondary keywords woven in)
→ Trust signals (factual only)
→ CTA
Plain text only. Line breaks + emoji bullets help scannability. Google's NLP penalises stuffing — use keywords in meaningful sentences.
Specific. Not indexed for ranking — for users only.
Every claim in every field must be verifiable from explicit evidence in
the spec/config or user-provided context. Default to omission. See
store-spec SKILL.md "Honesty rule" for the full table; the canonical
anti-pattern is "No Ads" — never assume it; most free apps run ads.
Pick 3–5 direct competitors (same category, similar size). For each:
Output a small table:
| Competitor | Primary kw | Secondary kw | Their angle | Gap I can fill |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
When Appeeky / similar is connected, pull live keyword rankings to quantify "they rank top-3 for X but you don't show up — go after X."
When auditing an existing listing, score each factor 0–10. Total / 100.
| Factor | What's good (8–10) | What's poor (0–3) |
|---|---|---|
| 1. Name uses primary keyword | Brand + primary keyword fits in 30 | No keyword, just brand |
| 2. Subtitle uses secondary keywords | Different words from name; 2–3 secondaries | Repeats name words; vague |
| 3. Keyword field utilisation (iOS) | At/near 100 chars; no duplicates; long-tail | Half-empty; duplicates from name/subtitle |
| 4. Short Description (Play) keyword fit | Single compelling sentence with keyword | Generic tagline; no keyword |
| 5. Description fold | First 3 lines: what, who, why | Opens with app name or generic boilerplate |
| 6. Description body keyword density | ~2–3% top keywords, natural prose | 0% or stuffed |
| 7. Screenshot caption alignment | Captions reinforce primary keyword | Captions are decorative only |
| 8. First screenshot impact | Clear primary value prop, scannable in 1 sec | Cluttered or device-frame only |
| 9. Honesty | All claims verifiable; no fake social proof | Star ratings/counts not from real data |
| 10. Locales | Top 3 markets fully localised (text + screenshots) | English-only or auto-translated |
Quick wins = fix any factor scoring 0–3. High-impact changes = move any 4–6 to 8+. Strategic = big rewrites, only after experimenting.
When /store-spec calls this skill in copy-generation, the output should
flow directly into the spec.yaml fields. Use this YAML shape:
aso:
primary_keywords: [keyword one, keyword two] # 1–2 terms
secondary_keywords: [k3, k4, k5] # 3–6 terms
positioning: "{one-sentence unique angle}"
target_audience: "{from config or inferred}"
google_play:
title: "" # 30
short_description: "" # 80
full_description: | # 4,000; ~2–3% density; 5× primary repetition
...
recent_changes: "" # 500; specific, not generic
app_store:
name: "" # 30; brand + primary
subtitle: "" # 30; secondary; no name repeats
description: | # 4,000; first 3 lines = the fold
...
keywords: "" # 100; comma-separated, no spaces; no name/subtitle repeats
promotional_text: "" # 170; updatable
This skill works standalone using the frameworks above and the agent's ASO knowledge. For real-time App Store / Play data — keyword search volumes, competitor metadata snapshots, ranking history, trending terms — connect a data source via MCP:
Appeeky MCP (used by the source toolkit):
{
"mcpServers": {
"appeeky": {
"url": "https://mcp.appeeky.com/mcp",
"headers": { "Authorization": "Bearer apk_your_key_here" }
}
}
}
When connected, the toolkit can pull live keyword rankings, competitor metadata, download estimates, trending terms, and featured-app lists. The keyword research and competitor analysis frameworks above upgrade seamlessly: qualitative estimates become quantitative.
Eronred's open-source aso-skills toolkit is a deeper companion if you want the full 14-skill constellation (review-management, app-launch, ua-campaign, monetization-strategy, retention-optimization, etc.):
npx skills add eronred/aso-skillsThis skill adapts its core ASO-text frameworks for the spec-generation flow but stays focused — the broader marketing topics (UA, retention, launch, monetisation) live in their toolkit.
store-spec — orchestrator; calls into this skill for copy generationstore-assets — renders the outputios-store-requirements — App Store Connect field constraintsandroid-store-requirements — Google Play field constraintsios-store-requirementsandroid-store-requirementsnpx claudepluginhub dbroadhurst/mobile-store-assets --plugin mobile-store-assetsProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.