# Rate schedule violation in freight and 3PL

> How rate schedule violations happen in freight and 3PL invoices and the contract mechanism that lets them go unchecked, plus how to stop them.

Source: https://valuexpa.com/insights/rate-schedule-violation-in-freight-and-3pl
Publisher: ValueXPA (https://valuexpa.com)
Updated: 2026-09-04

---

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. In freight and 3PL, that gap most often shows up as a rate schedule violation: the invoiced base rate or fuel surcharge does not match the rate table the contract defines.

This guide covers the specific contract mechanism that produces the violation, why standard AP controls miss it, and what a rate table has to contain before it can actually be checked against an invoice.

## Executive Summary

A carrier or 3PL contract sets a rate schedule: a base rate by lane and equipment type, plus a fuel surcharge table indexed to a published benchmark. A rate schedule violation happens when the invoice charges a base rate or fuel surcharge that does not match that schedule, and nobody on the AP side holds a copy of the schedule to check it against. Three-way matching checks the invoice against the purchase order and the receipt of service.

It does not test the invoice against the rate table, because the rate table lives in a contract PDF, not in the ERP.

The mechanism repeats in a small number of places: a rate that was correct at signing but never updated when a lane's mileage band changed, a fuel surcharge that references the wrong published index, or a surcharge that continues after the index level that triggered it has moved back down. Each produces a small per-invoice gap that a receiving clerk cannot catch, because catching it requires the rate schedule itself, not the PO and the bill of lading.

Fixing it means building a rate table that AP can check every invoice against, tying the fuel surcharge column to the index the contract actually names, and reconciling that table on a stated schedule rather than an assumed one.

## 1. What is a rate schedule violation in a freight contract?

**A rate schedule violation is an invoice line that charges a base rate, accessorial, or fuel surcharge different from the rate table set out in the carrier or 3PL contract. The contract defines a rate by lane, equipment type, and weight break, plus a fuel surcharge formula tied to a named index. The violation is the gap between that table and the number the carrier actually billed.**

The rate schedule is a separate document from the invoice and usually separate from the master service agreement itself, an appendix or exhibit that lists rates by origin-destination pair, or a formula for computing them. It is renegotiated on its own cycle, sometimes annually, sometimes per lane, which means multiple versions can be in circulation at once.

A violation is not necessarily a billing error in the sense of a typo. It is frequently the correct application of an old rate, or a rate applied to the wrong lane classification, such as billing a shorter-haul rate for a lane that changed mileage band after a shipper's plant moved. The invoice looks internally consistent. It simply does not match the version of the schedule that is currently in force.

Because the rate table sits outside the ERP, in a contract management system or a shared drive if it is kept anywhere at all, the invoice can pass every check the ERP is capable of running and still violate the schedule.

## 2. How does the fuel surcharge mechanism specifically go wrong?

**Most freight contracts tie the fuel surcharge to a published index, commonly a Department of Energy diesel benchmark, with a lookup table mapping index bands to a surcharge percentage. The surcharge goes wrong when the invoice uses a stale index reading, applies the wrong lookup table, or keeps charging a surcharge tier the current index reading no longer supports.**

The fuel surcharge clause is the single most common site of rate schedule drift because it is the only part of a freight rate designed to change every week. The contract specifies which index to reference, how often it resets, and what percentage applies at each index band. Each of those three elements can drift independently of the others.

An index moves fast when input costs move fast. The Bureau of Labor Statistics' Producer Price Index for gasoline (series WPU0571) stood at 302.759 in July 2026, up 37.1% year over year (read 2026-09-04). A surcharge table that resets monthly instead of the weekly cadence the contract specifies will lag a move of that size by a meaningful margin before the next reset catches up.

The check this requires is arithmetic, not judgment: pull the index value the contract names, apply the lookup table the contract specifies, and compare that number to the surcharge line on the invoice. Skipping that arithmetic is what [an accessorial charge audit](/guides/accessorial-charge-audit-the-surcharges-nobody-validates) finds most often when it looks at surcharge lines specifically.

## 3. Why does three-way matching not catch this?

**Three-way matching confirms the invoice quantity and price line up with the purchase order and the goods or service receipt. It does not test whether the price on the PO itself is the price the contract's rate schedule currently authorizes. If the PO was cut using an outdated rate, or freight moves without a PO at all, three-way matching passes an invoice that still violates the schedule.**

Freight invoicing frequently bypasses the PO process altogether. A shipment moves, a bill of lading is signed, and the carrier invoices against a standing agreement rather than a discrete purchase order. In that flow there is no PO price to match against, so the control that would normally catch a price discrepancy never runs.

Even where a PO exists, it is commonly populated from the same rate table that is out of date, which means the PO and the invoice can agree with each other while both disagree with the contract. Matching software confirms internal consistency between two documents it has access to. It has no visibility into a contract exhibit it was never given.

This is a structural limitation of the control, not a configuration error. The rate schedule has to be loaded as its own reference table and checked independently for the gap to surface at all.

## 4. What does a rate table need to contain to be checkable?

**A checkable rate table lists, for every lane, the current base rate by equipment type and weight break, the accessorial charges and their trigger conditions, the fuel surcharge index name and lookup schedule, and the effective date of the version currently in force. Missing any one of these fields makes the invoice unverifiable even when every other field is present.**

Most rate tables that exist inside a shipper's organization are incomplete on at least one of these fields, usually the effective date or the accessorial trigger conditions, because those are the fields that take the most work to keep current and the least visible when they are missing.

A table missing the effective date cannot distinguish a violation from a correct application of an older, still-valid rate tier, which produces false positives that erode trust in the whole control faster than false negatives do.

Building the table is largely a transcription exercise against the contract exhibit itself, not a negotiation. The work is keeping it synchronized as lanes and index readings change, which is the part that tends to lapse once the initial build is done.

- **Lane and equipment detail:** Origin, destination, and equipment type, since the same lane can carry different rates for dry van versus flatbed or refrigerated service.

- **Effective date and version:** The date a given rate version took force and, where the contract renews annually, the date it expires, so a stale table cannot masquerade as current.

- **Fuel surcharge formula:** The exact index the contract names, the lookup band structure, and the reset frequency, stated as written in the contract rather than summarized from memory.

- **Accessorial trigger conditions:** What has to be true for a detention, liftgate, or residential delivery charge to apply, not just the rate charged once it does.

## 5. How do surcharges persist after the trigger condition has passed?

**A fuel surcharge tier is supposed to step down when the referenced index drops back below the band that triggered it. Persistence happens when the invoicing system that generates the carrier's bill keeps applying the prior tier because the index update was never fed back into it, so the surcharge continues at the higher rate after the condition that justified it has ended.**

This is distinct from the initial application error covered above. Here the surcharge was correctly set at some point and the failure is in the update, not the setup. A carrier's own billing system pulls an index reading, sets a surcharge tier, and in principle refreshes that tier on the schedule the contract specifies. When that refresh does not happen, the surcharge simply continues at whatever level it last reached.

The Bureau of Labor Statistics' Producer Price Index for general freight trucking, long-distance truckload (series PCU484121484121), read at 195.575 in July 2026, up 8.1% year over year (read 2026-09-04), moves independently of the fuel index specifically, which is one reason a shipper cannot infer the surcharge is correct just because overall freight costs are trending in the same direction.

Catching persistence requires comparing the surcharge tier actually billed, invoice by invoice, against what the current index reading authorizes at the moment of shipment, not at contract signing. A one-time table build does not catch this; it requires a check that repeats on the same cadence the contract's surcharge formula does.

## 6. How do you build a control that catches this going forward?

**Stopping rate schedule violations requires three things working together: a rate table maintained as a live reference document rather than a filed contract exhibit, an index feed matched to the exact benchmark and cadence the contract names, and a recurring invoice-to-table match that runs on every freight invoice rather than a sample. Without all three, the gap reopens as soon as a lane or index changes.**

The rate table and the index feed are necessary but not sufficient on their own. A correct table checked against invoices once a quarter still lets three months of drift accumulate on every affected lane before anyone notices.

The match itself does not need to be complex: pull the lane, equipment type, and ship date off the invoice, look up the authorized base rate and surcharge tier for that date, and flag any invoice where the billed amount differs. What makes this hard in practice is not the logic. It is keeping the rate table itself current enough that the match means something, since a stale table produces the same false confidence a missing table does.

For a broader view of what else needs checking on a freight invoice beyond the rate line itself, including accessorial charges and other surcharge types, see how freight and 3PL invoices get audited end to end.

For the wider pattern this sits inside, start with the margin drift guide. See also [rate card enforcement](/guides/rate-card-enforcement-why-approved-timesheets-still-produce) and [off-contract resources](/guides/off-contract-resources-people-billed-outside-the-agreement) billed outside the agreement.

For the wider pattern this sits inside, start with the [margin drift](/guides/indirect-spend-audit-categories) guide.

## 7. Frequently Asked Questions (People Also Ask)

### What is a rate schedule in a freight contract?

It is the document, usually an appendix or exhibit to the master service agreement, that sets the base rate by lane and equipment type and the formula for the fuel surcharge. It is separate from the invoice and often renegotiated on its own cycle, so multiple versions can exist at once.

### How is a rate schedule violation different from a duplicate payment?

A duplicate payment is the same invoice paid twice. A rate schedule violation is a single invoice charging a rate that does not match the contract's rate table, whether that is the base rate, an accessorial, or the fuel surcharge. The invoice can be paid exactly once and still violate the schedule.

### Can three-way matching be configured to catch rate schedule violations?

Three-way matching checks the invoice against the purchase order and the receipt, both documents the ERP already holds. It has no access to the rate schedule itself, which usually sits in a contract PDF. Catching the violation means loading the rate table as its own reference and checking against it separately.

### Which index does a fuel surcharge clause typically reference?

Contracts commonly reference a Department of Energy diesel price benchmark, though the exact index, reset frequency, and lookup band structure are set individually in each contract's surcharge clause. The check has to use the index the specific contract names, not a general assumption about freight fuel surcharges.

### Does a rate schedule violation always mean the carrier is overcharging deliberately?

No. It is frequently the correct application of a rate that was accurate at signing but never updated, or a rate applied under the wrong lane classification after a mileage band changed. The invoice can be internally consistent and still not match the version of the schedule currently in force.

### What happens if the rate table is missing the effective date?

Without an effective date, the check cannot tell a genuine violation apart from a correct application of an older but still-valid rate tier. That produces false positives, which erode confidence in the control faster than missed violations do.

### How often should a rate table be reconciled against the contract?

On the cadence the contract's own surcharge formula specifies, since a fuel index can reset weekly even when the internal table only refreshes monthly or quarterly. Checking less often than the contract resets lets drift accumulate on every affected lane between checks.

### Is this the same issue as an accessorial charge audit?

They overlap but are not identical. A rate schedule violation covers the base rate and fuel surcharge against the contract's rate table. An accessorial charge audit focuses specifically on charges like detention or liftgate fees and whether the trigger condition for each was actually met.

### Who inside a company usually owns fixing this, AP or procurement?

Neither function owns the rate table by default. AP processes the invoice against the PO and receipt; procurement negotiates the contract. Someone has to be assigned to build and maintain the rate table as a live reference, or the gap between the two functions is where the violation survives.

### Can this happen with a 3PL as well as an asset-based carrier?

Yes. A 3PL invoice is built from the underlying carrier rates plus its own margin, so it carries the same rate schedule and fuel surcharge structure, with an added layer where the 3PL's own markup can also drift from what its contract specifies.

### Is contract complexity quietly draining your operating margin?

A small systematic drift between your negotiated contracts and your actual vendor billing compounds quietly across a year of invoices. Stop guessing at your exposure and run a targeted audit.

**[Take the Free Screener → https://valuexpa.com/margin-drift-screener](https://valuexpa.com/margin-drift-screener)**

## Executive Summary

A carrier or 3PL contract sets a rate schedule: a base rate by lane and equipment type, plus a fuel surcharge table indexed to a published benchmark. A rate schedule violation happens when the invoice charges a base rate or fuel surcharge that does not match that schedule, and nobody on the AP side holds a copy of the schedule to check it against. Three-way matching checks the invoice against the purchase order and the receipt of service. It does not test the invoice against the rate table, because the rate table lives in a contract PDF, not in the ERP. The mechanism repeats in a small number of places: a rate that was correct at signing but never updated when a lane's mileage band changed, a fuel surcharge that references the wrong published index, or a surcharge that continues after the index level that triggered it has moved back down. Each produces a small per-invoice gap that a receiving clerk cannot catch, because catching it requires the rate schedule itself, not the PO and the bill of lading. Fixing it means building a rate table that AP can check every invoice against, tying the fuel surcharge column to the index the contract actually names, and reconciling that table on a stated schedule rather than an assumed one.

## 1. What is a rate schedule violation in a freight contract?

A rate schedule violation is an invoice line that charges a base rate, accessorial, or fuel surcharge different from the rate table set out in the carrier or 3PL contract. The contract defines a rate by lane, equipment type, and weight break, plus a fuel surcharge formula tied to a named index. The violation is the gap between that table and the number the carrier actually billed. The rate schedule is a separate document from the invoice and usually separate from the master service agreement itself, an appendix or exhibit that lists rates by origin-destination pair, or a formula for computing them. It is renegotiated on its own cycle, sometimes annually, sometimes per lane, which means multiple versions can be in circulation at once. A violation is not necessarily a billing error in the sense of a typo. It is frequently the correct application of an old rate, or a rate applied to the wrong lane classification, such as billing a shorter-haul rate for a lane that changed mileage band after a shipper's plant moved. The invoice looks internally consistent. It simply does not match the version of the schedule that is currently in force. Because the rate table sits outside the ERP, in a contract management system or a shared drive if it is kept anywhere at all, the invoice can pass every check the ERP is capable of running and still violate the schedule.

## 2. How does the fuel surcharge mechanism specifically go wrong?

Most freight contracts tie the fuel surcharge to a published index, commonly a Department of Energy diesel benchmark, with a lookup table mapping index bands to a surcharge percentage. The surcharge goes wrong when the invoice uses a stale index reading, applies the wrong lookup table, or keeps charging a surcharge tier the current index reading no longer supports. The fuel surcharge clause is the single most common site of rate schedule drift because it is the only part of a freight rate designed to change every week. The contract specifies which index to reference, how often it resets, and what percentage applies at each index band. Each of those three elements can drift independently of the others. An index moves fast when input costs move fast. The Bureau of Labor Statistics' Producer Price Index for gasoline (series WPU0571) stood at 302.759 in July 2026, up 37.1% year over year (read 2026-09-04). A surcharge table that resets monthly instead of the weekly cadence the contract specifies will lag a move of that size by a meaningful margin before the next reset catches up. The check this requires is arithmetic, not judgment: pull the index value the contract names, apply the lookup table the contract specifies, and compare that number to the surcharge line on the invoice. Skipping that arithmetic is what [an accessorial charge audit](/guides/accessorial-charge-audit-the-surcharges-nobody-validates) finds most often when it looks at surcharge lines specifically.

## 3. Why does three-way matching not catch this?

Three-way matching confirms the invoice quantity and price line up with the purchase order and the goods or service receipt. It does not test whether the price on the PO itself is the price the contract's rate schedule currently authorizes. If the PO was cut using an outdated rate, or freight moves without a PO at all, three-way matching passes an invoice that still violates the schedule. Freight invoicing frequently bypasses the PO process altogether. A shipment moves, a bill of lading is signed, and the carrier invoices against a standing agreement rather than a discrete purchase order. In that flow there is no PO price to match against, so the control that would normally catch a price discrepancy never runs. Even where a PO exists, it is commonly populated from the same rate table that is out of date, which means the PO and the invoice can agree with each other while both disagree with the contract. Matching software confirms internal consistency between two documents it has access to. It has no visibility into a contract exhibit it was never given. This is a structural limitation of the control, not a configuration error. The rate schedule has to be loaded as its own reference table and checked independently for the gap to surface at all.

## 4. What does a rate table need to contain to be checkable?

A checkable rate table lists, for every lane, the current base rate by equipment type and weight break, the accessorial charges and their trigger conditions, the fuel surcharge index name and lookup schedule, and the effective date of the version currently in force. Missing any one of these fields makes the invoice unverifiable even when every other field is present. Most rate tables that exist inside a shipper's organization are incomplete on at least one of these fields, usually the effective date or the accessorial trigger conditions, because those are the fields that take the most work to keep current and the least visible when they are missing. A table missing the effective date cannot distinguish a violation from a correct application of an older, still-valid rate tier, which produces false positives that erode trust in the whole control faster than false negatives do. Building the table is largely a transcription exercise against the contract exhibit itself, not a negotiation. The work is keeping it synchronized as lanes and index readings change, which is the part that tends to lapse once the initial build is done. - Lane and equipment detail: Origin, destination, and equipment type, since the same lane can carry different rates for dry van versus flatbed or refrigerated service. - Effective date and version: The date a given rate version took force and, where the contract renews annually, the date it expires, so a stale table cannot masquerade as current. - Fuel surcharge formula: The exact index the contract names, the lookup band structure, and the reset frequency, stated as written in the contract rather than summarized from memory. - Accessorial trigger conditions: What has to be true for a detention, liftgate, or residential delivery charge to apply, not just the rate charged once it does.

## 5. How do surcharges persist after the trigger condition has passed?

A fuel surcharge tier is supposed to step down when the referenced index drops back below the band that triggered it. Persistence happens when the invoicing system that generates the carrier's bill keeps applying the prior tier because the index update was never fed back into it, so the surcharge continues at the higher rate after the condition that justified it has ended. This is distinct from the initial application error covered above. Here the surcharge was correctly set at some point and the failure is in the update, not the setup. A carrier's own billing system pulls an index reading, sets a surcharge tier, and in principle refreshes that tier on the schedule the contract specifies. When that refresh does not happen, the surcharge simply continues at whatever level it last reached. The Bureau of Labor Statistics' Producer Price Index for general freight trucking, long-distance truckload (series PCU484121484121), read at 195.575 in July 2026, up 8.1% year over year (read 2026-09-04), moves independently of the fuel index specifically, which is one reason a shipper cannot infer the surcharge is correct just because overall freight costs are trending in the same direction. Catching persistence requires comparing the surcharge tier actually billed, invoice by invoice, against what the current index reading authorizes at the moment of shipment, not at contract signing. A one-time table build does not catch this; it requires a check that repeats on the same cadence the contract's surcharge formula does.

## 6. How do you build a control that catches this going forward?

Stopping rate schedule violations requires three things working together: a rate table maintained as a live reference document rather than a filed contract exhibit, an index feed matched to the exact benchmark and cadence the contract names, and a recurring invoice-to-table match that runs on every freight invoice rather than a sample. Without all three, the gap reopens as soon as a lane or index changes. The rate table and the index feed are necessary but not sufficient on their own. A correct table checked against invoices once a quarter still lets three months of drift accumulate on every affected lane before anyone notices. The match itself does not need to be complex: pull the lane, equipment type, and ship date off the invoice, look up the authorized base rate and surcharge tier for that date, and flag any invoice where the billed amount differs. What makes this hard in practice is not the logic. It is keeping the rate table itself current enough that the match means something, since a stale table produces the same false confidence a missing table does. For a broader view of what else needs checking on a freight invoice beyond the rate line itself, including accessorial charges and other surcharge types, see how freight and 3PL invoices get audited end to end. For the wider pattern this sits inside, start with the margin drift guide. See also [rate card enforcement](/guides/rate-card-enforcement-why-approved-timesheets-still-produce) and [off-contract resources](/guides/off-contract-resources-people-billed-outside-the-agreement) billed outside the agreement. For the wider pattern this sits inside, start with the [margin drift](/guides/indirect-spend-audit-categories) guide.

## Common questions

### What is a rate schedule in a freight contract?

It is the document, usually an appendix or exhibit to the master service agreement, that sets the base rate by lane and equipment type and the formula for the fuel surcharge. It is separate from the invoice and often renegotiated on its own cycle, so multiple versions can exist at once.

### How is a rate schedule violation different from a duplicate payment?

A duplicate payment is the same invoice paid twice. A rate schedule violation is a single invoice charging a rate that does not match the contract's rate table, whether that is the base rate, an accessorial, or the fuel surcharge. The invoice can be paid exactly once and still violate the schedule.

### Can three-way matching be configured to catch rate schedule violations?

Three-way matching checks the invoice against the purchase order and the receipt, both documents the ERP already holds. It has no access to the rate schedule itself, which usually sits in a contract PDF. Catching the violation means loading the rate table as its own reference and checking against it separately.

### Which index does a fuel surcharge clause typically reference?

Contracts commonly reference a Department of Energy diesel price benchmark, though the exact index, reset frequency, and lookup band structure are set individually in each contract's surcharge clause. The check has to use the index the specific contract names, not a general assumption about freight fuel surcharges.

### Does a rate schedule violation always mean the carrier is overcharging deliberately?

No. It is frequently the correct application of a rate that was accurate at signing but never updated, or a rate applied under the wrong lane classification after a mileage band changed. The invoice can be internally consistent and still not match the version of the schedule currently in force.

---

ValueXPA runs a fixed-scope Margin Drift Diagnostic that validates every service vendor invoice against contract terms, for $100M+ US industrial manufacturers and distributors. Two to four weeks. The client retains 100% of recoveries. https://valuexpa.com/contact-us
