How Do You Audit Freight and 3PL Invoices?

A step by step method for auditing freight and 3PL invoices against contract terms, rate tables, and accessorial schedules before payment. Read the full guide.

Twitter LinkedIn WhatsApp
Ask AI: ChatGPT Claude Gemini Grok
How Do You Audit Freight and 3PL Invoices?

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. Freight and 3PL invoices are one of the densest places it accumulates, because a single shipment invoice can carry a base rate, a fuel surcharge, and four or five accessorial line items, each governed by a different clause in a different document.

Auditing these invoices means testing every one of those components against its own source, not just checking that the total looks plausible. This page walks through the method: what to pull, what to match against what, and where the matching logic breaks down if you do it by hand.

Executive Summary

Freight audit fails most often not because nobody checks the invoice, but because the check stops at the parts that are easy to check. Base linehaul rates get compared to a rate table. Fuel surcharges rarely get recalculated against the index they reference. Accessorials almost never get validated against the tariff that defines them.

The mechanism that causes this is structural: a freight invoice references multiple source documents, a rate table, a fuel surcharge matrix, an accessorial tariff, and a contract's minimum volume terms, and no single one of them contains the full picture. Reviewing the invoice against only one source clears the parts that source covers and misses the rest.

What changes it is treating the invoice as a set of separately auditable claims rather than one number to approve. Each line item gets matched to its own governing document, at the frequency that document requires. Per US Bureau of Labor Statistics Producer Price Index data for General freight trucking, long-distance TL (series PCU484121484121, read 2026-09-03), the underlying index rose 8.1% year over year to 195.575 in July 2026, which is exactly the kind of legitimate cost movement a proper audit has to separate from drift rather than flag as an error.

1. What documents do you need before you can audit a freight invoice?

You need the carrier contract or rate agreement, the current rate table by lane and equipment type, the fuel surcharge schedule and the index it references, the accessorial tariff defining each charge type, and the bill of lading or shipment record for the specific move. Without all five, you can only spot-check the parts each document happens to cover, and the rest of the invoice goes unverified by default.

Freight audit stalls at step one when the rate table lives in a spreadsheet from an old renewal, the fuel schedule is an email attachment, and the accessorial tariff is a PDF nobody indexed. Each document ages independently. A rate table gets updated at renewal.

A fuel schedule updates on the cadence the contract specifies. An accessorial tariff can go without a formal update even as new charge codes appear on invoices.

The practical fix is building one reference file per carrier that maps every possible charge code on an invoice to its governing document and the date that document was last confirmed current. That file is what an auditor, human or automated, actually checks the invoice against.

2. How do you validate the base linehaul rate?

Match the invoice's origin, destination, equipment type, and weight break to the exact cell in the rate table that governs that lane. A rate table is not one number per lane, it is a matrix of lane, equipment, and weight tier, and the invoice has to be matched on all three dimensions, not just origin and destination, or a shipment gets priced off the wrong tier.

The common failure here is not a wrong price, it is a right price for the wrong cell. A shipment billed at the 40,000 pound rate when the bill of lading shows 28,000 pounds passes a lane-level glance and fails a weight-tier check. The same applies to equipment type: a dry van rate applied to a shipment that moved on a flatbed.

This is where a worked example helps. Using the 1% to 3% band across a full diagnostic as an illustration only, on $800M in revenue with a meaningful share of service spend running through freight and 3PL, even a small share of shipments mismatched to the wrong rate tier compounds across a year of invoice volume.

3. How do you check a fuel surcharge without recalculating the whole index yourself?

Pull the surcharge schedule's stated index and lag period, then recompute the surcharge percentage the contract specifies for that index level on the invoice date, rather than trusting the number the carrier printed. Fuel surcharges are formulaic, not fixed, so the check is arithmetic against a published index, not a lookup against a static table.

Per the US Bureau of Labor Statistics Producer Price Index for gasoline (series WPU0571, read 2026-09-03, index at 302.759, up 37.1% year over year), fuel input costs move fast enough that a surcharge calculated even a few weeks off the contract's specified lag period produces a materially different number.

The audit question is never whether a surcharge exists. It is whether the percentage applied matches what the contract's formula, applied to the correct index value on the correct date, would produce. A surcharge that was set correctly at contract signing and never recalculated against index movement is a control gap, not a one-time error, which is why this line item needs the same test on every invoice rather than a one-time validation.

4. How do you audit accessorial charges on a freight invoice?

Each accessorial code, detention, liftgate, residential delivery, redelivery, has its own definition and trigger condition in the carrier's tariff. Validating the charge means confirming the shipment record actually meets that trigger, not just that the code appears on a rate sheet. A detention charge with no dwell time logged against it is an unvalidated claim, not a confirmed one.

Two separate checks apply to every accessorial line, and skipping either one leaves the charge unverified.

A. Trigger validation

Every accessorial has a condition that has to be true before the charge applies: a minimum dwell time for detention, a specific address type for residential delivery, a failed first attempt for redelivery. The invoice states the charge; only the shipment record can confirm the trigger. Auditing the charge means pulling that record and checking the condition, not just confirming the tariff lists a rate for the code.

B. Rate validation

Once the trigger is confirmed, the rate applied to it still needs to be matched against the tariff's stated amount for that code, which can vary by equipment type or region. A full treatment of this category, including which surcharges get billed without validation, lives in the accessorial charge audit page linked below.

5. How do you separate a legitimate rate increase from margin drift?

A legitimate increase traces to a signed rate amendment, a contractual index adjustment, or a published tariff change effective on a specific date. A charge with no such document behind it, or one that continues past the date its authorizing document expired, is what this guide is checking for. The test is documentary, not a judgment about whether the new number feels high.

Freight costs move. The BLS Producer Price Index for truck transportation of freight (series WPU3012, read 2026-09-03) stood at 170.984 in July 2026, up 10.9% year over year, and a carrier passing through a real cost increase under a valid contract clause is not drift.

The distinction that matters is whether the increase has an expiration built in and whether it was removed on schedule. A surcharge introduced for a defined period that keeps appearing on invoices after that period ends fails that test even though the original charge was legitimate. This distinction, and how to build a control that tests for it, is covered in the margin drift versus legitimate price increases page.

6. What does a full freight and 3PL audit workflow look like end to end?

The workflow runs invoice, then contract, then shipment record, then index, in that order: confirm the invoice's charge codes exist in the tariff, confirm the rate matches the table for that lane and tier, confirm the shipment record supports any accessorial trigger, and recompute any index-linked surcharge. Skipping a step does not skip the risk, it just moves the unvalidated charge past the check.

Each step depends on a different source document, and running them out of order tends to hide the step that got skipped rather than catching it.

  1. Match charge codes to tariff: Confirm every line item on the invoice corresponds to a defined code in the carrier's current tariff before checking its amount.
  2. Match rate to lane and tier: Check the base rate against the exact origin, destination, equipment, and weight tier cell in the rate table, not a lane-level average.
  3. Confirm accessorial triggers: Pull the shipment record for each accessorial charge and confirm the condition that justifies it actually occurred.
  4. Recompute index-linked surcharges: Recalculate any fuel or index-based surcharge against the published index value for the invoice date rather than accepting the printed figure.
  5. Flag expired authorizations: Check whether any charge traces to a rate amendment or surcharge period that has since expired.

7. Can this audit be done in a spreadsheet, or does it need something else?

A spreadsheet can hold the rate table and tariff reference, but matching hundreds or thousands of invoice lines against five separately updated source documents, on a recurring cadence, is a data-matching problem that outgrows manual review as invoice volume and carrier count grow. The honest answer depends on your invoice volume, carrier count, and how often your rate documents change, which only you can size.

A company running a handful of carriers on stable lanes can maintain this in a well-built spreadsheet for a while. The difficulty scales with the number of source documents that move independently, since every rate renewal, tariff update, and fuel schedule reset is a new version to reconcile against invoices already paid.

The decision between a one-time diagnostic and an ongoing matching control is covered in the build versus buy page linked below, along with the specific conditions under which each approach holds up.

For the wider pattern this sits inside, start with the margin drift guide.

For the wider pattern this sits inside, start with the margin drift guide.

8. Frequently Asked Questions (People Also Ask)

What is the first thing to check on a freight invoice before anything else?

Confirm that every charge code on the invoice actually exists in the carrier's current tariff. A charge code that is not defined anywhere in the governing documents cannot be validated against a rate, so it has to be flagged before any rate or trigger check is worth doing.

How often should the fuel surcharge index be checked?

On the cadence the contract's surcharge schedule specifies for that index, typically weekly or monthly. The surcharge percentage is a function of the index level on a given date, so checking it less often than the contract's own lag period recalculates the surcharge against a stale value.

Does a rate increase always mean something is wrong?

No. A rate increase backed by a signed amendment, a contractual index clause, or a published tariff change on a specific effective date is legitimate. The audit question is whether that document exists and covers the date the charge was billed, not whether the new number is higher than before.

What is a minimum volume commitment and does it affect freight audits?

It is a contract clause requiring a minimum shipment volume or spend with a carrier, sometimes tied to rate tiers. Auditing it means checking whether actual volume met the commitment and whether any shortfall penalty or rebate was applied correctly, a separate check from rate and accessorial validation.

Can a 3PL invoice be audited the same way as a direct carrier invoice?

The same method applies: match each charge to its governing document. A 3PL invoice often bundles multiple carriers' charges into one bill, so the reference file needs to map each line item back to the underlying carrier contract that actually governs it, not just the 3PL's own rate sheet.

What happens if the carrier's rate table and the signed contract disagree?

The signed contract governs. A rate table is often maintained separately by the carrier's billing system and can drift out of sync with the negotiated agreement, so any discrepancy between the two should be resolved against the executed contract before the invoice is approved.

How do you handle a detention charge with no supporting paperwork?

Treat it as unvalidated until the shipment record confirms the dwell time that triggers the charge. A detention line item with no logged arrival and departure time at the facility has no basis for the charge, regardless of what the tariff rate for detention would otherwise be.

Is this something the AP team can do as part of normal invoice processing?

AP processing typically checks the invoice against a purchase order and total amount. Validating a freight invoice line by line against a rate table, a fuel index, and an accessorial tariff is a separate, document-heavy check that most AP workflows are not built to run on every invoice.

Executive Summary

Freight audit fails most often not because nobody checks the invoice, but because the check stops at the parts that are easy to check. Base linehaul rates get compared to a rate table. Fuel surcharges rarely get recalculated against the index they reference. Accessorials almost never get validated against the tariff that defines them. The mechanism that causes this is structural: a freight invoice references multiple source documents, a rate table, a fuel surcharge matrix, an accessorial tariff, and a contract's minimum volume terms, and no single one of them contains the full picture. Reviewing the invoice against only one source clears the parts that source covers and misses the rest. What changes it is treating the invoice as a set of separately auditable claims rather than one number to approve. Each line item gets matched to its own governing document, at the frequency that document requires. Per US Bureau of Labor Statistics Producer Price Index data for General freight trucking, long-distance TL (series PCU484121484121, read 2026-09-03), the underlying index rose 8.1% year over year to 195.575 in July 2026, which is exactly the kind of legitimate cost movement a proper audit has to separate from drift rather than flag as an error.

1. What documents do you need before you can audit a freight invoice?

You need the carrier contract or rate agreement, the current rate table by lane and equipment type, the fuel surcharge schedule and the index it references, the accessorial tariff defining each charge type, and the bill of lading or shipment record for the specific move. Without all five, you can only spot-check the parts each document happens to cover, and the rest of the invoice goes unverified by default. Freight audit stalls at step one when the rate table lives in a spreadsheet from an old renewal, the fuel schedule is an email attachment, and the accessorial tariff is a PDF nobody indexed. Each document ages independently. A rate table gets updated at renewal. A fuel schedule updates on the cadence the contract specifies. An accessorial tariff can go without a formal update even as new charge codes appear on invoices. The practical fix is building one reference file per carrier that maps every possible charge code on an invoice to its governing document and the date that document was last confirmed current. That file is what an auditor, human or automated, actually checks the invoice against.

2. How do you validate the base linehaul rate?

Match the invoice's origin, destination, equipment type, and weight break to the exact cell in the rate table that governs that lane. A rate table is not one number per lane, it is a matrix of lane, equipment, and weight tier, and the invoice has to be matched on all three dimensions, not just origin and destination, or a shipment gets priced off the wrong tier. The common failure here is not a wrong price, it is a right price for the wrong cell. A shipment billed at the 40,000 pound rate when the bill of lading shows 28,000 pounds passes a lane-level glance and fails a weight-tier check. The same applies to equipment type: a dry van rate applied to a shipment that moved on a flatbed. This is where a worked example helps. Using the 1% to 3% band across a full diagnostic as an illustration only, on $800M in revenue with a meaningful share of service spend running through freight and 3PL, even a small share of shipments mismatched to the wrong rate tier compounds across a year of invoice volume.

3. How do you check a fuel surcharge without recalculating the whole index yourself?

Pull the surcharge schedule's stated index and lag period, then recompute the surcharge percentage the contract specifies for that index level on the invoice date, rather than trusting the number the carrier printed. Fuel surcharges are formulaic, not fixed, so the check is arithmetic against a published index, not a lookup against a static table. Per the US Bureau of Labor Statistics Producer Price Index for gasoline (series WPU0571, read 2026-09-03, index at 302.759, up 37.1% year over year), fuel input costs move fast enough that a surcharge calculated even a few weeks off the contract's specified lag period produces a materially different number. The audit question is never whether a surcharge exists. It is whether the percentage applied matches what the contract's formula, applied to the correct index value on the correct date, would produce. A surcharge that was set correctly at contract signing and never recalculated against index movement is a control gap, not a one-time error, which is why this line item needs the same test on every invoice rather than a one-time validation.

4. How do you audit accessorial charges on a freight invoice?

Each accessorial code, detention, liftgate, residential delivery, redelivery, has its own definition and trigger condition in the carrier's tariff. Validating the charge means confirming the shipment record actually meets that trigger, not just that the code appears on a rate sheet. A detention charge with no dwell time logged against it is an unvalidated claim, not a confirmed one. Two separate checks apply to every accessorial line, and skipping either one leaves the charge unverified. ### A. Trigger validation Every accessorial has a condition that has to be true before the charge applies: a minimum dwell time for detention, a specific address type for residential delivery, a failed first attempt for redelivery. The invoice states the charge; only the shipment record can confirm the trigger. Auditing the charge means pulling that record and checking the condition, not just confirming the tariff lists a rate for the code. ### B. Rate validation Once the trigger is confirmed, the rate applied to it still needs to be matched against the tariff's stated amount for that code, which can vary by equipment type or region. A full treatment of this category, including which surcharges get billed without validation, lives in the [accessorial charge audit](/guides/accessorial-charge-audit-the-surcharges-nobody-validates) page linked below.

5. How do you separate a legitimate rate increase from margin drift?

A legitimate increase traces to a signed rate amendment, a contractual index adjustment, or a published tariff change effective on a specific date. A charge with no such document behind it, or one that continues past the date its authorizing document expired, is what this guide is checking for. The test is documentary, not a judgment about whether the new number feels high. Freight costs move. The BLS Producer Price Index for truck transportation of freight (series WPU3012, read 2026-09-03) stood at 170.984 in July 2026, up 10.9% year over year, and a carrier passing through a real cost increase under a valid contract clause is not drift. The distinction that matters is whether the increase has an expiration built in and whether it was removed on schedule. A surcharge introduced for a defined period that keeps appearing on invoices after that period ends fails that test even though the original charge was legitimate. This distinction, and how to build a control that tests for it, is covered in the [margin drift versus legitimate price increases](/guides/margin-drift-vs-legitimate-price-increases-how-to-tell-them) page.

6. What does a full freight and 3PL audit workflow look like end to end?

The workflow runs invoice, then contract, then shipment record, then index, in that order: confirm the invoice's charge codes exist in the tariff, confirm the rate matches the table for that lane and tier, confirm the shipment record supports any accessorial trigger, and recompute any index-linked surcharge. Skipping a step does not skip the risk, it just moves the unvalidated charge past the check. Each step depends on a different source document, and running them out of order tends to hide the step that got skipped rather than catching it. 1. Match charge codes to tariff: Confirm every line item on the invoice corresponds to a defined code in the carrier's current tariff before checking its amount. 2. Match rate to lane and tier: Check the base rate against the exact origin, destination, equipment, and weight tier cell in the rate table, not a lane-level average. 3. Confirm accessorial triggers: Pull the shipment record for each accessorial charge and confirm the condition that justifies it actually occurred. 4. Recompute index-linked surcharges: Recalculate any fuel or index-based surcharge against the published index value for the invoice date rather than accepting the printed figure. 5. Flag expired authorizations: Check whether any charge traces to a rate amendment or surcharge period that has since expired.

7. Can this audit be done in a spreadsheet, or does it need something else?

A spreadsheet can hold the rate table and tariff reference, but matching hundreds or thousands of invoice lines against five separately updated source documents, on a recurring cadence, is a data-matching problem that outgrows manual review as invoice volume and carrier count grow. The honest answer depends on your invoice volume, carrier count, and how often your rate documents change, which only you can size. A company running a handful of carriers on stable lanes can maintain this in a well-built spreadsheet for a while. The difficulty scales with the number of source documents that move independently, since every rate renewal, tariff update, and fuel schedule reset is a new version to reconcile against invoices already paid. The decision between a one-time diagnostic and an ongoing matching control is covered in the [build versus buy page](/guides/build-vs-buy-can-you-do-contract-to-invoice-matching-in) linked below, along with the specific conditions under which each approach holds up. For the wider pattern this sits inside, start with the margin drift guide. For the wider pattern this sits inside, start with the [margin drift](/guides/indirect-spend-audit-categories) guide.

Questions & Answers

What is the first thing to check on a freight invoice before anything else?

Confirm that every charge code on the invoice actually exists in the carrier's current tariff. A charge code that is not defined anywhere in the governing documents cannot be validated against a rate, so it has to be flagged before any rate or trigger check is worth doing.

How often should the fuel surcharge index be checked?

On the cadence the contract's surcharge schedule specifies for that index, typically weekly or monthly. The surcharge percentage is a function of the index level on a given date, so checking it less often than the contract's own lag period recalculates the surcharge against a stale value.

Does a rate increase always mean something is wrong?

No. A rate increase backed by a signed amendment, a contractual index clause, or a published tariff change on a specific effective date is legitimate. The audit question is whether that document exists and covers the date the charge was billed, not whether the new number is higher than before.

What is a minimum volume commitment and does it affect freight audits?

It is a contract clause requiring a minimum shipment volume or spend with a carrier, sometimes tied to rate tiers. Auditing it means checking whether actual volume met the commitment and whether any shortfall penalty or rebate was applied correctly, a separate check from rate and accessorial validation.

Can a 3PL invoice be audited the same way as a direct carrier invoice?

The same method applies: match each charge to its governing document. A 3PL invoice often bundles multiple carriers' charges into one bill, so the reference file needs to map each line item back to the underlying carrier contract that actually governs it, not just the 3PL's own rate sheet.

Margin Drift Resources