Skip to content
BattGrade
Public methodology

How BattGrade calculates State of Health

Version 4.3 · Last updated 4 October 2026

1. Overview

BattGrade issues battery health certificates for electric vehicles. This document explains, in plain terms, how a State of Health (SoH) score is produced, from the raw data we read out of a vehicle to the letter grade printed on a certificate. We publish it so that anyone who reads a certificate can see how its result was produced.

In short: the app reads the vehicle's battery management system over OBD2 with read-only requests, our server recomputes the result from that raw data, and the certificate states the SoH, the method behind it and its uncertainty band, and records any warning flags.

2. What State of Health means

State of Health is the usable energy or capacity of the battery today, expressed as a percentage of what the same battery variant offered when new. The reference is the exact variant fitted to the car, such as a specific pack size, not an average for the model.

The certificate shows SoH rounded to 0.1 percentage points and never above 100%. Some young packs report slightly more than their nominal value; the certificate then shows 100% and records a flag noting that the raw value was higher.

3. Data we read

The BattGrade app connects to a Bluetooth OBD2 adapter plugged into the vehicle's diagnostic port and reads the values exposed by the Battery Management System (BMS) and related control units. What is available depends on the model. Typically:

  • The SoH reported by the BMS, the state of charge and, where available, the remaining or full-charge energy and the capacity in amp-hours
  • Individual cell voltages and battery module temperatures
  • The insulation resistance of the high-voltage system
  • Lifetime energy counters and charge counts, where the vehicle stores them
  • Vehicle identity (VIN), odometer and model year

Every request sent to the vehicle and every response received is kept with the test as raw data. Our server uses this raw data to recompute the result (section 9).

4. Test conditions

The vehicle must be awake, with the ignition on or in READY mode depending on the model. A sleeping vehicle returns no battery data, and the test stops without a result.

The test uses read-only diagnostic requests only. The app sends standard OBD2 requests (modes 01 and 09), manufacturer data reads (services 21 and 22) and one identification read that gives the VIN on some Hyundai and Kia models, and blocks any other request before it reaches the adapter. It does not write to the vehicle, clear fault codes or reset any control unit, and it never writes to the adapter's stored configuration.

5. Methods and uncertainty

Depending on what the vehicle exposes, SoH is obtained with one of three methods. The certificate names the method used and gives an uncertainty band in percentage points (±). The band depends on the method and on the vehicle.

  • Energy-based: the full-charge energy estimated from BMS data, divided by the usable energy of the same variant when new. Used only when the state of charge and the pack temperature allow a reliable estimate.
  • Capacity-based: the present capacity in amp-hours, divided by the capacity of the same variant when new.
  • BMS-reported: the SoH value reported by the battery management system, used as it is.

When more than one method is available, energy-based is preferred, then capacity-based, then BMS-reported. If the BMS value and an energy-based or capacity-based value differ by more than 5 points, a flag is recorded, the grade is based on the lower of the two and the uncertainty band widens by 2 points.

6. Normalization per make, model and variant

Manufacturers store battery data in different places and formats. For each supported vehicle family we maintain a decoder and a table of battery variants with their reference values when new: usable and gross energy, capacity in amp-hours, number of cells in series and cell chemistry. This is how a score means the same thing on a Hyundai, a Nissan and a Renault.

The variant is identified from the vehicle's own responses, such as the number of cells or the reported capacity, and the model year is only used to break a tie. If the variant cannot be determined, the energy-based and capacity-based methods are not used and a flag is recorded. Where the reference value for a new pack is itself an estimate, a flag says so.

7. Checks and flags

Alongside SoH, the result includes checks that can reveal problems a single percentage hides. Each check runs only when the vehicle provides the data it needs. The results are shown on the certificate and do not change the grade by themselves.

  • Cell voltage spread: the gap between the highest and the lowest cell voltage. Above 30 mV it is marked for attention, above 50 mV as poor. LFP batteries have a flat voltage curve, so their spread is only judged at a very high or very low state of charge.
  • Temperature spread: the gap between the highest and the lowest battery temperature reading. Above 5 °C it is a warning, above 8 °C it is marked as high.
  • Insulation: the insulation resistance of the high-voltage system relative to its voltage. Below 500 Ω/V it is a warning, below 100 Ω/V a failure, following UN Regulation No. 100.
  • Signs of a BMS reset: a reported SoH more than 5 points above the capacity-based value, or a near-new SoH on a car whose lifetime discharged energy is too low for its mileage. Both can follow a BMS reset or a pack replacement.

8. Grades

The grade comes strictly from SoH rounded to 0.1, with the same bands for every make:

  • A: 85% and above
  • B: 70% to 84.9%
  • C: 55% to 69.9%
  • D: 40% to 54.9%
  • F: below 40%

Grades are derived from the score and are never assigned by hand.

9. Recomputation on our server

The app shows a result on the spot, but it cannot set the score on a certificate. It sends the raw data with each test, and our server runs the same decoding and scoring code on that raw data. The certificate is issued from the server's result and readings. If the result or the readings sent by the app do not match, no certificate is issued.

Tests run in the app's demo mode use synthetic data and can never become certificates.

10. Validity

A certificate is valid for 6 months from the date of issue. After that it can still be verified, but it is shown as expired. An issuer can revoke a certificate, for example after a mistake; the verification page then shows it as revoked.

BattGrade can also revoke a certificate, for example when it was issued from false data or in breach of our Terms of Service.

11. Integrity and verification

When a certificate is issued, we compute a SHA-256 hash over a canonical form of its public data (the vehicle, the result, the readings, a hash of the raw data and the issuer) and sign it with an ECDSA P-256 key. Customer details are not part of the signed data.

The verification page recomputes the hash from the stored data and checks the signature every time a certificate is opened. Our public keys are published at /api/certificates/keys, so anyone can check a signature independently.

The signature proves that the certificate's public data has not changed since it was issued. It is not a qualified electronic signature or seal under the EU eIDAS Regulation (Regulation (EU) No 910/2014).

12. What BattGrade is, and what it is not

The score on a certificate is calculated and signed by BattGrade's server from the raw data read from the vehicle. Nobody can type it in or change it, neither the inspector nor the seller, and the certificate shows who ran the test.

BattGrade is a private company. It is not a public authority and not an accredited test laboratory, and it is not a party to any sale. Inspectors are independent businesses that use BattGrade to issue certificates; BattGrade does not check their qualifications or the licence numbers they enter.

13. Limits

A certificate is useful because it is precise about what it measured. It is just as important to know what it does not show:

  • It is a snapshot of the data read on the test date. The battery keeps ageing after that.
  • The result depends on the values reported by the battery management system. BattGrade cannot measure the cells directly and cannot detect every manipulation of those values.
  • There is no physical charge or discharge test. The energy-based and capacity-based methods use the estimates stored by the BMS.
  • Each check runs only when the vehicle exposes the data it needs. A certificate without a check result says nothing about that check.
  • Some reference values for new packs are estimates. A flag on the certificate says so.
  • The VIN is read from the vehicle when the vehicle reports it; otherwise the inspector types it, and the certificate says so. The odometer reading is entered by the inspector.

14. Versioning

Every certificate is stamped with the algorithm version used to produce it. When the methodology changes materially, we publish a new version here and preserve prior versions so any historical certificate can always be interpreted against the rules in force when it was issued.

Changes in 4.3: our server now recomputes the result of every certificate issued from the app using the raw vehicle data; each certificate names its method and uncertainty band; reference values are set per battery variant; all five grade bands are published; four checks are shown on the certificate; and this document now covers test conditions, validity and signatures.