Pallet Delivery Rates: Build a Per-Pallet Price Grid by Zone

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Pallet Delivery Rates: Build a Per-Pallet Price Grid by Zone.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Pallet Delivery Rates: Build a Per-Pallet Price Grid by Zone.

Build a per-pallet grid by pricing one pallet in each zone from your real cost of a delivery, then scaling that price down for pallets two to six with a fixed set of multipliers. Keep fuel as a separate percentage, charge tail-lift per delivery, and bill waiting time in 15-minute blocks after a free allowance.

The carrier side of this is different from the shipper side. A shipper compares quotes; you have to make one price that works across forty different drops. Every rate in this tutorial is an illustrative figure from a worked example, so swap in your own hourly cost, mileage and drop times. The structure is what carries over.

Follow me on Instagram@sagnikteaches

Start from the cost of a delivery, not the competitor's rate

A grid copied from a competitor tells you what they decided, not what your vehicles cost. The sum that matters is the cost of a working hour for one vehicle and driver, the cost of a mile, and an overhead percentage for the office, insurance admin and the van that is off the road for repair.

Connect on LinkedInSagnik Bhattacharya

For the worked example, take a small carrier running 18-pallet rigid trucks. Its figures, all illustrative:

Subscribe on YouTube@sagnikteaches
  • Driver, vehicle finance, insurance, tyres, maintenance and tracking: $65 an hour, counted over every paid hour of the shift.
  • Fuel: $0.63 a mile, which is a diesel price of $3.80 a gallon at roughly six miles to the gallon.
  • Overhead: 12 per cent on top of vehicle and fuel cost.

Now test a typical day to see whether those figures hang together. The truck runs nine drops carrying 15 pallets over 210 miles and a 10-hour shift. Cost is 10 hours at $65, which is $650, plus 210 miles at $0.63, which is $132.30. That is $782.30 before overhead. Overhead at 12 per cent adds $93.88, so the day costs $876.18. If the carrier needs a 25 per cent margin on revenue, the day must bill about $1,168. That target, not the market, anchors the grid.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Draw zones where cost steps up

Zones are bands of delivery distance from your depot, built from postal districts so the office can look a customer up without guessing. Choose the boundaries by where the cost per drop changes, which is usually where the drive time to the first stop in the area jumps. Six zones is a workable number for a regional carrier:

ZoneDistance from depotWhat changes at this band
Z1Up to 15 milesSeveral drops in one loop, short stems
Z216 to 35 milesStill a full day of drops, longer legs between loops
Z336 to 60 milesAn hour or more of driving before the first drop in the area
Z461 to 100 milesThe round trip alone takes three to four hours, so fewer drops fit
Z5101 to 160 milesOften a dedicated run or a partner hand-off
Z6161 to 250 milesDriver-hours limits bite; overnight or relay pricing

One rule keeps the grid honest: every delivery district sits in exactly one zone. Two districts in two zones and one district in none are the commonest errors in any zone sheet, and a check at the end of this tutorial finds them.

Price one pallet per zone, then scale for pallets two to six

The first pallet in each zone carries the cost of getting there, so it is the most expensive per pallet. Each additional pallet to the same drop adds weight and handling but not another stop, so per-pallet cost falls. The simplest honest way to model that is a set of multipliers applied to the one-pallet price.

Illustrative one-pallet prices for the six zones are $62, $78, $96, $118, $142 and $171. The multipliers used here are 1.00, 1.70, 2.35, 2.95, 3.50 and 4.00 for one to six pallets. In a spreadsheet, put the multipliers in a row and each zone's one-pallet price in a column, and use a formula such as =ROUND($B3*C$2,0) across the grid. The result:

Zone1 pallet23456
Z1$62$105$146$183$217$248
Z2$78$133$183$230$273$312
Z3$96$163$226$283$336$384
Z4$118$201$277$348$413$472
Z5$142$241$334$419$497$568
Z6$171$291$402$504$599$684

In Z3, six pallets cost $384, which is $64 a pallet against $96 for one. That drop in per-pallet price is the discount a customer sees for consolidating, and it should always be smooth. If it is not smooth, something in the grid is wrong, which is where the AI check comes in.

Beyond six pallets, stop using the grid. A seven-pallet drop is a part-load, and it should be quoted by the vehicle, not by the pallet, because a half-empty truck costs the same to run as a full one. Put that sentence on the price sheet so nobody quotes eight pallets from cell six.

Fuel: a separate percentage that moves with diesel

Do not bake a moving cost into a fixed price. Fix the grid at a reference diesel price, $3.80 a gallon in the example, and add a fuel surcharge as a percentage of the delivery price when the published price rises above it.

Derive the percentage from your own numbers rather than copying a table. In the worked day, fuel was $132.30 against $1,207 of revenue, about 11 per cent. A 20-cent rise on $3.80 is a 5.3 per cent rise in fuel cost. Multiply: 11 per cent times 5.3 per cent is about 0.58 per cent of revenue. So each 20 cents above the reference price justifies roughly 0.6 per cent more on the delivery price.

Published diesel price, per gallonSurcharge on the delivery price
Up to $3.800%
$3.81 to $4.000.6%
$4.01 to $4.201.2%
$4.21 to $4.401.8%
$4.41 to $4.602.4%
$4.61 to $4.803.0%

Publish the index you use and the date it is read, for example the weekly figure on the first working day of the month. Customers accept a surcharge that moves with a public number far more readily than one that moves when your accountant says so. Tell them it also falls when diesel falls, and then make sure it does.

Tail-lift: charge per delivery, not per pallet

A tail-lift costs time at every drop that needs it: lowering the platform, loading each pallet onto it, raising and lowering again. It also adds wear and an inspection regime. The cost is per stop plus a little per pallet. A flat per-delivery charge is easier to quote and covers most of it. In the example, $20 per delivery, set from about 10 to 12 minutes of extra stop time at the hourly cost plus overhead, and a share of lift maintenance.

Make the customer choose. The booking form should ask: is there a loading dock or a forklift at the delivery address? If not, tail-lift is added. If the customer says yes and the driver arrives to a kerb, the charge applies anyway and a re-delivery fee on top if the load cannot be unloaded. The wording for the confirmation can be as short as: "Delivery to an address without a dock or forklift needs a tail-lift vehicle, charged at $20 per delivery. If a dock is stated and not available, the charge applies and the driver may be unable to deliver."

Waiting time: a free allowance and a block price

Waiting is where the day quietly loses money. One 45-minute wait at a delivery, repeated at three drops, takes more than an hour of the vehicle's paid day. Price it from the hourly cost: $65 an hour plus 12 per cent overhead is $72.80, so a 15-minute block costs $18.20. Round to $18 a block.

A workable rule: 30 minutes free from the booked arrival, then $18 for each started 15 minutes. Both times come from the driver's device or a time-stamped photo of the delivery, not from memory. A customer who kept the driver waiting 45 minutes pays one block, $18. A customer who kept the vehicle 75 minutes pays three blocks, $54. Say in advance that the clock starts at the booked slot or the arrival, whichever is later, so a driver who turns up an hour early does not generate a charge.

A full day checked against the grid

Back to the nine-drop day. Each drop is priced from the grid, with tail-lift and waiting time added where they happened:

DropZonePalletsGrid priceExtras
1Z12$105
2Z11$62Tail-lift $20
3Z23$183
4Z21$78
5Z32$163Tail-lift $20
6Z31$96
7Z33$22645-minute wait, one block $18
8Z41$118
9Z41$118
Grid prices    105 + 62 + 183 + 78 + 163 + 96 + 226 + 118 + 118 = $1,149
Tail-lifts     2 x $20                                          =    $40
Waiting        1 block                                          =    $18
Revenue                                                         = $1,207
Cost (from earlier)                                             =   $876
Margin                                                          =   $331  (27.4% of revenue)

That clears the 25 per cent target, but only just, and only because of the two extras. Take out the tail-lifts and the waiting block and the day's margin drops to $273 on $1,149, which is 23.8 per cent, below target. That is why extras should never be negotiable by default. They are the margin.

It also shows why a single pallet to the nearest zone is the dangerous order. A one-pallet drop at $62 can take as long as a three-pallet drop at $146 if the stop itself is slow. Add a minimum charge for a dedicated, non-consolidated delivery, and quote it from the hourly cost: if a drop needs 90 minutes of vehicle time alone, that is $97.50 plus overhead, about $109 before fuel, not $62.

Use AI to check the finished grid, not to set it

Once the grid is in a sheet, paste it into ChatGPT, Claude or Gemini and ask for a structured audit. It will not know your costs, so the question is purely about internal consistency. Remove customer names; the grid has none anyway.

Below is a pallet delivery price grid in CSV: rows are zones Z1-Z6, columns are 1 to 6 pallets, values are the price in dollars.
Check it and report:
1. Any cell that is missing or not a number.
2. Any price that does not rise as pallets increase within a zone.
3. Any price per pallet (price divided by pallets) that rises as pallets increase within a zone.
4. Any cell where a higher zone costs less than a lower zone for the same pallet count.
5. Any cell whose step from the previous cell is more than 25 per cent away from the typical step in its zone.
Give each finding as: cell, value, what you expected, why. Do not suggest new prices.

zone,1,2,3,4,5,6
Z1,62,105,146,183,217,248
Z2,78,133,183,230,273,312
Z3,96,163,226,238,336,384
Z4,118,201,277,348,413,472
Z5,142,241,334,419,497,
Z6,171,291,402,504,599,684

A good answer, shown here as an illustration, finds two things. First, Z3 at four pallets is $238, a step of only $12 after $63 from two to three pallets, and its price per pallet falls to $59.50 at four pallets then rises to $67.20 at five. The expected value from the pattern is about $283, so a transposition of 283 into 238 is likely. Second, Z5 at six pallets is empty. It should also confirm that prices still rise with pallet count and that no zone is cheaper than the one below it for any pallet count, which tells you rules 2 and 4 passed.

A weaker reply is worth recognising too. An illustrative one reads: "The grid looks consistent. Prices rise with zone and pallet count. One cell in Z5 appears to be missing." It caught the blank but missed the transposed $238, because it compared each cell only with the zone above, where $238 is still higher than Z2's $230. When the answer is that short, send the follow-up: "List every cell with its price per pallet and the step from the previous cell, then re-apply rules 3 and 5." The table it returns makes the $12 step impossible to miss.

What I would fix in the reply: some assistants will quietly suggest a "corrected" number. The prompt says not to, because the right number is whichever one your costs say, and in the example the typo came from a keyed digit rather than from pricing logic. Always check the finding against the source cell yourself. It is also worth asking for a second pass that lists the cells it checked, so a silent skip does not pass for a clean result.

Check the district list the same way

The grid is only half of it. Export your district-to-zone list and ask the same assistant to find districts that appear twice with different zones, and districts that appear in your last year's delivery history but not on the list. Both produce quotes in the wrong zone. A before and after shows the effect. Before: a district 30 miles out sits on the sheet in Z3, so the office quotes $96 for one pallet when the Z2 price is $78, and the customer goes elsewhere. After: the district is in Z2 and the quote is $78. The reverse error is worse, because a Z2 district listed in Z1 loses money quietly on every drop.

Do it with delivery history too. If 18 deliveries last year went to districts not on your zone sheet, you have either found a gap or a customer you quote by hand. Either is worth knowing. The same history feeds the lane analysis in margin by lane from a spreadsheet.

Back-test the grid on real jobs before you publish it

Take 50 completed deliveries from the last quarter with their actual vehicle time, mileage and any waiting. Price each from the new grid and compare with what it really cost to run. Three results are likely and each has a fix:

  • Most jobs are within 10 per cent of target margin, with a few well under. Look at the few. They are usually long waits or tail-lift drops that were not charged, and they point to a missing surcharge, not a wrong zone price.
  • One zone loses money on every job. Its one-pallet price is too low, or its zone boundary is too wide. Split it or raise the base.
  • Multi-pallet drops are over-priced against the market while one-pallet drops are fine. Soften the multipliers, for example 1.65 for two pallets instead of 1.70, and re-run.

When quotes come in as emails, the grid is also the reference for the draft. The tutorial on turning customer emails into draft quotes shows the reading side, and the grid supplies the numbers it should quote from.

Where the grid breaks: five cases to write rules for

  1. Part-loads and heavy pallets. A grid assumes standard pallets up to a stated weight and height, say 1.2 metres square, 1.5 metres tall and 750 kg. Over that, add an oversize or overweight line, or quote as a part-load.
  2. Timed and appointment deliveries. A fixed delivery window forces a driver to wait or break the route order. Price it as a flat charge per delivery or as a percentage, and tell customers it lowers the chance of a consolidated drop.
  3. Failed deliveries. Closed site, no one to sign, wrong address. State the re-delivery charge, which should be the original price or a high fraction of it, plus any storage.
  4. Remote or restricted addresses. Low-height access, congestion areas, sites with security checks that add 20 minutes. Treat as a flat surcharge and keep the list of addresses.
  5. Returns and collections. A collection from a customer back to your depot has its own cost shape. Do not quote it from the delivery grid without checking whether the return leg is empty.

Each of these belongs on the price sheet as a line, with a number, in plain words. A customer who has read "failed delivery, re-delivery at 100 per cent of the original price" is far less likely to argue at the invoice stage. For the other half of the problem, planning which of these pallets share a truck, see planning pallets and trucks from orders.

Reviewing it each quarter

A grid is a snapshot of your costs. Put a quarterly date in the diary to refresh three numbers: the hourly cost of a vehicle and driver, the mileage cost at the current reference diesel price, and the overhead percentage. If the hourly cost has moved by more than 3 or 4 per cent, rebuild the one-pallet column and let the multipliers carry the rest through. Then run the AI audit again and note the date. The audit takes a few minutes and has the strongest effect on the one error you cannot see from inside the spreadsheet, a quiet typo that has been costing you a few dollars a drop for months.

If you want to compare how other operators price the warehouse side of the same pallets, the tutorial on 3PL pricing for storage, pick and pack applies the same cost-first method to a different rate card.

Questions hauliers ask about pallet price grids

How many zones should a small pallet carrier use?

Five or six is usually enough. Fewer zones hide real cost differences, so near customers subsidise far ones. More than eight makes the grid hard to quote from and invites mistakes. Draw zone boundaries where your cost per delivery visibly steps up, not at round mileages.

Should the grid include fuel?

Keep the base grid fixed at a stated fuel price and add a separate surcharge that moves with a published diesel price. That way customers see the same grid for months, and your margin is protected when fuel moves, without re-printing every price.

How do I charge for waiting time at the delivery point?

State a free allowance, such as 30 minutes, then a charge for each started block of 15 minutes. Base the block on your hourly cost of the vehicle and driver plus overhead. Put the rule on the quote and the booking confirmation, and record arrival and departure times.

Can AI set my prices?

It should not decide them. Your costs and margin do that. AI is useful for checking the finished grid: spotting a price that falls when pallets go up, a missing cell, or a district assigned to two zones. Keep the decision and the final read with a person.

Further reads

Sources: the pricing method and every rate in this tutorial are illustrative worked figures built for the example, not published tariffs.

Want your pallet grid checked against your real costs?

On a 1:1 call we'll go through how you quote today, find the step worth automating first, and decide whether your existing spreadsheet or quoting tool can do it.

Book a 1:1 call with me