localization
Write an app Product's App Store metadata for its priority storefronts — title, subtitle, keywords field, description per locale — and choose which storefronts deserve it.
Written by Kwern, after the skill of the same name in Eronred's aso-skills, MIT. Updated 2026-10-05.
The file, as Kwern runs it
Nothing below is rewritten or cut. The description a model routes on comes first, then the file itself. The whole thing, frontmatter included, is at /skills/localization.md.
description
Write an app Product's App Store metadata for its priority storefronts — title, subtitle, keywords field, description per locale — and choose which storefronts deserve it. Use for "localize my listing", "which countries should I target", "translate my metadata", "expand to Germany/Japan". For the primary storefront use metadata-optimization.
Bring the Product's listing to the storefronts where visitors already arrive and convert least. Output is one listing Proposal per field and Locale, which Kwern writes to App Store Connect when the User approves it, plus a per-storefront metadata package with the reasoning, saved with save_output. Keywords in another language are researched, never translated: "budget tracker" is "Haushaltsbuch" in German and "家計簿" in Japanese, two different concepts.
Gather
read_context— markets the Foundation doc names, whether the app UI is localized and in which languages, voice, competitors.connector_asc_analyticswhen the ASC Connector exists — impressions, product page views, downloads and conversion per territory, 30 days plus trend. Without it, take the markets from the Foundation doc; without those, start from the tier-1 list in the references.connector_asc_localizationswhen the ASC Connector exists — every locale already localized, primary first, with its title, subtitle, keywords field, description and promotional text; a locale whose text repeats another locale's is a copy, not a localization. Without it, iTunes Lookup throughfetch_url(https://itunes.apple.com/lookup?id=<App Store id>&country=<storefront>) returns the name and description visitors of that storefront read, and the subtitle and the keywords field stay unknown; say so in the package.connector_apple_ads_search_termswhen the Apple Ads Connector runs campaigns in the storefront — the terms locals search and convert on. Without it, infer from local competitors and reviews.- The competitors in each priority storefront, through
fetch_urlon iTunes Search (https://itunes.apple.com/search?term=<name>&entity=software&country=<storefront>&limit=1) — how they phrase their name and description in that language. app_store_reviewsper storefront — the vocabulary users write in, and a quotable line per language.
Choose the storefronts
Score each candidate on the territory data: high impressions with low conversion is the strongest signal (visitors arrive, the listing loses them); then downloads trend, whether the app UI speaks the language, and how many competitors are localized there. Take the top three to five; state the score per storefront. The locale codes, the storefronts each locale covers, and the tier lists are in references/storefronts.md — read it before naming a locale, because one locale serves several countries and the default locale serves every storefront without its own.
Write per storefront
Field limits, indexing, formulas and the mistakes to flag are in ../metadata-optimization/references/field-rules.md; they hold in every locale, and character limits count characters, so CJK and Cyrillic fit fewer words. Cultural checks for description, screenshots and pricing are in references/cultural-adaptation.md — read it when the storefront differs in script, formality or currency from the primary one.
Per storefront, in this order:
- Keyword set — five to ten local terms with the search intent behind each, drawn from search terms, competitors and reviews; the English equivalent beside each so the User can verify with a native speaker.
- Title and subtitle — brand plus the local #1 keyword, benefit-led subtitle, formulas from the field rules; a translated tagline that carries no searched term is replaced.
- Keywords field — built from the local set, singular forms, zero words repeated from title and subtitle.
- Description — adapted, with the hook rewritten for the local framing, local social proof when it exists, and a review quote in the language.
- Promotional text — for the local moment (holiday, season, event).
Every field arrives with a back-translation line so the User can read it.
Output: per-storefront metadata package
For each priority storefront: locale code, the storefronts it covers, the score and its reason, then every field with chars/limit, keywords covered, back-translation, and a one-line rationale. Then:
- Priority matrix — territory × impressions, conversion, trend, UI localized, competitor localization, score.
- Before / after — the current localization per field when
connector_asc_localizationsor iTunes Lookup returned one. - Creative to-do — the captions and pricing screens
screenshot-optimizationandapp-preview-videomust re-render per storefront. - Apply — which fields need a version the User can still edit in App Store Connect: title, subtitle, keywords field and description do; the promotional text does not.
Propose
Each field you write is one propose per Locale, with appStoreField (name for the title, subtitle, keywords, description, promotionalText) and the locale code in locale: content is the field in that language, whole, and why names the local keywords it covers and the territory signal behind the storefront. A Locale the listing lacks is added by the first Proposal approved for it.
Done when every field of every priority storefront has its Proposal, each storefront has every field within its limit, every local keyword appears once across title, subtitle and keywords field, every field carries a back-translation, and the package names the data it lacked (territory analytics, keywords field, search terms) when a Connector was absent.
Related Skills
metadata-optimization— the primary-storefront package this Skill mirrors.screenshot-optimization— captions per storefront.app-preview-video— preview captions and re-recording per storefront.seasonal-aso— local holidays that drive the promotional text.
What it discloses
The Skill reads these files only when it needs them, so the model spends nothing on them the rest of the time.
references/cultural-adaptation.md
references/storefronts.md
From your accounts to a proposal
- 01
Connect what it reads
Give the ASO agent the accounts it works on. Kwern never asks for a password, and an agent missing a connection says so instead of guessing.
- 02
The loop runs weekly
Before it writes a word it reads the foundation doc, which holds the positioning, the audience and the voice, and whatever its connectors return that day.
- 03
The localization skill runs
The agent activates it when the run calls for it, and what the model then reads is the file on this page, word for word.
- 04
A proposal waits for you
Nothing is published and nothing is spent until you approve it. Approve and Kwern posts it where it holds the keys; where it does not, it hands you the text and the link.
The file, the agency, and the agent
| On your own | An agency | Kwern | |
|---|---|---|---|
| The method | Whatever you remember to do that week | Theirs, and you never get to read it | This file, open on this page |
| Who runs it | You, when there is time | An account manager, between other accounts | The ASO agent, weekly |
| What it reads | What you can pull by hand | What you remembered to send them | Your connected accounts and your foundation doc |
| What comes out | A draft, sometimes | A deck, and a report at the end of the month | A proposal you approve or throw away |
| What it costs | Your evenings | A retainer | One subscription, and the model on your own key |
Questions about localization
Pair it with
The other skills the same agents reach for during a run.
Someone is asking for what you built today.
On Reddit, on X, in ChatGPT's answers. Kwern finds them every morning and drafts the reply in your voice; you decide what goes out.