skills/gplay-testers-orchestration/SKILL.md
Beta testing groups and tester management for Google Play closed testing tracks. Use when managing testers and beta groups.
npx skillsauth add tamtom/gplay-cli-skills gplay-testers-orchestrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when you need to manage beta testers and testing groups.
Google Play has several testing tracks:
gplay testers list \
--package com.example.app \
--edit $EDIT_ID \
--track internal
gplay testers get \
--package com.example.app \
--edit $EDIT_ID \
--track beta
gplay testers update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--emails "[email protected],[email protected],[email protected]"
# Get current testers
CURRENT=$(gplay testers get --package com.example.app --edit $EDIT_ID --track internal \
| jq -r '.testers[]' | paste -sd "," -)
# Add new testers
NEW_TESTERS="[email protected],[email protected]"
ALL_TESTERS="$CURRENT,$NEW_TESTERS"
gplay testers update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--emails "$ALL_TESTERS"
# Get current testers
CURRENT=$(gplay testers get --package com.example.app --edit $EDIT_ID --track internal \
| jq -r '.testers[]' | paste -sd "," -)
# Remove specific email
UPDATED=$(echo "$CURRENT" | tr ',' '\n' | grep -v "[email protected]" | paste -sd "," -)
gplay testers update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--emails "$UPDATED"
# 1. Create edit
EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id')
# 2. Upload build to internal track
gplay bundles upload \
--package com.example.app \
--edit $EDIT_ID \
--file app-internal.aab
# 3. Add testers
gplay testers update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--emails "[email protected],[email protected]"
# 4. Update track
gplay tracks update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--json @track-config.json
# 5. Commit
gplay edits commit --package com.example.app --edit $EDIT_ID
{
"releases": [{
"versionCodes": [123],
"status": "completed"
}]
}
Characteristics:
# Release to internal with testers
gplay release \
--package com.example.app \
--track internal \
--bundle app.aab \
--testers "[email protected],[email protected],[email protected]"
Characteristics:
gplay release \
--package com.example.app \
--track beta \
--bundle app.aab
Share this link with testers:
https://play.google.com/apps/testing/com.example.app
Characteristics:
gplay release \
--package com.example.app \
--track alpha \ # alpha track = open testing
--bundle app.aab
Internal testing:
Closed beta:
Open beta:
Store tester lists in files:
# testers-internal.txt
[email protected]
[email protected]
[email protected]
# testers-beta.txt
[email protected]
[email protected]
[email protected]
Update from file:
EMAILS=$(cat testers-internal.txt | paste -sd "," -)
gplay testers update \
--package com.example.app \
--edit $EDIT_ID \
--track internal \
--emails "$EMAILS"
#!/bin/bash
PACKAGE="com.example.app"
# Build
./gradlew bundleRelease
# Release to internal first
gplay release \
--package $PACKAGE \
--track internal \
--bundle app/build/outputs/bundle/release/app-release.aab
# Wait 24 hours, monitor for crashes
# If stable, promote to beta
gplay promote \
--package $PACKAGE \
--from internal \
--to beta
# Week 1: Internal team (10 people)
gplay release --package com.example.app --track internal --bundle app.aab
# Week 2: Beta group 1 (100 people)
gplay promote --package com.example.app --from internal --to beta
# Week 3: Open beta (unlimited)
gplay promote --package com.example.app --from beta --to alpha
# Week 4: Production with staged rollout
gplay promote --package com.example.app --from alpha --to production --rollout 10
https://play.google.com/apps/internaltest/INTERNAL_TESTING_ID
Get from Play Console → Internal testing → Testers → Copy link
https://play.google.com/apps/testing/com.example.app
Subject: Join the Beta Test for [App Name]
Hi,
You've been invited to test the beta version of [App Name]!
To join:
1. Click this link: https://play.google.com/apps/testing/com.example.app
2. Tap "Become a tester"
3. Download the app from Google Play
Your feedback is valuable! Please report any issues to: [email protected]
Thanks,
The [App Name] Team
# View recent reviews from beta testers
gplay reviews list --package com.example.app \
| jq '.reviews[] | select(.comments[0].userComment.reviewerLanguage != null)'
Use Play Console → Quality → Android vitals → Crashes and ANRs
Filter by version code to see beta-specific crashes.
#!/bin/bash
# sync-testers.sh
PACKAGE="com.example.app"
CSV_FILE="testers.csv"
# Read emails from CSV (skip header)
EMAILS=$(tail -n +2 "$CSV_FILE" | cut -d',' -f1 | paste -sd "," -)
# Create edit
EDIT_ID=$(gplay edits create --package $PACKAGE | jq -r '.id')
# Update testers
gplay testers update \
--package $PACKAGE \
--edit $EDIT_ID \
--track internal \
--emails "$EMAILS"
# Commit
gplay edits commit --package $PACKAGE --edit $EDIT_ID
echo "Synced $(echo $EMAILS | tr ',' '\n' | wc -l) testers"
email,name,role
[email protected],Alice Developer,Developer
[email protected],Bob QA,QA
[email protected],Carol PM,Product Manager
#!/bin/bash
# Remove testers who haven't tested in 30 days
PACKAGE="com.example.app"
EDIT_ID=$(gplay edits create --package $PACKAGE | jq -r '.id')
# Get current testers
CURRENT=$(gplay testers get --package $PACKAGE --edit $EDIT_ID --track beta \
| jq -r '.testers[]')
# Filter active testers (implement your logic)
# This is a placeholder - you'd need to track activity separately
ACTIVE="[email protected],[email protected]"
# Update
gplay testers update \
--package $PACKAGE \
--edit $EDIT_ID \
--track beta \
--emails "$ACTIVE"
gplay edits commit --package $PACKAGE --edit $EDIT_ID
| Track | Max Testers | Review Required | Access Speed | |-------|-------------|-----------------|--------------| | Internal | 100 | No | Instant | | Closed | Unlimited | No | Minutes | | Open | Unlimited | Yes | Days | | Production | Unlimited | Yes | Days |
Use Internal when:
Use Closed when:
Use Open when:
Include in app update:
Version 1.2.3 (Beta)
What's New:
- New feature X (please test thoroughly)
- Bug fixes for Y
Known Issues:
- Feature Z is work in progress
- Crash on Android 12 is being investigated
Please report issues to: [email protected]
This helps you improve before production release!
development
App vitals monitoring for crashes, ANRs, performance metrics, and errors via gplay vitals commands. Use when asked to check app stability, crash rates, ANR rates, or performance data from Google Play Console.
development
User and grant management for Google Play Console via gplay users and gplay grants commands. Use when asked to manage developer account users, permissions, or app-level access grants.
tools
Bulk-localize subscription display names, descriptions, and offer tags across all Google Play locales using gplay. Use when you want to fill in subscription metadata for every language without clicking through Play Console manually.
development
Pre-submission validation for Google Play releases covering metadata, screenshots, bundle integrity, data safety, and policy compliance. Use when preparing a release to avoid rejections and catch issues before submitting.