See how Freehand recovers margin you're already losing

Map your commercial agreements to real-world execution - recovering 2-5% in lost margins and ensuring 100% audit coverage.

What to expect in the call

We identify exactly where you’re leaking margins

See how our AI Teams cross-check contracts, and resolve overcharges

Get a savings estimate based on your current spend and systems.

Trusted & Recognized by

KEARNEY
pwc
Gartner

We'll find $500,000 in 30 days

All Articles

How to Set Up 3-Way Matching for Freight Invoices

Set up matching for freight invoices in 7 steps. Standard 3-way matching misses contract rates and fuel surcharges, so here is the 4th layer you need.

Craig Edwards

Head of Solutions Consulting (US GTM Team)

13

mins

To do 3-way matching for freight invoices, match the carrier's invoice against the bill of lading and the proof of delivery. That confirms the shipment was authorized and delivered, but it's not enough alone. Carrier invoices need a fourth layer: the contracted rate, the fuel index, and confirmed accessorial triggers.

Standard 3-way matching, built for goods procurement, approves freight invoices that a 4th layer would catch.

Key Takeaways

  • 3-way matching for freight compares three documents: the bill of lading (BOL), the proof of delivery (POD), and the carrier's invoice. For freight, a 4th layer validates the invoice against the contracted rate, fuel index, and accessorial triggers, since the first three checks approve charges that don't reflect the contract.
  • Enterprises running standard 3-way matching on carrier invoices still leave 1.5-2.5% of freight spend uncaught, since none of the first three documents check the rate itself.
  • Each validation layer catches a different failure mode. A charge can pass three of the four checks and still be wrong.
  • Setup has two parts: connecting the systems that supply the data, and defining what each layer actually validates.
  • Freehand's AI Teams run all four layers on every invoice, so a charge has to clear the contract and the fuel index, not just the BOL and the POD.
  • The process in seven steps: connect your BOL, POD, and AP systems, digitize contracts and the fuel index, match the invoice to the BOL and POD, validate the rate against the contract and fuel index, verify accessorials against confirmed triggers, set tolerance thresholds and route mismatches, track match rate by failure type.

What do you need before you can set up 4-way matching for freight invoices?

You need four things talking to each other: your BOL source, your POD source, your digitized contracts, and a live fuel index feed. Standard 3-way matching only needs the first two connected to AP. Freight needs all four.

SourceWhat it suppliesWhere it commonly breaks
Bill of lading (BOL)Shipper, consignee, origin-destination, weight, and service level agreed at pickupFreight booked outside the routing guide has no clean BOL to match against
Proof of delivery (POD)Confirmed delivery, actual weight and piece count, and any noted exceptionsPOD data lags or never makes it back from the driver into the TMS
Digitized contractsThe rate, tier, and accessorial schedule that should applyRate cards go stale, so a valid-looking charge matches the wrong number
Fuel surcharge indexThe correct fuel tier for the specific departure weekStatic or manually updated feeds miss weekly index changes

Most enterprises already have the BOL and POD flowing into their TMS for standard matching. The contract data and the fuel index feed are usually the gap, since neither one is a document the TMS generates on its own.

How do you set up 4-way matching for freight invoices step by step?

You set it up by connecting your systems, then layering the freight-specific checks on top of the standard match. The first three steps mirror ordinary 3-way matching. The last four are where freight actually gets validated.

Step 1: Connect your BOL, POD, and AP systems

Link the TMS or routing guide that generates the BOL, the system that captures the POD, and AP into one workflow so an invoice can pull both records automatically. Without this, someone is manually pulling shipment paperwork for every invoice.

Step 2: Digitize your contracts and fuel index feed

Load carrier rate cards, accessorial schedules, and discount tiers into a system the match can query directly. Connect a live fuel surcharge index feed rather than updating it by hand.

Step 3: Match the invoice to the BOL and POD

Confirm the shipper, carrier, consignee, and shipment number agree across the invoice, the BOL, and the POD, then check that the billed weight and piece count match what the BOL and POD actually recorded. An invoice with no matching BOL or POD is a routing or duplicate problem, not a pricing one.

Step 4: Validate the rate against the contract and fuel index

Check the linehaul rate against the contracted number and the fuel surcharge against the index tier for that specific departure week. A rate that matches last month's index is still wrong.

Step 5: Verify accessorial charges against confirmed triggers

Confirm each accessorial, detention, liftgate, residential delivery, against a timestamp or exception noted on the POD or in the TMS, not just against the contracted rate for that charge type. A correctly priced accessorial with no matching trigger event shouldn't clear.

Step 6: Set tolerance thresholds and route mismatches by type

Decide what clears automatically and route everything else to the team that owns the fix: rate mismatches to whoever manages the carrier contract, accessorial disputes to the team with TMS access, BOL or POD mismatches to whoever manages routing.

Step 7: Track match rate by failure type

Log which layer is failing most often, BOL/POD, rate, or accessorial, since that tells you where to fix the input data instead of just clearing the backlog.

What does each validation layer actually catch?

Each of the four layers catches a failure mode the others miss, which is why skipping one leaves a specific category of overcharge uncaught.

LayerWhat it catchesWhat passes it anyway
BOL / POD matchUnauthorized, undelivered, or duplicate invoicesA correctly delivered shipment billed at the wrong rate
Contract rateLinehaul and fuel charges that don't match the contractAn accessorial billed at the contracted rate with no service event
Fuel indexA fuel surcharge applied at the wrong week's tierA rate that's correct for last month, not this one
Trigger verificationAccessorials billed with no confirmed service event on the PODA rate and fuel charge that are both individually correct

A charge can pass three of these checks cleanly and still be wrong on the fourth. That's the gap standard 3-way matching, built for goods procurement, was never designed to close.

{{blue-cta}}

For the broader concept, standard 3-way matching, the documents involved, and why freight needs a 4th layer at all, see our guide to three-way matching in accounts payable.

What mistakes break freight invoice matching?

Most setups fail by treating freight invoices like standard goods invoices, or by treating all four layers as one generic check.

  • Running only standard 3-way matching on carrier invoices. It confirms the shipment happened. It says nothing about whether the rate or the accessorial charges are correct.
  • Using a static fuel index instead of a live feed. A fuel surcharge check against last quarter's index approves charges that are wrong by design.
  • Routing every mismatch to the same queue. A rate dispute needs the contract team; an accessorial dispute needs TMS access. One undifferentiated exception queue slows down both.
  • Never tracking which layer fails most often. Without that breakdown, you're clearing a backlog instead of fixing the input data causing it.

If you're evaluating dedicated tools for the audit layer specifically, our roundup of the best freight audit software breaks down how the leading options handle rate and accessorial validation.

How do you run 4-way matching without adding headcount?

You run it by automating all four layers so match rate stops depending on how many people are available to check invoices by hand. The setup work above, connecting systems and digitizing contracts, is the same either way. What changes is whether a person or a system runs the check on every invoice.

Freehand's AI Teams run the full match, BOL, POD, contract rate, fuel index, and accessorial trigger, on every carrier invoice.

They resolve the mismatches that surface instead of routing all of them to one queue. For the fuller picture of how that audit runs end to end, see our guide to the freight audit process.

Freehand doesn't replace your TMS, ERP, or routing guide. It runs the fourth validation layer on top of them, so the match that clears an invoice actually confirms the charge is correct, not just that the paperwork lines up.

For a side-by-side look at platforms running this at scale, our roundup of the best freight audit and payment software breaks down how the leading options handle the full match.

{{brown-cta}}

Frequently Asked Questions

What are the three documents in 3-way matching for freight invoices?

The bill of lading, the proof of delivery, and the carrier's invoice. The BOL confirms what was agreed at pickup, the POD confirms what was actually delivered, and the invoice is checked against both before it's treated as a candidate for payment.

Is 3-way matching enough for freight invoices?

No. Standard 3-way matching confirms the invoice matches an authorized, delivered shipment. It doesn't check whether the rate matches the contract or whether accessorial charges have a real service event behind them, which is where most freight overcharges hide.

What's the difference between 3-way and 4-way matching for freight?

3-way matching for freight compares the bill of lading, the proof of delivery, and the invoice. 4-way matching adds contract rate and fuel index validation as a fourth layer, since freight invoices carry pricing variables (fuel surcharges, accessorials) that standard procurement invoices don't.

Does my ERP's native matching handle the 4th layer?

No. SAP, Oracle, and NetSuite all run standard 3-way matching natively, but none validate a carrier invoice against a contract rate card or a weekly fuel index out of the box. That layer has to be added on top.

Who should own a rate-mismatch exception versus an accessorial exception?

Route rate mismatches to whoever manages the carrier contract, since fixing it means correcting the rate card or disputing the charge. Route accessorial mismatches to whoever has TMS access, since resolving it means confirming or disproving the trigger event.

How often does the fuel surcharge index need to update?

Weekly, tied to the EIA diesel price index most carrier contracts reference. A feed that updates monthly or manually will approve fuel charges that were correct for a prior week and wrong for the current one.

Can you set up 4-way matching without a TMS?

Not fully. The accessorial-trigger layer specifically needs shipment-level data, timestamps, delivery records, that only a TMS or equivalent execution system captures. Without it, accessorial charges can only be checked against the rate, not the service event.

Every Invoice Checked. Every Charge Verified.

Freehand reads each carrier invoice against your contracted rates and flags the variance before you pay it. No sampling, no backlog.

You're Auditing a Sample. The Errors Live in the Rest.

Most teams spot-check 15 to 30% of freight invoices. Overcharges hide in the 70% no one opens.

Try Freehand
Gartner Research

Every warehouse. Every provider. Every mile.

Gartner's 2026 outlook on logistics outsourcing, and how AI Teams hold every contract to the terms you agreed.

  • Where outsourced logistics quietly loses margin
  • Why billed charges drift from the contract
  • How AI Teams close the gap
download now

More related blogs

How to Close the Books Faster with Freight Accruals

Industry

Freight Spend Management: A Step-by-Step Guide

Industry

How to Reduce DSO in Logistics: A Step-by-Step Plan

Industry