Skip to main content

Most carriers can tell you their fuel cost per mile. Fewer can tell you their cost per mile, and the gap between those two numbers is where margin quietly disappears.

The reason is structural rather than careless. Fuel and driver pay arrive as transactions — a card swipe, a settlement line — so they are easy to attribute to a truck and a trip. The costs that get forgotten are the ones that show up as a monthly bill, an annual renewal, or a repair six months after the wear happened.

The easy half

These attach cleanly to a load and almost everyone tracks them:

  • Fuel, ideally from card transactions rather than receipts, so it reconciles
  • Driver pay, whatever the model — per mile, percentage, salary, flat rate
  • Tolls, which are easy to attribute and easy to forget entirely
  • Lumpers and load-specific accessorials

If this is all you count, you are not calculating cost per mile. You are calculating variable cost per mile, and it will make every lane look better than it is.

The half that decides profitability

Fixed costs. The truck payment, insurance, permits, plates, ELD subscription, parking, the office. These do not care how many miles you run, which is precisely why they are dangerous. A truck that ran fewer miles this month did not get cheaper — every mile it did run got more expensive. Carriers who ignore this systematically misprice slow months.

The mechanic: total your monthly fixed costs, divide by the miles you actually ran, and carry the result as a per-mile figure. It will move month to month. That movement is the signal, not noise.

Maintenance, amortized. Tires do not wear out on the day you replace them. They wear out across every mile since the last set. Booking that expense entirely against whichever load happened to be running when the truck went into the shop tells you almost nothing — worse, it makes one lane look catastrophic and the ten lanes that actually caused the wear look clean.

A per-mile maintenance accrual is a better model. It smooths the expense across the miles that produced it, and it stops a single repair from distorting a month.

Equipment depreciation or amortization. If you financed the truck, the payment is a cash cost you already counted. The asset is also losing value, which is a real cost that never appears on a bank statement. Whether you carry it depends on how you think about the business, but decide deliberately rather than by omission.

Deadhead. Not a cost line, but a denominator problem. A 400-mile load with 150 miles of deadhead cost you 550 miles of fuel, wear and hours. Judging the rate against 400 flatters it.

Why "what did that load make" is harder than it looks

Once fixed costs and maintenance accruals are in the picture, per-load profitability stops being subtraction and starts being allocation. You are deciding how much of a monthly insurance bill belongs to a Tuesday run to Columbus.

There is no perfect answer. There is a consistent one, which is worth more:

  1. Pick an allocation basis — miles is the usual choice — and keep it.
  2. Apply it to every load, including the bad ones.
  3. Compare like with like over time rather than agonizing over any single load.

The value is not in the precision of one number. It is that a lane you have run forty times can be compared honestly against a lane you have run twice.

What this changes in practice

Carriers who account for fixed and maintenance costs tend to make different decisions than those who do not:

  • Marginal loads get declined, because the rate no longer covers the real cost
  • Slow weeks feel expensive rather than merely quiet, which is accurate
  • Equipment decisions get made on total cost rather than on repair-bill pain
  • Rate negotiations start from a floor you can defend

None of that requires better data than you already have. It requires the data to be in one place and the arithmetic to happen the same way every time.

Where the software fits

This is the argument for keeping loads, fuel, maintenance and equipment finance in one system rather than four. Profitability in TFS Fleet folds in maintenance cost per mile and monthly fixed costs alongside revenue and driver pay, so per-truck and per-load numbers reflect the whole cost rather than the convenient part of it.

See Analytics & Reporting and Accounting & Factoring.

The short version

Fuel and driver pay tell you whether a load covered its variable cost. Fixed costs, amortized maintenance and deadhead tell you whether it was worth running. The second question is the one that decides whether the year works — and it is the one most spreadsheets are not set up to answer.

Common questions

What is a good cost per mile?
There is no useful benchmark, and chasing someone else's number is a trap. Cost per mile depends on equipment age, financing, lanes, deadhead, insurance and how you pay drivers. The number that matters is your own, calculated the same way every month so the trend means something.
Should deadhead miles be in the denominator?
Track both. Cost per loaded mile tells you whether a rate covers the trip; cost per total mile tells you what the truck actually costs to run. Carriers that only look at loaded miles tend to underestimate the true cost of a lane with a bad backhaul.
How do I handle a truck payment in a per-mile number?
It is a fixed cost, so it does not belong in a per-mile rate directly. Total the monthly fixed costs, divide by the miles you actually ran that month, and treat the result as a per-mile contribution. The key consequence: fewer miles makes every mile more expensive.
How often should I recalculate?
Monthly is enough for most carriers, and it matters more that the method stays constant than that the interval is short. A number calculated three different ways across three months tells you nothing about direction.

One system of record for the work behind this article

TFS Fleet puts dispatch, ELD and hours-of-service data, fuel and IFTA, maintenance and inspections, documents, settlements, and analytics in the same place — 12 modules on one multi-tenant platform, so the operational detail above has somewhere to live other than a spreadsheet and a text thread.