Skip to content
Β 
Β 

Latest commit

Β 

History

21 Commits

Folders and files

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

πŸ“€ 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

πŸͺ 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

⭐ 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 purchases verify --token "..." --product-id premium

πŸ“Š Analytics & Vitals

gpc vitals overview                                    # Health summary
gpc vitals crashes --days 7                            # Crash metrics
gpc vitals anr --days 30                               # ANR metrics

πŸ“± Devices

gpc devices list                                       # Supported devices
gpc devices stats                                      # Device distribution

πŸ“ˆ 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

πŸ”„ 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

🎨 Output Formats

gpc tracks list                    # JSON (default, for scripting)
gpc tracks list --pretty           # Pretty JSON
gpc tracks list --output table     # ASCII table
gpc tracks list --output tsv       # Tab-separated

πŸ”’ 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 ⭐

Releases

Sponsor this project

Packages

Contributors

Languages