Monitor crash rates, ANR, startup times, rendering, battery, and memory. Use --threshold for CI quality gates.
gpc vitals <subcommand> [options]Commands
| Command | Description |
|---|---|
vitals overview | Dashboard summary of all vital metrics |
vitals crashes | Query crash rate metrics |
vitals anr | Query ANR rate metrics |
vitals startup | Query slow startup metrics |
vitals rendering | Query slow rendering metrics |
vitals battery | Query excessive wakeup metrics |
vitals wakeup | Alias for vitals battery |
vitals memory | Query stuck wakelock metrics |
vitals lmk | Query low-memory killer metrics |
vitals error-count | Query error report count metrics |
vitals errors search | Search error issues and reports |
vitals compare | Compare metric trend across periods |
Reporting API Required
Vitals commands use the Google Play Developer Reporting API, which must be enabled separately in your GCP project. If the API is not enabled, vitals commands will show "No vitals data available" instead of failing with a 403 error — other non-vitals commands continue to work normally.
Enable it at: https://console.cloud.google.com/apis/library/playdeveloperreporting.googleapis.com
Known issue: vitals errors reports
The per-issue drill-down path currently calls an endpoint that does not exist in Google's current Reporting API discovery doc (revision 20260415). Scheduled for a future release alongside additions for apps.search, apps.fetchReleaseFilterOptions, and extended errorIssues.search query parameters. See Planned coverage.
Automatic freshness clamping (v0.9.70+)
Google's vitals data typically lags 3-4 days behind real-time. GPC automatically queries the freshness endpoint for each metric set and clamps the date range to avoid 400 INVALID_ARGUMENT errors. No configuration needed.
Shared Options
The metric commands (crashes, anr, startup, rendering, battery, memory) share these options:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Threshold value for CI alerting (exit code 6 if breached) |
Valid dimensions: apiLevel, versionCode, deviceModel, deviceType, countryCode, deviceRamBucket, deviceSocName, deviceCpuMakeModel, deviceGlEsVersion, deviceVulkanVersion, deviceOpenGlVersion, deviceBrand.
vitals overview
Dashboard summary aggregating all vital metrics into a single view.
Synopsis
gpc vitals overviewOptions
No command-specific options. Uses global --app flag.
Example
gpc vitals overview --app com.example.myapp{
"crashRate": { "value": 1.2, "threshold": "bad" },
"anrRate": { "value": 0.3, "threshold": "good" },
"slowStartRate": { "value": 5.1, "threshold": "acceptable" },
"slowRenderingRate": { "value": 2.8, "threshold": "good" },
"excessiveWakeupRate": { "value": 0.1, "threshold": "good" },
"stuckWakelockRate": { "value": 0.05, "threshold": "good" }
}2
3
4
5
6
7
8
vitals crashes
Query crash rate metrics, optionally grouped by dimension.
Synopsis
gpc vitals crashes [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Crash rate threshold (exit code 6 if breached) |
Example
Query crash rate:
gpc vitals crashes --app com.example.myappQuery crash rate by version code:
gpc vitals crashes --app com.example.myapp --dim versionCode --days 30CI gating with threshold:
gpc vitals crashes --app com.example.myapp --threshold 2.0If the crash rate exceeds 2.0%, the command exits with code 6:
Threshold breached: 2.4 > 2.0Use in CI pipelines:
- name: Check crash rate
run: gpc vitals crashes --app com.example.myapp --threshold 2.02
vitals anr
Query ANR (Application Not Responding) rate metrics.
Synopsis
gpc vitals anr [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | ANR rate threshold (exit code 6 if breached) |
Example
gpc vitals anr --app com.example.myapp --threshold 0.5Group by device model:
gpc vitals anr --app com.example.myapp --dim deviceModel --days 14vitals startup
Query cold and warm startup time metrics.
Synopsis
gpc vitals startup [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Slow start rate threshold (exit code 6 if breached) |
Example
gpc vitals startup --app com.example.myapp --days 7vitals rendering
Query slow rendering (frame rate) metrics.
Synopsis
gpc vitals rendering [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Slow rendering rate threshold (exit code 6 if breached) |
Example
gpc vitals rendering --app com.example.myapp --dim apiLevelvitals battery
Query excessive wakeup metrics (battery impact). Also available as vitals wakeup.
Synopsis
gpc vitals battery [options]
gpc vitals wakeup [options] # alias2
Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Excessive wakeup rate threshold (exit code 6 if breached) |
Example
gpc vitals battery --app com.example.myapp --threshold 1.0vitals memory
Query stuck background wakelock metrics (memory/battery impact).
Synopsis
gpc vitals memory [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | Stuck wakelock rate threshold (exit code 6 if breached) |
Example
gpc vitals memory --app com.example.myapp --days 30vitals lmk
Query low-memory killer (LMK) rate metrics. Tracks how often the system kills your app under memory pressure. Enforces DAILY aggregation as required by the API.
Behavior change in v0.9.58 (corrected in v0.9.59)
Before v0.9.58, vitals lmk was a silent alias of vitals memory and returned stuck-background-wakelock data, not LMK data. v0.9.58 attempted to fix this but shipped with the wrong endpoint identifier (lowMemoryKillerRateMetricSet, which doesn't exist) and 404'd. v0.9.59 is the working fix: it queries lmkRateMetricSet and returns the correct LMK metrics (userPerceivedLmkRate, weighted variants, distinctUsers). If you were building dashboards or CI thresholds against pre-v0.9.59 output, expect different values.
Synopsis
gpc vitals lmk [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | Group by dimension | ||
--days | number | Number of days to query | ||
--threshold | number | LMK rate threshold (exit code 6 if breached) |
Example
gpc vitals lmk --app com.example.myapp --days 30 --threshold 0.01vitals error-count
Query error report count metrics. Broken down by reportType dimension (auto-included).
Synopsis
gpc vitals error-count [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dim | string | reportType | Group by dimension | |
--days | number | Number of days to query | ||
--threshold | number | Error report count threshold (exit code 6 if breached) |
Example
gpc vitals error-count --app com.example.myapp --days 7vitals errors search
Search error issues and reports across all error types.
Synopsis
gpc vitals errors search [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--filter | string | Filter expression | ||
--max | number | Maximum results |
Example
Search all errors:
gpc vitals errors search --app com.example.myappSearch with filter and limit:
gpc vitals errors search \
--app com.example.myapp \
--filter "NullPointerException" \
--max 202
3
4
vitals compare
Compare a vitals metric between the current period and the previous period of the same length.
Synopsis
gpc vitals compare <metric> [options]The <metric> argument accepts: crashes, anr, startup, rendering, battery, memory, wakeup, lmk, error-count.
Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--days | number | 7 | Period length in days |
Example
Compare crash rate this week vs last week:
gpc vitals compare crashes --app com.example.myapp --days 7{
"metric": "crashRateMetricSet",
"currentPeriod": { "start": "2026-03-02", "end": "2026-03-09", "value": 1.2 },
"previousPeriod": { "start": "2026-02-23", "end": "2026-03-02", "value": 1.5 },
"change": -0.3,
"changePercent": -20.0
}2
3
4
5
6
7
Compare ANR rate over 30 days:
gpc vitals compare anr --app com.example.myapp --days 30Related
- anomalies -- Automatic anomaly detection across all vitals metrics
- reviews -- User feedback monitoring
- CI/CD Vitals Gates -- Automated quality gates
- watch -- Real-time rollout monitoring with multi-metric vitals and auto-actions
- Exit Codes -- Exit code 6 for threshold breach
