What data does your ERP hold on freight and 3PL?

Explains which freight and 3PL data fields live inside a typical ERP, and which sit outside it in carrier contracts and tariffs. Read the full guide.

Twitter LinkedIn WhatsApp
Ask AI: ChatGPT Claude Gemini Grok
What data does your ERP hold on freight and 3PL?

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 clearer places to see it, because the ERP holds only half of what is needed to catch it.

This page covers what your ERP actually stores about a freight shipment and its invoice, what it does not, and where the missing half of the picture lives instead.

Executive Summary

Most ERPs record a freight invoice as a paid amount tied to a shipment and a general ledger code. That is enough to close the books and not enough to know if the invoice was correct. The rate a carrier agreed to, the fuel surcharge table it should apply, and the accessorial definitions behind a detention or liftgate charge live in the carrier contract and tariff schedule, documents the ERP was never built to hold.

The mechanism is structural, not a software gap that a better module fixes. An ERP's freight fields exist to support accounting: GL posting, three-way match against a purchase order, AP aging. A rate card with lane-specific pricing, minimum charges, and fuel surcharge triggers is a contract artifact, usually a PDF or spreadsheet, that nothing in the ERP is designed to parse or store as structured, checkable data.

What changes this is treating the contract as its own dataset, matched against the ERP's transaction data rather than expected to live inside it. Public price indices help validate whether a fuel surcharge or line-haul rate has moved for a defensible reason, but they cannot substitute for the contract terms themselves.

1. What freight data does a typical ERP actually store?

A typical ERP stores the transactional shell of a freight shipment: purchase order or shipment ID, carrier name, ship-from and ship-to location, weight or unit count, invoice amount, invoice date, and the general ledger code the charge posts to. Some systems add a freight class or mode field. None of this tells you whether the amount charged matches what the carrier agreed to charge, because the agreed rate is not a field the ERP was designed to hold.

The ERP's freight module exists to move a shipment through accounts payable, not to police pricing. It needs enough data to match an invoice to a purchase order or receipt, route it for approval, and post it to the right cost center. That is a narrow, accounting-driven data model.

Fields like carrier, origin, destination, weight, and total charge satisfy that model completely. A three-way match checks the invoice against the purchase order and the receipt; it does not test whether the per-mile rate or fuel surcharge percentage applied on the invoice is the one written into the carrier agreement.

Some ERPs store a freight terms code, a service level, or an accessorial charge line as free text. That data is present but unstructured. It sits in the AP record as a description, not as a value checked against a rule.

2. What data lives in the carrier contract instead of the ERP?

The carrier contract or 3PL agreement holds the lane-specific base rate, the fuel surcharge schedule tied to a published index, minimum charge thresholds, accessorial charge definitions like detention and liftgate, and any volume-based rebate tier. None of these terms are structured data inside the ERP. They exist as a signed PDF or spreadsheet the AP team may not open when an invoice comes in.

Contract terms cover far more ground than what shows up in an invoice line. A rate card typically specifies rules for pricing changes, notice periods, and how a rebate tier is calculated across a full year of volume, none of which has any home in a transactional record.

A. Rate and surcharge terms

A carrier contract sets a base rate per lane or per mile, then layers a fuel surcharge that moves with a published index. The contract states the index, the update frequency, and the percentage formula. None of that logic sits in the ERP; the invoice simply shows a dollar total that already includes the surcharge calculation.

B. Accessorial definitions

Detention, liftgate, residential delivery, and reweigh charges each have a definition and a rate in the contract, often with conditions like a free time window before detention applies. The ERP records the charge line but has no field for the condition that should have triggered or capped it.

3. Why can't the ERP just add these fields?

Adding a field is not the barrier: parsing the contract into a structured, machine-checkable rule is. A rate card might specify a fuel surcharge as a percentage of a base rate tied to a weekly diesel index, with a different formula for line-haul versus accessorial charges. Encoding that correctly, for every carrier and every contract renewal, is a data modeling problem the ERP's vendor master was never scoped to solve.

An ERP vendor master record holds a vendor name, address, payment terms, and tax ID. It was not built to store a formula. A fuel surcharge clause that references a weekly index and a lookup table is a small program, not a value.

Every carrier writes its contract differently. One 3PL's detention terms use a two-hour free window; another uses four. One fuel surcharge resets weekly; another monthly. A field generic enough to hold all of that ends up holding none of it precisely, which is why most ERPs do not try.

This is also why the burden falls on a separate audit step rather than a system upgrade. The contract has to be read once, translated into a rule, and checked against invoices as they arrive rather than assumed to already be enforced.

4. How do you know if a freight rate move is legitimate or an overcharge?

Compare the rate change on your invoice to what the underlying cost index actually did over the same period. Per the US Bureau of Labor Statistics Producer Price Index for truck transportation of freight (series WPU3012, read 2026-09-06), the July 2026 index stood at 170.984, up 10.9% year over year. A surcharge increase far above that movement, applied without a matching contract clause, is worth a line-by-line check rather than an assumption.

Diesel cost is the input most fuel surcharge clauses key off. Per the US Bureau of Labor Statistics Producer Price Index for gasoline (series WPU0571, read 2026-09-06), the July 2026 index was 302.759, up 37.1% year over year. A carrier passing through a fuel surcharge increase in that range has a defensible basis if the contract's formula supports it.

Long-distance truckload rates moved differently. Per the BLS Producer Price Index for general freight trucking, long-distance truckload (series PCU484121484121, read 2026-09-06), the July 2026 index was 195.575, up 8.1% year over year. If your invoiced line-haul rate rose well past that figure with no contract amendment on file, the increase did not come from the index the contract cites.

None of these indices replace the contract itself. They give you a reference point to test a rate increase against before assuming it is correct.

5. What should you pull from the ERP before checking a freight invoice?

Before comparing an invoice to its contract, export the shipment-level detail the ERP does hold: carrier, lane, weight, mode, invoice date, and total charge, for the period under review. This transaction data is the half of the comparison the ERP is built to produce cleanly, and it is what gets matched line by line against the rate card once that is pulled separately.

Getting this export right the first time saves rework later. A clean shipment-level pull, filtered to a single carrier or lane, is what makes the contract comparison tractable instead of overwhelming.

  • Shipment and lane detail: Origin, destination, and mode for each invoice line, so each can be matched to the correct rate in the carrier's lane-based pricing.
  • Invoice date and amount: Needed to check which fuel surcharge period and index value should have applied on that date.
  • Accessorial line items: Any detention, liftgate, or reweigh charge coded separately, even if stored as free text in the AP record.
  • Vendor and contract reference: The carrier or 3PL name tied to each invoice, so it can be matched to the correct signed agreement rather than a generic default rate.

6. Where does this leave a company auditing its own freight spend?

A company auditing its own freight spend needs two datasets side by side: the ERP's transaction history and the carrier contract's rate logic, neither of which the ERP holds on its own. Building that comparison once, for the current contract set, is the core of a freight and 3PL invoice audit, and it does not require new ERP fields, only a process for reading the contract and checking invoices against it.

The ERP's limits here are not a defect. It is doing the job it was built for: recording a transaction and moving it through payment. The rate logic was always going to live in the contract, because that is where it was negotiated.

The practical path is to treat the contract as a second dataset, extract its rate, surcharge, and accessorial terms into a checkable form, and run that against the ERP's invoice history for the same carrier and period. That comparison is what catches a stale rate, a surcharge applied past its formula, or an accessorial charge outside its defined condition.

This is the same approach that applies across other categories where the ERP records the charge but not the rule behind it, from labor rate cards to maintenance work order scope.

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

7. Frequently Asked Questions (People Also Ask)

Does my ERP store the carrier's fuel surcharge formula?

No. The ERP records the total invoice amount, which already has the surcharge built in. The formula, index, and update frequency behind that surcharge live in the carrier contract, not in any ERP field.

Can I add a rate card field to my ERP's vendor master?

You can add a field, but a single field cannot hold a full rate card with lane-specific pricing, minimum charges, and conditional surcharge logic. Most companies keep the rate card as a separate document and check invoices against it directly.

Why does my three-way match not catch freight overcharges?

Three-way matching checks the invoice against the purchase order and the receipt. It confirms the shipment happened and the amount matches what was ordered. It does not test whether the rate or surcharge on the invoice matches the carrier contract.

What freight data should I export from the ERP for an audit?

Pull shipment-level detail: carrier, lane, weight, mode, invoice date, and total charge for the period under review. This transaction data is matched against the separately sourced rate card and surcharge terms during the audit.

Are fuel surcharge increases always legitimate?

Not automatically. Check the increase against the index the contract cites and the formula it specifies. Per the BLS Producer Price Index for gasoline, series WPU0571, read 2026-09-06, the July 2026 index was up 37.1% year over year, which gives a reference point but does not replace checking the contract's own formula.

Does the ERP track accessorial charge definitions like detention?

The ERP typically records an accessorial charge as a line item or free-text description, not as a defined term with a free-time window or rate. Those definitions sit in the carrier contract or tariff.

What is the difference between an ERP field and a contract term?

An ERP field holds a value, like a dollar amount or a date. A contract term like a fuel surcharge clause is a formula that depends on an external index and a lookup table, which most ERP data models are not built to store.

Can public price indices tell me if I was overcharged?

They tell you whether an underlying cost, like diesel or truckload rates, moved enough to justify a surcharge change. They cannot tell you whether your specific contract's formula was applied correctly. Both checks are needed.

Where do I find the rate card if it's not in the ERP?

It is typically held by procurement or the AP team as a signed PDF or spreadsheet from contract negotiation. It needs to be located and read separately from the ERP for any invoice audit.

Margin Drift Resources