Unlike the rail figures, this one is ours. The live bus feeds carry positions but no delay, so lateness has to be derived: each live vehicle is matched to the scheduled trip it is running, its position is projected onto that trip's path, and the scheduled time at that point is compared with the time now.
The unit is a completed journey, not a position reading — urban areas are swept every few minutes, each run is followed, and each is counted once when it finishes. Where two runs of the same route are close enough together that a vehicle could plausibly be either, the reading is discarded rather than guessed; on a ten-minute headway a bus nine minutes late looks identical to the next one on time. That caution is why only around half of the vehicles seen produce a usable observation.
Why this is lower than published punctuality. We judge arrival at the destination, to match how rail is measured. The regulator measures departures from intermediate timing points. Those are different questions with different answers, so read this as the bus network judged by the railway's yardstick rather than as a contradiction of any operator's own figure.
One consequence worth knowing: buses are far more often early at their destination than late. Timetables pad the final leg, so a bus that has made up time arrives before it is due. That is a real result, not a measurement error.
The first version of this counted every position report, and produced a figure around 21.9% on time — implausible enough to be obviously wrong. The error is worth describing because it is easy to make: a bus stuck in traffic reports its lateness every few seconds, so binning readings weights that one bus far above a dozen that ran cleanly. Counting completed journeys instead gives every run one vote, which is what the rail figures do and what makes the two comparable at all.
Arrival is judged strictly. Entering the final leg is not arriving — a bus can sit two stops out for several minutes — so a run only counts once the vehicle is within 250 metres of its last calling point. Runs that never get there are discarded rather than assumed.
Nothing in the live feed says which scheduled journey a vehicle is running. That has to be worked out, and the naive approach fails badly: naming one “currently running” trip per route made all six live buses on a ten-minute headway resolve to the same trip.
So a vehicle is matched by position along the route, and only when the best candidate beats the runner-up by at least five minutes. Direction is settled by comparing where a trip starts and ends against the vehicle's reported origin and destination — within a kilometre, rather than by exact stop code, because the live feed and the timetable routinely name different stands of the same interchange.
Because so many buses arrive early, an operator's total delay is frequently negative. Transport for London's running figure at one sweep was −5,216 minutes across its journeys, while two regional operators were +316 and +2,082 in the same window.
The mixed signs are the point. Store or average that unsigned — an easy mistake, since a delay “feels” like a positive quantity — and a fleet running slightly early is reported as one running slightly late, which is a wrong claim about a named company. Nationally, about 26.4% of journeys arrive ahead of time.
This covers the operators that publish live vehicle positions to the national bus open data service, which is most of England's fleet but not all of it, and coverage is stronger in urban areas than rural ones. An operator absent from this table has not necessarily performed badly — it may publish nothing, or publish positions we could not confidently match to trips.
Operators are grouped by public brand, so several operating companies can sit behind one row. Why early running is a timetabling artefact rather than a fault is covered in why buses run early; the full method is in how it works, and trains are measured by the industry's own PPM on the train performance page.