A logistics operator was paying a large volume of carrier invoices every month, and checking almost none of them line by line. There was no time to. Each invoice carried a base rate, fuel surcharges that changed week to week, and a list of accessorial charges — liftgate, detention, residential delivery — any of which could be wrong. The finance team knew some of what they paid was overcharged, but not which charges, and the effort of finding out by hand was more than the leak appeared to be worth. So they paid, and absorbed it.
The challenges we had to solve
- The agreed rates lived in contracts and rate cards that were not in any system the invoices could be checked against.
- Fuel surcharges followed formulas that moved weekly, so a static rule would quickly go stale.
- Not every mismatch is an error — some accessorials are legitimately variable — so the tool had to flag for review, not auto-reject.
- Disputing a charge is a relationship matter with a carrier, so a person had to decide whether to raise it.
How we approached it
Most of the early work was unglamorous: getting the agreed rates, accessorial schedules and fuel formulas into a structured form the system could compare against. Without that, there was nothing to audit. Once the reference data was clean, the check was almost simple — each invoice line is compared to what was agreed, and anything that does not match within tolerance is flagged before payment, with the contract clause it appears to breach attached.
The system does not refuse to pay and it does not contact the carrier. It produces a short, evidenced list of charges that look wrong, and a person in finance decides which to query and which to let go. We built the check to run before payment rather than after, so the conversation with the carrier happens while the money is still in hand. We measured against the value of charges queried and recovered against a target the team set, and watched the false-flag rate so the tool stayed worth reviewing rather than crying wolf.
Where it stands
The team now sees, before each payment run, a manageable list of charges worth challenging — with the evidence already assembled. They raise the ones that matter and waive the trivial ones, which keeps the carrier relationships steady. Charges that used to be paid without question because nobody had time to check them are now caught while there is still time to do something about it.
