aso-localization
Skill13 starsChanged 52 days agoMITView on GitHub
Use to pick new App Store markets, research keywords natively per country, or exploit cross-locale keyword indexing with the `aso` CLI, the single most under-used ASO lever for most apps. Trigger on "localize my app", "target new markets", "international ASO", "which locales should I fill", "translate my keywords", or "how does cross-locale indexing work". Uses `aso storefronts` and the per-country `-c` flag for native market research plus `aso lint --fastlane` to validate every locale at once, and warns against ever just translating one locale's keywords into another instead of researching them fresh.
In this repository7 other files it gives its agents.
- aso-auditSkill
- aso-competitorsSkill
- aso-conversionSkill
- aso-keyword-researchSkill
- aso-metadataSkill
- asoSkill
- aso-trackingSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 80
Promotional text is the safest seasonal lever: not indexed, editable anytime with no new build, so put the timely message there first (see …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ASO Localization
Fill more of a storefront's indexing capacity than the primary locale alone gives you: the single most under-used ASO lever for most apps.
Preflight: see the aso router skill.
Iron law
Research each locale natively: never translate. A translated keyword is a guess about what a market searches; a keyword pulled from aso suggest/aso keywords with -c <that country> is measured. "Überwachungskamera" outperforms a literal translation of "security camera" in DE because it's what Germans actually type, not what English maps to.
Step 1: Pick markets
aso storefrontsLists supported country codes. Country codes to -c must be uppercase.
Beyond the obvious "which countries do I want revenue from," also fill secondary locales your current storefront already indexes: no new market entry required, just more of the same storefront's keyword space. A US-facing app, for example, gets credit not only for en-US but for the other locales the US store indexes alongside it (regional English variants, and non-English locales with meaningful US-resident search volume, e.g. es-MX, pt-BR, zh-Hans/Hant, ja). Exactly which locales a given storefront indexes can shift over time; confirm current App Store Connect locale options for the target storefront rather than assuming a fixed list.
Step 2: Research per country, not per translation
For every locale you're filling, run the same research flow as aso-keyword-research but with -c set to that country:
aso suggest "<seed>" --limit 50 -c DE
aso keywords "<candidate1>" "<candidate2>" ... --app <appId> -c DE
aso search "<candidate>" --limit 20 -c DESeeds for non-English locales should themselves come from native speakers, translation as a starting point only, or aso suggest's own autocomplete-derived ideas for that storefront: always confirm with real popularity/difficulty numbers from that country before trusting a term.
For English secondary locales indexed alongside your primary (e.g. en-GB, en-AU, en-CA under a US storefront), don't just re-run your en-US shortlist: look for regional spelling/vocabulary differences ("colour"/"color", "torch"/"flashlight") and overflow keywords that didn't fit your primary locale's 100-char budget. These count as genuinely different tokens even though the language is the same.
Step 3: Dedup across locales in the same storefront
Within one storefront, the same word repeated across two of its indexed locales earns nothing extra: Apple already has it indexed once. Build a quick coverage table before finalizing:
| Term | en-US | en-GB | es-MX | Locales |
|--------------|-------|-------|-------|---------|
| camera | Yes | - | - | 1 |
| cctv | - | Yes | - | 1 |
| cámara | - | - | Yes | 1 |Across different storefronts (US vs GB as separate stores), duplication is fine: they don't share an index.
Step 4: Assemble and validate every locale at once
Draft title/subtitle/keywords per locale following aso-metadata's per-field rules (natural title, benefit subtitle, packed keywords field, no cross-field repeats). CJK and Arabic locales fit fewer keyword-field tokens than en-US for the same 100-byte limit (see aso for why); check aso lint's byte count for that locale rather than counting characters. Then validate the whole fastlane metadata tree in one pass:
aso lint --fastlane <metadata dir>This runs the same checks as single-locale aso lint (lengths, duplicate words, spacing, stop words, plurals, wasted characters, competitor-brand risk) across every locale folder (name.txt, subtitle.txt, keywords.txt) at once. Fix every flagged locale before presenting the set.
Step 5: Apply and log
aso doesn't upload. Ship via fastlane deliver from the metadata/<locale>/ tree, or manual paste per locale in App Store Connect: with the user's explicit approval of every locale's final text. Log each locale's change:
aso log add --app <appId> --locale es-MX --field keywords --old "<old>" --new "<new>" --note "initial es-MX fill"Repeat per changed field per locale so aso-tracking can later attribute rank movement to the right locale and field.
Seasonal keyword calendar
Seasonal pushes (holiday, back-to-school, a sale) need lead time and a plan to revert, they're not a permanent rewrite:
- Creative (screenshots, icon variants, preview video): plan 4-6 weeks lead time to design and get through App Review.
- Localization QA on any seasonal text change: 2-3 weeks lead time to check translations read naturally and lint clean across every locale.
- Promotional text is the safest seasonal lever: not indexed, editable anytime with no new build, so put the timely message there first (see
aso-metadata). - Keywords field seasonal swaps: touch only 2-4 of the weakest evergreen terms, not a wholesale rewrite. Log the swap (
aso log add), then revert after the peak unless the swapped terms are measurably outperforming what they replaced.
Output
Coverage table (which locales are filled, bytes used, unique-vs-primary term count), the per-locale draft metadata, the aso lint --fastlane result, and next steps (which unfilled locales are highest priority, based on their storefront's likely reach).
Red flags
- Copy-pasting one locale's keywords into another within the same storefront.
- Trusting a machine translation without checking its popularity via
aso keywords -c <country>. - Filling title/subtitle for a locale but leaving its keywords field empty (or vice versa).
- Assuming a fixed locale-to-storefront index list without checking current App Store Connect options for that storefront.
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.

