How to Audit Carrier Invoices for a 3PL
· 8 min read
The short answer
Auditing a carrier invoice at a 3PL means running a three-way match for every tracking number: what the carrier billed, what your contracted rate says it should cost, and what you already quoted the client in the WMS. Any gap is an exception — a reweigh, dimensional-weight bump, address correction, duplicate line or return-to-sender charge. Each exception then gets one of three outcomes: rebill the client, absorb it, or file a carrier claim before the dispute window closes, usually about 180 days for UPS and FedEx.
Why a two-way match isn't enough for a 3PL
Most carrier-audit guides describe a two-way match: invoice against contract. That works if you're a single shipper recovering your own money. A 3PL has a third number in play — the label cost already quoted to the client at ship time, sitting in the order record in your WMS. That's the number the client's invoice is built on, so it's the number that matters most when a carrier bill comes in higher.
Say a client's order ships and the WMS quotes the label at $8.10 based on the dims and weight entered at pack time. Your contracted carrier rate for that service and zone says it should settle at $7.40. The carrier invoice, three weeks later, shows $9.85 because the package was reweighed in transit. Now you have three numbers and two gaps to explain: why the contract rate and the quote don't match (a rating or rate-card problem), and why the carrier charged more than the contract (a reweigh, a surcharge, or an error).
Run the match on all three figures, tracking number by tracking number, and the gap tells you what kind of problem you have before you've even opened a dispute.
Five checks per tracking number
Line-by-line auditing sounds like reading every row of the invoice. It isn't. It's running the same five checks against every tracking number and only stopping on the ones that fail.
- Service level billed matches service level booked — not downgraded or upgraded without a reason.
- Billed weight and dimensions match what was recorded at pack time, within a tolerance you set (say, 2 ounces or a quarter inch).
- Zone billed matches the actual origin-destination zip pair — zone-skipping and zone errors show up here.
- Every accessorial on the invoice (address correction, residential, additional handling, fuel) has a reason tied to the shipment, not a flat default.
- The tracking number appears exactly once across the invoice period — not twice, not once voided and once billed.
A shipment that passes all five needs no further attention. One that fails any of them becomes an exception, and exceptions are the only lines a person needs to look at by hand.
What the common errors actually look like
| Error type | How it's calculated | What to check against |
|---|---|---|
| Dimensional weight adjustment | Carrier multiplies length × width × height and divides by a dim factor (commonly 139 for domestic air); if that figure exceeds actual weight, you're billed on dims, not scale weight. | Recompute the dim weight from the dimensions in the order record and compare to what the carrier billed — a half-inch rounding difference can flip a package into a higher billable weight. |
| Address correction fee | Carrier flags a mismatch between the ship-to address on the label and the address it delivers to, and charges a flat fee per package regardless of whether the correction changed the zone. | Confirm the ship-to on the order matches the label exactly; a missing suite number is a common, recurring cause worth fixing at the source rather than disputing each time. |
| Duplicate charge | The same tracking number appears on two invoices, or a label that was voided before pickup is billed as if it shipped. | Match tracking numbers against your own shipment log; a tracking number with no corresponding outbound scan in your system is a straightforward dispute. |
| Return to sender (RTS) | Carrier bills the return leg as a new outbound shipment, with its own zone, weight and surcharges, on top of the original outbound charge. | Confirm the return was actually requested or undeliverable, and check whether your rate card already accounts for RTS as a separate billable event to the client. |
The dispute clock
UPS and FedEx both give you a window of roughly 180 days from the invoice date to dispute a charge; after that, the charge is final regardless of merit. DHL's window is set contractually and is often shorter. The window starts on the date the carrier invoiced the charge, not the date you noticed it — which is the real argument for auditing every cycle rather than catching up quarterly.
The dispute window and your own client billing cycle don't line up automatically. If you invoice clients monthly but a reweigh surfaces on a carrier invoice two weeks after you've already closed that client's bill, you have two choices: hold the charge out of the closed invoice and carry it to the next cycle as an adjustment line, or reopen the closed invoice. Most 3PLs pick the former — it's cleaner for the client and for your own books — but it only works if flagged charges are tracked separately from the moment they're found, not buried in the next invoice run with no note of where they came from.
Rebill, absorb, or claim — pick one per exception
Every flagged line needs a decision, and the decision depends on where the error originated, not just whether it's a real error.
- Carrier error against its own contract (wrong zone, duplicate billing, a reweigh that doesn't match the actual package) — file a carrier claim. This is carrier money, not client money.
- Correct per contract, but the quote the client saw was wrong because of bad dims or weight entered at pack time — that's an internal error; absorb it and fix the pack-time process, don't pass it to the client.
- Correct per contract, and the adjustment reflects something that actually happened to the shipment (it really was heavier, it really did need an address correction) — rebill the client for the difference, the same way you'd rebill any other accessorial.
- Ambiguous or low-dollar (say, under a dollar or two per package) — some 3PLs set a threshold below which they accept the charge on purpose rather than spend staff time chasing it. That's a legitimate choice as long as it's a chosen policy, not a default.
Writing that decision down against the tracking number — not just resolving it and moving on — is what turns this from a one-time recovery project into an auditable process. It's also what separates a conscious write-off from the kind of quiet erosion covered in what margin leakage looks like in a 3PL.
Running this across hundreds of accounts without it eating a person's week
The five checks above don't need a human on every tracking number — they need a human on the ones that fail. If the carrier invoice, the contracted rate, and the quoted label cost are already sitting against the same tracking number at the moment the carrier bills it, the three-way match is a comparison, not a research project, and the exceptions surface the day the invoice lands rather than ninety days later in a spreadsheet. Carrier invoice reconciliation is built around exactly this: it matches carrier invoices against the label cost quoted in the WMS, tracking number by tracking number, and flags reweighs, dimensional-weight adjustments, address corrections and RTS charges as they appear.
Make it recurring by running the match on the same cadence as your billing cycle: reconcile the carrier invoice before client invoices for that period go out, so flagged charges can be rebilled, absorbed or held for a claim before the client ever sees the number. A cycle that runs every time beats a project that runs once a quarter, because the 180-day clock doesn't wait for your cleanup schedule.
Questions people ask
What's the difference between a parcel audit and a freight audit for a 3PL?
A parcel audit checks small-package carrier invoices (UPS, FedEx, DHL) line by line against contracted rates and quoted costs, usually at the tracking-number level. A freight audit checks LTL/FTL invoices against bills of lading and freight class, at the shipment or BOL level — fewer line items, bigger dollar amounts per error. Most 3PLs need the parcel audit as a recurring weekly or cycle-based process and the freight audit as a lighter, less frequent check.
How long do you have to dispute a charge with UPS, FedEx or DHL?
UPS and FedEx generally give around 180 days from the invoice date to dispute a charge. DHL's window is set in your service contract and is often shorter. The clock starts when the carrier invoices the charge, not when you notice it, which is why auditing every billing cycle matters more than auditing in a yearly cleanup.
When a carrier overcharges you, do you rebill the client, absorb the cost, or file a claim?
It depends on where the error happened. If the carrier billed against its own contract incorrectly, file a claim — that's carrier money. If the charge is correct and reflects something real about the shipment, rebill the client. If the charge is correct but exists because of a mistake on your side, like bad dims entered at pack time, absorb it and fix the underlying process.
How do you reconcile a UPS or FedEx invoice against the label cost quoted in your WMS?
Match each tracking number across three numbers: the carrier's billed amount, your contracted rate for that service and zone, and the label cost your WMS quoted the client at ship time. Any shipment where all three line up needs no action; any mismatch becomes an exception to review and route to a rebill, a claim, or a deliberate write-off.