aso
Skill13 starsChanged 52 days agoMITView on GitHub
Entry point and router for App Store Optimization (ASO) work on an iOS/macOS app using the `aso` CLI. Start here whenever a request is broad or ambiguous, such as "improve my ASO", "help with my App Store listing", "why isn't my app ranking", "do a full ASO pass", or just "ASO for my app", even if the user doesn't name a specific task. Checks the CLI is installed and signed in, explains Apple's search-indexing rules that every other ASO skill assumes you already know, then routes to the right specialized skill (aso-keyword-research, aso-metadata, aso-competitors, aso-audit, aso-tracking, aso-localization, aso-conversion). Skip straight to one of those instead when the request already names a specific job, like "write my subtitle" or "find my competitors".
- Pipes a download into a shell
- Installs packages
32 other projects use a version of this.
Adopted by
Most recently taken up by
- alexszczurek/before-skillstheir own version, first seen Nov 4, 2026
- pixelswithbliss/claude-skillstheir own version, first seen Nov 1, 2026
- GAPZ787/claude-skillstheir own version, first seen Nov 1, 2026
- TommyBez/skillsboardtheir own version, first seen Oct 25, 2026
- Valentor-Labs/aso-skilltheir own version, first seen Oct 20, 2026
- AbdelrhmanAlquran/claude-skillstheir own version, first seen Oct 20, 2026
Used with
Projects with it also use popups, free-tools and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CesarjoquinSkillpopups
When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also use when the user mentions "exit intent," "popup conversions," "modal optimization," "lead capture popup," "email popup," "announcement banner," "overlay," "collect emails with a popup," "exit popup," "scroll trigger," "sticky bar," or "notification bar." Use this for any overlay or interrupt-style conversion element. For forms outside of popups, see cro. For general page conversion optimization, see cro.
Also in 22 projects that use this
CesarjoquinSkillfree-tools
When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness. Also use when the user mentions "engineering as marketing," "free tool," "marketing tool," "calculator," "generator," "interactive tool," "lead gen tool," "build a tool for leads," "free resource," "ROI calculator," "grader tool," "audit tool," "should I build a free tool," or "tools for lead gen." Use this whenever someone wants to build something useful and give it away to attract leads or earn links. For downloadable content lead magnets (ebooks, checklists, templates), see lead-magnets.
Also in 23 projects that use this
coreyhaines31Skillmarketing-council
When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilvy, Eugene Schwartz, April Dunford, Rory Sutherland, Alex Hormozi, Byron Sharp, and more). Also use when the user mentions 'marketing council,' 'board of advisors,' 'advisory board,' 'what would Seth Godin say,' 'what would Ogilvy think,' 'channel Hormozi,' 'get multiple perspectives,' 'debate this,' 'have the council review,' 'marketing mentors,' or asks how a famous marketer would approach their problem. The council gives each advisor's take through their documented frameworks, surfaces where they disagree, and synthesizes a recommendation. For executing the winning direction, hand off to positioning, offers, copywriting, ads, or the relevant skill.
Also in 16 projects that use this
roerohanSkillemails
When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," "lifecycle emails," "trigger-based emails," "email funnel," "email workflow," "what emails should I send," "welcome series," or "email cadence." Use this for any multi-email automated flow. For cold outreach emails, see cold-email. For in-app onboarding, see onboarding.
Also in 19 projects that use this
ukunal91appSkillcommunity-marketing
Build and leverage online communities to drive product growth and brand loyalty. Use when the user wants to create a community strategy, grow a Discord or Slack community, manage a forum or subreddit, build brand advocates, increase word-of-mouth, drive community-led growth, engage users post-signup, or turn customers into evangelists. Trigger phrases: "build a community," "community strategy," "Discord community," "Slack community," "community-led growth," "brand advocates," "user community," "forum strategy," "community engagement," "grow our community," "ambassador program," "community flywheel.
Also in 23 projects that use this
roerohanSkillprospecting
When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses. Also use when the user mentions "prospecting," "build a prospect list," "find prospects," "find leads," "lead gen list," "find SaaS companies that," "find B2B companies," "find local businesses," "ICP-fit accounts," "who should we go after," "outbound list," "target account list," "find clients near me," "businesses without websites," "prospect research," "qualified leads," "find my first customers," "early adopters," "design partners," "beta users," or "who has this problem." Use this for the list-building and qualification phase. For writing the outbound copy after the list is built, see cold-email. For deep competitive research on specific accounts, see competitor-profiling.
Also in 16 projects that use this
- +6 more from Cesarjoquin
Other versions32 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 32
- coreyhaines31/marketingskills★ 59ksame name
- Cesarjoquin/Marketing-Skills★ 190same name
- open-fox/agents★ 55same name
- furkancingoz/aso-skill★ 34same name
- SZcalligrapher/slash-skills-subscription★ 32same name
- alexszczurek/before-skills★ 27same name
- TommyBez/skillsboard★ 10same name
- scayver/marketing-skills★ 8same name
- FelixGraeber/claude-aso-audit-skill★ 4same name
- hsynozdamar-byte/claude-skills-edited★ 4same name
22 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- aso-auditSkill
- aso-competitorsSkill
- aso-conversionSkill
- aso-keyword-researchSkill
- aso-localizationSkill
- aso-metadataSkill
- aso-trackingSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 0 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 29 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Run once per session before any other aso command:
- Very specific: line 18
If aso: command not found: install it with npm i -g hristo2612/aso-cli (needs Node.js 22.13+, also published as aso-kit on npm), or curl …
- Very specific: line 19
If aso status shows no active session: run aso setup (interactive first-run, Apple ID, app, default country, then triggers login) or aso …
- Very specific: line 23
If a session exists but looks stale, aso auto-retries login once when credentials are in the Keychain.
“Common” is measured: kept by at least 6 in 10 of the 29 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ASO Router
Entry point for all ASO work with the aso CLI (hristo2612/aso-cli on GitHub, aso-kit on npm). Do preflight, know the core facts, then route.
Preflight
Run once per session before any other aso command:
aso status- If
aso: command not found: install it withnpm i -g hristo2612/aso-cli(needs Node.js 22.13+, also published asaso-kiton npm), orcurl -fsSL https://raw.githubusercontent.com/hristo2612/aso-cli/main/install.sh | bash. - If
aso statusshows no active session: runaso setup(interactive first-run, Apple ID, app, default country, then triggers login) oraso loginif already configured. Both open Chrome and handle 2FA/Keychain in the user's own terminal. - Never ask the user for their Apple ID password in chat. Credentials go in macOS Keychain via
aso setup/aso login, run directly by the user in their terminal. If a command needs interactive auth, tell the user to run it themselves and report back. - Everything except
popularityworks without a session (search, ranks, difficulty, app lookup, lint). If there's no session and the user only needs those, proceed:popularitywill just come backnull. aso loginfinds the right Apple Ads org and a linked app on its own; you no longer need to look up or setaso config orgIdas a normal step.aso statusprints anextfield naming the exact step to take when something's missing, read it before guessing.- If a session exists but looks stale,
asoauto-retries login once when credentials are in the Keychain; don't loop on it manually.
If setup gets stuck
| Symptom / error code | Fix |
NO_APPLE_ADS_ACCOUNT | No Apple Search Ads account yet. User signs up free at searchads.apple.com; choose United States if their own country isn't offered. |
NO_LINKED_APPS | Apple Ads isn't linked to App Store Connect. In Apple Ads: account menu > Settings > Link Accounts. |
AUTH_REQUIRED | Session missing or expired: run aso login. |
| 2FA code not auto-filled | Grant Accessibility permission to the terminal app (System Settings > Privacy & Security > Accessibility), or type the code directly into the Chrome window instead. |
| Chrome not found | Install Chrome, or run npx playwright install chromium. |
Popularity comes back 5 for every keyword | Normal Apple floor for low/unknown-volume terms, not a broken session or a bug. |
Core Apple search facts (know these before touching metadata)
- Three indexed fields per locale: title (30 chars), subtitle (30 chars), keywords field (100 BYTES, not characters). Apple tokenizes all three and combines tokens into searchable phrases, a word in the title and a word in the subtitle can match together as a compound query.
- The keywords field's 100-byte limit bites non-Latin locales hardest: CJK and Arabic characters cost 2-3 bytes each in UTF-8, so a locale like ja, zh, or ar effectively gets far fewer keyword slots than an ASCII locale for the same 100 bytes. Budget by bytes, not by how many characters look like they'd fit. See
aso-localization. - Never repeat a word across fields. A word already indexed via the title gains nothing by also appearing in the subtitle or keywords field: it only burns a character budget that could hold a new term.
- Plurals are mostly redundant: Apple stems automatically, so "camera" already covers most "cameras" searches. Prefer the singular unless the plural has genuinely different search intent (e.g. "glass" vs "glasses").
- The keywords field is comma-separated with no spaces after commas: every space is a wasted character.
- The description is NOT indexed for search on iOS. Apple's algorithm ignores it for ranking; treat it purely as a conversion/readability lever, not a keyword-placement opportunity (see
aso-conversion). - Developer name and in-app purchase display names are also indexed text, on top of the three per-locale fields above.
- Category placement affects relevance and category-chart ranking, not just discovery structure: pick the category your target keywords actually belong to, don't chase a bigger but less relevant one.
- Cross-locale indexing: a storefront indexes more than its "native" locale. The US store, for example, also indexes locales like es-MX, fr-CA, pt-BR, zh-Hans/Hant, ja and the other English variants. Filling extra locales you're entitled to multiplies your effective keyword budget for that storefront. See
aso-localization. - Ratings, reviews, and conversion rate aren't indexed text either, but they're widely believed to feed back into ranking indirectly (an app that converts and retains better tends to rank better over time), separate from the direct textual indexing above. See
aso-auditandaso-conversion.
Data caveats
- Popularity floor: Apple's Search Ads popularity score (5-100) floors low/unknown-volume keywords at 5.
aso keywordsflags this aspopularityFloor: true. Treat a floored5as "no reliable signal", not "dead keyword", it can still be a real long-tail term. - Difficulty is the ASOManiac model, not an Apple number: calibrated against third-party difficulty scores, it weighs competition from the top-10 ranking apps' ratings counts (55%), demand from popularity plus autocomplete signal (10%), and market quality from the top-10 apps' average rating (35%). Scored 0-100, higher is harder. Use it to compare keywords relative to each other and to the app's own authority, not as an absolute probability of ranking.
opportunity=popularity × (100 − difficulty) / 100. It's a sort key for prioritizing candidates, not a traffic forecast.rankcomes from Apple's own store search order (about 250 deep, unpersonalized iPhone results).nullmeans not in the top 250 today, not "unranked forever". Users' own devices can show slightly different, personalized orders.- Each
aso keywordsitem also carriesbrand(true when the term is essentially the #1 ranking app's own publisher/brand name, someone else's brand: don't shortlist it) andconfidence(high/medium/low, how much to trust that term's popularity/difficulty numbers).--min-popularity <n>and--max-difficulty <n>pre-filter a batch; filtered terms come back underfilteredOutwith a reason, worth a glance before assuming they're all noise. - Popularity needs an Apple Ads session; everything else works logged out.
The CLI does not upload metadata
aso reads and measures; it never writes to App Store Connect. To ship a title/subtitle/keywords change, use fastlane deliver (a fastlane/metadata/<locale>/{name.txt,subtitle.txt,keywords.txt} tree) or paste manually into App Store Connect. Never push or upload metadata without the user's explicit approval of the exact new text. See aso-metadata for detail.
Routing
| User wants... | Route to |
| Find/brainstorm/expand keywords, seed → shortlist | aso-keyword-research |
| Write or fix title/subtitle/keywords field for a locale | aso-metadata |
| Compare against competitors, find keyword gaps | aso-competitors |
| A health check / report card on the whole listing | aso-audit |
| Set up or review rank tracking over time | aso-tracking |
| Pick new markets, localize keywords, exploit cross-locale indexing | aso-localization |
| Icon, screenshots, preview video, Custom Product Pages, Product Page Optimization, In-App Events | aso-conversion |
Most requests map to exactly one skill. For a full "optimize everything" request, run in this order: aso-audit (find the gaps) → aso-keyword-research (fill them) → aso-metadata (draft and validate) → aso-conversion (fix conversion assets) → aso-tracking (measure). Confirm the app ID and country (-c, default from aso config) before running anything if either is ambiguous.
Google Play
aso is Apple-only: it has no Google Play data or commands. If asked about a Play listing, say so and give the mental model only; see the Google Play appendix in aso-audit.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

