Logistics & Supply Chain · India / Middle East
Recovering 4.1% of freight spend by auditing every invoice
A mid-sized forwarder audited freight invoices by sampling roughly 5% of them, because auditing the rest by hand was uneconomic — so systematic small overcharges passed unnoticed, and shipment exceptions were routinely discovered when the customer rang to complain.
- Client
- Freight forwarder and 3PL
- Published
- 29 July 2026
The client is not named at their request. Figures are as reported by them.
- 4.1%
- Freight spend recovered in year one
- 100%
- Invoices audited, from a 5% sample
- 74%
- Track-and-trace enquiries auto-resolved
- 31 hrs
- Median exception detected ahead of customer contact
On volume previously audited by 5% sampling
The situation
Two problems that turned out to share a cause.
Freight invoices arrived from forty-odd carriers and agents in every format from a structured EDI feed to a scanned PDF attached to an email. Auditing one properly meant checking it against the contracted rate card, the accessorials actually incurred and the service actually delivered. Doing that by hand took twenty minutes, so the team sampled about one invoice in twenty and accepted the rest.
Separately, shipment exceptions were discovered when the customer called. Milestone data existed across carrier systems, but nobody was watching it against plan, because watching it meant a person logging into six portals.
Both problems were downstream of the same gap: no normalised view of what was supposed to happen versus what did.
What we did
Weeks 1–2 — the normalisation layer. One canonical shipment and invoice model, with per-partner adapters feeding it. Structured feeds went through deterministic parsing because it is cheaper and more reliable where the format holds. The emailed spreadsheets and scanned PDFs went to extraction, which is where the model earns its place — the column order changes every month and a rigid parser cannot cope.
Weeks 3–5 — invoice audit. Every line checked against the contracted rate card, accessorial entitlement and the actual service milestones. Discrepancies above a threshold assembled into a dispute pack with the evidence attached, for a person to review and submit.
Weeks 6–7 — exception detection. Milestones monitored against plan, deviations flagged as they occurred, and the customer notification drafted with the case assembled.
Weeks 8–9 — track-and-trace deflection and handover. Status enquiries answered automatically from the normalised layer, with anything carrying a decision escalated to operations.
Why the recovery number is what it is
The 4.1% is not one large error. It is the accumulation of small systematic ones that sampling was structurally unable to find — an accessorial applied where it was not entitled, a fuel surcharge computed on a superseded rate, a service level billed as express and delivered as standard.
Each individual discrepancy was small enough that finding it by hand would have cost more than recovering it. That is precisely why they persisted, and precisely why automating the check changes the economics rather than just the effort.
What we would do differently
We built a portal scraper we did not need.
One carrier had no API on their standard tier, so we scoped and built browser-driven extraction against their portal in week four. It worked, it was brittle, and it broke twice in the first month when the portal changed.
In week seven the client's account manager asked the carrier directly and had API access enabled within three weeks, at no cost, because it was available on the tier they were already paying for. Nobody had asked.
We now make the commercial check a required step before scoping any portal integration — who owns this relationship, and have they asked. It costs one email and it has saved that work twice since. The general rule we took from it is in our logistics guidance: if a partner has an API and simply has not switched it on, that is a conversation, not an engineering problem.
Where it went next
Customs documentation extraction went live the following quarter, reusing the extraction and review scaffolding. The dispute packs are now submitted by a single coordinator rather than the three people who previously assembled them.
The portal integration that remains — for one agent with genuinely no alternative — is monitored on a per-cycle basis so a break is detected within hours rather than at month end, and its maintenance cost is quoted in the retainer rather than absorbed silently.
Stack
- Claude
- Python
- Postgres
- Airflow
- n8n
- Grafana
“The recovery paid for the build inside two quarters, which is what got it approved. The change everyone actually notices is that we ring the customer about a delay before they ring us.”
Want the same conversation about your process?
Bring the workflow that costs you the most time. In thirty minutes you will know whether it is automatable, roughly what it would cost, and where it would fail.
Or email [email protected] · we reply within 1 business day