Traffic Statistics
All countries · Live and recent days. Every figure says how many trains it is based on.
One coverage rule across the page. A train "has data" when its realtime feed reports a valid delay (between −60 and +120 min). Punctuality is computed over those trains only: trains without data never count as on time. A country enters a ranking when at least 30% of its trains have data and there are 20 or more; a station, with 10 or more. On time = under 3 min late.
Current punctuality (<3 min)
Punctuality league · now
Trains running right now. Sortable by column. The vertical line on each bar marks the 30 % threshold.
| Rank | |||||
|---|---|---|---|---|---|
| 1 | 🇨🇭 Switzerland | 695 / 767 | 0.1 min | ||
| 2 | 🇯🇵 Japan | 137 / 167 | 0.2 min | ||
| 3 | 🇳🇱 Netherlands | 375 / 383 | 0.3 min | ||
| 4 | 🇫🇷 France 93 % at 0 s: 549 of 591 trains report exactly 0 s: the feed may be padding the delay with 0. | 591 / 595 | 0.8 min | ||
| 5 | 🇫🇮 Finland | 119 / 134 | 0.9 min | ||
| 6 | 🇧🇬 Bulgaria | 75 / 76 | 0.6 min | ||
| 7 | 🇸🇪 Sweden | 71 / 78 | −0.1 min | ||
| 8 | 🇬🇧 United Kingdom | 221 / 224 | 0.3 min | ||
| 9 | 🇳🇴 Norway | 76 / 76 | 1.1 min | ||
| 10 | 🇦🇺 Australia | 490 / 616 | 1.7 min | ||
| 11 | 🇩🇪 Germany | 2,279 / 2,637 | 1.3 min | ||
| 12 | 🇵🇱 Poland | 693 / 706 | 2.1 min | ||
| 13 | 🇪🇸 Spain | 425 / 472 | 2.0 min | ||
| 14 | 🇺🇸 United States | 181 / 213 | 4.9 min | ||
| 15 | 🇮🇹 Italy | 102 / 117 | 1.6 min |
Not enough data · 15 countries outside the ranking
With fewer than 30 % of trains reporting data, punctuality describes a minority that need not resemble the rest (e.g. one operator only). They are not ranked and their percentage is not shown as if it were the country's. Their 2,147 trains do appear on the map.
| Country | Trains with data / total | Coverage | Reason |
|---|---|---|---|
| 🇨🇦 Canada | 7 / 9 | Small sample (7 < 20) | |
| 🇮🇪 Ireland | 13 / 19 | Small sample (13 < 20) | |
| 🇨🇿 Czechia | 157 / 686 | Only 22.8% of trains with data (minimum 30%) |
No realtime delay feed (12):
- 🇧🇪 Belgium · 283 trains
- 🇩🇰 Denmark · 249 trains
- 🇷🇴 Romania · 240 trains
- 🇲🇾 Malaysia · 181 trains
- 🇸🇰 Slovakia · 173 trains
- 🇭🇷 Croatia · 76 trains
- 🇮🇱 Israel · 67 trains
- 🇸🇮 Slovenia · 64 trains
- 🇱🇺 Luxembourg · 40 trains
- 🇱🇻 Latvia · 34 trains
- 🇵🇹 Portugal · 13 trains
- 🇪🇪 Estonia · 13 trains
Trend · 30 days
Daily punctuality, weighted by services (source: daily_stats).
2,710,075 services with data over 28 days. 14–18 countries per day.
Delay Distribution · now
Over the 6,707 trains with RT data (not the 9,408 on the map).
- Early or on time 70.2 %
- < 3 min 18.1 %
- 3-5 min 4.2 %
- 5-10 min 3.7 %
- 10-20 min 2.3 %
- > 20 min 1.5 %
Historical Punctuality
Weighted by services: a day with 4,000 trains weighs more than one with 400.
| Rank | Country | Services | Days with data | Punctuality |
|---|---|---|---|---|
| 1 | 🇯🇵 Japan | 83,343 | 28 / 28 | |
| 2 | 🇨🇭 Switzerland | 268,905 | 28 / 28 | |
| 3 | 🇫🇮 Finland | 27,453 | 26 / 28 | |
| 4 | 🇦🇺 Australia | 172,795 | 28 / 28 | |
| 5 | 🇸🇪 Sweden | 19,990 | 28 / 28 | |
| 6 | 🇳🇴 Norway | 16,509 | 28 / 28 | |
| 7 | 🇫🇷 France | 160,173 | 28 / 28 | |
| 8 | 🇩🇪 Germany | 1,091,117 | 26 / 28 | |
| 9 | 🇬🇧 United Kingdom | 615,689 | 28 / 28 | |
| 10 | 🇨🇿 Czechia | 133,110 | 16 / 28 | |
| 11 | 🇺🇸 United States | 77,252 | 28 / 28 | |
| 12 | 🇵🇱 Poland | 180,198 | 28 / 28 | |
| 13 | 🇮🇪 Ireland | 22,554 | 28 / 28 | |
| 14 | 🇮🇹 Italy | 21,541 | 28 / 28 | |
| 15 | 🇪🇸 Spain | 143,479 | 28 / 28 |
Period 20 Sept – 17 Oct. 28 days with data in the system. ⚑ = the country has data on fewer than 50 % of those days (14); none in this period. Average delay = mean over all trains with data, weighted by services.
Stations · now
Next stop of running trains, from worst to best punctuality. Only stations with 10 or more trains with data; n = trains with data.
| Station | n | Punctuality |
|---|---|---|
| Frankfurt(Main)Hbf | 12 / 13 | 58 % |
| Madrid-Chamartín-Clara Campoamor | 20 | 60 % |
| Hauptbahnhof | 11 | 73 % |
| València-Estació del Nord | 11 | 82 % |
| Nürnberg Hbf | 13 | 85 % |
| Penn Station | 12 | 100 % |
Only 6 of the 7,014 stations with trains approaching meet the minimum right now. With n = 10, a single train moves punctuality by 10 points: that is why n is always shown.
Punctuality by hour
Last 7 days, each country's local time (source: line_delay_hourly). The units are position readings, not trains: a train counts once per reading.
Filters
Punctuality by Type
Click on a bar to filter by that type
Worst Lines
More data by country
Active Services by Country
| Country | Services | Delayed | Average delay | RT Data |
|---|---|---|---|---|
| 🇩🇪 Germany | 2,637 | 281 | 1.3 min | Yes |
| 🇨🇭 Switzerland | 767 | 8 | 0.1 min | Yes |
| 🇵🇱 Poland | 706 | 101 | 2.1 min | Yes |
| 🇨🇿 Czechia | 686 | — | — | No |
| 🇦🇺 Australia | 616 | 59 | 1.7 min | Yes |
| 🇫🇷 France | 595 | 42 | 0.8 min | Yes |
| 🇪🇸 Spain | 472 | 94 | 2.0 min | Yes |
| 🇳🇱 Netherlands | 383 | 12 | 0.3 min | Yes |
| 🇧🇪 Belgium | 283 | — | — | No |
| 🇩🇰 Denmark | 249 | — | — | No |
| 🇷🇴 Romania | 240 | — | — | No |
| 🇬🇧 United Kingdom | 224 | 20 | 0.3 min | Yes |
| 🇺🇸 United States | 213 | 47 | 4.9 min | Yes |
| 🇲🇾 Malaysia | 181 | — | — | No |
| 🇸🇰 Slovakia | 173 | — | — | No |
| 🇯🇵 Japan | 167 | 3 | 0.2 min | Yes |
| 🇫🇮 Finland | 134 | 9 | 0.9 min | Yes |
| 🇮🇹 Italy | 117 | 38 | 1.6 min | Yes |
| 🇸🇪 Sweden | 78 | 6 | −0.1 min | Yes |
| 🇧🇬 Bulgaria | 76 | 6 | 0.6 min | Yes |
| 🇳🇴 Norway | 76 | 7 | 1.1 min | Yes |
| 🇭🇷 Croatia | 76 | — | — | No |
| 🇮🇱 Israel | 67 | — | — | No |
| 🇸🇮 Slovenia | 64 | — | — | No |
| 🇱🇺 Luxembourg | 40 | — | — | No |
| 🇱🇻 Latvia | 34 | — | — | No |
| 🇮🇪 Ireland | 19 | — | — | No |
| 🇵🇹 Portugal | 13 | — | — | No |
| 🇪🇪 Estonia | 13 | — | — | No |
| 🇨🇦 Canada | 9 | — | — | No |
How late are the late trains (only trains with any delay, ≤2h; countries with ≥30% coverage)
| Country | Median | Average | P90 | Maximum | >5min | Total |
|---|---|---|---|---|---|---|
| 🇫🇷 France | 10.0 min | 11.6 min | 24.5 min | 60.0 min | 24 | 42 |
| 🇵🇱 Poland | 3.0 min | 8.9 min | 20.9 min | 96.0 min | 60 | 172 |
| 🇮🇹 Italy | 3.0 min | 3.9 min | 8.0 min | 20.0 min | 15 | 72 |
| 🇪🇸 Spain | 3.0 min | 5.5 min | 10.0 min | 96.0 min | 43 | 167 |
| 🇺🇸 United States | 2.2 min | 10.5 min | 37.8 min | 59.0 min | 33 | 103 |
| 🇬🇧 United Kingdom | 2.0 min | 3.0 min | 6.0 min | 25.0 min | 8 | 62 |
| 🇧🇬 Bulgaria | 2.0 min | 2.4 min | 4.0 min | 11.0 min | 1 | 17 |
| 🇩🇪 Germany | 2.0 min | 5.1 min | 12.0 min | 66.0 min | 148 | 637 |
| 🇯🇵 Japan | 2.0 min | 2.1 min | 3.6 min | 7.0 min | 1 | 15 |
| 🇸🇪 Sweden | 1.7 min | 3.0 min | 6.7 min | 12.0 min | 3 | 15 |
| 🇳🇱 Netherlands | 1.6 min | 2.7 min | 7.2 min | 14.4 min | 7 | 44 |
| 🇦🇺 Australia | 1.4 min | 4.1 min | 8.8 min | 72.4 min | 34 | 215 |
| 🇳🇴 Norway | 1.1 min | 1.8 min | 3.2 min | 12.4 min | 3 | 48 |
| 🇫🇮 Finland | 0.6 min | 2.3 min | 4.1 min | 19.9 min | 3 | 48 |
| 🇨🇭 Switzerland | 0.5 min | 0.9 min | 1.7 min | 21.0 min | 5 | 220 |
Data Quality by Country
| Country | Method | Interpolated | Records |
|---|---|---|---|
| 🇦🇺 Australia | gtfs_timed | Yes | 57 |
| 🇦🇺 Australia | gps | No | 559 |
| 🇧🇪 Belgium | gtfs_timed | Yes | 283 |
| 🇧🇬 Bulgaria | gtfs_timed | Yes | 76 |
| 🇨🇦 Canada | gtfs_timed | Yes | 9 |
| 🇨🇭 Switzerland | gtfs_timed | Yes | 767 |
| 🇨🇿 Czechia | gtfs_timed | Yes | 528 |
| 🇨🇿 Czechia | gps | No | 158 |
| 🇩🇪 Germany | gtfs_timed | Yes | 2,637 |
| 🇩🇰 Denmark | gtfs_timed | Yes | 249 |
| 🇪🇪 Estonia | gtfs_timed | Yes | 13 |
| 🇪🇸 Spain | gps | No | 472 |
| 🇫🇮 Finland | gps | No | 134 |
| 🇫🇷 France | gtfs_timed | Yes | 595 |
| 🇬🇧 United Kingdom | gps | No | 224 |
| 🇭🇷 Croatia | gtfs_timed | Yes | 76 |
| 🇮🇪 Ireland | gps | No | 19 |
| 🇮🇱 Israel | gtfs_timed | Yes | 67 |
| 🇮🇹 Italy | gtfs_timed | Yes | 117 |
| 🇯🇵 Japan | gps | No | 30 |
| 🇯🇵 Japan | api_timed | Yes | 137 |
| 🇱🇺 Luxembourg | gtfs_timed | Yes | 40 |
| 🇱🇻 Latvia | gtfs_timed | Yes | 34 |
| 🇲🇾 Malaysia | gtfs_timed | Yes | 174 |
| 🇲🇾 Malaysia | gps | No | 7 |
| 🇳🇱 Netherlands | api_timed | Yes | 203 |
| 🇳🇱 Netherlands | gps | No | 180 |
| 🇳🇴 Norway | gps | No | 76 |
| 🇵🇱 Poland | gtfs_timed | Yes | 706 |
| 🇵🇹 Portugal | gtfs_timed | Yes | 13 |
| 🇷🇴 Romania | gtfs_timed | Yes | 240 |
| 🇸🇪 Sweden | gps | No | 78 |
| 🇸🇮 Slovenia | gtfs_timed | Yes | 64 |
| 🇸🇰 Slovakia | gtfs_timed | Yes | 173 |
| 🇺🇸 United States | gps | No | 213 |
Historical Data
88 records
| Date | Services | Positions | Punctuality | Average delay |
|---|---|---|---|---|
| Sat 17 Oct | 134,939 | 14,302,601 | 79.1 % | 2.3 min |
| Fri 16 Oct | 158,868 | 17,844,016 | 74.6 % | 2.8 min |
| Thu 15 Oct | 157,946 | 17,714,724 | 74.2 % | 2.8 min |
| Wed 14 Oct | 157,670 | 17,111,478 | 74.4 % | 2.8 min |
| Tue 13 Oct | 157,891 | 17,638,453 | 73.9 % | 2.9 min |
| Mon 12 Oct | 155,466 | 17,259,513 | 75.3 % | 2.8 min |
| Sun 11 Oct | 118,706 | 12,829,739 | 82.0 % | 1.9 min |
| Sat 10 Oct | 133,837 | 14,131,381 | 78.9 % | 2.4 min |
| Fri 09 Oct | 159,003 | 17,565,641 | 74.7 % | 2.9 min |
| Thu 08 Oct | 158,390 | 17,315,208 | 74.2 % | 2.9 min |
| Wed 07 Oct | 158,739 | 17,639,653 | 75.9 % | 2.8 min |
| Tue 06 Oct | 158,670 | 17,556,347 | 76.9 % | 2.5 min |
| Mon 05 Oct | 153,999 | 16,056,796 | 77.6 % | 2.4 min |
| Sun 04 Oct | 115,985 | 12,375,758 | 81.8 % | 1.9 min |
| Sat 03 Oct | 127,764 | 15,375,336 | 77.1 % | 2.2 min |
| Fri 02 Oct | 136,717 | 17,124,526 | 75.6 % | 2.4 min |
| Thu 01 Oct | 137,474 | 16,838,843 | 75.5 % | 2.4 min |
| Wed 30 Sept | 136,739 | 17,336,837 | 76.5 % | 2.4 min |
| Tue 29 Sept | 137,883 | 17,545,397 | 77.1 % | 2.3 min |
| Mon 28 Sept | 134,951 | 17,015,261 | 77.9 % | 2.2 min |
| Sun 27 Sept | 111,435 | 14,957,353 | 78.0 % | 2.2 min |
| Sat 26 Sept | 124,905 | 16,279,191 | 75.8 % | 2.2 min |
| Fri 25 Sept | 136,829 | 17,073,752 | 74.9 % | 2.5 min |
| Thu 24 Sept | 136,766 | 17,500,820 | 75.3 % | 2.4 min |
| Wed 23 Sept | 136,836 | 17,537,411 | 74.0 % | 2.6 min |
| Tue 22 Sept | 137,146 | 17,566,133 | 74.4 % | 2.5 min |
| Mon 21 Sept | 137,928 | 17,480,242 | 74.8 % | 2.5 min |
| Sun 20 Sept | 105,693 | 13,514,794 | 78.6 % | 2.1 min |
| Sat 19 Sept | 119,872 | 14,927,587 | 74.6 % | 2.7 min |
| Fri 18 Sept | 134,241 | 16,324,696 | 72.7 % | 2.7 min |
| Thu 17 Sept | 132,518 | 16,465,081 | 73.2 % | 2.8 min |
| Wed 16 Sept | 133,752 | 16,902,488 | 72.2 % | 2.9 min |
| Tue 15 Sept | 133,081 | 16,737,777 | 75.4 % | 2.4 min |
| Mon 14 Sept | 132,297 | 16,422,246 | 75.3 % | 2.5 min |
| Sun 13 Sept | 105,760 | 13,505,724 | 78.5 % | 2.1 min |
| Sat 12 Sept | 118,743 | 15,021,367 | 75.1 % | 2.5 min |
| Fri 11 Sept | 132,307 | 16,251,637 | 73.2 % | 2.8 min |
| Thu 10 Sept | 132,617 | 16,585,010 | 74.4 % | 2.5 min |
| Wed 09 Sept | 129,215 | 15,886,085 | 73.6 % | 2.8 min |
| Tue 08 Sept | 132,252 | 16,704,662 | 74.5 % | 2.5 min |
| Mon 07 Sept | 132,523 | 16,420,645 | 75.7 % | 2.4 min |
| Sun 06 Sept | 106,405 | 13,572,621 | 78.9 % | 2.1 min |
| Sat 05 Sept | 118,210 | 14,926,226 | 74.2 % | 2.8 min |
| Fri 04 Sept | 127,625 | 15,244,162 | 72.7 % | 2.9 min |
| Thu 03 Sept | 126,873 | 15,202,375 | 75.1 % | 2.5 min |
| Wed 02 Sept | 127,219 | 15,278,935 | 76.8 % | 5.8 min |
| Tue 01 Sept | 126,813 | 15,165,243 | 75.5 % | 6.7 min |
| Mon 31 Aug | 126,266 | 15,158,283 | 77.6 % | 6.6 min |
| Sun 30 Aug | 102,038 | 11,976,226 | 81.2 % | 6.4 min |
| Sat 29 Aug | 112,774 | 13,424,281 | 81.4 % | 4.9 min |
| Fri 28 Aug | 130,134 | 15,291,735 | 74.2 % | 6.3 min |
| Thu 27 Aug | 129,982 | 15,529,526 | 74.8 % | 6.4 min |
| Wed 26 Aug | 130,277 | 15,512,515 | 75.7 % | 5.9 min |
| Tue 25 Aug | 135,862 | 15,812,163 | 76.7 % | 6.5 min |
| Mon 24 Aug | 135,347 | 15,900,811 | 74.6 % | 7.2 min |
| Sun 23 Aug | 104,342 | 12,449,325 | 78.7 % | 6.3 min |
| Sat 22 Aug | 117,002 | 13,789,668 | 78.2 % | 6.2 min |
| Fri 21 Aug | 135,995 | 15,783,295 | 74.8 % | 7.5 min |
| Thu 20 Aug | 136,326 | 15,914,899 | 74.4 % | 7.1 min |
| Wed 19 Aug | 136,676 | 15,772,911 | 75.6 % | 6.7 min |
| Tue 18 Aug | 136,991 | 15,879,733 | 75.8 % | 6.9 min |
| Mon 17 Aug | 134,846 | 15,853,329 | 74.9 % | 7.1 min |
| Sun 16 Aug | 105,792 | 12,555,009 | 77.3 % | 7.1 min |
| Sat 15 Aug | 117,097 | 13,793,402 | 69.6 % | 7.5 min |
| Fri 14 Aug | 135,148 | 15,747,649 | 72.5 % | 8.2 min |
| Thu 13 Aug | 134,122 | 15,742,163 | 73.7 % | 8.0 min |
| Wed 12 Aug | 136,437 | 16,003,180 | 74.9 % | 6.9 min |
| Tue 11 Aug | 136,640 | 15,966,402 | 76.7 % | 6.4 min |
| Mon 10 Aug | 135,974 | 15,953,168 | 76.2 % | 6.8 min |
| Sun 09 Aug | 104,755 | 12,362,363 | 77.9 % | 6.6 min |
| Sat 08 Aug | 118,492 | 13,712,296 | 72.8 % | 7.1 min |
| Fri 07 Aug | 135,590 | 15,794,038 | 74.5 % | 7.5 min |
| Thu 06 Aug | 135,327 | 15,815,212 | 76.1 % | 6.7 min |
| Wed 05 Aug | 136,805 | 15,990,623 | 76.1 % | 6.7 min |
| Tue 04 Aug | 135,830 | 15,779,108 | 74.9 % | 7.3 min |
| Mon 03 Aug | 135,297 | 15,857,510 | 75.7 % | 7.6 min |
| Sun 02 Aug | 106,232 | 12,621,173 | 78.3 % | 6.3 min |
| Sat 01 Aug | 118,266 | 13,823,903 | 79.9 % | 5.9 min |
| Fri 31 Jul | 134,437 | 15,757,015 | 74.8 % | 7.2 min |
| Thu 30 Jul | 134,492 | 15,802,565 | 74.9 % | 7.7 min |
| Wed 29 Jul | 135,340 | 15,852,459 | 75.3 % | 7.3 min |
| Tue 28 Jul | 135,345 | 15,772,390 | 77.1 % | 6.6 min |
| Mon 27 Jul | 134,532 | 15,841,114 | 78.4 % | 6.7 min |
| Sun 26 Jul | 106,162 | 13,031,939 | 77.8 % | 6.9 min |
| Sat 25 Jul | 117,107 | 15,002,769 | 72.6 % | 7.0 min |
| Fri 24 Jul | 134,905 | 16,626,837 | 76.7 % | 6.7 min |
| Thu 23 Jul | 134,052 | 16,490,821 | 78.3 % | 6.4 min |
| Wed 22 Jul | 136,127 | 16,911,040 | 77.6 % | 6.7 min |
Sources: current_positions, daily_stats and line_delay_hourly · 19 Oct 2026, 06:13 CEST