Pricing a 3PL Contract Renewal from Actual Volumes, Not Stale Forecasts
The renewal trap
The original contract was priced on a forecast — or, at best, a 30, 60 or 90-day go-live sample. That is reasonable at tender, because there is no operating history to draw on yet. The customer hands over their expected volumes, you size the warehouse around them, and you commit to a rate card.
Three years later the contract is up for renewal, and a surprising number of operators simply carry the original numbers forward: bump the rent for CPI, update the EBA rates, refresh the margin, and re-issue. The volume assumptions underneath, though, are now years old. Order profiles have shifted, the SKU range has grown, channel mix has moved, peak has changed shape. The renewal rate card ends up built on assumptions the warehouse itself already disproved.
Capture actuals during the term
The fix starts long before renewal. Throughout the live contract, record the actual monthly volumes the warehouse handles — orders, order lines, cartons packed, pallets in and out, average pallets on hand — alongside the forecast you priced against.
Mid-contract, that captured data does exactly one job: variance reporting. It shows where reality diverged from the budget, month by month, so operations and finance can see which activities are running hot or cold. What it does not do is move the signed budget. The price you agreed with the customer is a commercial agreement and stays frozen for the term. Keeping those two things separate — what is actually happening versus what you charge — is what keeps the model honest.
At renewal, actuals become the baseline
This is where the captured data finally earns its keep. Instead of cloning the old forecast into the renewal, you re-baseline the renewal on the real volumes the warehouse delivered.
In CostAware this is a single deliberate action on the renewal — Load Actual Volumes. It reads the captured actuals from the original contract, annualises them, and overlays the renewal's volumes. From there every downstream number recalculates automatically. The renewal still starts as a clean copy of the original, so if a customer genuinely wants to renew on the original assumptions, you can; but the recommended path is to base the next term on proven operations.
Why the trailing twelve months — not the whole term
A natural instinct is to average the entire contract term. Resist it. A multi-year average dilutes growth. If the account grew steadily, the mean of three years sits well below today's run-rate, and pricing on it quietly under-charges the renewal.
Use the most recent twelve months instead — the current run-rate — and annualise. Throughput fields (orders, lines, cartons, pallet movements) are summed across the window and scaled to a full year; on-hand fields (pallets in storage) are averaged, because a stock level is a snapshot, not a flow.
On-hand (per year) = AVERAGE(last 12 months)
A contract runs 40,000 orders in year 1, 44,000 in year 2, 48,000 in year 3.
Whole-term average: 44,000 orders.
Trailing twelve months: 48,000 orders.
Pricing the renewal on 44,000 ignores roughly 8% of the volume the warehouse is actually handling — and the margin that goes with it.
A guardrail against thin data
Real actuals only help if there are enough of them. If a contract has only a few months of history — a late WMS rollout, a recent go-live — you should not baseline a multi-year renewal off a handful of records. Set a minimum window below which the renewal keeps the original forecast instead.
That threshold is best set by sector. A stable industrial account might trust six months of data; a seasonal retail or e-commerce account should wait for a full twelve, so a single peak or trough does not skew the baseline. The point is to require a representative window before real data overrides the forecast.
Everything recomputes from the real numbers
Re-baselining is not just swapping a few volume cells. Once the actual volumes land, the entire pricing chain re-runs off them:
- Activity FTEs resize to the real throughput
- Labour and equipment costs follow the new FTE count
- ABC cost pools refill with the updated costs
- Rate cards recalculate per-unit rates
- The annual budget, monthly customer P&L and multi-year financial returns all regenerate
The renewal rate card is now built on what the warehouse actually did, line by line — which is exactly what you want when the customer asks why a particular rate moved between terms.
The principle: measure continuously, reprice at renewal
Actual volume data has two distinct jobs, and keeping them apart is what makes the approach defensible. Mid-term, it drives variance reporting against a budget that stays frozen for the life of the contract. At renewal, it becomes the new baseline for the next term. The customer's agreed price never drifts mid-contract, and the renewal is grounded in proven operations rather than a stale guess.
Done this way, a renewal stops being a copy-paste of three-year-old assumptions and becomes the most accurate price you have ever quoted the customer — because it is built on the one data set neither side can argue with: what really happened.
Reprice renewals on real data, not old forecasts
Purpose-built for Australian 3PL operators — auditable costing from volumes to rate card.
Book a Free Demo