Diagnostic Tool

Controller Battery Health Check — live level + degradation tracking

A controller battery health check reads the current charge level from your gamepad and, when used across multiple visits, builds a picture of how that battery is degrading over time — the way lithium-ion cells lose capacity after hundreds of charge cycles. Our free browser-based tool connects to your controller over Bluetooth using the standard GATT Battery Service profile to read the current level, then saves the reading locally so the next time you check, the page shows your battery trend across weeks and months. PS5 DualSense exposes battery cleanly; Xbox Series controllers over Bluetooth and some 8BitDo models also work; Switch Pro Controller does not expose battery over standard Bluetooth and cannot be measured in-browser. The live measurement requires Chrome or Edge (Web Bluetooth is not available in Safari or Firefox); the rest of the page works everywhere. No download required.

Loading diagnostic…
How It Works

How the battery check works

    01

    Pair your controller with the operating system first

    The browser cannot initiate Bluetooth pairing — that happens at the OS level. Pair your controller with macOS, Windows, or Android the normal way (System Settings → Bluetooth on macOS and Windows; Settings → Connected devices on Android). Once paired and connected, the browser can read it.

    02

    Click Connect — your browser opens a device picker

    On the page, click the Connect Controller button. The browser shows a native picker dialog listing nearby Bluetooth devices that expose the standard battery service. Pick your controller from the list. The first time you do this, the browser asks for permission to access the device.

    03

    The browser reads the battery characteristic over GATT

    GATT (Generic Attribute Profile) is the Bluetooth Low Energy data model. The standard battery service exposes a single characteristic — the current battery level as a 0-100 integer. The page reads it once on connection and displays the level immediately along with a colored ring indicating charge state (green above 75 percent, cyan 50-75, amber 25-50, rose below 25).

    04

    Every reading is saved to your browser

    Each successful reading is persisted to localStorage with a timestamp and the controller identifier. Multiple controllers track separately — your DualSense and your Xbox controller each have their own history. Up to 100 readings per controller are kept; older ones rotate out. Readings within 5 minutes of each other are deduplicated to prevent accidental noise.

    05

    After 5 full-charge readings, the health trend appears

    The interesting answer is not the current level — your OS battery widget tells you that. The interesting answer is whether your battery is losing capacity over time. Once you have 5 or more readings at 90 percent or higher (i.e., near-full charges) spanning at least 7 days, the page applies linear regression to those points and reports the trend in percent-per-month. Healthy lithium-ion cells decline gradually over years; accelerated decline (more than 2-3 percent per month sustained) signals the battery is approaching replacement.

Reading Your Results

What the battery levels

The current battery level is unambiguous (87 percent is 87 percent). What matters more is the trend across many readings — whether your battery still hits full charge or has started declining, and how fast.

ReadingClassificationWhat It Tells You
75 to 100 percentExcellent chargeReady for an extended session. If your battery consistently reaches 95+ percent on full charge over many months, your cell is healthy. If full charges peak at 85 or 90 percent on a controller that used to reach 100, you have measurable capacity loss.
50 to 74 percentGood chargeComfortable for a typical session. Most controllers report 40-60 hours of use at 100 percent so this range still has substantial runtime ahead.
25 to 49 percentCharge soonPlan to plug in before the next long session. Lithium-ion cells last longer when kept above 20 percent and below 80 percent most of the time, so periodic top-ups beat full-discharge cycles.
Under 25 percentCritical — charge nowImminent shutoff range. Repeatedly discharging to below 10 percent accelerates capacity loss noticeably, so plugging in at 25 percent is better than waiting until the controller dies.
Decline trendCapacity loss in percent per monthAfter 5+ full-charge readings spanning 7+ days, the tool reports degradation as a slope (percent per month). Under 0.5 percent per month is normal for a healthy battery. 1-2 percent per month suggests moderate aging. Over 2 percent per month sustained suggests the cell is approaching the end of its useful life — typically 18 months to 3 years for controller-class lithium-ion under normal use.
Frequently Asked

Battery Health questions

Because reading a Bluetooth device from a webpage requires the Web Bluetooth API, which only Chromium-based browsers implement. Safari and Firefox have not shipped Web Bluetooth for security and privacy reasons — those browsers deliberately limit what websites can do with paired hardware. The educational content on this page works in every browser; only the live measurement tool requires Chrome or Edge. Mobile Chrome on Android also supports it; iOS Safari does not.

Three common causes. First, the controller must be paired with your operating system before the browser can see it — Web Bluetooth reads already-paired devices, it does not initiate pairing. Second, the controller must be powered on and currently connected, not just paired-but-off. Third, some operating systems (particularly macOS) require the device to be in an active discoverable state. If the picker is empty, try briefly putting the controller into pairing mode again (press and hold the Share or Sync button until the light blinks rapidly), then re-open the picker.

Both, but at different timescales. The current battery level is read instantly on connection. Battery health — capacity loss over time — emerges from many readings across weeks and months. After your fifth full-charge reading (90 percent or higher) spanning at least 7 days, the tool calculates the trend and reports degradation in percent per month. Below the 5/7-day threshold, the tool is explicit that it does not yet have enough data to make a health claim.

It is exactly as accurate as the value your controller reports — which is to say, approximate. Controllers report battery level as a single 0-100 integer derived from voltage measurements, not from direct measurement of remaining capacity. Voltage-to-capacity translation is non-linear at the ends of the discharge curve and noisy in the middle, so individual readings can vary by 5-10 percent for the same actual state of charge. This is why the tool emphasizes trends across many readings rather than treating any single number as precise.

No, the Switch Pro Controller does not expose battery information through the standard Bluetooth GATT Battery Service. Nintendo uses a proprietary protocol for battery and other peripheral data, which standard Web Bluetooth cannot access. Check the battery on the Switch home screen instead — it appears next to each connected controller. This is a limitation of the controller, not the tool.

Lithium-ion batteries lose a small percentage of their maximum capacity with each charge cycle — gradually at first (over years), accelerating as they age. A battery that originally held 1000 mAh might hold 850 mAh after 500 cycles, 700 mAh after 1000 cycles, 500 mAh after the cell is genuinely worn out. Controllers report capacity as a percentage of current maximum, not of original maximum, so a "fully charged" reading of 100 percent on a degraded battery means full of less-than-original capacity. The trend over months reveals this loss; a single reading cannot.

No, in any meaningful sense. The tool reads the battery characteristic once per connection. The Bluetooth radio stays active during normal use whether you read battery or not, so the marginal power cost of one read is negligible. Reading repeatedly with the Refresh button does consume small amounts of power, but you would have to refresh hundreds of times to drain even a single percent.

The history is in your current browser's localStorage, so switching browsers or computers means starting fresh. A future version (Phase 2 of GPADLAB) will support optional cloud-synced history through the Controller Passport feature — a permanent per-controller URL that follows you across devices. For now, the longitudinal tracking is locked to the browser you measure with, so use the same one consistently for the best long-term picture.

Sources & Methodology

How we measure battery health

Live measurement uses Web Bluetooth to connect to a paired controller and read the GATT Battery Service characteristic (0x180F service, 0x2A19 level characteristic per the Bluetooth SIG specification). The value is a single unsigned 8-bit integer representing the current charge as a percentage. Each reading is timestamped and persisted to localStorage keyed by the browser-generated device.id (stable across sessions for the same controller). Duplicate readings within 5 minutes are filtered to prevent accidental noise. Health trend analysis runs only when 5 or more readings at 90 percent or higher have been collected spanning at least 7 days — below this threshold, individual reading noise (typically 5-10 percent on controller-reported values) overwhelms any genuine signal. With sufficient data, linear regression on the full-charge subset yields the degradation slope, reported in percent-per-month. Battery health is fundamentally a longitudinal metric; a single reading cannot indicate health, only state of charge. The tool is explicit about this limit in the UI. Methodology published by GPADLAB Engineering.

Read the methodology

Run the full Controller Health Score

This test is one of six diagnostics in the composite score. See how your controller stacks up overall.

Run the Benchmark