# Freight Invoice Audit: How to Match Carrier Invoices Against the Bill of Lading and Rate Confirmation Before You Pay

> Carrier invoices drift from the rate you agreed. Learn how to audit each one against the bill of lading and rate confirmation, and catch accessorial overbilling.

- Source: https://parserai.co/blog/freight-invoice-audit-bill-of-lading-rate-confirmation-logistics
- Published: 2026-10-01

---
Every load you tender ends in three pieces of paper: the rate confirmation that set the price, the bill of lading signed at pickup and delivery, and the carrier's invoice asking to be paid. In a perfect week they agree. In a real week, the invoice carries four hours of detention the delivery times do not support, a fuel surcharge calculated on the wrong basis, and a lumper fee with no receipt. Freight invoice audit is the habit of catching those before the money leaves.

Key takeaways

- A freight invoice audit compares three documents: the carrier invoice, the rate confirmation that set the price, and the bill of lading that proves what moved.
- Most freight overbilling hides in accessorials such as detention, lumper and fuel surcharge, not in the base linehaul rate.
- An accessorial is payable only when the rate confirmation allows it and a document such as a signed BOL or lumper receipt supports it.
- Extracting all three documents into one schema lets rules clear clean loads automatically and send only exceptions to an analyst.

## What a freight invoice audit actually checks

A freight audit is a three-way match, the logistics cousin of the purchase order, receipt and invoice match in accounts payable. Each document answers a different question. The **rate confirmation** answers *what did we agree to pay?* It fixes the linehaul rate, the fuel surcharge method, the accessorials that are allowed and at what rates, and terms such as free time for detention. The **bill of lading** answers *what actually happened?* It identifies the shipment, the pieces and weight, the shipper and consignee, and, once signed, it proves delivery and often records arrival and departure times or exceptions such as damage. The **carrier invoice** answers *what is being asked for?*

The audit is the comparison. Is the invoice for a load we actually tendered? Does the linehaul equal the confirmed rate? Is every extra charge permitted by the rate confirmation and supported by evidence? Has this load already been paid? If all of that holds, the invoice is approved as billed. If not, the difference is short-paid and disputed with the carrier, with the document that proves it.

3

documents per load: rate confirmation, bill of lading, invoice

1

load ID, if you are lucky, that ties them together

0

accessorials payable without both permission and proof

## Where overbilling hides

Base rate errors are the least common problem, because the rate is the number everyone looked at when the load was booked. The money leaks through the charges added after the truck rolled.

### Detention

Detention compensates the carrier when the driver waits at a facility past the free time, commonly two hours. It is legitimate and often deserved. It is also the easiest charge to inflate, because the invoice states a number of hours and the evidence lives somewhere else: on the signed bill of lading, in a check-in log, or in telematics data. If the bill of lading shows arrival at 07:40 and departure at 12:10, that is four and a half hours on site and two and a half billable after free time, not four.

### Fuel surcharge

Fuel surcharge is usually tied to a published diesel price index and expressed either per mile or as a percentage of linehaul. Errors come from using the wrong week of the index, applying a percentage when the agreement says per mile, or calculating on the wrong mileage. Each individual difference looks small, which is exactly why nobody recalculates it by hand, and why it adds up over hundreds of loads.

### Lumper and unloading fees

When a receiver requires third-party unloading, the carrier pays the lumper and bills the cost back. A reimbursable lumper charge should come with a lumper receipt showing the amount actually paid. Invoices that carry a round number with no receipt, or a receipt for less than the amount billed, are common.

### Stop-offs, layovers and duplicates

Extra stops billed on a single-stop load, a layover charge when the appointment was met, and the same invoice submitted twice, once by email and once through a portal, or once by the carrier and once by its factoring company. Duplicates are rare per load and expensive per occurrence.

_Illustrative share of overbilled dollars by charge type in a carrier invoice audit. Numbers are examples, not measured results._

## Why manual freight audit breaks down

In principle the manual process is simple: open the invoice, find the rate confirmation in the TMS or an email thread, find the signed bill of lading, compare. In practice each of those documents comes from a different place and in a different format. Rate confirmations are PDFs generated by a TMS or a broker platform. Bills of lading are scanned or photographed by the driver, sometimes sideways, often with handwritten times. Invoices arrive by email, portal or through a factoring company, each with its own layout and its own idea of what the load reference is.

Just finding the matching documents can take longer than checking them. The invoice references the carrier's pro number, the rate confirmation references your load ID, and the bill of lading references the shipper's order number. Unless someone or something reads all three and pulls out every reference, the match depends on an analyst searching by date and lane.

So teams compromise. They audit only invoices above a threshold, approve anything within a few percent of the quoted rate, or audit after payment and try to recover overcharges later, which is slower and less successful than short-paying up front. Accessorials under a hundred dollars quietly become a cost of doing business.

_Illustrative analyst minutes per load, manual audit versus structured extraction with rule-based matching. Numbers are examples, not measured results._

## A freight audit workflow that scales

The pattern that works is the same one that works for any document-heavy reconciliation: get every document into structured fields first, then let deterministic rules decide the clean cases, and route the rest to a person with the evidence already attached.

### 1. Extract all three documents into one schema

From the invoice: invoice number, carrier, every reference number on the page, linehaul, fuel surcharge and each accessorial as its own line with code, quantity, rate and amount. From the rate confirmation: load ID, lane, miles, linehaul, fuel surcharge method and rate, and the accessorial terms. From the bill of lading: BOL number, references, pieces and weight, signatures, arrival and departure times, and any exceptions noted. Defining these fields once, with types and required flags, is what makes the rules reliable. The post on [designing extraction schemas](https://parserai.co/blog/extraction-schema-design-field-types-versioning) covers how to model them so they survive new carrier layouts.

### 2. Link the documents to a load

Collect every reference from every document: load ID, pro number, BOL number, purchase order, shipper order. Match on any exact reference first, then fall back to carrier plus pickup date plus lane. Documents often arrive bundled in one PDF, an invoice with the BOL and lumper receipt behind it, so [splitting and classifying mixed batches](https://parserai.co/blog/document-splitting-classification-mixed-pdf-batches) is usually the first step.

### 3. Run the rules

Linehaul equals the confirmed rate. Fuel surcharge is recalculated from the agreed method, miles and index week. Detention hours are derived from the BOL times minus free time and compared with the billed hours. Every reimbursable accessorial has its receipt. The invoice number and load have not been paid before. Each rule returns pass or fail with the expected and billed values, so the output explains itself.

### 4. Decide and document

Loads that pass every rule are approved as billed. Loads that fail are short-paid by the unsupported amount, and the dispute goes to the carrier with the specific evidence: the BOL times, the recalculated surcharge, the missing receipt.

freight-audit.json — example result for one load

```
{
  "load_id": "LD-48213",
  "carrier_invoice": {
"invoice_number": "INV-90714",
"linehaul": 2450.00,
"fuel_surcharge": 612.50,
"accessorials": [
{ "code": "DETENTION", "hours": 4, "rate": 75.00, "amount": 300.00 },
{ "code": "LUMPER", "amount": 185.00 }
],
"total": 3547.50
  },
  "rate_confirmation": {
"linehaul": 2450.00,
"fuel_surcharge_basis": "per_mile",
"fuel_surcharge_rate": 0.54,
"miles": 1012,
"detention": { "free_hours": 2, "rate": 75.00 },
"lumper": "reimbursable_with_receipt"
  },
  "bill_of_lading": {
"bol_number": "BOL-552190",
"consignee_signed": true,
"delivery_arrival": "2026-09-22T07:40:00",
"delivery_departure": "2026-09-22T12:10:00",
"exceptions_noted": "none"
  },
  "checks": [
{ "rule": "linehaul_matches_rate_con", "status": "pass" },
{ "rule": "fuel_surcharge_recalculated", "expected": 546.48, "billed": 612.50, "status": "fail" },
{ "rule": "detention_supported", "expected_hours": 2.5, "billed_hours": 4, "status": "fail" },
{ "rule": "lumper_receipt_attached", "status": "fail" }
  ],
  "approved_amount": 3183.98,
  "disputed_amount": 363.52,
  "decision": "short_pay_with_dispute"
}
```

In this example the linehaul matches, but three checks fail. The surcharge was billed as a percentage instead of 54 cents per mile over 1,012 miles. The BOL supports two and a half billable detention hours, not four. And the lumper fee has no receipt. The load is approved at the supported amount and the remainder is disputed with a reason per line, instead of an analyst writing "please review" in an email.

Permission and proof, every time

An accessorial is payable only when two things are true: the rate confirmation allows it, and a document supports it. Checking only one of the two is how most overbilling gets paid.

## Measure what the audit finds

Track disputed dollars and dispute reasons per carrier and per facility. A carrier whose fuel surcharge fails every week has a configuration problem worth one phone call. A receiver that generates detention on every delivery is an appointment-scheduling problem, and the fix is on your side or your customer's, not the carrier's. Trust the extraction numbers too: before you let rules short-pay automatically, build a small labeled set of real loads and [measure field-level accuracy](https://parserai.co/blog/document-extraction-accuracy-field-level-eval-set), with special attention to handwritten BOL times.

## Before you automate: a short checklist

- Make the rate confirmation the source of truth for price and accessorial terms on every load.
- Require a signed bill of lading or proof of delivery before any invoice is approved.
- Extract every reference number from every document, not just the one you expect.
- Bill each accessorial as its own line with quantity, rate and amount, and audit it on its own.
- Recalculate fuel surcharge from the agreed method and index week instead of accepting the billed figure.
- Derive detention hours from BOL or check-in times, minus free time.
- Reject reimbursable charges that arrive without a receipt.
- Short-pay with a reason per line, and keep dispute outcomes per carrier.

## Where extraction fits

The rules in a freight invoice audit are not complicated; any logistics or finance team can write them. The hard part is the input: invoices, rate confirmations and scanned bills of lading in dozens of layouts, with the numbers that matter scattered across them. Parser extracts each document into structured JSON against the schema you define, so the audit starts from fields you can compare, not from a stack of PDFs.

Logistics

## Bills of lading, manifests and PODs become data

Parser turns transport documents into structured data so freight, deadlines and proof of delivery reconcile automatically.

[See Parser in action](https://parserai.co/demo?icp=log)
## FAQ

### What documents do you need for a freight invoice audit?

At minimum the carrier invoice, the rate confirmation or contract rate for the load, and the signed bill of lading or proof of delivery. Accessorial charges also need their own support, such as a lumper receipt or timestamps showing detention.

### What is the difference between a bill of lading and a rate confirmation?

The rate confirmation is the agreement between shipper or broker and carrier on price and terms for a load. The bill of lading is the shipping document that describes the cargo, its origin and destination, and is signed at pickup and delivery.

### Which freight charges are most often billed incorrectly?

Accessorials: detention billed without timestamps, lumper fees without a receipt, fuel surcharge calculated on the wrong index week, and duplicate stop-off or layover charges. Base rate errors happen too, but less often.

### Can freight invoice audit be automated?

Yes. Once the invoice, rate confirmation and bill of lading are extracted into structured fields, matching the load, comparing the rate and checking each accessorial against its evidence are deterministic rules. People handle only the loads that fail a rule.

