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.
Basic app info
Section titled “Basic app info”gplay apps list # every app the service account can seegplay apps get --package com.example.app # one app's full detailsFor a quick scan use table output:
gplay apps list --output tableListings (title, description, screenshots, graphics)
Section titled “Listings (title, description, screenshots, graphics)”# All locales for an appgplay listings list --package com.example.app --output table
# One locale, full detailgplay listings get --package com.example.app --locale en-US
# Update a single fieldgplay 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.
Version and track state
Section titled “Version and track state”# What's live where?gplay tracks list --package com.example.app --output table
# One track's current releasegplay 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]))"'Uploaded bundles and APKs
Section titled “Uploaded bundles and APKs”# Every AAB uploadedgplay bundles list --package com.example.app
# Every APKgplay apks list --package com.example.appHandy for finding older builds you can roll back to, or checking whether a specific version code made it up.
Subscriptions, base plans, offers
Section titled “Subscriptions, base plans, offers”gplay subscriptions list --package com.example.app --output tablegplay subscriptions get --package com.example.app --product-id pro
gplay baseplans list --package com.example.app --subscription-id progplay 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 tableThe last one is the moment you realize a spreadsheet isn’t your friend anymore.
In-app products (one-time purchases)
Section titled “In-app products (one-time purchases)”gplay iap list --package com.example.app --output tablegplay iap get --package com.example.app --product-id premium_upgradeReviews
Section titled “Reviews”# Recent reviewsgplay 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_DAYSYes, that filter syntax works. Great for triaging support-worthy issues without opening the web UI.
Testers (closed testing tracks)
Section titled “Testers (closed testing tracks)”gplay testers list --package com.example.app --track alphaIn-app messaging: real-time developer notifications
Section titled “In-app messaging: real-time developer notifications”gplay pubsub topic get --package com.example.app # which Pub/Sub topic Play publishes toUseful when you’re setting up server-side purchase acknowledgment against real-time notifications.
Reports (financial, statistics)
Section titled “Reports (financial, statistics)”# List available financial reports (earnings, sales, taxes)gplay reports financial list --package com.example.app
# Download last month's earnings CSV from GCSgplay reports financial download \ --package com.example.app \ --report-type EARNINGS \ --year 2026 --month 6 \ --output ./reports/Editing safely with edit sessions
Section titled “Editing safely with edit sessions”Play Console API changes go through an edit session — a transactional workspace that either fully commits or gets thrown away. gplay wraps this:
# Start a session, save the IDEDIT_ID=$(gplay edit begin --package com.example.app | jq -r '.id')
# Make multiple changes referencing $EDIT_IDgplay 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 atomicallygplay edit commit --package com.example.app --edit-id $EDIT_ID
# Or throw everything awaygplay edit cancel --package com.example.app --edit-id $EDIT_IDMost 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.
Everything as JSON, by default
Section titled “Everything as JSON, by default”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.
Getting started
Section titled “Getting started”brew install tamtom/tap/gplaygplay setup --autogplay apps list --output tableFull reference at /reference/. Every command supports --help — that’s usually faster than searching docs.