One truck, two moves: how to count the empty kilometres you avoid
"We saved a lot of empty running" is easy to say and hard to defend. If you want a figure that a customer, an auditor or your own finance team will accept, you need a method you can replay.
Here is one, simple enough to run on a spreadsheet, with the traps we have learned to avoid.
Two kinds of "empty" (do not mix them)
Before counting, agree on what you count:
- Unladen kilometres: the tractor drives with no container on the chassis (often called bobtailing).
- Empty-container kilometres: the truck carries a container, but the box is empty, for example an import box returned to a depot.
Both cost fuel, driver time and road space, but they are not the same thing, and a customer will not read them the same way. Count them in two separate columns.
The method in three steps
Step 1. Describe the baseline: what would have happened without the swap. Write down the legs each truck would have driven, one line per leg: from, to, distance, loaded or not. Use road distances from a routing tool, never straight lines.
Step 2. Describe what actually happened with the swap. Same format. A swap usually removes a depot round trip: instead of returning an empty to the depot and another truck collecting an empty from the same depot, the box changes hands close to the terminal or the shipper.
Step 3. Subtract, and keep the detour. Avoided kilometres = baseline kilometres minus actual kilometres, per category. If the swap meeting point added a few kilometres for one of the trucks, those kilometres stay in the "actual" column. Leaving out the detour is the most common way to inflate a figure.
A hypothetical example
Round numbers, invented for the illustration only.
Carrier A has just emptied an import container at a warehouse. Without a swap, it drives the empty box 20 km to the depot, then 15 km unladen back to its yard. Carrier B needs an empty box of the same type for an export load: it drives 25 km unladen to the same depot, then 30 km with the empty to its shipper.
With a swap, A drives the empty 12 km to a meeting point near B’s shipper, hands it over, and drives 10 km unladen to its yard. B drives 8 km unladen to the meeting point, then 5 km with the box to the shipper.
| Baseline | With swap | Avoided | |
|---|---|---|---|
| Unladen km | 15 + 25 = 40 | 10 + 8 = 18 | 22 |
| Empty-container km | 20 + 30 = 50 | 12 + 5 = 17 | 33 |
Two depot visits disappear too: no gate-in, no gate-out, no queue at the depot. Count those visits separately; they matter as much as the kilometres for many carriers.
The same thing in a few lines of code
# Each leg: (km, kind) where kind is "unladen" or "empty_box"
baseline = [(20, "empty_box"), (15, "unladen"), (25, "unladen"), (30, "empty_box")]
with_swap = [(12, "empty_box"), (10, "unladen"), (8, "unladen"), (5, "empty_box")]
def total(legs, kind):
return sum(km for km, k in legs if k == kind)
for kind in ("unladen", "empty_box"):
print(kind, total(baseline, kind) - total(with_swap, kind), "km avoided")
Feel free to copy it. The value is not in the code; it is in writing the baseline down before you compute anything.
Four traps
- Straight-line distances. They understate real roads and make any comparison unreliable. Use the same routing source for both columns.
- Counting both sides twice. When two carriers report the same swap, the avoided kilometres belong to the pair, not to each of them. Record the swap once, then split it if you need to.
- Swaps that would have happened anyway. If the two carriers already exchanged boxes by phone every week, the baseline is not the depot round trip. Be honest about the baseline, or the figure will not survive the first question.
- Jumping straight to CO2. Convert kilometres into emissions only with a recognised method, such as ISO 14083 or the GLEC Framework, and with your own fuel data when you have it. Say which factor you used.
What you can do tomorrow
Keep a one-week log of your moves with five columns: from, to, road kilometres, loaded or not, and the box reference. At the end of the week, mark every leg that ended or started at a depot with an empty box. Those are your swap candidates, and you will have a real baseline to measure against, before any software is involved.
If you run that week and want to compare your candidates with other carriers around the same terminal, that is exactly what SwapContainer is built for.
Sources
- ISO 14083:2023, Greenhouse gases: quantification and reporting of emissions arising from transport chain operations: https://www.iso.org/standard/78864.html
- Smart Freight Centre, GLEC Framework: https://www.smartfreightcentre.org/en/our-programs/emissions-accounting/global-logistics-emissions-council/
Photo: TrainLearnGrow, Wikimedia Commons, CC BY-SA 4.0 (cropped, text added)




