Google Play ASO: from keyword research to submission with gplay and an AI agent
App Store Optimization on Google Play is where a well-worded title, a keyword-rich short description, and localized long descriptions turn into installs. It’s also traditionally where the most tedious mobile-marketing work happens: research competitor keywords, audit your current listings, draft variants, translate, get approvals, click through the Play Console to update each locale, wait, ship.
The gplay CLI plus an AI agent collapses this into a single afternoon workflow. Here’s how.
Overview
Section titled “Overview”The four phases of a Play ASO cycle:
- Research — what keywords should you rank for, and how do competitors position?
- Audit — what does your current listing look like, per locale, across all supported markets?
- Optimize — draft revised titles, short descriptions, long descriptions, and localize them.
- Ship — push the changes atomically inside an edit session and monitor rankings.
gplay covers phases 2 and 4 directly, and enables phases 1 and 3 by giving your AI agent structured data to reason about.
Phase 1 — research (agent-assisted)
Section titled “Phase 1 — research (agent-assisted)”Give your AI agent a research prompt:
I want to improve ASO for
com.example.app— a habit-tracking app that competes with Streaks, Habitica, and Way of Life. Research the top 20 keyword phrases those competitors’ listings target on Google Play. For each keyword, note whether it’s in the title, short description, or long description, and estimate search intent volume qualitatively. Return a ranked list with rationale.
Any of the 12 supported agents with web-browsing (Claude Code, Cursor, ChatGPT with browsing, etc.) can do the competitor scan. You get back a ranked keyword list — the raw material for phase 3.
Phase 2 — audit your current listings
Section titled “Phase 2 — audit your current listings”Pull every locale you currently ship in:
gplay listings list --package com.example.app --output tableThen export each locale’s listing to JSON for the agent to inspect:
mkdir -p ./aso-auditgplay listings list --package com.example.app \ | jq -r '.[].language' \ | while read LOCALE; do gplay listings get --package com.example.app --locale $LOCALE \ > "./aso-audit/${LOCALE}.json" doneNow your agent has a per-locale snapshot. Prompt:
Read every JSON file in
./aso-audit/. For each locale, tell me:
- Does the current title include any of the top keywords from the research doc?
- Is the short description using its full 80-character budget?
- Is the long description repeating any keyword more than 3 times (over-optimization penalty risk)?
- Rank locales by improvement potential (biggest gap between current and ideal).
You get a per-locale gap analysis in one pass.
Phase 3 — optimize copy per locale
Section titled “Phase 3 — optimize copy per locale”For your top-priority locale (usually en-US), prompt:
Rewrite the
en-UStitle, short description, and full description forcom.example.appto target the top 5 keywords from research. Constraints: title ≤ 30 chars, short description ≤ 80 chars, full description ≤ 4000 chars. Preserve the “gentle, non-nagging” brand voice from the current listing. Return three variants of each.
Pick the variant you like. Then propagate to other locales:
Take the chosen
en-USvariant and translate it into fr-FR, de-DE, es-ES, es-419, pt-BR, ja-JP, ko, zh-CN, zh-TW, and ar. Preserve keyword semantic intent — don’t just literally translate the keywords, use whatever people search for in that language. Note per-locale where the keyword substitution changes character count materially.
Write results to metadata/<locale>/.
Phase 4 — dry-run, review, ship
Section titled “Phase 4 — dry-run, review, ship”Preview what will be sent to Play:
gplay listings push \ --package com.example.app \ --listings-dir ./metadata \ --dry-runDiff against production to double-check:
# Save current stategplay listings list --package com.example.app \ | jq -r '.[].language' \ | while read L; do gplay listings get --package com.example.app --locale $L \ > "./aso-audit/before-${L}.json" done
# Compare against your metadata/ files with jq or diffShip inside an edit session so everything commits atomically:
gplay listings push \ --package com.example.app \ --listings-dir ./metadataIf anything fails mid-way, gplay discards the edit — the Play Console goes back to exactly its previous state, no partial half-updated locales.
Post-ship: monitor rankings
Section titled “Post-ship: monitor rankings”Google doesn’t expose keyword-rank APIs, so the honest answer is: install rankings tracking (App Radar, AppTweak, Sensor Tower) and correlate the rank change to your ship date. gplay can’t do this piece.
What gplay can do is monitor install/impression trends via gplay reports statistics:
# Install statistics reportgplay reports statistics list --package com.example.app
gplay reports statistics download \ --package com.example.app \ --report-type INSTALLS \ --year 2026 --month 7 \ --output ./reports/Compare month-over-month against your ship date. Not as precise as a rank tracker but free and useful.
The full end-to-end workflow, as a single prompt
Section titled “The full end-to-end workflow, as a single prompt”Once you’ve done this cycle once by hand, you can compress it. In Claude Code:
Run a Google Play ASO audit for
com.example.app:
- Pull every current listing to
./aso-audit/.- Web-research the top 20 keywords the top 5 habit-tracking apps target on Play (Streaks, Habitica, Way of Life, Loop, Done).
- Rank my locales by improvement potential.
- For the top 3 locales, draft 3 title/short/long description variants each.
- Wait for me to pick the winners.
- Translate winners to the remaining locales.
- Dry-run
gplay listings pushand show me the payload.- Wait for my approval, then push.
Use the metadata-sync skill from tamtom/gplay-cli-skills for the file layout.
An afternoon’s worth of clickwork becomes a review session.
Getting started
Section titled “Getting started”brew install tamtom/tap/gplaygplay setup --autonpx skills add tamtom/gplay-cli-skillsFull listings reference at /reference/listings/. For deeper locale handling see Managing 80+ Google Play locales from the terminal.
The ASO cycle is where CLIs and AI agents together outperform every other workflow — the tedious parts (audit, translate, push) are exactly the parts machines do best, and the judgment parts (brand voice, keyword tradeoffs) stay with you.