Distance and CO2e
All trips on All Aboard come with two figures: how far the passenger travels, and their share of the journey's greenhouse gas emissions, in CO2e. Our methodology for calculating these two numbers is documented on this page.
Building with the API? Jump to the implementation section.
Methodology overview
- Per passenger. Both distance and CO2e are per passenger and can be multiplied to get a booking total.
- Per segment. Each train, bus or ferry has its own numbers. The trip total is the sum of its segments.
- Estimated, not measured. There are no real measurements of the emissions of a particular train on a specific day, so we estimate them from distance, published emission factors and each country's rail network.
- Construction is not included. Our figures cover running the vehicle and producing its electricity or fuel. Building tracks and trains is not counted. The one exception is electricity, whose figures are based on the power system's whole lifecycle, including building power stations.
- One method for every operator. Operators calculate their emissions in different ways, so we use one method for all of them. That way, figures can be added up and compared.
- Grid electricity. Electric trains count the average electricity mix of the country they run in, not the green electricity an operator may buy.
- Updated yearly. We update the electricity figures as soon as Ember releases new yearly data. Booked trips keep the figures they were priced with.
For example, one passenger on the train from Stockholm to Göteborg travels about 455 km, and their share of the train's emissions is about 1.2 kg CO2e.
Distance
We get the track distance between a segment's two stations from our timetable data, or directly from the operator. When neither has a track distance, we apply a distance formula: straight lines between the train's intermediate stops, multiplied by a factor of 1.13. If there are no known intermediate stops, we use the straight line between the two stations and the multiplier increases to 1.25. The multipliers make up for the curves and detours of the track, and were calibrated on 150 known routes in 27 countries.
How the multipliers were calibrated
| Applied to | Factor | Evidence |
|---|---|---|
| The sum of straight lines from stop to stop | × 1.13 | Best single value over 150 legs in 27 countries. The per-leg median is 1.131, and with 1.13, 89% of legs are within ±10%. Country medians run from 1.03 (EE) to 1.26 (CZ), so the error is about ±10% by country. |
| The straight line between a segment's two ends | × 1.25 | Median of 152 legs (1.247). One value for every country, because a line's detours follow the terrain, not the border. |
The reference track distances for this calibration come from OpenRailRouting on OpenStreetMap. They were first checked on 18 legs against track distances reported by the timetable or operator in Norway, Germany, Sweden and the UK: median ratio 1.0005, every leg within −2.1% to +1.2%.
CO2e emissions
We get the CO2e by multiplying the distance by an emission factor for the trip's trains, buses or ferries. Buses and ferries have fixed factors, while trains have a factor per country. A train that crosses a border is weighted by the distance it runs in each country.
Every factor is in g CO2e (CO2 equivalent, which counts the other greenhouse gases too) per passenger-km, for one passenger at average occupancy. It is well-to-wheel, meaning that it covers running the vehicle plus producing its energy or fuel. Building tracks, trains and ships is not counted. The exception is electricity: its figures are based on the power system's whole lifecycle, including building power stations.
We do not directly rely on the factors that operators may publish, but use that information when calculating our own factors for every country. This is because operators measure different things. Some count building the trains and track, and others leave it out. Some divide a train's emissions by its seats, as if every seat were taken, and others by the passengers that are likely to be on board. Side by side, their figures do not compare, and summarizing the data for reporting does not work.
Green electricity
Many operators buy renewable electricity for their trains and report emissions close to zero, for example DB in Germany and NS in the Netherlands. That is a market-based figure and it counts the electricity the operator has bought. We use a location-based figure instead, which counts the average mix of the power grid the train uses. That is why our figure for a German or Dutch train is higher than the operator's own. Location-based figures work the same way for every operator, and they don't depend on the operators' electricity contracts that we can't check.
Rail calculations per country
A country's rail factor depends on how much CO2e its power stations emit and how much of its intercity traffic still runs on diesel. Electric trains account for the emissions of the power they use, at the country's own electricity generation mix. Diesel trains have a fixed 60 g per passenger-km, weighted by the country's diesel share.
The electricity figures come from Ember, a UK not-for-profit that publishes yearly electricity data for countries.
How the rail factor is calculated
The formula is: factor = (1 − d) × E × L × I + d × D
| Input | Value | What it is | Source |
|---|---|---|---|
| E | 0.07 kWh/pkm | Electricity an intercity train draws from the grid per passenger-km, at about half occupancy. Median of intercity measurements brought to grid intake (range 0.045–0.095). Regional trains use the same value, although they run 1.5–2× higher, because the train type is not reliably known per segment. | KTH, Andersson & Lukaszewicz 2006 (X2000 0.077, Signatur 0.079); DB UmweltMobilCheck Grundlagenbericht 2019 (IC, ICE ≤200 km/h); SBB reporting 2025 (Fernverkehr 5.94 kWh/100 pkm); SJ fleet average via Travel & Climate v5.1; EEA TERM 2020, table A1.7 |
| L | 1.04 | High-voltage transmission loss between the power station and the railway's grid intake | KTH 2006 (about 4%); Eurostat transmission losses 1–3.4% |
| I | per country | Lifecycle emissions per kWh of the country's own electricity generation in 2024, imports excluded | Ember, Yearly Electricity Data (files dated 22 Sep 2026, CC BY 4.0) |
| d | per country | Share of intercity passenger-km that runs on diesel | per country, below |
| D | 60 g/pkm | Intercity diesel train, well-to-wheel | COWI for DSB 2025: IC3 53.2, IC4 72.2. ORR 2024-25: CrossCountry 66.5, Grand Central 66.5, Chiltern 49.0 (converted from tank-to-wheel with the DESNZ 2025 gas-oil factor, × 1.227) |
Factors per country
| Country | Factor (g CO2e/pkm) | Grid intensity 2024 (gCO2e/kWh) | Diesel share | Basis for the diesel share |
|---|---|---|---|---|
| Austria | 7.5 | 103.457 | 0 | intercity is electric |
| Belgium | 9.2 | 126.931 | 0 | intercity is electric |
| Bulgaria | 22.8 | 279.059 | 0.062 | all services, gross tonne-km 2021 (UIC RAILISA, BDZ)* |
| Croatia | 27.2 | 170.527 | 0.31 | all services, gross tonne-km 2024 (Eurostat); Zagreb–Split is diesel south of Oštarije |
| Czechia | 36.2 | 414.181 | 0.204 | all services, gross tonne-km 2024 (Eurostat)* |
| Denmark | 37.3 | 132.167 | 0.55 | DSB long-distance and regional passenger-km 2025 (DSB Annual Report) |
| Estonia | 60.0 | 344.165 | 1 | long-distance lines are diesel (IRG-Rail 2026; 225 km electrified) |
| Finland | 4.9 | 66.905 | 0 | intercity is electric |
| France | 2.9 | 40.337 | 0 | intercity is electric |
| Germany | 24.7 | 339.873 | 0 | intercity is electric |
| Greece | 29.6 | 321.806 | 0.169 | all services, train-km 2024 (IRG-Rail)* |
| Hungary | 17.6 | 183.894 | 0.091 | all services, gross tonne-km 2024 (UIC RAILISA, MÁV)* |
| Ireland | 60.0 | 270.750 | 1 | Irish Rail intercity is all diesel; only DART is electric (NTA 2023) |
| Italy | 20.5 | 281.435 | 0 | intercity is electric |
| Latvia | 60.0 | 134.521 | 1 | long routes are diesel (Vivi) |
| Lithuania | 40.4 | 116.097 | 0.62 | all services, gross tonne-km 2024 (Eurostat) |
| Luxembourg | 9.2 | 125.828 | 0 | intercity is electric |
| Netherlands | 18.3 | 250.768 | 0 | intercity is electric |
| Norway | 7.9 | 29.643 | 0.1 | Nordlandsbanen, 9–13% of long-distance passenger-km (SSB table 10484) |
| Poland | 44.3 | 608.468 | 0 | intercity is electric |
| Portugal | 8.1 | 110.639 | 0 | intercity is electric |
| Romania | 29.9 | 259.697 | 0.267 | all services, gross tonne-km 2017 (CFR Călători)* |
| Slovakia | 18.7 | 97.188 | 0.219 | all services, gross tonne-km 2022 (Eurostat)* |
| Slovenia | 35.4 | 230.493 | 0.43 | all services, gross tonne-km 2024 (Eurostat)* |
| Spain | 13.5 | 146.258 | 0.057 | all services, gross tonne-km 2024 (Eurostat)* |
| Sweden | 2.5 | 34.908 | 0 | intercity is electric |
| Switzerland | 2.5 | 34.592 | 0 | intercity is electric |
| United Kingdom | 29.0 | 216.473 | 0.3 | intercity operators 21–38% (ORR 2024-25, tables 6103/6108) |
* Sources don't split intercity from regional there, so an all-services share is used. This likely overstates intercity trains.
Factors are shown rounded to 0.1 g, but our CO2e calculations are done with the unrounded numbers.
When Ember publishes final yearly data, we update the grid intensities in the country list and the default. Figures on booked trips don't change: an order keeps each segment's distance and CO2e as they were when the journey was priced.
Night trains, buses, ferries and the default
| Value | Source | |
|---|---|---|
| Night train | × 1.2 on the rail factor the segment would otherwise get (country or border-weighted) | UIC Night Trains 2.0 (DB International for UIC, 2013); European Parliament TRAN study 2017; Back-on-Track 2022. Range 1.0 (couchettes) to 2.0 (2-berth sleepers) |
| Bus and coach, night buses included | 30 g | UBA, TREMOD 6.71B (10/2025): long-distance coach (Linienbus Fernverkehr) 2024, 53% occupancy. Cross-checks: ADEME 33, DESNZ 2025 34 |
| Ferry, per foot passenger | 36 g | Fraunhofer ISI and CE Delft for the EEA (2020), table 7.6: RoPax ferries 2018, 35.9 g, from EU MRV fuel reporting |
| Default: a country not in the table, or unknown | 15.4 g | The rail calculation with Ember's EU-27 grid intensity for 2024, 211.647 gCO2e/kWh, and no diesel |
Standards and reporting
We don't claim that our method follows a standard. It makes the same main choices as ISO 14083 (the international standard for transport emissions) in the way that it's also well-to-wheel, it leaves out building vehicles and infrastructure, and it gives emissions per passenger-km. It differs from ISO 14083 in two ways:
- The electricity figures are based on the power system's whole lifecycle, including building power stations.
- Energy used at stations is not counted.
For company reporting under the GHG Protocol, the figures fit the distance-based method for business travel (Scope 3, category 6). We provide modeled averages, not figures supplied by the operator. Electricity is location-based, as explained under Green electricity.
Since booked trips may be cancelled, our reporting tools account for this and leave out cancelled trips.
Using the figures in the API
distance (in km) and co2 (in kg CO2e) are fields on every Segment, wherever segments appear: timetable journeys from journeys, offers from journeyOffer and their parts, booked offer parts, and the segments of a JourneyOrderItem on an order.
Both fields are a Quantity: a value and the unit to print after it ("km" for distance, "kg" for co2). Treat unit as a display symbol, not a closed set. The field is named co2, but its value is CO2e, so label it "kg CO2e" where you show it.
- Per passenger. Each figure is for one passenger. Multiply by the number of passengers for a party.
- Per segment. A journey's total is the sum of its segments, and unknown if any segment is unknown.
- Null only on older orders. Every segment has both figures, except on orders placed before these figures were introduced, which carry null. A figure is never 0.
- Round for display.
valueis not rounded for display: distance comes to the meter and CO2e to the gram. Round it yourself.
No figure says how it was made, so link travelers to this page when they want to know.
Example: Distance and CO2e on an offer's segments
query JourneyOffer {
journeyOffer(
journeyId: "5dd36018-2796-43b7-bafb-05b136b461d2"
passengers: [{ type: ADULT }]
) {
itinerary {
... on SegmentCollection {
segments {
origin {
name
}
destination {
name
}
distance {
value
unit
}
co2 {
value
unit
}
}
}
}
}
}{
"data": {
"journeyOffer": {
"itinerary": [
{
"segments": [
{
"origin": { "name": "Stockholm Central" },
"destination": { "name": "Göteborg Central" },
"distance": { "value": 455.4, "unit": "km" },
"co2": { "value": 1.157, "unit": "kg" }
}
]
}
]
}
}
}