Skip to content

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.

The four phases of a Play ASO cycle:

  1. Research — what keywords should you rank for, and how do competitors position?
  2. Audit — what does your current listing look like, per locale, across all supported markets?
  3. Optimize — draft revised titles, short descriptions, long descriptions, and localize them.
  4. 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.

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.

Pull every locale you currently ship in:

Terminal window
gplay listings list --package com.example.app --output table

Then export each locale’s listing to JSON for the agent to inspect:

Terminal window
mkdir -p ./aso-audit
gplay 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"
done

Now 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.

For your top-priority locale (usually en-US), prompt:

Rewrite the en-US title, short description, and full description for com.example.app to 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-US variant 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>/.

Preview what will be sent to Play:

Terminal window
gplay listings push \
--package com.example.app \
--listings-dir ./metadata \
--dry-run

Diff against production to double-check:

Terminal window
# Save current state
gplay 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 diff

Ship inside an edit session so everything commits atomically:

Terminal window
gplay listings push \
--package com.example.app \
--listings-dir ./metadata

If anything fails mid-way, gplay discards the edit — the Play Console goes back to exactly its previous state, no partial half-updated locales.

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:

Terminal window
# Install statistics report
gplay 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:

  1. Pull every current listing to ./aso-audit/.
  2. Web-research the top 20 keywords the top 5 habit-tracking apps target on Play (Streaks, Habitica, Way of Life, Loop, Done).
  3. Rank my locales by improvement potential.
  4. For the top 3 locales, draft 3 title/short/long description variants each.
  5. Wait for me to pick the winners.
  6. Translate winners to the remaining locales.
  7. Dry-run gplay listings push and show me the payload.
  8. 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.

Terminal window
brew install tamtom/tap/gplay
gplay setup --auto
npx skills add tamtom/gplay-cli-skills

Full 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.