The fast, lightweight, zero-Ruby alternative to Fastlane for Google Play Console.
If Fastlane feels heavy/slow, gpd gives you the same power with a tiny footprint and modern DX.
| Feature | gpd (Google-Play-Developer-CLI) | Fastlane (supply) |
|---|---|---|
| Cold start time | <200ms | 2–10s+ (Ruby boot) |
| Runtime footprint | ~10–20 MB | 100+ MB + gems |
| Language / Deps | Go – single binary | Ruby + heavy dependencies |
| Output format | JSON-first, machine-readable | Human text + plugins |
| AI/Script friendliness | Designed for agents (exit codes, structured) | Requires parsing plugins |
| Credential security | Platform store + redaction | Manual JSON key handling |
| Play API coverage | Full (publishing, reviews, analytics, monetization, integrity…) | Good, but fragmented actions |
| Install size / ease | Homebrew / curl / go install | gem install + bundle |
| Windows support | Native | WSL or painful |
Choose gpd when you want speed, security, and scriptability without the Ruby tax.
# macOS/Linux via Homebrew (10 seconds)
brew tap dl-alexandre/tap && brew install gpd
# OR macOS/Linux via curl
curl -fsSL https://raw.githubusercontent.com/dl-alexandre/Google-Play-Developer-CLI/main/install.sh | bash
# OR via Go
go install github.com/dl-alexandre/Google-Play-Developer-CLI/cmd/gpd@latest
View all installation options →
# 1. Authenticate once (service account JSON)
gpd auth login --key service-account.json
# 2. Verify setup
gpd auth check --package com.example.app
# 3. Upload AAB to internal track – JSON output ready for scripts
gpd publish upload myapp.aab --package com.example.app --track internal --json
Click to see why developers are switching
61+ commands covering: - App publishing and release management - Review monitoring and replies - Android Vitals (crashes, ANRs) - Monetization (IAPs, subscriptions) - Play Integrity API - Play Games Services - Custom app publishing - User permissions management
gpd is purpose-built for programmatic access by AI agents and automation:
# Get the AI agent quickstart guide
gpd help agent
# Example: Query reviews and get structured JSON for processing
gpd reviews list --package com.example.app --min-rating 1 --output json --pretty
Key features for automation:
--dry-run{
"data": {
"reviews": [
{
"reviewId": "12345",
"authorName": "Jane D.",
"comments": [{"text": "Great app!"}],
"starRating": 5
}
]
},
"error": null,
"meta": {
"durationMs": 145,
"services": ["androidpublisher"],
"nextPageToken": null,
"warnings": []
}
}
# One-liner for macOS/Linux
brew tap dl-alexandre/tap && brew install gpd
brew tap dl-alexandre/tap
brew install gpd
curl -fsSL https://raw.githubusercontent.com/dl-alexandre/Google-Play-Developer-CLI/main/install.sh | bash
go install github.com/dl-alexandre/Google-Play-Developer-CLI/cmd/gpd@latest
Download the latest release from the Releases page.
git clone https://github.com/dl-alexandre/Google-Play-Developer-CLI.git
cd Google-Play-Developer-CLI
make build
Create a service account in Google Cloud Console with the Google Play Android Publisher API enabled, then:
# Option 1: Environment variable
export GPD_SERVICE_ACCOUNT_KEY='{"type": "service_account", ...}'
# Option 2: Key file
gpd --key /path/to/service-account.json auth status
# Option 3: Application Default Credentials
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
gpd auth status
# Check authentication status
gpd auth status
# Check permissions for a specific app
gpd auth check --package com.example.app
# Diagnose configuration issues
gpd config doctor
| Flag | Description | Default |
|---|---|---|
--package |
App package name | - |
--output |
Output format: json, table, markdown, csv (analytics/vitals only) | json |
--pretty |
Pretty print JSON output | false |
--timeout |
Network timeout | 30s |
--key |
Service account key file path | - |
--quiet |
Suppress stderr except errors | false |
--verbose |
Verbose output | false |
--profile |
Authentication profile name | - |
--store-tokens |
Token storage: auto, never, secure | auto |
--fields |
JSON field projection (comma-separated paths) | - |
-v, --version |
Print version information | false |
gpd auth - Authenticationgpd auth login # OAuth device login (uses GPD_CLIENT_ID)
gpd auth init # Alias for auth login
gpd auth switch <profile> # Switch active profile
gpd auth list # List stored profiles
gpd auth status # Check authentication status
gpd auth check --package ... # Validate permissions
gpd auth logout # Clear stored credentials
gpd auth diagnose # Detailed auth diagnostics
gpd auth doctor # Diagnose authentication setup
If your OAuth consent screen is in testing mode, refresh tokens can expire after 7 days and Google enforces a 100 refresh-token issuance cap per OAuth client. If you encounter repeated invalid_grant refresh failures, re-authenticate and revoke unused tokens in Google Cloud Console, or move the app to production.
gpd config - Configurationgpd config init # Initialize project configuration
gpd config doctor # Diagnose configuration issues
gpd config path # Show configuration file locations
gpd config get <key> # Get a configuration value
gpd config set <key> <value> # Set a configuration value
gpd config completion bash # Generate shell completions
gpd apps - App Discovery# List apps in the developer account
gpd apps list
# Get app details by package
gpd apps get com.example.app
gpd publish - App Publishing# Upload artifacts
gpd publish upload app.aab --package com.example.app
# List and inspect builds
gpd publish builds list --package ...
gpd publish builds get 123 --package ...
gpd publish builds expire 123 --package ... --confirm
gpd publish builds expire-all --package ... --confirm
# ASC beta-group compatibility workflow
gpd publish beta-groups list --package ...
gpd publish beta-groups get internal --package ...
gpd publish beta-groups add-testers internal --group qa@example.com --package ...
# Create/update releases
gpd publish release --package ... --track internal --status draft
gpd publish release --package ... --track production --status inProgress --version-code 123
# Release workflow mapping (ASC submit/versions parity)
gpd publish capabilities
docs/examples/release-workflow.md
# Manage rollouts
gpd publish rollout --package ... --track production --percentage 10
gpd publish promote --package ... --from-track beta --to-track production
gpd publish halt --package ... --track production --confirm
gpd publish rollback --package ... --track production --confirm
# View status
gpd publish status --package ... --track production
gpd publish tracks --package ...
gpd publish capabilities
# Store listing
gpd publish listing update --package ... --locale en-US --title "My App"
gpd publish listing get --package ...
gpd publish listing delete --package ... --locale en-US --confirm
gpd publish listing delete-all --package ... --confirm
# Assets
gpd publish assets upload ./assets --package ...
gpd publish assets spec
# Testers
gpd publish testers list --package ... --track internal
gpd publish testers add --package ... --track internal --group testers@example.com
gpd publish testers get --package ... --track internal
gpd reviews - Review Management# List reviews with filtering
gpd reviews list --package ... --min-rating 1 --max-rating 3
gpd reviews list --package ... --include-review-text --scan-limit 200
# Reply to reviews
gpd reviews reply --package ... --review-id abc123 --text "Thank you!"
gpd reviews reply --package ... --review-id abc123 --template-file reply.txt
# Get a review
gpd reviews get --review-id abc123
# Get the developer response for a review
gpd reviews response get --review-id abc123
gpd reviews response for-review --review-id abc123
# View capabilities
gpd reviews capabilities
gpd purchases - Purchase Verification# Verify a purchase token
gpd purchases verify --package ... --token <token> --product-id sku123
# View capabilities
gpd purchases capabilities
gpd analytics - App Analytics# Query analytics data (vitals metrics)
gpd analytics query --package ... --metrics crashRate --start-date 2024-01-01 --end-date 2024-01-31
# View capabilities
gpd analytics capabilities
gpd vitals - Android Vitals# Query crash data
gpd vitals crashes --package ... --start-date 2024-01-01 --end-date 2024-01-31
# Query ANR data
gpd vitals anrs --package ... --start-date 2024-01-01 --end-date 2024-01-31
# View capabilities
gpd vitals capabilities
gpd monetization - In-App Products# List products
gpd monetization products list --package ...
# Get product details
gpd monetization products get sku123 --package ...
# Create/update products
gpd monetization products create --package ... --product-id sku123 --type managed
# List subscriptions (read-only)
gpd monetization subscriptions list --package ...
# Manage offers
gpd monetization offers list --package ... --subscription-id sub123
gpd monetization offers get sub123 offer123 --package ...
# Manage base plans
gpd monetization baseplans list --package ... --subscription-id sub123
gpd monetization baseplans activate sub123 base-plan-id --package ...
gpd monetization baseplans deactivate sub123 base-plan-id --package ...
gpd customapp - Custom App Publishing# Create a custom app
gpd customapp create --name "My App" --title "My App Title" --category GAMES
gpd games - Play Games Services```bash
gpd games achievements list --package ... gpd games achievements get achievement-id --package ...
$ claude mcp add Google-Play-Developer-CLI \
-- python -m otcore.mcp_server <graph>