Milk run emissions

Introduction

What is a milk run?

A milk run is a transport operation where a vehicle performs multiple pickups and/or deliveries during a single trip. Instead of operating one shipment per journey, the vehicle serves several consignments along a shared route.

Milk runs are commonly used for:

  • collection / distribution rounds,
  • parcel or agency-to-agency networks,

The objective is to improve vehicle utilization and reduce empty mileage.

👩‍💻 The Milk Run API calculates greenhouse gas emissions for these multi-stop transport operations and allocates emissions fairly across all shipments transported during the run.

Methodology

The methodology follows:

ISO 14083 defines milk runs as collection and delivery rounds, where multiple consignments share the same transport activity.

Key principle: the allocation is shipment-based. Under ISO 14083, emissions must be allocated according to each shipment’s transport activity, defined as: transport activity = freight weight × transport distance.

The distance considered for allocation is the distance between the shipment’s pickup and delivery locations, as the GCD (great circle distance), not the operational path of the vehicle. Consequently, intermediate stops do not penalize unrelated shipments.


How emissions are calculated

Full run and per-shipment emissions

1. Full run emissions

First, total emissions of the vehicle performing the run are calculated. This includes:

  • energy consumption during loaded segments,
  • energy consumption during empty segments,
  • variations of load factor between stops.

Vehicle consumption is modeled using road network distances between successive stops.

2. Per-shipment allocation

Once total emissions are known, emissions are allocated across shipments according to their share of transport activity:

(weight × pickup→delivery distance)
------------------------------------
Σ(weight × pickup→delivery distance)

Distances used for allocation between pickup and delivery points are GCD-based.

Note: operational detours caused by other shipments are therefore not impacting shipments that did not require them.

Open loops and closed loops

The ISO methodology applies equally to all run structures.

Closed loop example

A → B → C → A

The vehicle returns to its starting location (terminal)

If the terminal location is unknown to the user, the API assumes a virtual terminal positioned equidistantly between the first and last known locations of the sequence.

This virtual terminal is used to model the operational reality of the run by introducing the empty repositioning segments that typically occur before the first stop and after the last stop. These empty segments are included in the total vehicle emissions.

Emission allocation, however, remains based exclusively on each shipment’s pickup and delivery locations, in accordance with ISO 14083.

Open loop example

A → B → C

The vehicle ends its journey at a different location.

Both configurations are handled identically from an emissions allocation perspective. There is no methodological distinction between them.

Empty running

Empty running occurs whenever the vehicle travels without transported shipments. It is not defined through a fixed parameter, it emerges naturally from the operations of the run:

  • when consecutive locations exist without associated shipments,
  • when the vehicle gets in and out of the terminal without associated shipments.

These empty segments are included in the total vehicle emissions calculation.

Distances used in the model

Two distance concepts are used:

Purpose

Distance type

Emissions modeling

• Actual road network distance between stops
• GCD*+DAF* 15% when an "hypothetical terminal" is inferred between the first and the last stops

Emissions allocation

Great Circle Distance (GCD - between pickup and delivery)

** GCD: Great Circle Distance

** DAF: Distance Adjustment Factor.

This separation ensures a realistic vehicle energy modeling, as well as a fair shipment allocation.


🧑🏻‍💻 Using the API

For details, please consult our developer's page about the Milk Run API.

When should I use the Milk Run API?

Use this API when:

✅ you know the full sequence of stops operated by the vehicle

✅ shipments share a common vehicle run

✅ you want allocation across multiple consignments

Use the Shipment API instead when:

❌ you only know shipment origin and destination

❌ you do not know the intermediate stops of the vehicle, if any

❌ each shipment corresponds to an independent trip (single shipment, point-to-point transport)


NB: important behavior change (ISO update - Feb 2026)

In February 2026, the Milk Run methodology was updated to align with ISO 14083.

Previously, emissions allocation partly relied on a terminal-based model.

Allocation is now based directly on each shipment’s pickup and delivery points, in accordance with ISO transport activity principles.

As a result:

  • identical inputs may produce different emission results compared to earlier versions,
  • optimized logistics operations are more accurately represented,
  • results are aligned with international reporting standards, including ISO 14083 and the GLEC Framework.

FAQ

Can I model one-way runs?

Yes. Open and closed loops are handled automatically based on your input.

Can empty running be isolated?

No. Empty running is included in the total emissions of the vehicle run and is not returned as a separate emissions value. Because milk runs model a shared vehicle operation, empty movements are part of the overall transport activity. Their impact is therefore reflected indirectly in the emissions allocated to shipments, rather than reported independently.

Why are allocation distances different from road distances?

ISO methodology allocates emissions based on transport activity between pickup and delivery points, rather than operational routing.

What fuels are supported?

DIESEL, CNG, LNG, PETROL, HVO, ELEC, LPG, BIOLNG, BIOCNG, BIODIESEL, HYDROGEN_GASEOUS_FCV, Biodiesel blends (B1, B2, B5, B7, B10, B20, B30, B50).

Please refer to the Milk Run API documentation for the latest update.

Can we force a distance?

No — distances cannot be manually overridden in the Milk Run API, as the model relies on the sequence of stops to compute emissions. When more precision is required, we recommend providing locations coordinates instead of locodes, as this allows distances to be calculated more accurately.