Freight and 3PL Controls in Acumatica: What's Enforced

What Acumatica's three-way matching and Carrier Automation actually verify on freight invoices, and where contract-level drift still slips through unchecked.

Twitter LinkedIn WhatsApp
Ask AI: ChatGPT Claude Gemini Grok
Freight and 3PL Controls in Acumatica: What's Enforced

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. On freight and 3PL spend, that gap opens in the space between a signed rate agreement and the surcharge tables a carrier or broker actually bills against, and Acumatica's controls sit downstream of that gap, not inside it.

This guide covers what Acumatica's AP, Purchase Orders, and Carrier Automation modules verify on a freight invoice today, and where the contract terms behind that invoice go unchecked. It is written for a controller or AP lead who already runs Acumatica and wants to know what their existing setup catches, not a pitch for switching ERPs.

Executive Summary

Acumatica enforces the controls it was built to enforce: a bill cannot post without a PO or receipt link, duplicate document numbers from the same vendor are blocked, and the Carrier Automation add-on can compare a rated shipment against a carrier's own rate table at time of shipping. None of that tests whether the rate table itself is still the one in the current contract, whether an accessorial charge should have expired, or whether a fuel surcharge is calculated off the index the contract specifies rather than the carrier's default.

The mechanism is simple: three-way matching and rate-table comparison both check an invoice against a reference document already loaded in the system. Neither module asks whether that reference document is current, complete, or correctly parsed from the contract's actual language. A carrier can update its own surcharge table in the tool that feeds Carrier Automation, and Acumatica will match against the new number without knowing the freight contract still specifies the old one.

What changes it is a control that sits above the ERP: a periodic reconciliation between the contract's stated terms and what is actually loaded into rate tables and surcharge schedules, repeated on a cycle, not run once at implementation and left alone.

1. What does Acumatica actually check on a freight invoice before it posts?

Acumatica's AP module enforces three-way matching: an AP bill linked to a purchase order compares billed quantity and unit cost against the PO and the receipt before it can be released. Duplicate detection blocks a second bill carrying the same vendor reference number. The Carrier Automation add-on, where installed, can also compare a rated shipment's freight charge against the carrier's own rate table loaded into that tool at time of shipping, flagging a mismatch before the invoice arrives.

These are real, configurable controls, not marketing language. Three-way matching in Acumatica's Purchase Orders and Accounts Payable modules is a documented workflow: a PO line, a receipt line, and a bill line each carry quantity and cost fields, and a variance beyond tolerance holds the bill for review rather than releasing it automatically.

The duplicate check works on vendor reference number and vendor combination, so a broker resubmitting the same invoice number is caught. Carrier Automation, where a manufacturer has licensed it, rates a shipment against the carrier's table at time of booking, which catches a carrier billing above its own posted rate.

All three of these tests share one property: each compares the invoice to a reference document already sitting inside Acumatica, whether that is a PO, a receipt, or a rate table synced from the carrier's system. None of them asks where that reference document came from or whether it still matches the contract signed with the carrier.

2. Why does three-way matching miss a stale fuel surcharge?

Three-way matching tests quantity and unit cost against a purchase order and a receipt. A fuel surcharge is neither: it is a variable line calculated off an index, applied as a percentage of the base freight charge, and most freight POs in Acumatica are raised for the base transportation charge only. The match passes because the base charge is correct.

The surcharge calculation, and whether it references the index and formula the contract specifies, sits outside what the PO line.

A freight contract typically ties its fuel surcharge to a published index and a stated formula, for example a surcharge that steps up in defined increments as the index crosses stated thresholds. That formula lives in the contract PDF, not in a PO field.

When Acumatica raises a PO for a shipment, the PO line usually carries the base linehaul charge. The surcharge, if it is entered at all, often arrives as a separate charge code or is absorbed into the total bill amount without its own reference line. Three-way matching has nothing to compare it against.

The US Bureau of Labor Statistics' Producer Price Index for gasoline (series WPU0571, read September 6, 2026) shows an index value of 302.759 for July 2026, up 37.1% year over year. A surcharge formula written against a slower-moving index, or against a stale threshold table, can drift substantially from what the contract intends to charge, and nothing in the three-way match would surface that drift.

3. Can Acumatica's Carrier Automation module catch a rate card that is out of date?

Carrier Automation compares a shipment's rated charge against the rate table loaded into that tool, and it does this reliably. What it does not verify is whether that loaded rate table is the one currently in force under the signed contract. If the table synced from the carrier's own system reflects a rate increase the carrier applied without a corresponding contract amendment, Carrier Automation will match the invoice against the carrier's number and pass it.

This is not a defect in the module. Carrier Automation was built to catch a carrier billing above its own quoted or contracted rate as loaded into the system, and it does that job. The gap is upstream: nothing in Acumatica reconciles the loaded rate table against the actual contract document on a recurring basis.

A rate table is typically loaded once, at onboarding or contract renewal, then left in place. A carrier's own systems may update surcharge or accessorial tables more frequently than the shipper's team re-checks the Acumatica configuration against the contract.

The US BLS Producer Price Index for general freight trucking, long-distance truckload (series PCU484121484121, read September 6, 2026) shows an index value of 195.575 for July 2026, up 8.1% year over year. Rate movement at that pace means a table loaded even a year earlier can already sit meaningfully below or above what a current market-indexed clause would produce, whether or not either side has caught it.

4. What about accessorial charges and minimum volume commitments?

Acumatica has no native field that tests an accessorial charge against a contract's list of billable accessorials, or that tracks progress against a minimum volume commitment across a contract period. An accessorial charge posts as a line item on the AP bill like any other charge; the system does not know whether that accessorial is one the contract permits, or whether it should have expired under the contract's terms.

Freight contracts commonly list a defined set of billable accessorials, detention, liftgate, residential delivery, and specify conditions under which each applies. Acumatica's data model has no object representing that list, so there is nothing in the software to check an incoming accessorial line against.

A. Accessorial charges

A liftgate fee applied to a dock delivery, or a detention charge billed past the contract's free time, both post as ordinary line items. AP sees an amount and a description field. Testing whether the accessorial applies requires reading the contract's accessorial schedule and comparing it manually, line by line, against each bill.

B. Minimum volume commitments

A minimum commitment clause obligates either a minimum spend or minimum volume over a contract period, sometimes with a true-up at period end. Acumatica has no running counter tied to a contract object that accumulates shipments against that commitment. Tracking it requires a spreadsheet or a separate report built outside the ERP, refreshed manually against shipment history.

5. Does Acumatica flag a duplicate freight payment across two invoice formats?

Acumatica's duplicate check matches on vendor and reference number, which catches a resubmitted invoice carrying the same number. It does not catch the same shipment billed twice under two different reference numbers, for example once by the carrier directly and once by a freight broker on the same load, because the reference number field differs and the system has no shipment-level identifier to compare across the two bills.

A load moving through a broker can generate a bill from the broker and, separately, a bill from the underlying carrier if the paperwork is not fully consolidated. Each carries its own invoice number, its own format, and often a slightly different total once accessorials are allocated differently between the two.

Acumatica's duplicate detection was built to test exact or near-exact matches on vendor and document number. Two bills from two different vendor records, referencing the same physical shipment by a bill of lading or PRO number the system was never told to compare, pass the duplicate check independently.

Catching this requires matching on a field, bill of lading number or shipment ID, that Acumatica does not designate as a duplicate-check key by default. It can sometimes be added as a custom field, but the comparison logic itself is not native.

6. How does a PPI-linked surcharge clause interact with what Acumatica actually tracks?

Some freight contracts tie linehaul rate adjustments to a published trucking price index rather than a flat annual increase. Acumatica has no mechanism that reads an external index and recalculates a contracted rate against it. The index reading and the resulting rate change both have to be applied manually to whatever rate table or PO template Acumatica uses, and nothing in the system verifies that the manual update was made correctly or on time.

The US BLS Producer Price Index for truck transportation of freight (series WPU3012, read September 6, 2026) posted an index value of 170.984 for July 2026, up 10.9% year over year. A contract clause that ties a rate adjustment to a reading of this kind requires someone to pull the published figure, apply the contract's formula, and update the rate table Acumatica uses for matching.

Acumatica has no integration that ingests a BLS series and applies it to a rate table automatically. Every step, the index reading, the formula application, and the table update, happens outside the ERP, and a missed or late update means every invoice in that gap gets matched against a rate the contract no longer specifies.

This is the same pattern as the fuel surcharge and the carrier rate table: the ERP tests an invoice against a reference value it holds, and the accuracy of that reference value depends entirely on a manual process the ERP does not supervise.

7. So what closes the gap between Acumatica's controls and the contract itself?

The gap closes with a control layer above the ERP: a recurring review that pulls the actual contract language for rate cards, surcharge formulas, accessorial lists, and minimum commitments, and checks it against what is currently loaded into Acumatica's PO templates and Carrier Automation rate tables. This is a periodic audit function, not a system setting, because the drift accumulates between the review cycles, not inside a single transaction.

Acumatica's controls are not weak. Three-way matching, duplicate detection, and rate-table comparison each do the specific job they were designed for, reliably. The limitation is scope: every one of them tests an invoice against a document already inside the system, and none of them was built to re-verify that document against the underlying contract on an ongoing basis.

A contract compliance review does that verification: reading the actual rate card, surcharge clause, and accessorial schedule, and testing what Acumatica currently has loaded against it, invoice by invoice, for the categories where a stale reference document is likeliest to have drifted.

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

8. Frequently Asked Questions (People Also Ask)

Does Acumatica support three-way matching for freight invoices out of the box?

Yes. Acumatica's Purchase Orders and Accounts Payable modules support three-way matching natively: a bill linked to a purchase order and receipt compares quantity and unit cost across all three documents before release, and a variance beyond configured tolerance holds the bill for manual review.

Does Acumatica's Carrier Automation module require a separate license?

Carrier Automation is an add-on module within the Acumatica ecosystem, licensed separately from the core Distribution or Financials editions. It rates shipments against a carrier's loaded rate table at time of shipping, which is a distinct function from the AP module's three-way match.

Can Acumatica catch a carrier that raises a rate without a contract amendment?

Only if the rate table loaded into Acumatica or Carrier Automation was not updated to reflect the increase, in which case the system would flag a mismatch against the older, correct table. If the table was updated to match the carrier's new rate, the system has no way to know the contract itself was never amended.

What is a not-to-exceed cap and does Acumatica enforce it on freight bills?

A not-to-exceed cap sets a ceiling on a specific charge type under a contract. Acumatica has no native field representing an NTE cap tied to a contract object, so a bill exceeding a cap posts like any other bill unless a manual approval workflow has been configured to catch it.

Do I need Carrier Automation if I already do three-way matching in Acumatica?

They test different things. Three-way matching verifies quantity and cost against a purchase order and receipt. Carrier Automation rates a shipment against the carrier's own table at time of booking. Running both closes more ground than either alone, but neither tests the contract behind the rate table.

How often should a freight contract be reconciled against what Acumatica has loaded?

Acumatica has no built-in reconciliation cadence, so the interval is a policy decision, not a system setting. A rate table loaded once at contract signing and never revisited accumulates unverified changes at whatever pace the carrier's own billing systems update, which the ERP cannot detect on its own.

Can a custom field in Acumatica catch duplicate freight bills across a broker and carrier?

It can help. Adding a custom field for bill of lading or PRO number and configuring a duplicate check against it would catch a shipment billed twice under different vendor reference numbers. This is not part of Acumatica's default duplicate detection and requires custom configuration.

Is this guide legal advice about what our freight contracts require?

No. This is general information about ERP system behavior, not legal advice about contract interpretation or enforcement. Confirm specific contract obligations with counsel or the contracting party before making a compliance determination.

Where does a Margin Drift Diagnostic fit if we already run Acumatica?

A diagnostic reviews the actual freight contracts against what is currently loaded in Acumatica's rate tables, PO templates, and Carrier Automation configuration, identifying where the two have drifted apart. It runs independently of any ERP change and produces a roadmap Acumatica's existing controls can then be configured against.

Margin Drift Resources