How to stop cash leakage in van sales before it looks like theft
iotoms team · September 5, 2026 · 5 min read
A cleaning-supplies distributor running eight vans out of a single depot noticed the gap first in the bank statement, not the books. Deposits were consistently a little short of what the day's invoices said they should be. Not every day, and never by much — thirty dollars here, sixty there, once in a while a van that came back dead even. Spread across eight reps and six days a week, it didn't look like a pattern. It looked like noise. So for the better part of a year, it got written off as noise.
The owner only started paying attention when a new bookkeeper, doing the monthly reconciliation for the first time, added up the shortfall and found it was closer to four thousand dollars over the previous quarter. That got a name fast: theft. Every conversation in the office that week was about which rep to suspect.
The instinct to suspect a thief is usually wrong, and unhelpful either way
Van sales puts one person in the field acting as salesperson, delivery driver, invoice clerk and cash collector at the same time, with no one looking over their shoulder for eight or ten hours a day. It's a role built for a genuine loss to hide in, and it's also a role built for a dozen boring, honest reasons to produce the exact same symptom. A rep who quietly waives a five-dollar short-fill so a regular customer doesn't have to make a second stop by the register. A store owner who pays by check when the invoice says cash, and the check doesn't get flagged as a different tender type. A stack of small invoices that get corrected verbally at the counter — "just take fifty off, we'll sort the credit later" — and the "later" never comes because there's no form for it. None of that is theft. All of it produces a gap between what the books say was invoiced and what actually landed in the bank, and from the office, a gap looks the same no matter which of those caused it.
That's the real problem with how this distributor was tracking it: reconciliation happened once a month, against a single number — total invoiced versus total deposited — for the whole fleet. A monthly total can tell you a gap exists. It cannot tell you which van, which day, or which of a dozen plausible causes produced it. So the owner was left with a number and a hunch, and a hunch is a bad thing to act on when it's aimed at eight people who mostly didn't do anything wrong.
Where the actual leaks were, once they looked per rep and per day
The bookkeeper redid the reconciliation differently: instead of one monthly total, she pulled invoiced amount versus cash-and-digital collected, per rep, per day, for the whole quarter. The pattern that had been invisible in aggregate was obvious within an hour.
Six of the eight reps had a small, random, roughly symmetric variance — sometimes a few dollars over, sometimes under, netting close to zero over a month. That's rounding and honest friction: change given from a personal float, a customer paying a dollar more to avoid coins. Normal.
One rep ran consistently short, always in the five-to-fifteen-dollar range, always on invoices with a specific customer type — small independent stores paying cash on delivery. Sat down with him directly, it turned out to be exactly what it looked like from the pattern: he'd been giving informal "loyalty" discounts off the invoice total to keep a few relationships smooth, and never once wrote them down, because there was nowhere on the paper invoice to write them down.
The eighth rep's numbers were short in a way that didn't correlate with anything — not customer type, not day of week, not route. That one was the actual problem, and it took the per-day data, not a suspicion, to separate him from the rep who was just a soft touch on discounts.
What closes the gap
The fix wasn't tighter supervision of eight people who were mostly fine. It was removing the conditions that made an honest gap and a dishonest one look identical from the office.
- Reconcile cash collected against invoiced totals per rep, per day — not per fleet, per month. A shortfall of eight dollars is a rounding error. The same shortfall, on the same rep, ten days running, is a conversation.
- Give every discount a reason code, entered at the point of sale. If waiving five dollars takes one tap and a reason, it stops being an unrecorded adjustment and starts being a line item the office can see and, if needed, question.
- Record tender type on the invoice itself, not after the fact. Cash, card, check and credit-on-account each reconcile differently; collapsing them all into "collected" is how a legitimate check payment gets misread as a cash shortfall three weeks later.
- Separate the symmetric variance from the directional variance. Noise that nets to roughly zero over time is friction. A number that's short in the same direction, on the same person or the same customer segment, every time, is a signal — but only if you're tracking at a fine enough grain to tell them apart.
- Make the paper trail as fast as the workaround it replaces. A rep will route around a system that's slower than just quietly fixing it themselves in the moment. Recording an adjustment has to take less time than not recording one.
The distributor's real fix was cultural as much as procedural: reps stopped absorbing customer friction silently because there was finally a fast, visible way to record it instead. The one genuine shortfall got handled directly, on data specific enough to justify it, instead of a fleet-wide accusation that would have cost him six good reps to catch one bad one.
iotoms' field app captures tender type and any discount with a reason code at the moment of sale, and the day-close reconciliation compares invoiced totals to collected cash and digital payments per rep, per day — so a real shortfall shows up small, attributed, and fast, instead of as a fleet-wide number nobody can trace back to the day it happened.