Skip to content

Read and edit Google Play Console app info from the terminal

The Play Console web UI is fine for browsing. It’s not great for scripting, comparing state across apps, or feeding your AI agent structured data. gplay exposes the same information as JSON from your terminal — usually one command per screen you’d have clicked through.

This is a cheat sheet of the commands you’ll use daily.

Terminal window
gplay apps list # every app the service account can see
gplay apps get --package com.example.app # one app's full details

For a quick scan use table output:

Terminal window
gplay apps list --output table

Listings (title, description, screenshots, graphics)

Section titled “Listings (title, description, screenshots, graphics)”
Terminal window
# All locales for an app
gplay listings list --package com.example.app --output table
# One locale, full detail
gplay listings get --package com.example.app --locale en-US
# Update a single field
gplay listings update \
--package com.example.app \
--locale en-US \
--short-description "The best way to X"

Full localization workflow: Managing 80+ Google Play locales from the terminal.

Terminal window
# What's live where?
gplay tracks list --package com.example.app --output table
# One track's current release
gplay tracks get --package com.example.app --track production
# What's the version code / name of the latest bundle in a track?
gplay tracks get --package com.example.app --track production \
| jq -r '.releases[0] | "\(.name) (\(.versionCodes[0]))"'
Terminal window
# Every AAB uploaded
gplay bundles list --package com.example.app
# Every APK
gplay apks list --package com.example.app

Handy for finding older builds you can roll back to, or checking whether a specific version code made it up.

Terminal window
gplay subscriptions list --package com.example.app --output table
gplay subscriptions get --package com.example.app --product-id pro
gplay baseplans list --package com.example.app --subscription-id pro
gplay offers list --package com.example.app --subscription-id pro --base-plan-id monthly
gplay baseplans prices list \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--output table

The last one is the moment you realize a spreadsheet isn’t your friend anymore.

Terminal window
gplay iap list --package com.example.app --output table
gplay iap get --package com.example.app --product-id premium_upgrade
Terminal window
# Recent reviews
gplay reviews list --package com.example.app --output table
# Only 1-2 star reviews from the last 14 days that mention "login"
gplay reviews list \
--package com.example.app \
--filter "rating<=2 AND text CONTAINS 'login'" \
--time-range LAST_14_DAYS

Yes, that filter syntax works. Great for triaging support-worthy issues without opening the web UI.

Terminal window
gplay testers list --package com.example.app --track alpha
gplay testers add --package com.example.app --track alpha --email tester@example.com

In-app messaging: real-time developer notifications

Section titled “In-app messaging: real-time developer notifications”
Terminal window
gplay pubsub topic get --package com.example.app # which Pub/Sub topic Play publishes to

Useful when you’re setting up server-side purchase acknowledgment against real-time notifications.

Terminal window
# List available financial reports (earnings, sales, taxes)
gplay reports financial list --package com.example.app
# Download last month's earnings CSV from GCS
gplay reports financial download \
--package com.example.app \
--report-type EARNINGS \
--year 2026 --month 6 \
--output ./reports/

Play Console API changes go through an edit session — a transactional workspace that either fully commits or gets thrown away. gplay wraps this:

Terminal window
# Start a session, save the ID
EDIT_ID=$(gplay edit begin --package com.example.app | jq -r '.id')
# Make multiple changes referencing $EDIT_ID
gplay listings update --edit-id $EDIT_ID --locale en-US --title "New Title"
gplay listings update --edit-id $EDIT_ID --locale fr-FR --title "Nouveau titre"
# Commit atomically
gplay edit commit --package com.example.app --edit-id $EDIT_ID
# Or throw everything away
gplay edit cancel --package com.example.app --edit-id $EDIT_ID

Most gplay commands manage the edit session for you internally — you only need to think about it when you want atomicity across multiple writes. If Claude Code or another AI agent is making a multi-step update, prompt it to use an explicit edit session and cancel-on-error.

Every command above returns minified JSON if you don’t add --output. Perfect for jq, agent parsing, storing snapshots for diffing.

Table output (--output table) is human-readable. Markdown (--output markdown) is what you’d paste into a PR description.

Terminal window
brew install tamtom/tap/gplay
gplay setup --auto
gplay apps list --output table

Full reference at /reference/. Every command supports --help — that’s usually faster than searching docs.