Skip to main content
zerologszerologs
Back to Learn Hub
Buying guide

Buying a used Zero: what the logs prove

A used Zero writes down more about itself than any petrol motorcycle ever has, and less than a buyer hopes. This page separates the two: the four condition checks this site publishes from a bike’s own logs — each one a distance from a limit Zero itself states in its own manuals — and the things a log has never recorded at any mileage. It also explains, with the measurement that forced it, why the whole index is withheld rather than averaged whenever the battery check cannot answer: a mean over the checks that happened to work pays a seller for the ones that did not.

Last updated: September 7, 2026
~16 min read4 checks · every limit Zero’s own · both ends published

This is not an inspection, and not a valuation. It explains what a motorcycle’s own logs can show, across the months those logs cover. Nobody here has seen the bike: brakes, tyres, bearings, suspension, the belt, crash damage and corrosion appear in no log at any mileage. There is no published book value for a used Zero to compare any of this with — J.D. Power declines to issue one — and that absence is a large part of why this page exists rather than a reason to trust it further.

TL;DR

  • Zero’s own warranty is the reason this works at all. It replaces a pack that "exhibits a nominal storage capacity reduction of greater than 20% of the published nominal capacity, as measured by an authorized Zero dealer", and it names the measurement: "a battery management system log data extraction". That is what a log file from the bike is. The capacity clause is identical in all 38 owner manuals we hold; the sentence naming the log extraction is in 35 of them — Zero’s three newest EU manuals (LS1, XB, XE) stop at "as measured by an authorized Zero dealer". So the threshold a buyer should care about is published by the manufacturer rather than invented by us.
  • The condition index is 4 checks and each one measures a distance from a figure Zero publishes: battery health against the 80% warranty line, charge discipline against the onboard charger rating on the specification sheet, thermal exposure between the 50 °C at which the BMS stops allowing charging and the 60 °C at which it turns the power controller off. Every score states the value that scores 100 and the value that scores 0, so a sceptical reader can reproduce it on paper.
  • The fourth check never scores, for anybody, and it is the most useful thing on the page. Isolation — whether the high-voltage system is leaking to the frame — has no published limit: across all 46 Zero manuals we hold, 38 owner and 8 service, the word "ohm" does not appear once in any spelling. Zero names the fault as dash codes 20, 28 and 29 and publishes no resistance at which any of them fires. So the check is published as absent with that search written beside it, rather than graded against somebody else’s number.
  • No battery health, no index. The rule was forced by a measurement rather than argued: on one real motorcycle the three checks that answered scored 30, 88, 88 and the index read 69. Withhold the battery check — which happens when the pack size on file was typed by hand, a protection for the buyer — and a mean over what remains reads 88. The safeguard handed the seller 19 points, because dropping the lowest number raises an average. Today the index is withheld instead, and the other checks still publish.
  • Coverage is not a caption above the verdict: it decides which checks exist. It is counted in months that actually contain data, never in the span between the first and the last date — Zero downloads are cumulative, so successive files merge into one island and a span measures how long the motorcycle has existed. Measured across production on 2026-09-05, those two quantities differ by a median factor of 10.2, and one bike showed 886 days of span over 13 days of data.
  • More coverage can lower the verdict, and that has to be true or the whole thing becomes a game. Two years of history can reveal forty cold fast charges that four months would have hidden. Coverage raises confidence; the score moves in both directions. The one lever against a seller who uploads the flattering file is that coverage is printed at the top: a report covering four months of a seven-year-old motorcycle looks as thin as it is.
  • Coverage cannot be bought back later. Zero’s logs are a ring buffer and the app’s exports are bounded in time, so somebody selling today cannot go and fetch the history of 2019. A report with two years behind it means that person has been logging for two years. That is the good news for anybody who starts now and the bad news for anybody starting the week before a sale.
  • What no log sees is the same list at 500 km and at 50,000: brakes, tyres, bearings, suspension, the belt, crash damage, corrosion, water that has got in but has not yet tripped anything, and every noise the rider hears. A motorcycle can sit at the top of all four checks and need a fork rebuild. The index is a record of how a pack has been kept, not an inspection, and the page says so in its own section rather than in a footnote.

Two questions, and only one of them is in the file

Buying a used electric motorcycle splits cleanly into two questions, and confusing them is what makes the whole exercise feel unknowable. The first is: how has the expensive part been treated? That question has an answer in the bike’s own memory, and it is the one this site can help with. The second is: what state is the rest of the motorcycle in? That question has never had an answer in a log file, on any electric vehicle, and pretending otherwise is where a buying guide starts doing harm.

The main board and the battery management system write a running record: charge sessions with their power and their duration, pack temperatures, cell voltages, faults with a timestamp, the odometer. Pull that file and you are reading the same source a dealer reads. Zero says as much itself — the warranty clause below names a "battery management system log data extraction" as the way a pack’s capacity is established.

Everything mechanical is silent. There is no sensor on a brake pad, a tyre, a wheel bearing, a fork seal or a drive belt, so none of them appears in a log at any mileage. Neither does a drop, a bent frame, a cracked fairing or the corrosion under a bracket. A motorcycle that has been dropped writes exactly what one that has not writes.

  • Brakes, tyres, wheel bearings, suspension and the drive belt. None of them is instrumented, so none of them appears in a log at any mileage.
  • Crash damage, a bent frame, a cracked fairing, corrosion. A motorcycle that has been dropped logs exactly what one that has not logs.
  • Water that has got in but has not yet tripped anything. An isolation fault appears when the resistance has already fallen; the wet week before it does not appear at all.
  • Anything the rider hears or feels — a knock, a vibration, a soft lever, a notchy steering head. The bike records none of it.
  • Work done, or work skipped. Service history, recalls and repairs live on paper and at a dealer, never in the bike's own memory.

The one thing this site can say that a general buying guide cannot

A generic used-EV checklist can tell you to ask for the battery health. Only the file can tell you whether the number you were given is the one the pack measures — and whether the pack was measured at all, or whether somebody typed its size in by hand.

The condition index: 4 checks, each against a published limit

The index is a single number out of 100, and it is the mean of the checks that could be answered — published with that count attached, always, in the same sentence: "82 / 100 over 3 of the 4 checks this motorcycle allows". A reader who quotes the score has quoted the coverage with it.

One rule holds the whole thing up: every check measures a distance from a limit Zero itself publishes, and every check declares the value that scores 100 and the value that scores 0. Nothing is a percentile against our own fleet. Nothing is a weighted blend of opinions. There is one curve — a straight line between the two declared ends, clamped at both — because a reader with a calculator has to be able to reproduce the number.

That rule is not aesthetic. This project has already shipped a health score that graded how a pack behaves — balance, temperatures, deep discharges — and never asked how much of it was left. It printed "97 Excellent" three centimetres above the same page’s own 70% state of health. Every step of its arithmetic was correct. What it lacked was a denominator anybody could check.

Score, and the measured value that earns it
score 050100
Battery health
state of health
60%80%100%

The mark above sits at score 50: 80% state of health, the capacity at which Zero replaces a pack. It is not a zero.

Charge discipline
charges within the rating
0%50%100%
Thermal exposure
peak pack temperature
60 °C55 °C50 °C
Isolation
no published limit

Zero publishes no limit — this check never scores, on any motorcycle

One score axis, four checks, and the measured value that earns each score printed underneath. Two of the scales run the way a reader expects and the thermal one runs backwards — cooler is better — which is what a declared pair of ends makes visible. The fourth lane is empty because Zero publishes no isolation limit, and an empty lane is the honest drawing of that: the alternative is a scale anchored on somebody else’s number.
The 4 checks, what each one measures, and where its limit comes from
CheckMeasuredScores 100 atScores 0 at
Battery healthState of health: the energy the pack measures now, over the energy it held when new100% of the energy this pack held when new60% of the energy this pack held when new
Charge disciplineThe share of charges we could place that ran at or below the onboard charger rating Zero publishes for that model year100% of placed charges within the onboard rating0% of placed charges within the onboard rating
Thermal exposureThe hottest the pack has been recorded on more than one occasion, read from the pack sensor the motorcycle wrote down50 °C at the pack60 °C at the pack
IsolationNothing, on any motorcycle. There is no published limit to measure a distance fromnever scoresnever scores

The full rubric — the source of every limit, and the reasons a check can be absent — is rendered further down this page, server-side, so it is readable with JavaScript off.

A check that cannot be computed is absent, and is never scored 0

Zero on a scale that runs to 100 is the worst possible motorcycle. "The logs do not carry this" is not a claim about the motorcycle at all. Every absent check publishes an English reason a buyer can act on, and it still publishes what the limit would have been — that part is a fact about Zero rather than about this bike.

No battery health, no index — and the measurement that forced it

The first build of this index averaged whatever could be scored. That is the obvious design, and it is wrong in a way that only shows up when you point it at a real motorcycle owned by somebody with an incentive.

On one bike in this fleet the three checks that answered scored 30, 88, 88, and the index read 69 over 3 of the 4 checks. The pack size on file for that motorcycle is a field its owner can type. There is a rule that exists to protect the buyer from exactly that: when the size on file is not the one the VIN decodes to, state of health is withheld, because state of health is a measured energy divided by that size and a value computed from a declared input stays declared however much arithmetic sits on top.

Withhold it, and a mean over the checks that remain reads 88. The safeguard handed the seller 19 points, because dropping the lowest number raises an average. The protection arrived through the door marked "safety" and walked out with a better score.

It cannot be fixed by weighting. Any average over a varying subset does this: whatever is missing is implicitly assigned the mean of what remains, which on a document a seller publishes is the most flattering assumption available. So the battery check is decisive. Without it there is no index — and the sentence that replaces the number says which check was missing and why.

The other checks are unaffected and still publish. Only the single headline is withheld. And there is a floor underneath all of it: below 2 answered checks there is no index either, because a mean of one value is that value wearing a different name — and two motorcycles both reading 82 might have scored on different single checks, which is the opposite of what an index is for.

The same motorcycleIndex out of 100
Battery check answered69
mean of 30, 88, 88
Battery check withheld — old rule88
mean of the 2 that remain
Battery check withheld — today
no mean is taken at all

withheld, with the reason printed in its place

050100

Dropping the lowest of three scores raised the mean by 19 points — on a document its seller publishes.

The hatched bar is the one that is never published. It is what a mean over “the checks that could be scored” hands back when the decisive check is missing, and the gap between it and the solid bar is the reward a seller collects for the report being less complete. No weighting fixes it: every average over a varying subset assigns the missing check the mean of what remains.

What this means if you are reading somebody else’s report

A report with no index and a stated reason is more trustworthy than a report with a high index and three checks. The missing number is a claim about the evidence, and it is the one place where a seller cannot improve the outcome by giving you less.

Battery health, against Zero’s own 80%

State of health is the energy the pack measures now over the energy it held when new. It survives scrutiny for one reason: both of those are real quantities somebody published, so the ratio can be checked rather than believed.

The limit is Zero’s. The warranty section of the owner manual says the company will repair or replace a pack "that exhibits a nominal storage capacity reduction of greater than 20% of the published nominal capacity, as measured by an authorized Zero dealer", and one sentence later names the measurement as "a battery management system log data extraction". The capacity clause is word for word in all 38 owner manuals in our corpus and in none of the 8 service manuals, which carry no warranty section at all. The sentence naming the log extraction is in 35 of the 38: it is absent from LS1, XB and XE, Zero’s newest EU manuals, which end the paragraph one sentence earlier. Those three also carry the shorter warranty of the light-EV line, so the whole passage is worth re-reading rather than assumed if the motorcycle in front of you is one of them.

The 80exactly 80% still delivers four fifths of its original range, which on a seven-year-old bike is an ordinary motorcycle rather than a broken one. Scoring 0 there would flatten precisely the older, cheaper bikes a buyer is most often looking at, and stop the check discriminating between a tired pack and a dead one.

The zero end follows from the two anchors rather than from an opinion: the straight line through 100% and through 8060%. It is derived in code so that moving either anchor moves it too, and it is never presented as a Zero figure, because it is not one.

The two denominators had to be checked before any of this was legitimate, because Zero’s terminology is the reverse of this application’s. The manual calls 6.3 kWh "Nominal Capacity" and 7.2 kWh "Maximum Capacity"; this site calls those usable and nominal. The usable-when-new figure here is the badge times 0.88, and against the manuals’ own Nominal rows that lands within 0.94% on every pack checked. The state of health published here sits on the warranty’s own denominator.

  • State of health needs at least 4 usable charges out of the bike’s own logs. Fewer than that and the check declines rather than estimating.
  • Gen3 main-board logs carry no battery current channel at all, so on many of the newer bikes there is no measurable charge energy and therefore no state of health. That is a fact about the log format, and it is stated as one.
  • It describes the pack that was fitted while those logs were recorded. A pack replaced since is a different pack, and the report dates it rather than blending the two.
  • The warranty threshold is a repair trigger, not a condition grade. A pack below it may still be under warranty and replaceable — which is a reason to ask, not a reason to walk — and a pack above it is not thereby certified.
What a measured state of health scores, and why each row is here
State of healthScoreWhy this row
100%100A pack measuring everything it held when new.
90%75Halfway between as-new and the replacement line.
80%50Zero’s warranty threshold — and the manual calls degradation to here normal and expected.
72.1%30A real pack in this fleet: 8.245 kWh measured against 11.44 kWh usable when new — re-measured 2026-09-07 and unchanged.
60%0Two fifths of the range gone. Below it the score stays at 0 rather than going negative.

The complete worked table, including the two rows that land on an exact half and round up, is rendered further down this page and is the same data both test suites grade the arithmetic against.

A figure typed by hand withholds the whole check

The pack size on a bike’s profile is owner-writable behind nothing but a sanity clamp, and it is the divisor of state of health. On one real motorcycle, measured at a median of 8.245 kWh, the badge decides everything: 11.44 kWh reads 72.1% and retyping the badge as 8.60 kWh reads 95.9% without touching a single log. So when the size on file is not the one the VIN decodes to, this check is absent — and the report publishes neither the ratio nor the two numbers that would reconstruct it.

Charge discipline: exposure, not damage

This check publishes the share of charges we could place that ran at or below the onboard charger rating Zero publishes for that model year. A charge at or below that rating needed no charging hardware Zero did not fit to the motorcycle.

It says nothing about harm, deliberately. High current at low temperature can plate lithium metal on the anode instead of storing it, and that is permanent — but we have not measured that correlation on THESE motorcycles, and a threshold tuned without a positive example is a guess wearing a measurement’s clothes. So the check is a record of how the bike was charged, with the mechanism named beside it, and no weight is shipped ahead of the study that would justify one.

The scored quantity is a share rather than a charge rate, and the reason is a limit on what Zero publishes rather than a preference. A score needs two ends. Zero publishes the onboard rating and no maximum charge rate at all: the rapid-charge field is empty on all 90 owner-manual specification sheets. A proportion needs no invented end — its ends are 0% and 100% — so the one published number does all the work and nothing is made up to anchor the other side.

The charge rate as a fraction of pack size is the better VARIABLE, and it is published beside the score as context that moves nothing. One kilowatt into a small pack is about 0.16C and irrelevant; four kilowatts into the same pack is 0.63C. The same kilowatts are a gentle charge for a large pack and a hard one for a small one. That figure is withheld when the pack size was typed by hand, because the pack is its divisor — and the share is unaffected, since no pack size appears anywhere in a count of sessions over a count of sessions.

What this fleet actually does, which is not what the forums fear

The scenario people worry about — somebody who fast-charges every single time — has no positive examples in our data, and that is worth saying out loud because a criterion tuned for it would fire on nothing real.

Re-measured on production 2026-09-07. Across 260,458 samples carrying a charge current, the 99.9th percentile is 7.39 kW and the 99.99th is 9.92 kW. Nine samples exceed 11.2 kW and exactly three exceed 12 kW, each an isolated singleton on its own motorcycle whose next-highest sample reads 2.56, 3.67 and 7.18 kW. Between 11.61 and 36.28 kW production still contains no sample at all. Of the 5,403 sessions carrying a stored peak, the 5,370 at or below 12 kW end at 11.68 kW with a median of 1.23 kW — and the 33 above it are read separately, for the reason in the box below.

The same query on 2026-08-19 read 246,301 samples, a 99.9th percentile of 7.29 kW and 5,025 sessions at or below 12 kW ending at the same 11.68 kW with a median of 1.18. The shape did not move; the database grew. Both runs are named here because a figure with no date behind it cannot be checked by anybody.

What IS measured, and often, is the other thing. Of 4,764 charging sessions on motorcycles carrying a rating Zero publishes — read outside the one decode route whose stored peak is not a measurement, for the reason in the box below — 2,264 drew more than that rating, and the highest drew 8.72 times it: 11.33 kW against a 1.30 kW nameplate. That is a supplementary charger doing the work, and it is exactly what this check counts. Production, 2026-09-07. An earlier draft of this page read 3,911 here and it was the wrong quantity as well as the wrong number: 3,911 was the count of sessions on a rated motorcycle, not the count of sessions that exceeded the rating.

  • We measure delivered power and pack temperature. We do not measure the QUALITY of a charger: a poor 4 kW unit and a good one look identical here, and a poor one also fails at regulation and termination, which we cannot see.
  • Sessions the classifier declined to place leave both halves of the share and are counted separately, rather than being assumed to be onboard.
  • Below 10 placed charges no percentage is printed at all — a share over three sessions is a sentence about three sessions.

A trap that would have produced 33 false alarms on release day

On the Gen3 main-board route the stored peak charge power is not a measurement: it is the maximum charge current the pack DECLARED it would accept, not what a charger delivered. Re-measured on production 2026-09-07: of the 7,088 charging sessions on record — and today every one of their windows is believable, where a 2026-08-19 run of the same rule had to discard 58 of 6,171 — 33 store a peak above 12 kW, every one of them comes from that route, and not one of the 33 carries an energy figure. Those sessions are set aside whole, and the count of what was set aside is published.

Thermal exposure, between two figures Zero states at the pack

The scale runs from 50 °C, where Zero’s manual says "the BMS will no longer allow charging", to 60 °C, the top of the range the pack "should not be used outside of", where the BMS turns the power controller off and the motorcycle stops being a motorcycle. Both figures are stated at the PACK, and both come out of the manual through a generator that confirms the page in the PDF before publishing it.

If your motorcycle is a 2014 or 2015 model, your own manual says 55 °C rather than 50, and you are not misreading it — Zero changed the figure from 2016. Every motorcycle here is scored against the STRICTEST figure any manual states, which is the lower one, for a reason worth knowing: the model on a report can be corrected by hand by whoever owns the account, and 55 is the flattering end — a 52 °C peak scores 100 against 55 and 80 against 50. Letting the anchor follow a field a seller can type would let them choose their own scale. The cost falls on genuinely old bikes, graded slightly harder than their own manual asks, and it is written here rather than absorbed quietly.

The anchor used to be 43 °C and that was a defect, fixed on 2026-09-06. Zero prints the 43 °C figure in the same paragraph, but attributes it to AMBIENT temperature and to the charger rather than to the pack — while this check reads a pack sensor. It compared a pack reading against an air temperature, and it moved the answer: a 51 °C peak scored 53 on the old anchors and scores 90 on these. The battery check had verified the direction of its own terminology; this one had not.

The published peak is the hottest temperature reached in 2 SEPARATE sessions, which is the second-highest session reading, and the single hottest reading is shown beside it where it moves nothing. A bare maximum over raw telemetry is a defect this codebase has already shipped and paid for: the battery page once headlined 16,546 mV for one cell of a 28-cell pack, from 582 corrupt rows out of 726,902 — measured and fixed on 2026-08-12. The tail here has the same shape: re-measured 2026-09-07 over the 58,090 pack-temperature samples the local log corpus decodes through the binary route, nine sit above 45 °C and six of those are single readings — 46 °C four times, then 47, 48, 51, 53 and 58 once each. Requiring two sessions costs a genuinely hot motorcycle a degree and costs a corrupt frame everything.

Most motorcycles score high here, and the check says so itself rather than letting a high number lift the index quietly. Zero’s thermal envelope is wide and these packs live well inside it: across 59,970 pack readings decoded from real logs, not one reached the 60 °C shutdown, and the maximum was 58 °C. The check earns its place by noticing the one motorcycle that did not.

Those are two different populations two paragraphs apart, and the page owes you the difference rather than a guess. The 58,090 above are what ONE decode route reads out of the binary logs — 41 content-distinct files from about a dozen motorcycles. The 59,970 here is that set plus 1,880 readings from a SECOND and independent route, the PackTemp: h …C, l …C line a serial console prints. Both were measured on 2026-09-07 and both come from the local log corpus rather than from the database, which is why neither carries a fleet denominator. The two routes agree on the thing that matters here: neither reaches 60 °C. An earlier draft published 53,219 and 55,099 from a run whose file selection was never written down; those two totals did not reproduce, and the distribution behind them did, reading for reading.

  • Below 10 rides or charges carrying a pack temperature, the check declines. Measured on production 2026-09-07, split by VIN prefix and never by the generation label: the channel is populated on 24.0% of main-board and 29.7% of battery-board entries from the older prefixes, and on 3.9% of main-board entries from a 538ZF or PAG motorcycle. A perfectly good session can carry no reading. The 1.9% this page used to print for the newer platform came from a field-population snapshot dated 2026-05-10, keyed on the generation label rather than the prefix, whose own header says none of its percentages describes production any more.
  • Below 6 months of data it declines as well: a peak temperature is a summer statistic, and logs that only ever saw February would score a motorcycle 100 for avoiding a heat it was never offered.
  • A reading above the shutdown temperature is discarded rather than scored — Zero’s own statement is what makes it impossible as a measurement — and the count of discarded readings is published so a reader who has seen the raw log knows why this number is lower.
  • Heat is partly climate and only partly care. A bike ridden through Andalusian summers reads hotter than the same bike garaged in Bergen, and neither was looked after better than the other.
  • The cold end is not scored at all. On some decode routes a sub-zero pack temperature cannot be written down, and on two of Zero’s own platforms the operating floor, the storage floor and the cell manufacturer’s floor are all the same -20 °C, which leaves no distance to measure.

Isolation: the check that is absent for everybody

Chassis isolation is whether the high-voltage system is leaking to the frame — the fault a wet week produces and the one nobody can see. It is the fourth check in this index, and it never scores, on any motorcycle. This is the clearest worked example of the rule the whole page rests on: a component can be absent, and its absence is information rather than a gap.

The reason is about Zero, not about your bike. Every other check measures a distance from a number Zero publishes. For isolation there is no such number, and that is a measurement rather than an impression: run pdftotext over all 46 manuals we hold — 38 owner and 8 service — and the word "ohm" appears zero times, in any spelling. So do "megohm", "insulation resistance", "isolation resistance", "insulation test" and "continuity". Zero names the CONDITION, in the troubleshooting table of 22 of those 46 manuals, as dash codes 20 "BMS Low Isolation", 28 "BMS Isolation Fault" and 29 "BMS Isolation Danger". It publishes no resistance at which any of them fires.

There is a widely used figure for a high-voltage traction system — 100 ohms for every volt of pack, which would put the line near 10 kilohms on these motorcycles. It is a general requirement, not this manufacturer’s, and the index does not score against it. The moment one of four spokes is graded against somebody else’s limit, "check each number against what Zero publishes" stops being true of the number a reader actually quotes. The per-bike report publishes the readings against that band with the disclosure attached, which is the right home for a judged-but-not-by-Zero figure.

What a buyer should do with this instead

An isolation fault often clears once the system dries out, so a reading is a moment rather than a state — and a motorcycle with no reading has not been shown to be sound. If a bike has ever written one of these lines, ask the seller what happened and when, and have the high-voltage system checked by somebody qualified before you buy. That is a question for a workshop, not for an index.

What was tried before giving up, so nobody repeats it

The bike writes four different names over the same measurement — Chassis Isolation Event, Low Chassis Isolation, Chassis Isolation Warning and Chassis Isolation DANGER!! — so its own vocabulary looked like a threshold that could be recovered without a manual. Three of the four do not discriminate at all: the same instant is written under several names at once, "Low" is a kilo-ohm rounding written at 99 and 100 kilohms as well, and "Warning" appears at 98,691 ohms, which is healthy by any reading. Only DANGER discriminates, and from one motorcycle it brackets the trigger to somewhere in a twentyfold span. A bracket is not a threshold.

The readings themselves are real and plentiful. Re-scanned on 2026-09-07 and reproducing to the line: 808 raw isolation lines across 105 of the 363 .bin files in the local corpus, 796 carrying a complete "N ohms to cell M", spanning 274 distinct pairs running 5 to 99,929 ohms once the zero sentinel below is set aside. They saturate near 100,000, which is the range of the instrument rather than a health limit. That corpus is a directory of log files on a workstation, not this application’s own database, and the next figure is the other way round — so each one says which.

Two things that would poison this check if anybody automated it

A reading of 0 ohms is a sentinel, not a resistance. Measured on production 2026-09-07, over the 8,950 stored log entries that carry a resistance field — a different and narrower source from the stored log text the platform census in the next subsection is read from, which is why the two carry different denominators — 675 lines read 0, and 36 of the 69 motorcycles whose entries carry a resistance at all have 0 as their minimum. A naive minimum therefore announces a dead short on 36 real motorcycles. And the severity flags the upstream decoder writes are hardcoded at 1 MΩ and 500 kΩ, which is 43 to 98 times the general band: of the 5,345 lines it flags critical, 82.0% read at or above that band, which is to say healthy. The resistance is read and compared here; the flags are not used.

Who could ever answer this check, if a limit appeared tomorrow

Two rows, never one, and labelled by platform — the VIN prefix — rather than by log generation. Re-measured on production 2026-09-07, both rows from the same source in the same query: of 101 motorcycles on the older prefixes, 66 write the isolation vocabulary at all; of the 75 on 538ZF or PAG, 2 do. A single average across those two populations would blend one that mostly answers with one that mostly cannot.

Both counts are FLOORS rather than totals, and the reason is worth carrying: they are read from the stored log text, which is absent on some reports and is held in two different renderings. A motorcycle missing from these counts may simply be one whose text we did not keep.

The two on 538ZF raise an isolation FAULT — "Fault set ISOLATION" and "ISOLATION_WARNING" — without ever printing a number beside it. That is worth knowing in both directions: a Gen3 motorcycle can tell you an isolation fault happened, and it cannot tell you how bad it was. Silence on this platform is therefore not reassurance.

This page previously said that 30 of those motorcycles carry a reading below the general band. That figure is withdrawn: re-measured on 2026-09-07 it did not reproduce, and a number we cannot reproduce has no business on a page that asks a stranger to check its arithmetic.

The denominator itself is a worked example of the correction at the top of this page. Counting instead by the decoder’s own log_generation field gives 92 motorcycles rather than 75, because that field labels S and FX hardware as Gen3 and back again — sometimes both ways on one bike. An earlier draft of this page published 81 in one row and 91 in another, ten lines apart, and both came from that field. Platform is the VIN prefix, and nothing else.

Every count above is deduplicated to distinct events first. Zero log downloads are cumulative: the ring buffer re-emits every earlier event in each later file, so counting lines instead of moments inflates a total by half again. That correction has bitten this project before — 43 "Contactor Welded" lines were 21 events.

The three bikes labelled Gen3 that do write the vocabulary are all on the FX/FXE platform, mislabelled — which is why the rule is keyed on the VIN prefix and never on the generation field. A platform that is not on the measured list is not thereby known to be silent: that third answer is "we have not measured it", and it is a different claim from "no".

Coverage decides which checks exist at all

Coverage is not a caption printed above the verdict. It is what decides which questions can be asked. A single file tells you the state on the days it saw; two years of history tell you how the motorcycle was USED — and it is the use, rather than the state, that explains why two packs of the same age measure differently.

It is counted in months that actually contain data: distinct calendar months carrying at least one log row. Never the span between the first and last date, and never the union of the report windows. Zero downloads are cumulative, so each later file begins at or before where the previous one did, the windows merge into a single island, and their union collapses to "last date minus first date" — which measures how long the motorcycle has existed.

The difference is not academic. Measured across production on 2026-09-05, per bike, the union of report windows reached six months on 140 of 174 bikes, while the median number of days actually carrying data was 43. The ratio between the two has a median of 10.2 and a maximum of 259.6. One motorcycle showed 886 days of span over 13 days of data. A criterion that believed the span would answer a question it has no evidence for.

What each level of coverage makes answerable
Months with dataCoverageWhat becomes answerable
0No logsPractically nothing. Only what you can see and what you can ask.
1 or moreA snapshotThe state on the days we saw: faults inside the window, and state of health if enough usable charges survive the checks.
3 or moreA few monthsA trend that is suggestive rather than conclusive.
6 or moreHalf a year or moreRecent charging and use, and thermal exposure — summer and winter are both present, which is what separates a degrading pack from a cold one.
24 or moreTwo years or moreHow the motorcycle has been used over its life: historic charging, seasonal heat, storage behaviour, and a degradation trend with two points in time rather than one.

Each check declares its own floor in months and its own minimum sample count. Below either one it returns "unresolved" with the floor and the count side by side — never a good score, and never an estimate of how much more would be needed, which would be a guess about somebody’s future uploads.

More coverage can lower the verdict, and it has to be able to

Two years of history can reveal forty cold fast charges that four clean months would have hidden. If deeper coverage could only ever help, sellers would learn to upload the minimum and the scale would become a one-way game. Coverage raises confidence; the score moves in both directions. The counterweight is that coverage is printed at the top of the report, where a thin one looks thin.

Coverage cannot be acquired after the fact — which is a reason to start now

Zero’s logs are a ring buffer and the app’s exports are bounded in time. Somebody selling today cannot go back and fetch 2019. A report with two years behind it means that person has been logging for two years, and no amount of preparation the week before a sale can produce one.

What this report cannot say

This section is mandatory on the per-bike report and it is mandatory here, for the same reason: a clean report is the one a reader is most likely to mistake for a clean motorcycle.

An unanswered check is not a pass. Where a report says nothing about a fault, it means we saw none in the log lines we were given — not that the motorcycle does not have one. Absence of evidence is not the same claim as evidence of absence, and on a cumulative, time-bounded ring buffer the difference is large.

Nothing here is an appraisal, an insurance value or a book value. There is no published book value for a used Zero at all: J.D. Power declines to issue one, stating "Due to limited resale market, we are unable to determine used sales." That absence is a large part of why this exists — and it is also why this page carries no prices. The condition judgement and the money are kept apart on purpose, so that a verdict about a pack cannot quietly become an estimate about a price.

  • Brakes, tyres, wheel bearings, suspension and the drive belt. None of them is instrumented, so none of them appears in a log at any mileage.
  • Crash damage, a bent frame, a cracked fairing, corrosion. A motorcycle that has been dropped logs exactly what one that has not logs.
  • Water that has got in but has not yet tripped anything. An isolation fault appears when the resistance has already fallen; the wet week before it does not appear at all.
  • Anything the rider hears or feels — a knock, a vibration, a soft lever, a notchy steering head. The bike records none of it.
  • Work done, or work skipped. Service history, recalls and repairs live on paper and at a dealer, never in the bike's own memory.

And two more, specific to this index

A motorcycle can sit at 100 on every check that answered and still be a bad buy: no log records a brake pad. And the index describes the pack that was fitted while those logs were written — if it was replaced since, the report should say so and date it, and if it does not, ask.

If you are the one selling

Most people reading this site own the motorcycle rather than shop for one, and the same file works in the other direction. Zero’s warranty clause is adjudicated by "a battery management system log data extraction" — which is precisely the artefact this application produces — so a documented state of health is not a nice extra. It is the thing that moves a price, because it is the only claim in the advertisement that a buyer can check.

The same holds for a defect. A fault documented with its date, declared by the seller, is worth more than the same fault discovered by the buyer three weeks later — and the logs date these things precisely. One owner’s onboard charger stopped answering on a specific day: the bike still charged from an external charger and nothing on the dash said anything, and the log shows 69 wake-ups on the onboard charger up to that date and none in the 68 covered days afterwards, with key-switch power-ons continuing throughout.

What a report like that cannot do is name the broken part, and it should not pretend to. A dead charger, an interrupted signal wire, mains that never reached the charger and a failed input on the main board are observationally identical: when the board is never woken, it writes nothing. Two of those four cost far less than a charger. The honest claim is a fact about the vehicle — "this motorcycle has not used its onboard charger since this date, across this many covered days" — and the cheap checks come first.

  • Start logging before you need to. Coverage takes calendar time and cannot be backfilled, so the file that will sell the bike next year is the one you download this month.
  • A withheld index is not a mark against you. Check whether the pack size on the bike’s profile matches what the VIN decodes to: a hand-typed size withholds state of health, and correcting it back to the real one restores the check.
  • Publish the coverage with the score. A report that says "over 3 of the 4 checks this motorcycle allows" is more persuasive than a bare number, because the buyer can see what was and was not looked at.

The visit: forty minutes, two questions and one file

The file answers the pack. The visit answers everything else, and it is where most of the money actually is on a used motorcycle of any kind. Do them in this order, because the file can be read before you travel.

  1. 1Before you go: ask for a log file and read it here. If the seller cannot produce one, that is an answer too — and the console route works on bikes whose binary export will not read.
  2. 2Check the coverage line first, before any score. Four months of a seven-year-old motorcycle is a snapshot, whatever it says underneath.
  3. 3Read the checks that came back absent and the reason each gives. An absent battery check is the one to ask about, because it is the only one that withholds the whole index.
  4. 4Run the VIN through the manufacturer’s recall lookup yourself. Recalls live at a regulator and at a dealer, never in the bike’s own memory, and a list of campaign numbers on a page like this ages badly while a lookup does not.
  5. 5At the bike: brakes, tyres, bearings, fork seals, the belt, the frame, the fasteners. None of these is in any log at any mileage. Zero publishes wear limits and belt tensions per model year, and they differ between years — read them for that exact model year rather than trusting a single number from a forum.
  6. 6Ride it, if you are allowed to. Every symptom in the list this page opened with — a knock, a whine, a soft lever, a notchy steering head — reaches you through your hands and never through the file.
  7. 7Ask what changed and when: pack replaced, charger replaced, controller replaced, firmware updated. Then check whether the file agrees with the answers.
Take the log file away with you whatever you decide. It is the one part of the inspection you can re-read at home, and the only one that does not depend on remembering what the seller said.

The rubric in full

Every check, its limit, the two ends of its mapping and the reasons it can come back unanswered. There are no weights in this table because there are none in the software: the index is the plain mean of the checks that answered, published with that count beside it, and below 2 answered checks there is no index at all.

A missing check is never scored zero, and it is never quietly dropped either. It publishes its reason, and it still publishes what the limit would have been — that part is a fact about Zero rather than about any particular motorcycle.

Battery health

State of health: the energy the pack measures now, over the energy it held when new

FieldValue
Scores 100 at100% of the energy this pack held when new
Scores 0 at60% of the energy this pack held when new
Where the limit comes fromZero’s Limited Warranty, in the warranty section of the owner manual: Zero repairs or replaces a Power Pack "that exhibits a nominal storage capacity reduction of greater than 20% of the published nominal capacity, as measured by an authorized Zero dealer", and names the measurement one sentence later as "a battery management system log data extraction" — which is what a log file from the bike is. The capacity clause is word for word in all 38 owner manuals we hold, and in none of the 8 service manuals; the sentence naming the log extraction is in 35 of the 38, absent from LS1, XB and XE. which carry no warranty section at all.
Unresolved whenNo charge in the logs could be used to measure the pack — on Gen3 MBB logs, which carry no battery current channel at all, that is the usual cause; fewer than 4 usable charges survived the checks; the pack size could not be pinned down; or the pack size on file was typed by hand, which makes it the divisor of a ratio nobody can check.
What it cannot sayIt describes the pack that was fitted while those logs were recorded. A pack replaced since is a different pack. The warranty threshold is a repair trigger, not a condition grade. A pack below it may still be under warranty and replaceable, which is a reason to ask rather than a reason to walk; a pack above it is not thereby certified. Gen3 main-board logs carry no battery current channel at all, so on many newer bikes there is no measurable charge energy and therefore no state of health. That is a fact about the log format rather than about the pack.

Charge discipline

The share of charges we could place that ran at or below the onboard charger rating Zero publishes for that model year

FieldValue
Scores 100 at100% of placed charges within the onboard rating
Scores 0 at0% of placed charges within the onboard rating
Where the limit comes fromThe onboard charger rating Zero prints on the owner-manual specification sheet for that model year, resolved per year rather than per model because Zero changed the onboard charger mid-life on nearly every model line. A charge at or below that rating needed no charging hardware Zero did not fit to the motorcycle. Zero publishes no maximum charge rate to anchor the other end against, so the scored quantity is a share, whose ends are 0% and 100%, and no threshold is invented.
Unresolved whenNo onboard rating resolves for the motorcycle; fewer than 10 charges could be placed either side of the rating; or the recorded charge power is the pack’s stated acceptance limit rather than a delivered power, which is what Gen3 logs store.
What it cannot sayThis is a record of how the motorcycle was charged, not a verdict on the pack. High current at low temperature can plate lithium metal on the anode instead of storing it, and that is permanent — but we have not measured that correlation on these motorcycles, so nothing here says charging above the rating harmed this pack. We measure delivered power and pack temperature, never the quality of the charger. A poor 4 kW charger and a good one are indistinguishable to us, and a poor one also fails at regulation and termination, which we cannot see. Gen3 main-board logs carry no battery current channel, so this check is rich on Gen2 motorcycles and poor on Gen3. Where it says nothing, that is a fact about the log format rather than a clean record.

Thermal exposure

The hottest the pack has been recorded on more than one occasion, read from the pack sensor the motorcycle wrote down

FieldValue
Scores 100 at50 °C at the pack
Scores 0 at60 °C at the pack
Where the limit comes fromZero’s owner manual for that platform and model year, both figures stated AT THE PACK: "Above a POWER PACK TEMPERATURE of 122°F (50°C), the BMS will no longer allow charging", and the top of the operating range at 60 °C, above which the BMS turns the power controller off. Neither is typed into this application: both are read out of the manual by a generator that confirms the page against the PDF itself before publishing it.
Unresolved whenFewer than 10temperature; fewer than 6 months of data, because the hottest a pack gets is a summer reading; or no Zero manual in our index states both figures for that model and model year.
What it cannot sayThis is a record of the heat the pack has lived through, not a verdict on the pack. Heat ages a lithium cell, but we have not measured that correlation on these motorcycles. Heat is partly climate and only partly care. A motorcycle ridden through Andalusian summers reads hotter than the same motorcycle garaged in Bergen, and neither was looked after better than the other. The coldest the pack has been is not scored. On some decode routes a sub-zero pack temperature cannot be recorded at all, and on two of Zero’s own platforms the operating floor, the storage floor and the cell manufacturer’s floor are the same -20 °C, which leaves no distance to measure. Most motorcycles score high here. Zero’s thermal envelope is wide and these packs live well inside it, so a high score means the pack stayed where Zero says a pack should be — worth reading beside the other checks rather than on its own.

Isolation

Nothing, on any motorcycle. There is no published limit to measure a distance from

FieldValue
Scores 100 atnever scores, on any motorcycle
Scores 0 atnever scores, on any motorcycle
Where the limit comes fromNone, and this field carries the search that established it rather than a limit: across all 46 Zero manuals we hold — 38 owner manuals and 8 service manuals — the word "ohm" does not appear once, in any spelling, and neither do "megohm", "insulation test" or "continuity". Zero names the condition itself, as dash codes 20 "BMS Low Isolation", 28 "BMS Isolation Fault" and 29 "BMS Isolation Danger" in the owner-manual troubleshooting table, and publishes no resistance at which any of them fires.
Unresolved whenAlways, and for a reason about Zero rather than about the motorcycle. On the Gen3 platforms there is a second reason: their logs carry no isolation line at all.
What it cannot sayA widely used figure for a high-voltage traction system is 100 ohms for every volt of pack, which would put the line near 10 kilohms on these motorcycles. It is not Zero’s figure, so this index does not score against it. The per-bike report publishes the readings against that band with the same disclosure, and that is where to read them. A reading of 0 ohms is not a resistance. It is written when there is nothing to report, including on the most severe line in the whole corpus, and a lowest-reading figure that includes it announces a dead short on more than half the motorcycles that carry any reading at all — 36 of 69, measured on production 2026-09-07. Log downloads from these motorcycles are cumulative: every earlier event reappears in each later file, so isolation lines have to be counted once per distinct moment before any of them is quoted. Counting the lines instead inflates the answer by half again. An isolation fault often clears once the system dries out, so a reading is a moment rather than a state — and a motorcycle with no reading has not been shown to be sound. Most log formats carry no isolation line at all.

Try it on your own numbers

Four sliders, no motorcycle. Move them and the index moves; untick one and watch what the index does about it. The battery row is the one to untick first, because it is the only one whose absence takes the whole number with it — and that asymmetry is the reason the score is worth reading rather than a quirk of the implementation.

The condition index, and what happens when a check is missing

Worked example — no motorcycle is being read

76/ 100 over 3 of the 4 checks this motorcycle allows
Battery healthdecisive

State of health: the energy the pack measures now, over the energy it held when new

45 / 100

78% of the energy this pack held when new

0 at 60 · 100 at 100 · measured in % of the energy this pack held when new · 80% is Zero's repair trigger and scores 50

Charge discipline

The share of charges we could place that ran at or below the onboard charger rating Zero publishes for that model year

84 / 100

84% of placed charges stayed within the onboard rating

0 at 0 · 100 at 100 · measured in % of placed charges within the onboard rating

Thermal exposure

The hottest the pack has been recorded on more than one occasion, read from the pack sensor the motorcycle wrote down

100 / 100

46 °C reached in two or more separate sessions

0 at 60 · 100 at 50 · measured in °C at the pack

Isolation

Nothing, on any motorcycle. There is no published limit to measure a distance from

absent

Always, and for a reason about Zero rather than about the motorcycle. On the Gen3 platforms there is a second reason: their logs carry no isolation line at all.

Untick battery health and the index stops existing, while the other rows keep publishing what they measured. That is the rule, and it is the reason this number is worth reading: a score that quietly averaged the checks a seller left answerable would pay them for the ones they did not.

Coverage decides which checks exist at all

Coverage is not a caption printed above a verdict. It decides which questions can be asked, and the honest measure of it is the number of months that carry a log row — never the span from the first date to the last, which on these cumulative downloads overstates the evidence by a median factor of ten.

What the logs let you ask

Drag the coverage

06 months carrying data36
  1. No logs0 months

    Practically nothing. Only what you can see and what you can ask.

  2. A snapshot1+ months

    The state on the days we saw: faults inside the window, and state of health if enough usable charges survive the checks.

  3. A few months3+ months

    A trend that is suggestive rather than conclusive.

  4. Half a year or more6+ months

    Recent charging and use, and thermal exposure — summer and winter are both present, which is what separates a degrading pack from a cold one.

  5. Two years or more24+ months

    How the motorcycle has been used over its life: historic charging, seasonal heat, storage behaviour, and a degradation trend with two points in time rather than one.

The four checks at 6 months

  • Battery healthanswerable, if the motorcycle has enough of it
  • Charge disciplineanswerable, if the motorcycle has enough of it
  • Thermal exposureanswerable, if the motorcycle has enough of it
  • Isolationunresolved on every motorcycle — Zero publishes no limit

More coverage can also LOWER the score. Two years of history can reveal forty fast winter charges. If deeper coverage could only ever help, sellers would learn to upload the minimum and the whole scale would become a one-way game. Coverage raises confidence; the score moves in both directions.

Coverage cannot be acquired afterwards. These logs are a ring buffer and the exports are bounded in time, so somebody selling today cannot go back and fetch their 2019 records. Two years of coverage means that person has been keeping logs for two years — which is the argument for starting today, and the bad news for a seller starting tomorrow.

Why this is measured in months with data, and never in span

Span between first and last log date886 days
Days that actually carry data13 days

One real motorcycle, 4 log files, read from production on 2026-09-05. A download from these bikes re-delivers every older event, so the files overlap into a single island and the span between the first and last date stops being evidence of anything. Across 174 motorcycles the span overstates the data by a median factor of 10.2, and by 259.6 at worst. Anything on this page that says “months” means months that carry a log row.

What the motorcycle’s own log format can answer

Counted per motorcycle, never per file, and split by platform — the VIN prefix — rather than by the generation label a file carries. Counted that way this fleet has 92 Gen3 motorcycles; counted by prefix it has 75, and the difference is S and FX hardware labelled Gen3 and back again. Every row here is one query, one source, one day: re-measured on production 2026-09-07. They are floors, not totals — the stored log text they are read from is absent on some reports.

Does it write isolation readings?

538SD · 538SM · 538SR · 538XX66 of 101
538ZF · PAG2 of 75

The two 538ZF motorcycles that write anything raise an isolation FAULT — "Fault set ISOLATION", "ISOLATION_WARNING" — with no number beside it, so this platform can tell you that an isolation fault happened and not how bad it was. Read the near-zero as a log format that never had the vocabulary, never as a clean isolation record. And even where the lines exist, Zero publishes no resistance at which any of its three isolation dash codes fires, so there is nothing to compare them against.

Does it record a welded contactor?

538SD · 538SM · 538SR · 538XX30 of 101
538ZF · PAG0 of 75

Same shape, same warning. Counted once per distinct moment, because these downloads are cumulative and one event reappears in every later file — an uncorrected count of exactly this family once turned 21 events into 43.

Does it carry battery current?

538SD · 538SM · 538SR · 538XXpresent
538ZF · PAGabsent — 0 of 413,494 entries

Stated rather than counted, because what was measured is the channel and not a census of motorcycles: every main-board entry stored against a 538ZF or PAG VIN, re-counted on production 2026-09-07, and not one of them carries a battery current. This is the single largest gap in the whole product: charge energy, charge rate and everything derived from them are facts about the older platform. On Gen3 the state of health that does get published comes from a different and much scarcer route.

Does it produce a state of health?

538SD · 538SM · 538SR · 538XXwithdrawn
538ZF · PAGwithdrawn

Withdrawn on 2026-09-06 rather than restated. The per-platform counts we held predate the consolidation of the state-of-health selection rule on 2026-09-05, so they describe an older calculation, and a stale count under a confident label is worse than no count. What has not changed is the shape of the answer: it needs charges that moved enough charge to measure, Gen3 accumulates them far more slowly, and where there are too few the figure is withheld rather than estimated.

A blank row is not a clean motorcycle. Read every zero above as “this file could not have told you”, and then ask the question with your eyes and your hands instead. Pack temperature is the exception that proves the rule: it is decoded by more than one route — 59,970 readings across two independent ones, 58,090 from the binary logs and 1,880 from a serial console, neither of which ever reaches the shutdown temperature. That count is from the local log corpus rather than from this database, measured 2026-09-07, which is why it carries no fleet denominator. It is why thermal exposure is the check that reads most widely, and why a motorcycle with nothing else can still answer it.

How it was charged, expressed as a fraction of its own pack

“Charged fast” is not a fact about anything until you divide by the pack. One kilowatt into a small pack and one kilowatt into a large one are different events, and this is the conversion. It moves no score anywhere in this product, and the widget says why.

The same kilowatts, on different motorcycles

Exposure, not damage

A charge rate only means something as a fraction of the pack it is going into. Pick a motorcycle and a charger, and read the fraction.

0.24C3.0 kW into 12.6 kWh usable (Zero's published nominal)

Zero fitted this motorcycle with a 3 kW onboard charger, which is 0.24C. This rate needed no hardware Zero did not fit.

3.0 kW on four different packs

  • Zero FXS 2018 · 6.3 kWh usable0.48C
  • Zero SR 2018 · 12.6 kWh usable0.24C
  • Zero SR/F 2022 · 12.6 kWh usable0.24C
  • Zero DSR/X 2023 · 15.2 kWh usable0.20C

Bars run to 1.00C.

What this fleet actually draws

Charging samples (n = 260,458)

p99.9 7.39 kW
p99.99 9.92 kW
you 3.0

Session peaks (n = 5,370)

median 1.23 kW
highest 11.68 kW
you 3.0

Axis runs to 12 kW. Nine samples of 260,458 sit above 11.2 kW and exactly three above 12 kW, each an isolated singleton on its own motorcycle whose next-highest sample reads 2.56, 3.67 and 7.18 kW. Between 11.61 kW and 36.28 kW production still contains no sample at all. So the scenario this check was built to catch — somebody charging at 12 kW every time — has no positive example in our data at all. What is measured is different and more ordinary: of 4,764 sessions on motorcycles with a rating Zero publishes, read outside the one route whose stored peak is not a measurement, 2,264 drew more than that rating and the highest drew 8.72 times it, which is a supplemental charger and not a fault. Production, 2026-09-07.

At high current and low temperature, lithium can plate out as metal on the anode instead of storing itself in it, and that is permanent. We have not measured that correlation on these motorcycles, so this is a record of use and not a verdict on a pack — it moves no score anywhere in this product. We also measure delivered power and pack temperature, never the quality of the charger: a poor 4 kW charger and a good one look identical to us, and a poor one fails at regulation and termination, which we cannot see. Gen3 logs carry no battery current at all, so this reads rich on older motorcycles and silent on newer ones — and the silence is a fact about the log format, not a clean record.

Check the arithmetic

There is one curve, and it is a straight line between the two declared ends, clamped at both. Take a measured value, take the two ends from the table above, and the score is (value − zeroEnd) / (hundredEnd − zeroEnd) × 100, rounded half up. Rounded HALF UP specifically: a calculator that rounds half to even prints 76 where this prints 77, and on a document whose whole claim is “check this yourself”, disagreeing with the one reader who bothered is worse than being approximate.

The rows below are not illustrations. They are the fixture two test suites grade the software against — one in the browser code, one in the backend — so this table, the page you are reading and the number on a report are the same arithmetic rather than three that happen to agree today. The right-hand column is computed while this page renders.

Worked examples, computed at render time
CheckMeasuredScoreWhy this row
Battery health100%100A pack measuring everything it held when new.
Battery health90%75Halfway between as-new and Zero’s replacement line.
Battery health73%33Lands on 32.5 exactly, and rounds up. A calculator that rounds half to even prints 32 here — the two rules disagree at one point, and this is it.
Battery health80%50Zero’s warranty line. Fifty, because the same manual calls degradation inside the warranty period normal and expected.
Battery health72.1%30A real pack in this fleet: 8.245 kWh measured against 11.44 kWh usable when new. Re-measured through the one capacity rule on 2026-09-07 and unchanged.
Battery health60%0Two fifths of the range gone. Below this the score stays at zero rather than going negative.
Charge discipline100%100Every placed charge ran at or below the rating Zero publishes.
Charge discipline41.2%41The mapping is the identity on a percentage, so this row only checks that nothing was added to it.
Charge discipline76.5%77The other exact half — 153 charges of 200 — and it rounds up too. Half to even would print 76.
Charge discipline0%0Every placed charge ran above the onboard rating. It is a fact about the charging, and this page says twice that it is not a verdict about the pack.
Thermal exposure45 °C100Cooler than the temperature at which the BMS stops allowing charging, so the score sits at its ceiling rather than above it.
Thermal exposure50 °C100Exactly where the BMS stops allowing charging.
Thermal exposure51 °C90One degree past it. The scale is ten points per degree, which is what a ten-degree span between two published figures buys.
Thermal exposure55 °C50Halfway between the two published figures, which is the only place on this scale where the score and the temperature are unrelated by eye.
Thermal exposure60 °C0The temperature at which the BMS turns the power controller off. A reading above it is discarded as a corrupt frame rather than scored as a hot pack.

Both suites read the same table: src/__tests__/condition-rubric.test.ts asserts the browser code reproduces every row, and backend/tests/test_condition_rubric_parity.py asserts the scoring module does too. A number that drifted on either side would fail there rather than being noticed here.

What it is worth

This half never states a value. It states what sellers were asking, with the date, the market and the source, and it states what the expensive part costs to replace. Those two numbers together answer the only question that can write one of these motorcycles off, and neither of them is an appraisal.

There is no book value to check either of them against. J.D. Power declines to publish a used value for these motorcycles on every model year anyone has looked at, because the resale market is too thin to determine one — which is the reason this section exists and also the reason it does not pretend to be more than it is.

What the pack costs, against what the motorcycle asks

Dealer list prices for the replacement part, with the part number, set against the asking prices we recorded for a used example. Checked 2026-08. Asking prices are what people want, not what they get, and every band here rests on a handful of listings.

sr/f 2020–2022 · ITa couple of listings — indicative only

Not drawn. We hold an asking band for this motorcycle in EUR 10,900 – EUR 11,990 and a dealer price for its pack only in USD. Zero publishes no European pack pricing that we could verify, and converting a US list price into euros does not produce a European price — it produces a number with our name on it and nobody else’s. The two halves are printed apart until a live European quote exists.

High-mileage examples. A low-mileage 2022 asks considerably more.

Asking price: Two AutoScout24 / Subito.it listings, both 09/2021 with ~38,000 km. Part: Koup's Cycle Shop (franchised Zero dealer), listed special-order price.

fxs 2016–2021 · ITa couple of listings — indicative only

Not drawn. We hold an asking band for this motorcycle in EUR 2,700 and a dealer price for its pack only in USD. Zero publishes no European pack pricing that we could verify, and converting a US list price into euros does not produce a European price — it produces a number with our name on it and nobody else’s. The two halves are printed apart until a live European quote exists.

ONE listing — a data point, not a band.

Asking price: Single Italian classified listing (Casale Monferrato). Part: Koup's Cycle Shop (franchised Zero dealer, Harrisburg PA), listed special-order price.

sr/f 2020–2022 · USsubstituted part / several listings
USD 0USD 19,224
Replacement ZF14.4 · 46-08227
USD 6,000
Used asking price
USD 8,995 – USD 17,800

The pack is 3467% of what this motorcycle asks. Sealed Gen3 street pack. No partial replacement exists: a cell fault is the whole number. The width is the finding: a 2020 Premium at 300 miles asks $16,499 while a 2022 Premium asks $9,890. Mileage and trim move this more than model year does.

Asking price: CycleTrader and MotoHunt asking prices for 2020-2022 SR/F. Part: Koup's Cycle Shop (franchised Zero dealer), listed special-order price.

Three packs of the 22 in our catalogue have a dealer price we could source: ZF3.6, ZF7.2, ZF14.4. The rest carry no published replacement price anywhere we could check, which includes every large street pack except the ZF14.4. On those, the worst case is unknown rather than affordable — and “unknown” is the answer to take to a dealer before buying, not after.

The list price moved under everybody who already owned one

United States, dollars, one model. In October 2023 Zero cut the list price permanently, which reset the top of the market for every existing owner in a night — before any of their motorcycles had aged a day.

SR/F list price before October 2023USD 23,795
SR/F list price after the cutUSD 19,795
Used SR/F 20202022, askingUSD 8,995USD 17,800

The width is the finding: a 2020 Premium at 300 miles asks $16,499 while a 2022 Premium asks $9,890. Mileage and trim move this more than model year does. Confidence: substituted part / several listings. Source: CycleTrader and MotoHunt asking prices for 2020-2022 SR/F. The trim behind the list price is not recorded in our source, so read the two rows as the same model and not necessarily the same specification.

The European curve is not drawn. We hold a survey summary taken on 2026-08-30 across 34 European listings, and the survey itself is marked for re-verification before publication. The individual listings, with their dates and their addresses, are not committed to this repository, so no point on such a curve could be clicked and checked. A shape with no evidence behind it, on this page in particular, would be worse than no shape.

And no European figure is converted from the American one. The two markets are separate datasets here and no exchange rate appears anywhere on this page. A dollar list price turned into euros is not a European price; it is a number with our name on it and nobody else’s.

The floor is only a floor while the pack is alive. Prices for these motorcycles do stop falling, and it is tempting to read that as a safety net. It is not one: the moment a replacement pack costs more than the motorcycle asks, the machine is worth its parts, and on several of the older models that crossing has already happened. That is the comparison drawn further up this page, and it is the single most useful thing on it.

Where in the band, and what moves it

Asking prices · checked 2026-08

This is not an appraisal, not an insurance value and not a book value. There is no book value for these motorcycles: J.D. Power publishes none, on every model year anyone has checked, because the resale market is too thin to determine one. What follows is what sellers were asking, and where a particular motorcycle argues for sitting inside that.

Market
EUR 10,900 – EUR 11,990a couple of listings — indicative only
lower third
middle third
upper third

With what is ticked below, this motorcycle argues for the lower third of that band. The band itself is what people asked, not what they were paid: the same survey found the same motorcycles re-listed lower weeks later, so an asking price is the top of a conversation.

Source: Two AutoScout24 / Subito.it listings, both 09/2021 with ~38,000 km. High-mileage examples. A low-mileage 2022 asks considerably more.

Distance moves nothing here, and that is the finding. Across 34 European listings surveyed on 2026-08-30, the correlation between distance and asking price on the FX family was −0.11 — which is no relationship at all. These motorcycles are not priced on distance; they are priced on year, on trim and on whether the pack is believed to be sound. That is exactly why a documented pack is the strongest thing a seller can hold, and why the box above changes nothing below it.

What a seller can document

The weights are a declared judgement and not a measurement. Each row carries what it rests on and what would change it, so a reader can disagree with a specific number instead of with the tool.

  • Rests on:
    Zero's own warranty adjudicates a pack claim by "a battery management system log data extraction". A seller holding that document is holding the same artefact the dealer's process recognises, on the one component that can write the motorcycle off.
    Would change it:
    A market survey showing that listings carrying a documented state of health do not ask or achieve more. We have not run one.
  • Rests on:
    Zero's limited warranty "applies to all original owners and any subsequent owners" at no cost, and the pack is the largest single bill on the motorcycle. A buyer is buying the remaining cover with the bike.
    Would change it:
    Any term that ends transferability, or a claim history showing the cover is hard to exercise in practice.
  • Rests on:
    It resets the age of the most expensive component. This application already treats a pack swap as a boundary that invalidates the degradation curve before it and nothing physical after it, because averaging across one produces a state of health for a pack that does not exist.
    Would change it:
    Evidence that replacement packs are supplied as older stock than the motorcycle they go into.
  • Rests on:
    Zero's warranty exclusions bite here: skipped firmware updates are named as an exclusion, so a service trail is warranty evidence and not only tidiness.
    Would change it:
    This is the weakest of the six. Nothing we have measured connects a service record to an asking price on these motorcycles.
  • Rests on:
    Hardware with a list price that stays with the motorcycle, and on a Power Tank it is capacity the badge does not describe.
    Would change it:
    A measured resale premium. A Power Tank is a supplemental pack in the tank recess, so it is also one more thing that can need replacing.
  • Rests on:
    Unlocks bought once and bound to the motorcycle.
    Would change it:
    Whether an unlock survives a change of owner. We have not verified that it does, so this is the least defensible row in the table.
  • Rests on:
    The firmware writes the reason for every power-on, so a motorcycle that stops waking on its own charger while still being switched on by key is a dated, checkable fact rather than an opinion. It is rare — one motorcycle in 69 in our data — which is what makes it informative.
    Would change it:
    Nothing about the direction. But it does not name the broken part: a dead charger, a cut wake wire, no mains at the socket and a failed input on the controller are indistinguishable in the log, and two of those four cost far less than a charger.
Where the model line actually breaks

Six years in which a Zero stopped being the motorcycle it had been the year before. A listing will not tell you which side of one you are on.

  1. 2012The buy-back yearNHTSA campaign 18V215

    Zero recalled the 2012 motorcycles and offered a repurchase or a trade-in. Owners were told to stop riding them and to stop charging them.

    A flat no. Not a bargain and not a project: the manufacturer took these off the road itself, and anything still circulating either refused the buy-back or has no history at all.

  2. 2013Z-Force, and the line before which nothing is supported

    The Z-Force powertrain and pack arrive. Everything before it is a different motorcycle built by the same company.

    Treat pre-2013 as unsupported. Parts, software and dealer familiarity all thin out sharply, and none of the log-based checks on this page were built against those files.

  3. 2017Modules become a monolith

    The removable brick construction gives way to the sealed "long brick" pack on the street models.

    This is the single most expensive difference on the whole page. A modular pack can have one failed section replaced; a monolith cannot, so a cell fault is the whole pack. Check which one you are buying before anything else.

  4. 2019The SR/F generation

    A trellis frame, the ZF75-10 motor, Cypher III, cellular telematics and a Type 2 inlet, arriving across 2019 and 2020.

    A different motorcycle in almost every respect, and the point at which the logs change too: this platform stops writing several of the older diagnostic lines, which is why the table above splits on the platform and not on the year.

  5. 2022Bigger packs, and upgrades you pay for

    The ZF14.4+ and ZF15.6+ packs, plus paid feature unlocks bound to the motorcycle.

    Ask which unlocks are applied and get it in writing. We have not verified that a paid unlock survives a change of owner, so treat it as a question for the dealer rather than as value you have bought.

  6. 2024The S, DS and DSR change platform

    They leave the older SDS platform for FST and FSTX.

    A 2023 Zero S and a 2024 Zero S share the name and very little else. Any advice, any part number and any owner report you read about one may be about the other. Match the model year, not the model.

Frequently asked questions

Can a Zero log tell me the real battery health of a used bike?

Usually, and against Zero’s own threshold rather than ours. State of health here is the energy the pack measures over the energy it held when new, taken from the bike’s own charge sessions, and it needs at least 4 usable charges. Zero replaces a pack that has lost more than 20% of its published nominal capacity, so that is the line the number is read against. There are two common reasons it cannot be produced: the newer main-board logs carry no battery current channel at all, and a pack size typed by hand withholds the ratio because the typed figure is its divisor.

What does a score of 100 on a check actually mean?

That the motorcycle is at or beyond the value the check declares as its 100 — nothing more. Each check publishes both ends of its mapping, so 100 on thermal exposure means the pack has never been recorded above 50 °C on two separate occasions, and 100 on charge discipline means every charge we could place ran at or below the rating Zero publishes. It is not a certification, and it is not a statement about anything outside that check.

Why is the isolation check always empty?

Because Zero publishes no isolation-resistance limit. Across all 46 manuals we hold, the word "ohm" does not appear once in any spelling; Zero names the fault as dash codes 20, 28 and 29 and gives no resistance at which they fire. Every check in this index is a distance from a limit Zero states, so this one has no denominator. The readings themselves are published on the per-bike report against a general high-voltage band, with a note saying the band is not Zero’s. On the Gen3 platforms there is a second reason: their logs never write an isolation line at all.

The report shows no overall score. Is that bad?

It means the battery check could not answer, and it is more honest than the alternative. Averaging the checks that remain would silently assume the motorcycle scores on the missing one as well as it does on the others — on one real bike that assumption was worth 19 points in the seller’s favour. Read the checks that did answer, read the stated reason the battery one did not, and ask about it.

Can a seller game this?

The obvious levers are closed. A hand-typed pack size does not improve the score, it withholds the check that depends on it — and since that check is decisive, it withholds the index. Uploading only the flattering months does not help either, because coverage is printed at the top and every check has a floor below which it declines rather than scoring well. What remains open is the oldest trick of all: showing you a report about a motorcycle and selling you a different one. Check the VIN on the frame.

How many months of logs should I ask for?

Six is where the useful ground starts, because summer and winter are both in it — a pack that measures low in January and a pack that is genuinely degrading look similar over one season. Two years is where the report starts describing how the motorcycle was used rather than what it looks like today. Below one month you are reading a snapshot. And ask early: nobody can generate coverage retroactively.

Does high mileage matter on a used Zero?

Less than it does on a petrol motorcycle, and less than most listings assume. There is no engine, no clutch, no gearbox and no exhaust to wear out. What ages is the pack, and what ages the pack is time, heat and charging habits at least as much as distance. That is why the checks on this page measure those things directly rather than reading the odometer as a proxy for them.

Is this an inspection?

No, and it cannot become one. It is a record of what the motorcycle’s own logs show, across the months those logs cover. We have not seen the bike. Brakes, tyres, bearings, suspension, the belt, crash damage and corrosion appear in no log at any mileage, and neither does anything a rider hears or feels. Have the motorcycle looked at by somebody qualified as well.

Why is the condition index separate from the prices?

Because a condition judgement that names money stops being a condition judgement. The used-vehicle grading standard this rubric borrows from says the same thing in its own rule — a condition grade "does not take into account the mileage… intended only to reflect the overall condition". So the index scores the motorcycle and never the asking price, and the money on this page lives in its own tools, each figure carrying its source, its market, its currency and the date it was observed. Nothing on the index side moves because of a price, and nothing on the price side is presented as a valuation.

Where do these thresholds come from?

Zero’s own manuals, read rather than remembered: the warranty capacity threshold from the warranty section of all 38 owner manuals, the onboard charger rating from the per-model-year specification sheets, and the two temperatures from the platform’s own thermal table, extracted by a generator that confirms each page against the PDF itself. The mappings between those limits and a score are ours, and both ends of every one of them are printed on this page so you can check the arithmetic.

Every threshold on this page is Zero’s and is read out of Zero’s own manuals: the warranty capacity clause from the warranty section, present word for word in all 38 owner manuals in our index and in none of the 8 service manuals; the onboard charger rating from the per-model-year specification sheets; and the two pack temperatures from the platform thermal tables, extracted by `backend/scripts/gen_thermal_limits.py`, which confirms each citation against the PDF itself. The mappings from a limit to a score are ours, and both ends of each are published here and in the machine-readable rubric beside this article. Fleet figures are population statistics measured on this application’s own database on the dates stated next to them, deduplicated to distinct events first because Zero log downloads are cumulative. A handful of figures come from a local corpus of log files instead of from the database — the isolation-line census, the pack-temperature counts — and each one says so where it appears, because a corpus figure has no fleet denominator behind it and must not be read as though it had. The absence of an isolation limit was established by searching all 46 manuals with `pdftotext` on 2026-09-06 and is republished here as a negative result, which is a deliverable rather than a gap.

This is an independent third-party reference, not affiliated with or endorsed by Zero Motorcycles, Inc. It is not an inspection, not an appraisal, not an insurance value and not a book value — and no book value for a used Zero exists to compare it with. Nothing here is a substitute for a qualified technician, and nothing here authorises work on the high-voltage system. Your own model-year manual is the authority on every figure quoted.