Fuel Surcharge Audit: How to Check Every Freight Invoice Against the Diesel Index and Your Contract
The fuel surcharge is often the second largest number on a freight invoice, and the one nobody recalculates. It moves every week with the diesel price, it is computed by a formula buried in the contract, and it looks plausible whatever the figure is. That is what makes it easy to get wrong. This post explains how fuel surcharges are built, where they drift from the contract, and how to audit each one before you pay.
In brief
- A fuel surcharge is a formula, not a price: the contract fixes the index, the week, the base price and the method, and the invoice should follow from them.
- Most US freight contracts tie the surcharge to the weekly on-highway diesel price published by the Energy Information Administration, so the week the carrier picks decides the amount.
- The most common disputable surcharges use the wrong index week, a regional price instead of the national one or the reverse, a base price or table version the contract does not use, or miles the rate confirmation does not support.
- Auditing a surcharge means extracting the invoice and the rate confirmation into fields, looking up the governing index price, recalculating, and disputing only the difference.
What a fuel surcharge is supposed to do
Diesel is one of the largest operating costs of a motor carrier, and its price moves faster than freight contracts are renegotiated. The fuel surcharge separates the two: the line haul rate stays fixed for the term of the agreement, and a variable charge on top passes the change in fuel cost through to the shipper, up when diesel rises and down when it falls.
In the United States most contracts tie that charge to a public number: the weekly retail on-highway diesel price published by the Energy Information Administration, the EIA, often still called the DOE index after its parent department. The EIA publishes a national average and averages for each Petroleum Administration for Defense District, the PADD regions, plus some subregions. A contract picks one of these prices, a rule for which week applies to a shipment, a base price and a method. Everything on the invoice should follow from those four choices.
Because the formula is fixed and the index is public, a fuel surcharge can be checked to the cent. In practice it rarely is. A shipper paying a few hundred freight invoices a month sees a surcharge on nearly every one, each calculated by the carrier's billing system with its own assumptions about the week, the region and the miles.
52
weekly diesel prices a year, and a contract must say which one each load uses
5
PADD regions with their own average, beside the national price
6
checks per invoice in the example below, from line haul to duplicates
Two ways surcharges are calculated
Truckload: cents per mile
Truckload contracts usually express the surcharge per mile. The common formula takes the current index price, subtracts the base price at which the surcharge is zero, and divides by an agreed fuel economy in miles per gallon. With a base of 1.25, an economy of 6.0 and an index of 3.785, the surcharge is 2.535 divided by 6.0, or about 0.42 per mile. Multiply by the miles on the rate confirmation and you have the charge. Some agreements replace the formula with a table of price ranges and per-mile amounts; the audit is the same lookup.
Less than truckload: a percentage of line haul
LTL carriers usually publish a fuel table that maps a diesel price range to a percentage, applied to the line haul after discount. A table might set 31.5 percent for an index between 3.751 and 3.800, and 32.0 percent for 3.801 to 3.850. On a shipment with a gross line haul of 1,000 and a 72 percent discount, the net is 280 and the surcharge at 31.5 percent is 88.20. Apply the same percentage to the gross, or to an 85 liftgate fee as well, and the figure changes without anything on the invoice looking odd.
The contract decides, not the carrier's current tariff
Where surcharges drift from the contract
The wrong week
A contract might say the price published on the Monday on or before the pickup date, or the week before delivery, or the week of the invoice. A billing system that uses the invoice date when the contract says pickup will land on a later week, and in a rising market the later week is higher. The difference per load is a few cents a mile; across a year of freight it is real money.
The wrong region, base or table
A national price billed as a regional one, or the reverse, shifts the index by the gap between them. A base price or table version from the carrier's current tariff rather than your agreement shifts every surcharge by the same amount, every week.
The wrong miles or the wrong base charge
A per-mile surcharge billed on more miles than the rate confirmation carries, or a percentage applied to accessorials the contract excludes, inflates the charge even when the rate itself is right. And a surcharge billed once on the invoice and again on a balance due notice is a duplicate like any other.
Wrong index week
Miles not on rate con
Applied to accessorials
Regional vs national price
Old table or base price
Billed twice
Audit one invoice, end to end
1. Pair the invoice with its terms
Match each freight invoice to its load or PRO number, its rate confirmation or bill of lading, and the contract fuel terms that applied on the pickup date: index, week rule, base price, fuel economy or table, and what the surcharge applies to.
2. Extract the fields that decide the charge
The audit runs on a short list: load number, pickup and delivery dates, miles, line haul, accessorials, and the surcharge as billed, with its index date, price, rate and basis when the carrier prints them. Define these once with types and required flags, as covered in the post on designing extraction schemas, so every carrier's invoice comes out in the same shape.
3. Look up the index and recalculate
Keep a table of the weekly index prices your contracts use, keyed by publication date. Apply the week rule to the pickup date, look up the price, run the contract formula, and compare with the invoice.
{ "rate_confirmation": { "load_number": "LOAD-EXAMPLE-40217", "pickup_date": "2026-09-17", "miles": 820, "line_haul": 2050.00, "fuel": { "index": "national_on_highway_diesel_weekly", "week_rule": "monday_on_or_before_pickup", "base_price": 1.25, "miles_per_gallon": 6.0, "rounding": "per_mile_to_cent" } }, "invoice": { "invoice_number": "INV-EXAMPLE-90314", "line_haul": 2050.00, "fuel_surcharge": { "index_date": "2026-09-21", "index_price": 3.905, "rate_per_mile": 0.44, "miles": 860, "amount": 378.40 }, "total": 2428.40 }, "index_lookup": { "index_date": "2026-09-14", "price": 3.785, "note": "illustrative price, not published data" }, "checks": [ { "rule": "line_haul_matches_rate_con", "result": "pass" }, { "rule": "index_week_follows_contract", "billed": "2026-09-21", "expected": "2026-09-14", "result": "fail" }, { "rule": "rate_per_mile_from_formula", "billed": 0.44, "expected": 0.42, "result": "fail" }, { "rule": "miles_match_rate_con", "billed": 860, "expected": 820, "result": "fail" }, { "rule": "surcharge_on_line_haul_only", "result": "pass" }, { "rule": "no_other_surcharge_for_load", "result": "pass" } ], "expected_fuel_surcharge": 344.40, "expected_total": 2394.40, "disputed_amount": 34.00}In this example the load picked up on Thursday, September 17, so the contract's rule points to the price published Monday, September 14: 3.785 in this sample. The carrier used September 21, when the sample price had jumped to 3.905, which gives 0.44 per mile instead of 0.42. It also billed 860 miles where the rate confirmation says 820. The supported surcharge is 820 at 0.42, or 344.40, against 378.40 billed, and the 34.00 difference goes to the carrier with the index date, the formula and the rate confirmation attached. The line haul and the absence of a second surcharge both pass.
Fix the pattern, not only the invoice
A surcharge error is rarely a one-off. A carrier on the wrong week is on the wrong week for every load, and a carrier on an old table is off by the same amount every time. Report disputes by carrier and by cause, and send the pattern back with the first claim: one corrected setting in their billing system is worth more than a hundred recovered invoices.
The surcharge check belongs inside the wider freight invoice audit, next to the line haul and the accessorials. LTL corrections bring their own surcharge too: when a reweigh or reclass changes the line haul, the percentage should be recalculated on the supported amount, not the billed one. And a surcharge billed again on a separate notice is exactly what duplicate detection should catch.
Measure it
Track the share of invoices whose surcharge was recalculated before payment, the amount disputed and recovered by carrier and by cause, and the share of carriers whose surcharges match the contract with no exceptions for a full month. On the extraction side, measure field-level accuracy on a labeled set of your own invoices, with the attention on dates, miles and amounts: a pickup date read one day off can move a load into another index week.
Before you automate: a short checklist
- Load each contract’s fuel terms: index, region, week rule, base price, fuel economy or table version, and effective dates.
- Keep the weekly index prices your contracts reference, keyed by publication date.
- Match every invoice to its load, rate confirmation or bill of lading, and the terms in force on the pickup date.
- Extract dates, miles, line haul, accessorials and the billed surcharge into fields.
- Apply the week rule, look up the price, and recalculate the surcharge with the contract formula.
- Confirm what the surcharge applies to: line haul only, or the accessorials the contract names.
- Dispute the difference with the index date and the calculation attached.
- Report errors by carrier and cause, and ask the carrier to correct the setting behind them.
Where extraction fits
A surcharge audit stalls at the step where someone opens each invoice and rate confirmation to retype a date, a mileage and a rate. Parser extracts freight invoices, rate confirmations and bills of lading into structured JSON against the template you define, through upload, email or the API, so the values that decide each surcharge land in your audit as fields, matching invoices go to payment, and only the ones the index and your contract do not support reach your team.