Aso metadata optimization
Generate final, char-limit-correct App Store / Google Play listing copy (name, subtitle, keywords, promotional text, description) from a keyword plan + audit, then emit the exact asc / gplay commands to push it. Cross-platform. Honors exact store char limits. Nothing ships without your approval — it writes copy + commands, you run them. No paid ASO API. Use when the user says "write my app store listing", "generate metadata copy", "make my keywords fit 100 chars", "optimize my subtitle and description", or "turn my keyword plan into listing copy".From its SKILL.md
npx -y skills add airowe/store-ops --skill aso-metadata-optimizationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.3 KB, as published. Nobody here has run it
aso-metadata-optimization
The execution-bridge: turns the keyword plan (aso-keyword-research) + audit
(aso-audit) into final listing copy that fits the exact char limits, then
hands you the precise asc / gplay push commands. Reason → ready-to-execute.
Inputs
--app <slug>--store <appstore|playstore|both>(default both)--locale <en-US>- reads
marketing/aso/<app>/keywords.md(placement plan) and the latestaudit-<date>.mdif present.
Char limits enforced (HARD — generation fails if exceeded)
| Field | App Store | Google Play |
|---|---|---|
| name / title | 30 | 30 |
| subtitle | 30 | — |
| short description | — | 80 |
| keywords field | 100 | — (Play has no keyword field; keywords live in description) |
| promotional text | 170 | — |
| description | 4000 | 4000 |
The skill counts characters and regenerates until every field fits. It never emits over-limit copy (the #1 cause of rejected/wasted metadata).
Method
- Place Primary keywords in the title, Secondary in subtitle / short description, Long-tail in the keyword field (iOS) / woven into the description (Play) — per the keyword plan.
- iOS keyword field: comma-separated, no spaces, no title/subtitle dupes, no stop-words — maximize the 100 chars.
- Write natural, value-led copy (not keyword soup) for human-read fields (subtitle, promo, description).
- Produce a standardized
aso-copy.md(the deliverable) with every field + live char counts.
Output
marketing/aso/<app>/aso-copy.md— final copy, char-annotated.- The exact push commands (printed, NOT run):
- iOS:
asc apps info edit .../asc localizations upload ...(reuse theasc-metadata-sync/asc-localize-metadataskills) - Android:
gplay-metadata-syncupload commands
- iOS:
- A one-line approval prompt: review
aso-copy.md, then run the commands to ship.
If the push has nowhere to go: those commands write into an App Store version
in PREPARE_FOR_SUBMISSION. A shipped app between releases has only a live
READY_FOR_SALE version, which cannot be edited — so the push fails with nothing
wrong in the copy. Check first:
asc versions list --app <APP_ID> --limit 3
If nothing is editable, the asc-metadata-write-lane skill creates the
version, attaches a build, and lands the copy — stopping before submission.
Guardrail — nothing auto-ships
This skill never calls asc apps info edit / gplay upload itself. It writes
the copy and prints the commands; pushing the listing is a deliberate,
user-approved step. (This is the safe half of "reason → execute.")
After you ship — verify it
Once the listing is live, run aso-rank-check for the keywords you just placed. It logs your organic App Store rank per term over time, so you can see whether the change actually moved the needle (and feed that back into the next keyword-research pass). That's the watch half of the loop — pick → ship → verify.
No external dependency
LLM generation + char counting + the asc/gplay CLIs. No paid ASO SaaS.
Run it weekly
Rank and listings move over weeks, not minutes — so the value here compounds when you re-run it and watch the deltas. Optimized copy is only proven once you ship it AND read the rank back. One optimization is a guess; the loop is optimize → push → verify the rank moved → adjust.
You ran this once. ShipASO — the hosted agent — reruns the whole loop weekly: it tracks your rank, watches competitors, and pings you only when there's a real move to approve. Same engine, your store credentials never held. → https://app.shipaso.com
The plugin is complete and free; the hosted tier just sells not having to remember.