No browser. No clicking. Just ship.
gpc bundles upload --file app.aab --track production
Install · Quick Start · Commands · CI/CD
| 😤 The Old Way | 🚀 The GPC Way |
|---|---|
| Open browser, navigate menus, wait... | gpc bundles upload --track internal |
| Copy-paste release notes manually | gpc listings sync --dir ./metadata/ |
| Check reviews one by one | gpc reviews list --min-rating 1 | jq |
| Complex CI/CD setup | Single binary + env vars |
| "Is it uploaded yet?" | Instant feedback |
Inspired by App Store Connect CLI — the same philosophy, now for Android.
# Homebrew (macOS) brew tap AndroidPoet/tap && brew install playconsole-cli # Install script (Linux/macOS) curl -fsSL https://raw.githubusercontent.com/AndroidPoet/playconsole-cli/master/install.sh | bash # Build from source git clone https://github.com/AndroidPoet/playconsole-cli.git cd playconsole-cli && make build
From PowerShell, install the latest pre-built release for your Windows architecture:
irm https://raw.githubusercontent.com/AndroidPoet/playconsole-cli/master/install.ps1 | iex
The installer places playconsole-cli.exe and the gpc.exe alias in
%LOCALAPPDATA%\Programs\playconsole-cli and adds that directory to your user PATH.
Open a new terminal after installation. To install a specific release or choose another
directory, set GPC_VERSION or GPC_INSTALL_DIR before running the command.
To build from source on Windows, install Go and run:
go install github.com/AndroidPoet/playconsole-cli/cmd/playconsole-cli@latest
After install, you can use either playconsole-cli or the shorter alias gpc.
gpc setup --auto
That's it. This will:
- Install
gcloudif needed (via Homebrew on macOS, curl on Linux, or winget on Windows; Windows may show a UAC prompt) - 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
Prefer to do it yourself?
1. Create a service account (Google Cloud Console)
mkdir -p ~/.config/gpc mv ~/Downloads/your-key.json ~/.config/gpc/service-account.json chmod 600 ~/.config/gpc/service-account.json
2. Enable the API → Enable Google Play Android Developer API
3. Grant access in Play Console → Users and permissions: invite the service account email as a user and give it access to your apps. (The old "API access" page no longer exists.)
4. Configure & verify
gpc auth login --credentials ~/.config/gpc/service-account.json gpc apps list # See your apps
gpc bundles upload --file app.aab --track internal gpc tracks promote --from internal --to production --rollout 10
30 command groups, 80+ subcommands. Full reference →
gpc bundles upload --file app.aab --track internal # Upload gpc bundles find --version-code 42 # Find by version code gpc bundles wait --version-code 42 # Wait for processing gpc tracks list # List tracks gpc tracks promote --from internal --to beta # Promote gpc tracks update --track production --version-code 42 --rollout 50 # Staged rollout gpc tracks halt --track production # Emergency halt gpc deobfuscation upload --version-code 42 --file mapping.txt # Crash symbolication
gpc listings sync --dir ./metadata/ # Sync all listings gpc listings update --locale en-US --title "My App" # Update listing gpc images sync --dir ./screenshots/ --confirm # Replace screenshots gpc availability list --track production # Country targeting
gpc reviews list --min-rating 1 --max-rating 2 # Negative reviews gpc reviews reply --review-id "gp:..." --text "Thanks!" gpc reviews list | jq '[.[] | select(.rating == 5)]' # Filter with jq
gpc products list # In-app products gpc subscriptions list # Subscriptions gpc offers list --product-id sub_id --base-plan monthly # Subscription offers gpc purchases verify --token "..." --product-id premium gpc orders get --order-id GPA.1234 # Order details gpc orders refund --order-id GPA.1234 --confirm # Issue refund gpc external-transactions create --file tx.json # Alternative billing
gpc vitals overview # Health summary gpc vitals crashes --days 7 # Crash rate gpc vitals anr --days 28 # ANR rate gpc vitals slow-start --days 28 # Slow startup rate gpc vitals slow-rendering --days 28 # Frame rendering gpc vitals wakeups --days 28 # Battery: wakeup alarms gpc vitals wakelocks --days 28 # Battery: stuck wakelocks gpc vitals memory --days 28 # Low memory killer rate gpc vitals errors issues # Grouped error issues
gpc devices list # Supported devices gpc devices stats # Device distribution gpc device-tiers list # Device tier configs
gpc reports list # Available reports gpc reports types # Report type info
gpc testing internal-sharing upload --file app.aab # Instant test link gpc testing testers add --track beta --emails "[email protected]"
gpc users list gpc users invite --email "[email protected]" gpc users grant --email "[email protected]" --role releaseManager
gpc doctor # Validate setup gpc init --package com.example.app # Create project config gpc diff --edit-id EDIT_ID # Compare an open edit vs live gpc recovery list # App recovery actions gpc completion zsh > "${fpath[1]}/_gpc" # Shell completions
name: Deploy to Play Store on: push: tags: ['v*'] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build run: ./gradlew bundleRelease - name: Install GPC run: | curl -fsSL https://raw.githubusercontent.com/AndroidPoet/playconsole-cli/master/install.sh | bash echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Deploy env: GPC_CREDENTIALS_B64: ${{ secrets.PLAY_CREDENTIALS }} GPC_PACKAGE: com.yourcompany.app run: | gpc bundles upload --file app/build/outputs/bundle/release/app-release.aab --track internal gpc tracks promote --from internal --to production --rollout 10
base64 < service-account.json | pbcopy # macOS base64 < service-account.json | xclip # Linux # Add as GPC_CREDENTIALS_B64 secret
Use gpc with AI coding agents. Install the skill pack and your agent learns every command — releases, metadata, monetization, vitals, and more.
npx skills add AndroidPoet/playconsole-cli-skills
Then just ask:
Upload my AAB to the internal track and wait for processing
Show me the crash rate for the last 7 days
Set up a staged rollout to production starting at 5%
| Variable | Description |
|---|---|
GPC_CREDENTIALS_PATH |
Path to service account JSON |
GPC_CREDENTIALS_B64 |
Base64-encoded credentials (CI) |
GPC_PACKAGE |
Default package name |
GPC_PROFILE |
Auth profile to use |
GPC_OUTPUT |
Format: json | table | tsv | csv | yaml | markdown |
GPC_TIMEOUT |
Per-request timeout override, e.g. 120s |
GPC_DEBUG |
1/true to log API requests and responses to stderr |
Precedence is flag > environment variable > .gpc.yaml project config > profile default.
Only the JSON/table payload goes to stdout; progress and warnings go to stderr, so
gpc tracks list | jq always receives a clean document.
gpc tracks list # JSON (default, for scripting) gpc tracks list --pretty # Pretty JSON gpc tracks list -o table # ASCII table gpc tracks list -o tsv # Tab-separated values gpc tracks list -o csv # Comma-separated values gpc tracks list -o yaml # YAML gpc tracks list -o markdown # GitHub-flavored Markdown table gpc tracks list -o minimal # First field only (piping)
- Credentials stored with
0600permissions - Service account keys never logged
- Base64 encoding for CI/CD secrets
- No credentials in command history
Apps shipped using Play Console CLI:
| App | Creator |
|---|---|
| Wally | @AndroidPoet |
🚀 Add your app to the Wall!
Using GPC to ship your app? Get featured here!
- Fork this repo
- Edit
docs/wall-of-apps.json - Add your app:
{
"app": "Your App Name",
"link": "https://play.google.com/store/apps/details?id=your.package",
"creator": "YourGitHubUsername"
}- Submit a PR!
PRs welcome! Please open an issue first to discuss major changes.
make build # Build make test # Test make lint # Lint
MIT
Not affiliated with Google. Google Play is a trademark of Google LLC.
If GPC saved you time, give it a ⭐
Contributions are welcome! If you've found a bug, have an idea for an improvement, or want to contribute new features, please open an issue or submit a pull request.
Support it by joining stargazers for this repository. ⭐
Also, follow me on GitHub for my next creations! 🤩
MIT © 2026 Ranbir Singh