gplay is a fast, single-binary CLI for Google Play Console, built for AI coding agents — Claude Code, Codex, Cursor, Gemini CLI — and for humans who script. Release Android apps, create subscriptions, in-app products, and one-time purchases, verify purchases server-side, and monitor crashes and reviews through documented Google APIs.
It replaces Play Console clicking for many day-to-day workflows. Most deployment tools only handle standard AAB uploads — gplay supports 250+ commands across 9 official Google APIs: Android Publisher, Play Developer Reporting, Checks, both Play Games admin APIs, Managed Google Play, Play Integrity, Android Developer ID Status, and Cloud Storage for reports. Initial public-app setup, first upload, ordinary Google-managed Play App Signing enrollment, and legal declarations still require a manual Play Console handoff. Enterprise self-hosted Cloud KMS signing is supported through its separate official API. Gplay does not use private Console endpoints or authenticated browser automation.
- Quick Start
- Highlights
- Use it with your AI agent
- How gplay compares
- Documentation
- Contributing
- License
# Homebrew (recommended)
brew tap tamtom/tap
brew install tamtom/tap/gplay
# Standalone binary — macOS/Linux
curl -fsSL https://raw.githubusercontent.com/tamtom/play-console-cli/main/install.sh | bash
# Standalone binary — Windows (PowerShell)
irm https://raw.githubusercontent.com/tamtom/play-console-cli/main/install.ps1 | iexUpdate: gplay update verifies the release SHA-256 checksum before replacing a standalone binary. Homebrew and Go installations receive the appropriate update command. Successful interactive commands suggest newer stable releases on stderr, using a 24-hour cache; a failed check waits one hour before the next try. Help, version, completion, CI, piped commands, and development builds (git describe versions) skip automatic checks. Set GPLAY_NO_UPDATE to 1, true, or yes to disable suggestions or run gplay update --check explicitly. Source builds require Go 1.27.1 or newer.
After your first successful metadata push, edit commit, or release with gh installed, gplay
prints an optional star suggestion to stderr. It never waits for input or
stars automatically: agents must ask you first. Set GPLAY_NO_STAR_PROMPT=1
to suppress the suggestion. See configuration.
gplay authenticates to Google Play with a service account.
gplay setup --autoThat's it. This will:
- Install
gcloudif needed (via Homebrew on macOS, or curl on Linux) - Log you into Google Cloud
- Create a service account and download credentials
- Open Play Console for the one manual step (granting access)
- Configure everything automatically
Pass --project <id> if gcloud has no default project, --dry-run to preview the commands, or --no-browser for CI/agent runs. Then verify with gplay auth doctor.
Already have a service account key?
gplay auth login --service-account /path/to/service-account.jsonSet up the service account by hand (full control)
Step 1: Create a Google Cloud Project
- Go to Google Cloud Console
- Create a new project or select an existing one
- Note your project ID
Step 2: Enable the API
- Go to APIs & Services > Library
- Search for "Google Play Android Developer API"
- Click Enable
Step 3: Create a Service Account
- Go to IAM & Admin > Service Accounts
- Click Create Service Account
- Give it a name (e.g., "gplay-cli")
- Click Create and Continue, then Done
- Click on the created service account
- Go to Keys > Add Key > Create new key > JSON
- Save the downloaded JSON file securely
Step 4: Grant Access in Play Console
- Go to Google Play Console
- Go to Users and permissions > Invite new users
- Enter the service account email (from the JSON file, looks like
name@project.iam.gserviceaccount.com) - Set permissions (Admin or specific app access)
- Click Invite user
Step 5: Login with gplay
gplay auth login --service-account /path/to/service-account.json
# Verify it works
gplay auth doctorProfiles for multiple accounts and troubleshooting: docs/authentication.md
Once authenticated, you're ready to go:
# Ship a release in one command
gplay release --package com.example.app --track production --bundle app.aab --rollout 0.1
# Create a subscription with base plans and offers
gplay subscriptions create --package com.example.app --json @subscription.json
# Everything outputs minified JSON — built for agents and pipes
gplay reviews list --package com.example.app | jq '.reviews[0]'- Current official API coverage — the reviewed manifest tracks 218 methods across eight Play-specific discovery APIs, plus the two Cloud Storage methods needed for reports. All 145 current Android Publisher methods have a CLI path; specialized third-party-store and enterprise-KMS commands are explicitly scope-gated.
- Explicit safety boundary —
gplay capabilitiesdistinguishes official, manual, and unsupported workflows;gplay bootstrap planprepares initial app setup without logging in, contacting Google, or changing an account. - Agent-native discovery —
gplay searchranks commands, examples, flags, and canonical intents locally;gplay schemaembeds all 218 reviewed endpoints and 568 official request/response definitions with no credentials or network access. - Resilient one-shot workflows — workflow steps support opt-in bounded retries and per-attempt timeouts, persist structured attempt diagnostics, fingerprint definitions, and refuse ambiguous or changed-definition resumes.
- Local weekly/daily insights — compare installs, uninstalls, crashes, ANRs, and store-listing conversion from official Google Play CSV exports; UTF-8/UTF-16 are supported and missing metrics remain explicitly unavailable.
- Managed Google Play — publish private (custom) apps to specific organizations with
gplay custom-apps create, straight from the terminal. - Complete releases & rollouts — upload, track assignment, staged rollout with pause/resume/percentage control, promote between tracks, release notes from git history.
- Store listings, screenshots & localization — manage listing text, images, and metadata across every locale; sync with a local directory or Fastlane.
- Full monetization stack — subscriptions, base plans, promotional offers, in-app products, one-time purchases, regional price conversion. Pairs with RevenueCat: create products in Play with
gplay, import them into RevenueCat. - Purchase verification — verify tokens, acknowledge purchases, refund orders, decode RTDN webhooks.
- Offline preflight —
gplay preflight --file app.aabfully decodesAndroidManifest.xml(binary AXML for APKs, aapt2 protobuf for App Bundles) and runs nine scanners with no API calls and no credentials: manifest flags, restricted permissions, 64-bit and 16 KB page alignment, listing text and real screenshot dimensions, secrets, billing, privacy SDKs, target API floor, and size. Catches the rejections before you upload. - App health — crash clusters, ANRs, performance vitals, review replies, financial & statistics reports.
- Integrity and verification — decode Android/PC Play Integrity tokens, safely gate Device Recall writes, and check Android Developer ID package/certificate registration.
- AI-agent native — minified JSON output, explicit flags,
--helpeverywhere,--dry-runfor every write, no interactive prompts, Agent Skills included. - Lightweight, zero runtime to install — a single compiled Go binary with instant startup. No Node.js, no Python, no JVM, no Gradle project required.
Every command is discoverable via --help, outputs token-efficient JSON, and never blocks on a prompt — so agents can drive the whole Play workflow. Install the ready-made skills:
# Inspect the immutable, checksum-verified install plan (no network or writes)
gplay install-skills --preview
# Install the reviewed skill pack without npm/npx or executing repository code
gplay install-skillsThe installer pins one reviewed Git commit and verifies every skill tree before an atomic install. Existing skills are never replaced unless --force is explicit.
Then ask your agent things like "release this AAB to internal", "create monthly + yearly subscriptions with a 7-day trial and convert prices for all regions", or "summarize this week's crash clusters". Full guide: docs/ai-agents.md
Versus Fastlane supply and gradle-play-publisher (all three cover AAB/APK upload, tracks, rollouts, and listings equivalently):
| Capability | gplay | Fastlane supply | gradle-play-publisher |
|---|---|---|---|
| Subscriptions, base plans, offers, one-time purchases | ✅ Full | ❌ | |
| Purchase verification, orders, refunds | ✅ | ❌ | ❌ |
| Vitals: crashes, ANRs, performance | ✅ | ❌ | ❌ |
| Reviews: read + reply | ✅ | ❌ | ❌ |
| Financial & statistics reports | ✅ | ❌ | ❌ |
| Users & permission grants | ✅ | ❌ | ❌ |
| Offline preflight (manifest decode, 16 KB alignment, secrets) | ✅ 9 scanners | ❌ | ❌ |
| Managed Google Play (private/custom apps) | ✅ | ❌ | ❌ |
| Google Checks compliance gate | ✅ | ❌ | ❌ |
| AI-agent-friendly output | ✅ JSON default | ❌ Human logs | ❌ Gradle logs |
| Runtime | Single Go binary | Ruby + gems | JVM + Gradle project |
| Guide | What's inside |
|---|---|
| Command reference (GPLAY.md) | Every command and flag, auto-generated |
| Authentication | Service account setup, profiles, auth doctor |
| Releasing | Releases, rollouts, listings, testers, pre-submission checks, Fastlane interop |
| Monetization | Subscriptions, IAP, one-time purchases, pricing, purchase verification, RevenueCat |
| Monitoring & operations | Vitals, reviews, reports, users, notifications, diagnostics |
| AI agents | Agent setup, skills, example prompts |
| Configuration | Config file, env vars, output formats, shell completion |
| CI/CD | GitHub Actions, GitLab CI, release gates |
| Policy-safe automation | Official API boundary and manual Play Console handoffs |
| Official API audit | Versions, method inventory, gaps, and testing boundary |
| Contributing | Development setup, testing, PR guidelines |
Contributions welcome — see CONTRIBUTING.md. Quick local check: make dev (format + lint + test + build).
MIT — see LICENSE.
Built with Go and ffcli