D&D Audit

Guide

Carrier invoice and contract: why they're almost never compared

Published: 2026-09-04

Written by Vytautas Natys, CEO of UAB NVGroup.

Almost every logistics company checks the freight invoices it receives. And almost none of them check the one thing that actually matters.

They check whether the total matches the sum of the line items, whether VAT was calculated correctly, whether the invoice matches the order. They don't check the one thing: whether the rate applied is the one that was actually agreed.

The structural reason

The invoice arrives in accounting. Accounting doesn't have the rate agreement — that sits in the logistics department or with the commercial manager. The logistics department never sees the invoice, because it never reaches them.

So both sides do their job honestly and accurately, and the one comparison that would actually matter never happens.

Volume makes it worse. There can be hundreds of invoices a month. Comparing each one against the rate schedule would mean opening the contract, finding the lane, checking the weight or volume bracket, recalculating the fuel surcharge against that month's index. Fifteen minutes per invoice. For a hundred invoices, that's twenty-five hours a month — more than half a full-time role.

So no one does it. Not out of negligence, but because the arithmetic doesn't allow it.

Seven categories where errors repeat

1. Wrong rate for the lane. The contract has one rate for Kaunas–Hamburg, but the invoice applies a general or outdated rate. Usually appears after a contract renewal, when the carrier's system still holds the old entry.

2. Fuel surcharge on the wrong base. The fuel surcharge is usually calculated as a percentage of the base rate. Errors: calculated on the total including accessorials, the wrong month's index applied, or the surcharge applied even though the contract sets a fixed "all-in" rate.

3. Accessorial charges with no basis. A second drop point, a liftgate, an ADR surcharge, customs formalities, detention. Each of these can be entirely legitimate — but it must be in the contract, and it must have actually happened. This category catches the most.

4. Weight or volume bracket error. Groupage rates are tiered. Billing 2,480 kg under the 2,500–5,000 kg bracket is an error that costs little once, but not once it repeats a hundred times.

5. Duplicates. The same service billed twice on an invoice, or the same invoice received by email and through the system and paid twice. Rare, but the individual amount is large.

6. Currency and exchange rate. An invoice in a different currency, converted at a rate other than the one specified in the contract.

7. Billed for something that never happened. A cancelled trip, an unused booking, an additional stop that never occurred.

None of these categories are fraud. Almost all of them come from a mismatch between two companies' systems, and that's exactly why they repeat month after month until someone stops them.

Why internal checking doesn't help

The usual answer is "we check our invoices". In practice that check is almost always one of three:

Sum check. Whether the line items add up to the total. Catches typos, catches none of the seven categories.

Comparison with last month. Whether the amount looks similar. Doesn't catch a systematic error that's been there from the start — on the contrary, it becomes the benchmark.

Spot-checking. Only the largest invoices get checked. But in this field, the money isn't in size, it's in frequency: twenty euros across a hundred invoices is more than two hundred euros in one.

What can and can't be automated

You can automate the comparison once the rate agreement is entered in structured form: lane, weight bracket, base rate, fuel surcharge formula, allowed accessorials. The system then checks every invoice, not a sample, and flags discrepancies with a reference to the specific contract clause.

The hardest part isn't the comparison — it's entering the contract. Rate schedules arrive as Excel files, each carrier structured its own way, sometimes with footnotes that change the logic. The first time, it's almost always semi-manual work. Anyone promising fully automatic rate-contract reading is promising something no one has done well yet.

You can't automate the decision of whether to dispute. The carrier is a partner, not an opponent, and some discrepancies are resolved by a conversation, not a claim.

An illustrative calculation

Again — not statistics, a calculation with assumptions. Plug in your own numbers.

AssumptionValue
Monthly freight spend€180,000
Invoices per month240
Invoices with a discrepancy8 %
Average discrepancy per invoice€46

240 × 8 % = 19 invoices with a discrepancy
19 × €46 = €874 per month, or €10,500 per year

Category three — accessorial charges with no basis — is assessed separately and often carries a larger unit amount, so the real result depends on how many accessorial services your shipments actually involve.

And the most important thing this calculation doesn't show: a systematic error doesn't stop on its own. A wrong rate on a lane you ship weekly will keep repeating until someone notices it. One check stops the flow — it doesn't just recover the past.

Past and present are two different products

Worth separating, because both the value and the price differ.

Historic audit reviews invoices already paid. The result is a credit note or a refund. There's a concrete amount, so success-fee billing fits.

Ongoing control checks the invoice before payment. No overpayment ever happens. This is more valuable, because there's nothing to recover from anywhere and no awkward conversation with the carrier. But there's no "recovered amount" to calculate a percentage from — which is why this is a subscription service, not a success-fee one.

Most companies start with a historic audit, because it shows whether there's anything worth talking about at all. Only after seeing the result do they move to ongoing control.

Frequently asked questions

Where do you start if the rate agreement is an Excel file?

With one lane. Take your most frequent route, enter its rate and fuel surcharge formula, and compare it against the last three months. If there are no discrepancies, the odds of systematic errors elsewhere are lower. If there are, you have your answer on whether it's worth going further.

Will this damage the relationship with the carrier?

In practice, the opposite. A discrepancy shown with a reference to a specific contract clause is usually corrected without dispute — because on the carrier's side it's a system error too, not a decision. What damages relationships is vague accusations, not precise numbers.

How long do you have to dispute a paid invoice?

Depends on the contract and applicable law. Contracts often set a claim deadline; if not, general statutory limitation periods apply. Your lawyer will give you the exact answer, but the practical rule is: the sooner, the easier.

Do we need to change our accounting system?

No. The comparison happens before or after the invoice reaches accounting, not inside it.

How is this different from container detention/demurrage audit?

A detention/demurrage audit checks one specific charge type against the ocean carrier's free-time contract terms. Freight invoice audit checks the whole invoice against the rate agreement. They often find different things in the same shipment.

Related articles:

Driver waiting time at the ramp: why it's almost never paid →

Check your invoice now
Book a call