Skip to content

Fast, lightweight, and scriptable CLI for Google Play Console

License

Notifications You must be signed in to change notification settings

AndroidPoet/playconsole-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Play Console CLI

Play Console CLI

Ship Android apps from your terminal

Latest Release Downloads CI Go License

No browser. No clicking. Just ship.

gpc bundles upload --file app.aab --track production

Install Β· Quick Start Β· Commands Β· CI/CD


✨ Why Developers Love GPC

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


πŸ“¦ Installation

# Homebrew (recommended)
brew tap AndroidPoet/tap && brew install playconsole-cli

# Install script (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/AndroidPoet/playconsole-cli/main/install.sh | bash

# Build from source
git clone https://github.com/AndroidPoet/playconsole-cli.git
cd playconsole-cli && make build

After install, you can use either playconsole-cli or the shorter alias gpc.


⚑ Quick Start

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 API Settings

4. Configure & verify

gpc auth login --credentials ~/.config/gpc/service-account.json
gpc apps list  # See your apps

5. Deploy! πŸŽ‰

gpc bundles upload --file app.aab --track internal
gpc tracks promote --from internal --to production --rollout 10

🎯 Commands

30 command groups, 80+ subcommands. Full reference β†’

πŸ“€ Release Management

gpc bundles upload --file app.aab --track internal    # Upload
gpc tracks list                                        # List tracks
gpc tracks promote --from internal --to beta           # Promote
gpc tracks update --track production --rollout 50     # Staged rollout
gpc tracks halt --track production                    # Emergency halt
gpc deobfuscation upload --version-code 42 --file mapping.txt  # Crash symbolication

πŸͺ Store Presence

gpc listings sync --dir ./metadata/                   # Sync all listings
gpc listings update --locale en-US --title "My App"   # Update listing
gpc images sync --dir ./screenshots/                  # Sync screenshots
gpc availability list --track production              # Country targeting

⭐ Reviews

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

πŸ’° Monetization

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

πŸ“Š Analytics & Vitals

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

πŸ“± Devices

gpc devices list                                       # Supported devices
gpc devices stats                                      # Device distribution
gpc device-tiers list                                  # Device tier configs

πŸ“ˆ Reports

gpc reports list                                       # Available reports
gpc reports types                                      # Report type info

πŸ§ͺ Testing

gpc testing internal-sharing upload --file app.aab   # Instant test link
gpc testing testers add --track beta --email "dev@company.com"

πŸ‘₯ Team

gpc users list
gpc users grant --email "dev@company.com" --role releaseManager

πŸ› οΈ Utilities

gpc doctor                                             # Validate setup
gpc init --package com.example.app                     # Create project config
gpc diff                                               # Compare draft vs live
gpc recovery list                                      # App recovery actions
gpc completion zsh > "${fpath[1]}/_gpc"                # Shell completions

πŸ”„ CI/CD Integration

GitHub Actions

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/main/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

Encode Credentials for CI

base64 < service-account.json | pbcopy  # macOS
base64 < service-account.json | xclip   # Linux
# Add as GPC_CREDENTIALS_B64 secret

βš™οΈ Environment Variables

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

🎨 Output Formats

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 minimal         # First field only (piping)

πŸ”’ Security

  • Credentials stored with 0600 permissions
  • Service account keys never logged
  • Base64 encoding for CI/CD secrets
  • No credentials in command history

πŸ† Wall of Apps

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!

  1. Fork this repo
  2. Edit docs/wall-of-apps.json
  3. Add your app:
{
  "app": "Your App Name",
  "link": "https://play.google.com/store/apps/details?id=your.package",
  "creator": "YourGitHubUsername"
}
  1. Submit a PR!

🀝 Contributing

PRs welcome! Please open an issue first to discuss major changes.

make build    # Build
make test     # Test
make lint     # Lint

πŸ“„ License

MIT


⬆ Back to top

Not affiliated with Google. Google Play is a trademark of Google LLC.

If GPC saved you time, give it a ⭐

About

Fast, lightweight, and scriptable CLI for Google Play Console

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published