- 1The Lie: "It's System-Generated, So It's Correct"
- 2The 3PL Invoice Reconciliation Runsheet: Five Monthly Checks
- 3Check 1: Order-Count Tie-Out
- 4Check 2: Storage Billed vs. Actual Occupancy
- 5Check 3: Surcharge Spot-Checks
- 6Check 4: Rate-Card Version Check
- 7Check 5: Credits Follow-Up
- 8A Worked Example: The Invoice That Came In 23% Over
- 9The Books Side: One Invoice, Four Destinations
- 10Disputes and Credits in Your Books
- 11The Bill Is a Draft Until You've Read It
Your 3PL's invoice is assembled by software, keyed by humans, and checked by nobody — until you check it.
The invoice lands on the 3rd of the month. Forty-one line items, a total higher than last month's, a due date two weeks out. You skim the total, wince, and pay it — because what else are you going to do, count the pallets yourself?
That skim-and-pay reflex is worth examining, because this is probably a five-figure monthly vendor relationship and it may be the only one you never audit. You reconcile your bank feed. You check your ad spend against the platform. But the fulfillment bill gets paid on trust, month after month, while the gap between quote and invoice widens.
This post is a working system for 3PL invoice reconciliation: five checks you run every month in about thirty minutes, a worked example of an invoice that came in 23% over the model, and — because the exercise pays off twice — where each piece of that invoice belongs in your books. If you haven't yet internalized what each fee class is, read how 3PL pricing actually works first. That post is the anatomy. This one is the physical exam.
The Lie: "It's System-Generated, So It's Correct"
The belief that keeps store owners paying unaudited invoices is simple: the bill came out of a computer, so the math must be right.
The math is usually right. It's the inputs that drift. A 3PL invoice is assembled from sources that don't naturally agree with each other: the warehouse management system logs billable events (picks, receipts, returns), a storage snapshot counts your occupied locations on some day of the month, a rate card — one of several versions that may exist — prices everything, and a human keys in the special projects, corrections, and sometimes the surcharges. Every handoff between those systems is a place where your bill can pick up charges that aren't yours.
And here's the folk wisdom anyone who audits freight or fulfillment bills for a living will tell you: errors happen at a steady rate, and the ones in the vendor's favor are the ones that survive. Not because your 3PL is dishonest — because an error that undercharges you gets caught by their own revenue controls, while an error that overcharges you gets caught by exactly one party: you. If you're not checking, the asymmetry compounds.
The good news: you don't need to verify all forty-one lines. You need five checks.
The 3PL Invoice Reconciliation Runsheet: Five Monthly Checks
Run these in order, same time every month, against two sources you already have: your platform's shipped-order data and your 3PL's client portal (inventory reports, billing event logs). Budget thirty minutes once the routine settles in.
Check 1: Order-Count Tie-Out
The biggest line on the invoice after shipping is pick and pack, and its driver is countable: how many orders shipped.
Pull your platform's count of orders fulfilled by the 3PL for the billing period — shipped orders, not placed orders, and mind the cutoff dates, since the 3PL's billing period may not match the calendar month. Compare it to the number of first-pick (or per-order) charges on the invoice.
The two numbers should be within a whisker of each other. When they're not, the usual culprits are orders cancelled after the pick was logged, duplicate billing on re-ships or split shipments, and another client's batch landing on your account during a busy week. Every excess pick is a credit. If your average items per order is stable, run the same tie-out on additional-pick counts — a jump in picks-per-order with no change in your catalog is worth a question.
Check 2: Storage Billed vs. Actual Occupancy
Storage is billed on occupancy — pallet positions, bins, or cubic feet — and occupancy is a number your 3PL's portal reports independently of the invoice. Compare them.
Discrepancies here have a specific texture: positions emptied mid-month but billed in full, inventory consolidated into fewer locations without the billing snapshot updating, freight cross-docked straight to the pick face but billed as if palletized into reserve. Know your contract's proration rule — some 3PLs legitimately bill any occupied position for the full month, and that's a contract term, not an error. But eleven billed pallets you can't find in your own inventory report is an error, and it recurs every month until you flag it.
Check 3: Surcharge Spot-Checks
You can't verify every surcharge, so sample. Each month, pick two or three surcharge lines and trace them to their justification: a peak-season surcharge should exist only in the window your contract (or the carrier calendar) defines; an oversized-item fee should attach to SKUs that are actually oversized; a special-project line should match a project you requested, in writing, at the quoted rate.
Miscoded surcharges are among the most common audit findings — a peak fee still firing in February, a hazmat charge on a product line you discontinued. Small per line, meaningful per year, and vendors almost never catch them on their own, for the asymmetry reason above.
Check 4: Rate-Card Version Check
Once a quarter at minimum — monthly if you've had a finding — re-derive a few line items from your contracted rate card. Take the invoice's additional-pick charge, divide by the pick count, and confirm the unit rate matches the card you signed. Same for storage, receiving, and returns.
Rate cards change — sometimes with notice, per your contract's amendment clause; sometimes the new card simply starts appearing in the math. A three-cent drift on a per-pick rate is invisible on one invoice and very visible across a year of volume. A rate that moved without the required notice is both a credit conversation and a contract conversation — the red flags to check before you sign include exactly this clause.
Check 5: Credits Follow-Up
The audit is worthless if the findings evaporate. Keep a running log — invoice number, disputed line, amount, date raised, resolution. Every month, before you review the new invoice, review the log: which credits were promised last month, and did they appear?
Promised credits have a way of not materializing until the second or third ask. That's rarely malice — your credit memo is a low-priority ticket in someone else's queue. The log turns "I think they owed us something" into "credit for invoice 4417, $364, promised June 12, not received" — which gets paid.
A Worked Example: The Invoice That Came In 23% Over
Here's the runsheet applied. All numbers are fictional round numbers — a store doing about a thousand orders a month, with a cost model built from their contracted rate card (the modeling exercise from the pricing anatomy post). The model said about $9,800. The invoice said $12,054 — 23% over. Skim-and-pay would have eaten the whole overage. The runsheet split it:
| Finding | Check that caught it | Amount |
|---|---|---|
| 83 more first picks billed than shipped orders (cancelled-order picks and double-billed re-ships) | Order-count tie-out | $249 credit |
| 52 pallet positions billed; portal shows 41 occupied | Storage vs. occupancy | $220 credit |
| Peak-season surcharge applied outside the contractual peak window | Surcharge spot-check | $364 credit |
| Additional picks billed at $0.95 against a contracted $0.75 (new rate card, no notice) | Rate-card version check | $80 credit |
| Relabeling project (requested and quoted) | Legitimate | $450 |
| Heavier package mix and unfavorable zone spread on shipping | Legitimate | $891 |
| Remaining variance vs. model (mix, rounding) | Legitimate | $0 net |
$913 of the $2,254 overage was billing error — about 7.6% of the invoice. The rest was real cost the model hadn't predicted: a project the store asked for, and a shipping mix that shifted. That distinction is the point of the exercise. The audit isn't "fight every increase" — it's "know which increases are real," so you chase the $913 and re-model for the $1,341, because a permanently heavier shipping mix is a margin problem, not a billing problem. (If the findings are real cost rather than billing error, that's a different fix: comparing providers on your actual order profile.)
The Books Side: One Invoice, Four Destinations
You've verified the invoice — now don't undo the work by booking it as one lump. A single 3PL invoice contains costs that behave differently, and one catch-all "Fulfillment" expense line quietly distorts your gross margin. The split that keeps your P&L honest:
- Pick and pack, account fees, receiving — fulfillment operating expense. This is the labor cost of getting orders out the door. It scales with order volume, and you want to watch it as a per-order metric.
- Packaging materials — COGS-adjacent. Boxes, mailers, and inserts are part of the cost of delivering the product; many stores carry them in cost of goods sold so per-unit margins reflect the true cost of a shipped unit. Consistency matters more than the exact account — pick a treatment and hold it, or your margin trend means nothing. How COGS should flow from Shopify into QuickBooks covers where this boundary sits.
- Storage — operating expense, full stop. It scales with inventory held, not units sold, which is exactly why you don't want it hiding inside COGS — a heavy-stock quarter would look like a margin collapse.
- Shipping — and here the direction matters. Freight-out (parcels to customers) is an operating expense of selling. Freight-in (inbound freight to the warehouse) is part of your inventory cost and belongs in COGS as that inventory sells. A 3PL invoice can contain both, and booking inbound container freight as a selling expense understates your product cost on every unit.
Your chart of accounts doesn't need to be elaborate — four or five accounts cover this. What it needs is the same split applied every month. That division of labor — software keeps the order and payout data trustworthy, you spend your review time on the bills only a human can audit — is the general shape of a working e-commerce accounting system.
Disputes and Credits in Your Books
One accounting trap specific to the audit: what do you do with the $913 you've disputed but not yet recovered?
Book the invoice in full, in the period it covers, split across the expense classes above. Don't short-pay by the disputed amount unless your contract explicitly allows it, and don't reduce the recorded expense on hope — a credit you've requested is not a credit you've received. Track the dispute in your credits log, not your ledger.
When the credit memo arrives, record it as a vendor credit against the same expense accounts the original charges hit — the pick-count credit reduces fulfillment expense, the storage credit reduces storage expense. Don't book credits to a catch-all "other income" line: that overstates both your fulfillment cost and your income, and it breaks the month-over-month comparability your audit runsheet depends on. If a credit arrives in a later month, so be it — the log ties it back to the invoice it corrects.
The Bill Is a Draft Until You've Read It
You started this post as someone who pays the fulfillment invoice on trust. The reframe worth keeping: a 3PL invoice is a claim assembled from systems that don't check each other — and you are the only control in the loop with an incentive to find the overcharges. Thirty minutes a month, five checks, a credits log. In the worked example, that half hour was worth $913, plus a rate-card correction that would have leaked money every month afterward.
The same discipline that catches the phantom pallets is the one that splits the invoice correctly in your books — and the monthly review is a lot easier to protect when the Shopify-to-QuickBooks side is already reconciling itself. That's the part LedgerPort automates: clean shipped-order and payout data in QuickBooks, so your order tie-out has a denominator you trust and your margin split holds. There's a free plan to start on, and the audit works better the cleaner the other side of the ledger is.
