← All postsVan sales

How to calculate route profitability per stop, and what to do about the ones that lose money

iotoms team · October 5, 2026 · 5 min read

A bakery and snack distributor running eight vans out of one depot reviewed route performance the same way most do: revenue by route, checked monthly against last year. By that number, Route 6 was unremarkable — a little below average, nothing worth a meeting. Nobody looked closer because nothing on the revenue report gave them a reason to.

A route that looked fine was quietly losing money

Route 6 had 34 stops. Nineteen were solid independent grocers ordering two to three cases a visit, consistent and profitable. The other fifteen were convenience stores and gas-station counters added over three years, one at a time, each because a rep didn't want to say no to a sale. Individually, every one of those fifteen made sense to add. Together, they'd turned a tight, profitable route into one where almost half the stops existed mostly to be visited.

The revenue report couldn't see the difference, because it only measured what came in at the register. It had no line for what it cost to get there — the fuel and driver time to reach a gas station eleven minutes off the main loop for an order worth $38, or the fifteen minutes spent restocking a cooler at a counter that generated less gross margin than the visit itself cost to run. A route can hit its revenue number every month while a third of its stops are quietly draining the route's actual profit, and nothing on a standard report flags it, because revenue and profitability aren't the same question.

Why the gap stays invisible

The reason it goes unnoticed for years, not months, is that each small account looks harmless in isolation. A $38 order isn't a loss on paper — it has a positive gross margin, so it reads as a win every time the report runs. What's missing is everything it costs to deliver: the drive time to and from a stop that's out of the way, the minutes spent at the counter restocking and troubleshooting a card reader, the fuel for the detour, and a share of the driver's hourly cost for the time none of that other work leaves for the rest of the route.

None of those costs show up anywhere a manager normally looks. They're buried inside a route's total drive time and total hours, averaged across 34 stops instead of attributed to the one stop that actually caused them. A route's total cost is easy to see on a fuel log and a payroll report. Which specific stops are driving that cost is not — until someone goes stop by stop.

The turning point: pricing the visit, not just the sale

The fix started with a question nobody had asked in those terms before: what does it actually cost to serve each stop, not just what does each stop buy? The depot already had the raw ingredients in the field app — arrival and departure time at every stop, drive time between them, and order size and gross margin per visit. Turning that into a per-stop number meant a simple formula: gross margin on the order, minus a share of driver and vehicle cost for the time that stop consumed (drive time to reach it plus time spent there), minus any credits or returns processed at that visit.

Run across all 34 stops, the number was stark. The nineteen grocers each contributed $40 to $90 a visit after cost. Eleven of the fifteen smaller stops were barely breaking even. Four were running negative — the depot was paying, on average, about $6 more to serve each of those stops than the stop returned in margin, visit after visit, week after week, invisible inside a route total that still looked acceptable.

That didn't mean closing the four accounts. For two, a minimum order size and a switch from a weekly to a biweekly visit turned them profitable without losing the relationship — the account still got served, just on a schedule the economics could support. One agreed to a small delivery surcharge once it was explained honestly. The fourth genuinely couldn't support the cost of a dedicated stop at any visit frequency, and the distributor moved it to a will-call arrangement instead of a route visit — the owner picked up a standing order from the depot every other week, at a lower cost to serve than any van visit could reach.

Route 6's total stop count barely changed. Its profitability did, by a meaningful enough margin that the same review got run across the other seven routes within the quarter.

How to calculate it, and what to do with the number

  • Start from what the field app already records — visit time, drive time between stops, and order size and margin per stop. The raw data usually already exists; it's just never been attributed to a single stop before.
  • Formula per stop: gross margin on the order, minus a proportional share of driver and vehicle cost for drive time to that stop plus time spent there, minus credits or returns processed at that visit.
  • Run it per account, not per route. A route-level number hides exactly the accounts that need the most attention.
  • Sort by the result, not by revenue. The smallest-revenue stop on a route is sometimes the most profitable one; the mid-size stop fifteen minutes off the main loop is often the one losing money.
  • For stops running negative, try the cheaper fix first — a minimum order, a lower visit frequency, or a small delivery charge — before deciding to drop the account.
  • Re-run the numbers quarterly. A route's stop mix drifts the same way it grew: one account at a time, quietly, until the next review catches it.

iotoms already timestamps arrival, departure and drive time at every stop from the same field app a rep uses to sell, and ties each visit to its order size and margin — so a per-stop profitability view is a report in the console rather than a manual reconstruction, making it practical to run every quarter instead of once, if ever.

See your own routes running on iotoms

Book a demo