# How do you audit freight and 3PL spend in Epicor Kinetic?

> Epicor Kinetic matches invoices to POs but can't verify freight rates or fuel surcharges. Here's how to audit freight and 3PL spend properly.

Source: https://valuexpa.com/insights/how-do-you-audit-freight-and-3pl-spend-in-epicor-kinetic
Publisher: ValueXPA (https://valuexpa.com)
Updated: 2026-10-22

---

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. In freight and 3PL spend, that gap shows up as a stale rate applied after a new one took effect, an accessorial charged outside its contracted condition, or a fuel surcharge that no longer tracks the index it is supposed to follow.

Epicor Kinetic manages purchase orders, receipts and AP invoices well. It was not built to hold a carrier's rate card, a minimum-charge clause or a surcharge formula, and that gap is where freight drift accumulates undetected.

## Executive Summary

Epicor Kinetic records what a carrier billed and what AP paid. It does not know what the contract allows, because the rate card, the accessorial schedule and the fuel surcharge table live outside the ERP, usually as PDFs a broker or carrier sent once and nobody re-entered. Kinetic will three-way match the invoice to a purchase order and a receipt, which confirms the shipment happened. It will not confirm the rate charged matches the lane rate on file, or that a fuel surcharge tracks the index it references.

The mechanism that produces leakage is simple: a rate changes, a surcharge is added, or a minimum charge applies, and the invoice reflects it correctly for a period, then quietly drifts as index inputs move or a rate card lapses without anyone updating the AP configuration. Fuel is the clearest case right now. 3% year over year (read 2026-09-25). A surcharge formula tied to either index has moved substantially in twelve months. Kinetic has no field that recalculates what the surcharge should be.

What changes it is treating the audit as two separate jobs: a one-time reconciliation of freight AP history against the actual contract terms, and a standing control that checks each new invoice against the current rate card before payment. Kinetic can support the second once the first has established what the correct terms actually are.

## 1. What does Epicor Kinetic actually check on a freight invoice?

**Kinetic checks that a freight invoice ties to a purchase order and, if configured, a receipt: the vendor, the PO number, the quantity or weight, and the total against a tolerance. That is a three-way match, and it confirms the invoice corresponds to a real shipment at a plausible total. It does not check the invoice against a contracted lane rate, an accessorial schedule, a minimum charge, or a fuel surcharge formula, because none of those live in Kinetic as.**

The three-way match is a control against a different kind of error than rate drift. It catches a shipment billed twice, a quantity that does not match the receipt, or a total wildly outside a set tolerance band. Those are useful checks and Kinetic performs them reliably.

What it cannot do is compare the rate per mile, per hundredweight, or per pallet on the invoice against the number written into the carrier contract, because that number is not a field in Kinetic. It sits in a signed agreement, often a PDF, referenced by contract number but never transcribed into the ERP's pricing tables.

The same is true for accessorials: detention, liftgate, residential delivery, redelivery. A contract defines when each applies and what it costs. Kinetic has no table that encodes that condition, so an invoice charging detention on a load that never sat still passes the match untouched.

## 2. Where does freight rate drift actually happen in Epicor Kinetic?

**Freight rate drift happens at the point where a contracted term needs interpretation before it becomes a number: a general rate increase applied to the wrong lane, an accessorial billed without its trigger condition being true, a fuel surcharge computed off a stale index reading, or a minimum charge applied where the actual weight already cleared it. Kinetic's AP module has no place to store the trigger condition, so it cannot tell a correctly applied surcharge from an incorrectly applied.**

Rate increases are the most common entry point. A carrier issues a general rate increase letter, it applies to specific lanes or equipment types on a specific date, and AP configuration in Kinetic is rarely updated lane by lane. The invoice can charge the new rate on a lane the increase did not cover, and the three-way match still clears because the PO and receipt are unaffected.

Fuel surcharges compound this. A surcharge formula references a published index and updates weekly or monthly. The US Bureau of Labor Statistics' PPI for gasoline (series WPU0571) put the August 2026 index at 319.584, up 46.5% year over year (read 2026-09-25). A carrier's surcharge table built on an older fuel baseline will overcharge or undercharge relative to that movement, and nothing in Kinetic recalculates the expected surcharge to compare against it.

### A. Rate card lapses

A rate card has an effective period. When it expires and a new agreement is signed, the old rate can persist in whatever spreadsheet or price list AP staff reference, because updating that reference is a manual step outside Kinetic's workflow. The invoice matches the PO on quantity and vendor, and the stale rate passes.

### B. Accessorial trigger conditions

Detention, liftgate and redelivery charges each have a condition attached in the contract, commonly a wait time threshold or a failed first delivery attempt. Kinetic records the charge line but not the condition, so an invoice can bill an accessorial without the condition ever being verified against dispatch or delivery records.

## 3. Can you build freight rate checks directly inside Epicor Kinetic?

**You can extend Kinetic's data model with custom fields, BAQs and BPM directives to hold a simplified rate table and flag invoices that exceed it. This works for a small, stable set of lanes and carriers with rates that rarely change. It becomes harder to maintain as the carrier list, lane count and accessorial variety grow, because each contract renewal or GRI requires a manual update to the custom table before the check has anything current to compare against.**

Kinetic's BPM (Business Process Management) framework lets you attach a directive to the AP invoice entry process that checks a field against a reference table and blocks or flags the transaction. A rate table stored as a custom data definition, populated with lane, equipment type and contracted rate, can drive that check.

The work this avoids is real: it catches the invoice charging above the stored rate before payment, not months later. The work it creates is also real: someone has to translate every new contract, every general rate increase, every accessorial schedule change into that table, on the same day it takes effect, for every lane the company ships.

A table that lags the contract by even a few weeks lets the exact drift it was built to catch pass through. The check is only as current as its last manual update, and freight contracts change more often than most AP teams have time to re-key them.

## 4. Should you audit freight history before building the ongoing check?

**Yes. Building a rate check inside Kinetic against terms nobody has verified in months just encodes whatever error is already in production. The audit should start by pulling 12 to 18 months of freight AP history out of Kinetic and reconciling it line by line against the actual signed rate cards, accessorial schedules and surcharge formulas, which establishes both what is owed back and what the correct reference table should contain going forward.**

The sequence matters because the two jobs answer different questions. The historical audit answers what already went wrong: which invoices charged above the contracted rate, which accessorials lacked their trigger condition, which fuel surcharges diverged from their stated index. That work has to be done against the actual contract documents, not against whatever table currently lives in Kinetic, because that table may already be the source of the drift.

Only once the historical reconciliation has confirmed the correct current terms does it make sense to encode them as a forward check, whether inside Kinetic's BPM framework or in a separate system built for the purpose. Building the check first, against unverified terms, means the ongoing control enforces whatever rate someone last typed in, right or wrong.

General freight trucking rates give a sense of how fast this drifts without attention: the BLS industry index for long-distance truckload trucking (series PCU484121484121) stood at 207.644 in August 2026, up 13.9% year over year (read 2026-09-25). A rate table not revisited in that window is not tracking the market it was built against.

## 5. How do you decide between fixing this inside Kinetic and buying a separate diagnostic?

**Build the check inside Kinetic once you already know which rates, accessorial conditions and surcharge formulas are correct, because at that point it is a configuration task. Bring in a diagnostic first when you cannot yet state confidently what the current, correct terms are, because a check built against unverified terms enforces the wrong thing with full authority. The deciding fact is whether the reference data exists anywhere reliable yet, not which tool is more capable.**

This is a sequencing question, not a tooling contest. Kinetic's BPM and custom BAQ layer can hold and enforce a rate table competently once that table is correct. The gap is never really Kinetic's capability, it is that no one has recently confirmed the table against the signed contracts.

A fixed-scope diagnostic does the reconciliation work: pulling the freight AP history, matching it line by line to the actual rate cards and accessorial schedules, and quantifying what has already drifted. That produces the verified reference data a Kinetic-based check would then enforce.

Attempting both at once, building the enforcement logic while also trying to verify the terms it enforces, means every error in the verification step gets encoded permanently into the control. Sequencing them the other way costs a few weeks up front and produces a check worth trusting.

What each step actually resolves before you build a forward check in Kinetic.

| Step
| What it establishes
| Where it happens

| Historical reconciliation
| Which past invoices deviated from contracted terms
| Outside Kinetic, against signed contracts

| Reference table build
| Current correct rates, accessorial conditions, surcharge formulas
| Outside Kinetic, then loaded in

| Forward check configuration
| Whether the next invoice matches the verified table
| Inside Kinetic, via BPM/BAQ

## 6. What should an AP or controller team do this quarter?

**Pull the last 12 to 18 months of freight and 3PL AP data from Kinetic, gather the actual signed rate cards and accessorial schedules for the carriers with the highest spend, and reconcile them line by line. That reconciliation tells you both what to recover and what belongs in a forward-looking check. Treat any fuel surcharge formula as a priority line item given how far the underlying index has moved.**

Start with the carriers carrying the largest share of freight spend, since that is where a rate error compounds fastest across volume. Export the AP detail from Kinetic for those vendors over the trailing 12 to 18 months, including line-level accessorial charges where the system captures them separately from the base rate.

Match each line against the actual contract document in effect on that invoice date, not the current one, since rates change mid-period. Flag any invoice where the rate, accessorial application or surcharge diverges from what the contract states for that date.

Fuel surcharges deserve particular attention this quarter. With the PPI for gasoline up 46.5% year over year as of August 2026 (BLS, series WPU0571, read 2026-09-25), a surcharge formula tied to a stale reference point or an outdated baseline is producing a materially wrong number, and it is one of the easier drift types to verify once you have the formula in hand.

For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in).

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

### Does Epicor Kinetic have a built-in freight rate audit feature?

No. Kinetic performs three-way matching between the invoice, purchase order and receipt, confirming the shipment and total are plausible. It has no native field or table for a carrier's contracted rate card, accessorial schedule, or fuel surcharge formula, so it cannot compare a billed rate against a contracted one without custom configuration.

### Can Kinetic's BPM engine catch a freight overcharge automatically?

It can, if you first build a custom reference table holding the current contracted rates and configure a BPM directive to check invoices against it. The catch is that the table only works if it is kept current with every rate change, general rate increase, and accessorial update, which is a manual maintenance burden that grows with carrier count.

### How far back should a freight AP audit look?

12 to 18 months is a practical window: recent enough that carrier contracts and rate cards are still retrievable and relevant, long enough to catch drift that built up gradually, such as a stale rate that persisted across several rate card renewals.

### Why does the fuel surcharge matter more right now?

The US Bureau of Labor Statistics' PPI for gasoline (series WPU0571) shows the August 2026 index at 319.584, up 46.5% year over year (read 2026-09-25). A surcharge formula referencing a stale fuel baseline diverges further from the correct number the more the underlying index moves, making this a higher-value line item to check now than in a flatter fuel market.

### Does three-way matching in Kinetic catch a duplicate freight payment?

It can catch some duplicates if the same PO and invoice number are submitted twice, since the match would flag the repeat. It is less reliable against a duplicate submitted under a slightly different invoice number or from a different remit-to address for the same shipment, since those pass as distinct transactions.

### Should we fix the rate table in Kinetic before or after a full freight audit?

After. A rate table built before the underlying contracts are reconciled just encodes whatever error already exists into an automated control. Reconcile the historical invoices against the actual signed rate cards first, then load the confirmed terms into whatever table drives the forward check.

### Can a general rate increase from a carrier be tracked automatically in Kinetic?

Not without manual entry. A general rate increase letter specifies which lanes and equipment types it applies to and the effective date. Someone has to translate that into Kinetic's configuration or a linked reference table; there is no automated feed from carrier rate increase notices into Kinetic.

### What is the difference between a freight audit and a freight AP automation tool?

AP automation tools speed up invoice capture and routing at the point of receipt. They do not interpret the contract terms behind the invoice, such as an accessorial's trigger condition or a surcharge's index reference, and they do not quantify leakage already present in historical spend.

### Does this apply the same way to 3PL invoices as to carrier invoices?

The mechanism is the same: a 3PL contract specifies management fees, pass-through rates and markup structures, none of which Kinetic holds as structured data. A 3PL invoice can pass the three-way match while charging a markup outside the contracted percentage, for the same reason a carrier invoice can pass while charging a lapsed rate.

### 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

Epicor Kinetic records what a carrier billed and what AP paid. It does not know what the contract allows, because the rate card, the accessorial schedule and the fuel surcharge table live outside the ERP, usually as PDFs a broker or carrier sent once and nobody re-entered. Kinetic will three-way match the invoice to a purchase order and a receipt, which confirms the shipment happened. It will not confirm the rate charged matches the lane rate on file, or that a fuel surcharge tracks the index it references. The mechanism that produces leakage is simple: a rate changes, a surcharge is added, or a minimum charge applies, and the invoice reflects it correctly for a period, then quietly drifts as index inputs move or a rate card lapses without anyone updating the AP configuration. Fuel is the clearest case right now. 3% year over year (read 2026-09-25). A surcharge formula tied to either index has moved substantially in twelve months. Kinetic has no field that recalculates what the surcharge should be. What changes it is treating the audit as two separate jobs: a one-time reconciliation of freight AP history against the actual contract terms, and a standing control that checks each new invoice against the current rate card before payment. Kinetic can support the second once the first has established what the correct terms actually are.

## 1. What does Epicor Kinetic actually check on a freight invoice?

Kinetic checks that a freight invoice ties to a purchase order and, if configured, a receipt: the vendor, the PO number, the quantity or weight, and the total against a tolerance. That is a three-way match, and it confirms the invoice corresponds to a real shipment at a plausible total. It does not check the invoice against a contracted lane rate, an accessorial schedule, a minimum charge, or a fuel surcharge formula, because none of those live in Kinetic as. The three-way match is a control against a different kind of error than rate drift. It catches a shipment billed twice, a quantity that does not match the receipt, or a total wildly outside a set tolerance band. Those are useful checks and Kinetic performs them reliably. What it cannot do is compare the rate per mile, per hundredweight, or per pallet on the invoice against the number written into the carrier contract, because that number is not a field in Kinetic. It sits in a signed agreement, often a PDF, referenced by contract number but never transcribed into the ERP's pricing tables. The same is true for accessorials: detention, liftgate, residential delivery, redelivery. A contract defines when each applies and what it costs. Kinetic has no table that encodes that condition, so an invoice charging detention on a load that never sat still passes the match untouched.

## 2. Where does freight rate drift actually happen in Epicor Kinetic?

Freight rate drift happens at the point where a contracted term needs interpretation before it becomes a number: a general rate increase applied to the wrong lane, an accessorial billed without its trigger condition being true, a fuel surcharge computed off a stale index reading, or a minimum charge applied where the actual weight already cleared it. Kinetic's AP module has no place to store the trigger condition, so it cannot tell a correctly applied surcharge from an incorrectly applied. Rate increases are the most common entry point. A carrier issues a general rate increase letter, it applies to specific lanes or equipment types on a specific date, and AP configuration in Kinetic is rarely updated lane by lane. The invoice can charge the new rate on a lane the increase did not cover, and the three-way match still clears because the PO and receipt are unaffected. Fuel surcharges compound this. A surcharge formula references a published index and updates weekly or monthly. The US Bureau of Labor Statistics' PPI for gasoline (series WPU0571) put the August 2026 index at 319.584, up 46.5% year over year (read 2026-09-25). A carrier's surcharge table built on an older fuel baseline will overcharge or undercharge relative to that movement, and nothing in Kinetic recalculates the expected surcharge to compare against it. ### A. Rate card lapses A rate card has an effective period. When it expires and a new agreement is signed, the old rate can persist in whatever spreadsheet or price list AP staff reference, because updating that reference is a manual step outside Kinetic's workflow. The invoice matches the PO on quantity and vendor, and the stale rate passes. ### B. Accessorial trigger conditions Detention, liftgate and redelivery charges each have a condition attached in the contract, commonly a wait time threshold or a failed first delivery attempt. Kinetic records the charge line but not the condition, so an invoice can bill an accessorial without the condition ever being verified against dispatch or delivery records.

## 3. Can you build freight rate checks directly inside Epicor Kinetic?

You can extend Kinetic's data model with custom fields, BAQs and BPM directives to hold a simplified rate table and flag invoices that exceed it. This works for a small, stable set of lanes and carriers with rates that rarely change. It becomes harder to maintain as the carrier list, lane count and accessorial variety grow, because each contract renewal or GRI requires a manual update to the custom table before the check has anything current to compare against. Kinetic's BPM (Business Process Management) framework lets you attach a directive to the AP invoice entry process that checks a field against a reference table and blocks or flags the transaction. A rate table stored as a custom data definition, populated with lane, equipment type and contracted rate, can drive that check. The work this avoids is real: it catches the invoice charging above the stored rate before payment, not months later. The work it creates is also real: someone has to translate every new contract, every general rate increase, every accessorial schedule change into that table, on the same day it takes effect, for every lane the company ships. A table that lags the contract by even a few weeks lets the exact drift it was built to catch pass through. The check is only as current as its last manual update, and freight contracts change more often than most AP teams have time to re-key them.

## 4. Should you audit freight history before building the ongoing check?

Yes. Building a rate check inside Kinetic against terms nobody has verified in months just encodes whatever error is already in production. The audit should start by pulling 12 to 18 months of freight AP history out of Kinetic and reconciling it line by line against the actual signed rate cards, accessorial schedules and surcharge formulas, which establishes both what is owed back and what the correct reference table should contain going forward. The sequence matters because the two jobs answer different questions. The historical audit answers what already went wrong: which invoices charged above the contracted rate, which accessorials lacked their trigger condition, which fuel surcharges diverged from their stated index. That work has to be done against the actual contract documents, not against whatever table currently lives in Kinetic, because that table may already be the source of the drift. Only once the historical reconciliation has confirmed the correct current terms does it make sense to encode them as a forward check, whether inside Kinetic's BPM framework or in a separate system built for the purpose. Building the check first, against unverified terms, means the ongoing control enforces whatever rate someone last typed in, right or wrong. General freight trucking rates give a sense of how fast this drifts without attention: the BLS industry index for long-distance truckload trucking (series PCU484121484121) stood at 207.644 in August 2026, up 13.9% year over year (read 2026-09-25). A rate table not revisited in that window is not tracking the market it was built against.

## 5. How do you decide between fixing this inside Kinetic and buying a separate diagnostic?

Build the check inside Kinetic once you already know which rates, accessorial conditions and surcharge formulas are correct, because at that point it is a configuration task. Bring in a diagnostic first when you cannot yet state confidently what the current, correct terms are, because a check built against unverified terms enforces the wrong thing with full authority. The deciding fact is whether the reference data exists anywhere reliable yet, not which tool is more capable. This is a sequencing question, not a tooling contest. Kinetic's BPM and custom BAQ layer can hold and enforce a rate table competently once that table is correct. The gap is never really Kinetic's capability, it is that no one has recently confirmed the table against the signed contracts. A fixed-scope diagnostic does the reconciliation work: pulling the freight AP history, matching it line by line to the actual rate cards and accessorial schedules, and quantifying what has already drifted. That produces the verified reference data a Kinetic-based check would then enforce. Attempting both at once, building the enforcement logic while also trying to verify the terms it enforces, means every error in the verification step gets encoded permanently into the control. Sequencing them the other way costs a few weeks up front and produces a check worth trusting. What each step actually resolves before you build a forward check in Kinetic. | Step | What it establishes | Where it happens | | --- | --- | --- | | Historical reconciliation | Which past invoices deviated from contracted terms | Outside Kinetic, against signed contracts | | Reference table build | Current correct rates, accessorial conditions, surcharge formulas | Outside Kinetic, then loaded in | | Forward check configuration | Whether the next invoice matches the verified table | Inside Kinetic, via BPM/BAQ |

## 6. What should an AP or controller team do this quarter?

Pull the last 12 to 18 months of freight and 3PL AP data from Kinetic, gather the actual signed rate cards and accessorial schedules for the carriers with the highest spend, and reconcile them line by line. That reconciliation tells you both what to recover and what belongs in a forward-looking check. Treat any fuel surcharge formula as a priority line item given how far the underlying index has moved. Start with the carriers carrying the largest share of freight spend, since that is where a rate error compounds fastest across volume. Export the AP detail from Kinetic for those vendors over the trailing 12 to 18 months, including line-level accessorial charges where the system captures them separately from the base rate. Match each line against the actual contract document in effect on that invoice date, not the current one, since rates change mid-period. Flag any invoice where the rate, accessorial application or surcharge diverges from what the contract states for that date. Fuel surcharges deserve particular attention this quarter. With the PPI for gasoline up 46.5% year over year as of August 2026 (BLS, series WPU0571, read 2026-09-25), a surcharge formula tied to a stale reference point or an outdated baseline is producing a materially wrong number, and it is one of the easier drift types to verify once you have the formula in hand. For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [diagnostic or software: what to buy first](/insights/diagnostic-or-software-what-to-buy-first) and [build vs. buy: can you do contract-to-invoice matching in excel?](/insights/build-vs-buy-can-you-do-contract-to-invoice-matching-in).

## Common questions

### Does Epicor Kinetic have a built-in freight rate audit feature?

No. Kinetic performs three-way matching between the invoice, purchase order and receipt, confirming the shipment and total are plausible. It has no native field or table for a carrier's contracted rate card, accessorial schedule, or fuel surcharge formula, so it cannot compare a billed rate against a contracted one without custom configuration.

### Can Kinetic's BPM engine catch a freight overcharge automatically?

It can, if you first build a custom reference table holding the current contracted rates and configure a BPM directive to check invoices against it. The catch is that the table only works if it is kept current with every rate change, general rate increase, and accessorial update, which is a manual maintenance burden that grows with carrier count.

### How far back should a freight AP audit look?

12 to 18 months is a practical window: recent enough that carrier contracts and rate cards are still retrievable and relevant, long enough to catch drift that built up gradually, such as a stale rate that persisted across several rate card renewals.

### Why does the fuel surcharge matter more right now?

The US Bureau of Labor Statistics' PPI for gasoline (series WPU0571) shows the August 2026 index at 319.584, up 46.5% year over year (read 2026-09-25). A surcharge formula referencing a stale fuel baseline diverges further from the correct number the more the underlying index moves, making this a higher-value line item to check now than in a flatter fuel market.

### Does three-way matching in Kinetic catch a duplicate freight payment?

It can catch some duplicates if the same PO and invoice number are submitted twice, since the match would flag the repeat. It is less reliable against a duplicate submitted under a slightly different invoice number or from a different remit-to address for the same shipment, since those pass as distinct transactions.

---

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
