3PL invoice audit: a step-by-step method and checklist
How to audit a 3PL invoice line by line: the documents you need, nine checks that catch common overcharges, and how to write up findings before the deadline.
A 3PL invoice audit compares every line of your warehouse bill against three things: the rate card in force on the date of the charge, your own order records, and the warehouse's own inventory reports. The checks below target errors that leave a clear trail (old rates, wrong quantities, canceled orders, duplicates, the wrong storage basis and extra shipping markup), and you can run each one with a spreadsheet. This guide walks through the method in the order we use it.
The examples on this page use Juniper & Pine, a made-up Shopify brand, and Ridgeline Fulfillment, a made-up warehouse. Their numbers come from our public sample audit.
What a 3PL audit is (and is not)
An audit is not a review of whether your 3PL is good value. It answers a narrower question: did you get billed what the contract says, for work that actually happened? That makes it factual. Each finding is a line on an invoice, a clause in the contract and a record that proves the gap.
Three months of invoices is a good starting sample. One month can hide errors that only show up when something changes, such as a rate amendment or an inbound shipment that gets billed twice across two invoices.
Gather these documents first
| Document | Where to get it | What you use it for |
|---|---|---|
| Signed rate card and every amendment | Your contract folder or account manager | The agreed rate for each fee, and the date each rate applies from |
| Invoices with line detail | The 3PL's billing portal (CSV, Excel or PDF) | Every charge, with order number, quantity and rate |
| Order export | Shopify admin, Orders, Export | Items per order, fulfillment status, cancellations, ship-to company |
| Daily storage or inventory report | The 3PL's portal or account manager | Pallets, bins or cubic feet occupied each day |
| Shipping labels with carrier cost | Invoice detail or the 3PL's shipping report | What the carrier actually charged per label |
If your invoice only shows summary totals, ask for the itemized detail. You cannot check a line you cannot see. Our invoice example shows what a summary page and its detail can look like.
The nine checks
Work through these in order. Our 3PL invoice audit checklist has the same steps in a printable form.
1. Reconcile the totals
Add up the itemized lines and confirm they equal the printed total, to the cent. Then check that each summary line equals quantity × rate. On Ridgeline's September invoice, 332 pick & pack charges × $3.25 = $1,079.00, which matches. If the detail and the total disagree, stop and ask why before you go further.
2. Check every rate by its effective date
Look up each fee on the rate card and confirm the rate billed was the one in force on the date of the service. Amendments are where this goes wrong. Juniper & Pine's additional-item rate dropped from $0.85 to $0.65 on July 1, but the invoices kept billing $0.85. At $0.20 per item, that came to $205.00 over three months.
3. Compare billed units with order units
Match each order number on the invoice to your Shopify export. A 3-item order should carry one first-item fee and two additional-item fees, not three. In the sample audit, 14 orders were billed one more item than they contained, which came to $9.10.
4. Remove canceled orders
Filter your export for orders canceled before they shipped, then search the invoice for those order numbers. A quick clue: count pick & pack charges and shipping labels. Ridgeline's September invoice has 332 pick & pack lines but only 328 labels, and 332 − 328 = 4 orders that were billed but never shipped. Across three months, canceled orders added $51.45.
5. Look for duplicates
Sort by reference (ASN, PO or order number), description and amount, and look for repeats. Check across invoices too. Juniper & Pine's receipt ASN-2231 was billed in August and again in September: 37 cartons × $5.00 = $185.00, charged twice.
6. Check the storage basis
Your contract should say how storage is measured: monthly average, peak, an end-of-period count or daily. Billing software supports several of these (for example, ShipHero documents a peak on-hand method and Extensiv documents counts at the end of a billing period), so the setting has to match your contract. In September, Ridgeline billed 46 pallets, the peak, while the contract and the daily report gave an average of 38: (46 − 38) × $18.00 = $144.00. Our storage billing guide covers this in detail.
7. Check shipping markup and surcharges
If the invoice shows carrier cost beside the billed amount, divide one by the other. Ridgeline billed $10.46 on a $9.34 label: $10.46 ÷ $9.34 = 1.12, a 12% markup, when the contract allows 8% ($9.34 × 1.08 = $10.09). That 4-point gap across 1,007 labels came to $417.58. Also check surcharges against the ship-to address. UPS defines residential as an address that is a home, including a business run out of a home, so a surcharge on an office suite deserves a question (UPS terms).
8. Check minimums and fixed fees
Some 3PLs set a minimum monthly spend (Extensiv). Read your clause closely. Juniper & Pine's contract says a slow month is topped up to $1,500, so if fulfillment charges were $1,320, the top-up should be $1,500 − $1,320 = $180, not a separate $1,500. Confirm fixed fees such as account management appear once per month.
9. Check the arithmetic on every line
Multiply quantity by rate on each line. It sounds too basic to matter, yet the sample audit found a returns line with 2 returns × $3.50 billed at $10.50 instead of $7.00, a $3.50 error.
Here is what a few findings look like when they are marked on the bill:
| Charge | Order | Qty | Rate | Amount |
|---|---|---|---|---|
| Pick and pack, first item | #10482 | 1 | 3.25 | 3.25 |
| Additional item | #10482 | 3 | 0.85 | 2.55 |
| Order #10482 had 2 items, and your rate card says $0.65 each. Should be $1.30. Over by $1.25 | ||||
| Pick and pack, first item | #10477 | 1 | 3.25 | 3.25 |
| Order #10477 was cancelled on Sep 3, before it shipped. Over by $3.25 | ||||
| Pallet storage | 46 | 18.00 | 828.00 | |
| Your contract bills the month's average, which was 38 pallets. Over by $144.00 | ||||
Write up findings with evidence
Each finding should stand on its own so the warehouse can check it quickly. Include:
- The invoice number and the line (row or page).
- What was billed and what the contract allows, with the clause quoted.
- The record that proves it: the Shopify order, the storage report row or the earlier invoice.
- The difference in dollars, and a total.
- How sure you are. Separate certain findings from ones you want the warehouse to confirm.
Juniper & Pine's audit found $1,267.73 over three months. Of that, $72.10 in residential surcharges on business addresses was marked "likely", because the warehouse may have a reason, so it went in as a question rather than a demand.
Send it before the dispute window closes
Check whether your contract sets a deadline for raising invoice disputes, because published terms vary. ShipBob's published terms give 30 days after the invoice date (ShipBob), while DP World's fulfillment dispute policy asks for written notice within five business days (DP World). Check your own contract, and audit each invoice soon after it arrives. Our guide on how to dispute a 3PL invoice covers the request itself, and the credit request email template gives you a starting draft.
Get your own invoices audited
If you would rather not do this by hand, 3PL Checker runs these checks on your own rate card, invoices and Shopify orders. A person reviews every finding, and you get the evidence plus a credit request ready to send. The first audit is free.
Questions
What is a 3PL audit?
A 3PL audit checks your warehouse invoices line by line against your signed rate card, your own order records and the warehouse's inventory reports. The goal is to find charges that do not match the contract and ask for a credit.
What is invoice auditing?
Invoice auditing means checking that every charge on a supplier's invoice was agreed, actually happened and was priced correctly. For a 3PL, that means rates, quantities, orders, storage and shipping.
What is the invoice audit process?
Gather the rate card and amendments, itemized invoices, an order export and a daily storage report. Reconcile totals, check each rate and quantity, then write up each error with evidence and send it before the contract's dispute deadline.
What should a 3PL audit checklist include?
Totals that add up, rates by effective date, billed units versus order units, canceled orders, duplicates, the storage basis, shipping markup and surcharges, and minimums. Our free checklist template lists each one.