Data Source
Performance data is derived from Network Rail TRUST (Train Running Under System TOPS) train movement data. TRUST records the actual time every train passes through each reporting point on the network.
Data is consumed in real-time via the Rail Data Marketplace and stored locally. Data collection began in February 2026; statistics are based on however many days of data are available, up to 90 days for the rolling view.
Reliability (headline metric)
- Reliability = (services that ran and arrived within 5 minutes) / (total scheduled services).
- This is our primary metric because it captures the full passenger experience: both cancellations and lateness reduce reliability.
- An operator that cancels many trains but runs the rest on time will have high on-time % but lower reliability.
- The league table is ranked by reliability.
On-Time Performance (if ran)
- A train is counted as "on time" if it arrives within 5 minutes of the planned arrival time.
- This includes trains marked as EARLY or ON TIME by Network Rail, plus trains marked as LATE with a delay of 5 minutes or less.
- Cancelled trains are excluded from this metric — it only measures punctuality of services that actually ran.
- We use arrival events only (not departures) as this reflects the passenger experience.
Note: The official industry measure (PPM/On Time) uses different thresholds for different service types. We use a uniform 5-minute threshold for simplicity and transparency.
What We Exclude
- Off-route movements are excluded from all calculations. TRUST records a movement whenever a train passes a track sensor, even if that station is not on the train's scheduled route. These "OFF ROUTE" events have no planned arrival time and no meaningful delay measurement. Including them would inflate the total arrival count without contributing to on-time figures, artificially lowering an operator's score. This particularly affects operators whose trains share track with other services (e.g. Heathrow Express trains passing through Great Western Railway stations).
- Arrivals without timing data (
variation_minutes IS NULL) are excluded, as TRUST did not record a usable delay measurement for these events.
Cancellation Rate
- A train is counted as cancelled if Network Rail issued a cancellation message for that service.
- Cancellation rate = number of cancelled services / total activated services for that operator in the period.
- Both full cancellations and part-cancellations are included.
Average Delay
- Calculated as the mean delay in minutes across all arrival events for trains that arrived late (more than 0 minutes behind schedule).
- Trains that arrived early or on time are counted as 0 minutes delay for this calculation.
This gives a sense of "when trains are late, how late are they?" rather than an overall average skewed by the majority of on-time services.
Data Coverage
- Not all TRUST messages may be received, due to system outages, network issues, or unmapped stations.
- We calculate data coverage as: (number of days with at least one recorded service for an operator) / (total days in the period).
- Operators with coverage below 80% are suppressed from the league table entirely, as the data would be unreliable.
- Coverage percentage is shown alongside all displayed statistics.
How This Differs From Official Statistics
The Office of Rail and Road (ORR) publishes official performance statistics using the On Time measure and Cancellations & Significant Lateness (CaSL). ORR data is supplied by Network Rail through internal systems and undergoes quality assurance and revision.
Our data is independently collected from the same underlying TRUST system but may differ due to:
- Different thresholds — we use 5 minutes uniformly; ORR uses varying thresholds.
- Data gaps — our Kafka consumer may miss messages that Network Rail's internal systems capture.
- No post-hoc corrections — ORR data is revised; ours is not.
- Different measurement periods — we use calendar months; ORR uses rail periods.
For official statistics, visit the ORR Data Portal.
Monthly Archives
- At the end of each calendar month, we generate a permanent snapshot of that month's performance data.
- Archive pages record the exact calculation period, data coverage, methodology version, and any known data gaps.
- Monthly archives are retained for 3 years.
- If our methodology changes, archived pages reflect the methodology version used at the time of generation.
Methodology Version v2
Current version: 2. Changes to the methodology are documented below with version numbers. Historical archive pages note which version was used for their calculations.
- v2 (April 2026) — Added reliability metric (on-time arrivals / scheduled services) as headline measure and league table ranking. Excluded off-route (OFF ROUTE) movements from all arrival calculations. Previously, off-route events inflated total arrival counts without contributing to on-time figures, understating performance for operators sharing track infrastructure.
- v1 (March 2026) — Initial methodology. 5-minute on-time threshold, arrival-only measurement, real-time TRUST data via Kafka.