June 2026  •  8 min read  •  Contract Renewal

Pricing a 3PL Contract Renewal from Actual Volumes, Not Stale Forecasts

When a warehouse contract comes up for renewal, most operators reprice it the same way they priced it three years ago — off a forecast. But by renewal you have something far better than a forecast: a full record of what actually moved through the building. Here is how to re-baseline a renewal on real captured volumes, and why the trailing twelve months beat both the original forecast and a whole-of-term average.

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.

The core mistake: repricing a renewal on the same forecast you used at tender. You are sitting on years of real operating data — the renewal should be grounded in that, not in a guess that is now out of date.

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.

Annualisation Throughput (per year) = SUM(last 12 months) × 12 / months recorded
On-hand (per year) = AVERAGE(last 12 months)
Worked Example — Growth Dilution

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:

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

Related Articles

Contract Pricing
How to Price a 3PL Contract
Contract Pricing
How to Price a Multi-Site Warehouse Contract
FTE Calculation
How to Calculate Warehouse FTE from Volume