The verdict first: for a 3PL, the document that decides whether you make money isn't your quote sheet. It's the rate table inside your WMS billing engine. One wrong line, one missing accessorial, and you're quietly donating a few thousand dollars a month to your customers. I've seen it happen every year I've been in this business.

Last fall I visited a 3PL in Ontario, California — a mid-size operation, well over a hundred thousand square feet. The owner spread the books on the table: one anchor client, healthy-looking gross margin on paper, yet cash was always tight. Two months of digging later, the answer was sitting in the WMS rate table, untouched for three years. The contract had a price increase back in 2024; the system was still billing the old rates. The contract had a surcharge for inventory sitting past 90 days; the system didn't have that fee configured at all. Two years of silent under-billing added up to enough money to lease half a warehouse in the Inland Empire. The owner went pale telling me.

Don't blame the software. A WMS billing engine is a translator: it converts "what you agreed with the customer" into "the numbers on the monthly invoice." Mistranslate, and the most expensive system in the world bills you straight into the red. This piece covers three things: what a rate table is really modeling, the five holes I keep finding, and a monthly reconciliation routine that actually works.

A rate table models three kinds of money, not prices

Strip a 3PL invoice to the bone and you get three buckets. Storage is space — per pallet, per cubic foot, per bin, whatever you choose, but the entire company must agree on what one billable unit means. Change the definition mid-stream and you're digging your own hole. Handling is motion: receiving, putaway, picking, packing, returns processing. Accessorials are exceptions: aged inventory, rush orders, relabeling, cycle counts.

You should know the industry numbers by heart. WarehousingAndFulfillment.com surveys more than 600 3PL warehouses across North America every year, and the 2025 edition puts average pallet storage at $20.17 per pallet per month, B2C pick-and-pack at $3.20 per order, B2B at $4.80. Nearly half of warehouses — 48.6% — now bill a long-term storage surcharge, typically $5–$10 per pallet per month. FreightWaves' 2026 3PL cost guide lands in the same neighborhood: ambient pallet storage $10–$25 a month, climate-controlled $20–$45, receiving $5–$20 per pallet, first pick $1.50–$3.50.

But the numbers themselves aren't the point. The point is that every charge in your contract needs a matching line in the rate table. Contract says storage bills per pallet, the system can't bill per bin. Contract says B2B pick-and-pack prices separately, the system can't run one blended pick rate. Most 3PLs configure the rate table once at go-live and never touch it again — the business moved on three years ago, the table is still living in 2023.

A proper rate-table row carries at least five elements: the charge code, the unit of measure, the tier logic, the effective date, and the client override. Miss any one of them and the translation can go wrong.

Here's a concrete case. One client stores half its inventory in ambient space and half in a cooler, and cooler storage runs nearly double — ambient at $10–$25 per pallet per month versus climate-controlled at $20–$45, per FreightWaves' ranges. That demands client-override rules: same customer, different zones, different rates. Another client signs at a flat rate in January and moves to tiered pricing at renewal in July — the table has to hold both versions and switch on the effective date. If you didn't think of those two layers during configuration, you'll be reworking it within six months.

Value-added services deserve their own warning. Kitting, relabeling, repacking — sales agrees to them on a phone call, "we'll take care of it," nobody logs it, nobody bills it. FreightWaves' guide puts project and surcharge labor at $35–$75 an hour. My approach: give every major client a pre-configured "miscellaneous labor" line in the rate table. Got a labor ticket, it bills. No ticket, no charge. Build the line first, then decide what to comp — never the reverse.

There's also an organizational trap. In many warehouses, the rate table was configured by the implementation consultant, who left years ago, and nobody has dared touch it since. My advice: name one owner for the rate table — finance or account management, either works, but exactly one person. Every contract change, every price increase, lands in the system within 48 hours. A rate table nobody owns is a revenue leak nobody owns.

The five holes I keep finding

Hole number one: rates with no effective dates. A client gets a price increase in July, somebody edits the number in the table but never sets "effective from." The system either re-bills history at the new rate or keeps running the old one — I've seen both disasters. Do it right: the rate table must support versioned rates, and effective date is a required field, not an optional one.

Hole number two: accessorials that exist only in the contract. Aged-inventory surcharges, rush-order fees, weekend labor — sales wrote them into the agreement, the implementation consultant decided they were edge cases and skipped them. Remember this: a fee the WMS doesn't know about is a fee you never collect. The Ontario warehouse bled on exactly this one.

Hole number three: tiered pricing wired wrong. Volume discounts are supposed to mean "more volume, lower unit price," but some tables are configured as flat rates — the big client stores more and never sees the discount, then blows up at reconciliation. Worse is the reversed version: the small client accidentally gets the big client's tier. You're handing out money.

Hole number four: no monthly minimum. That 2025 survey shows minimum monthly spend climbing from $337.50 to $517 — thin-volume clients lose money on every order without a floor. Every client needs a minimum charge in the WMS. Below the line, they pay the line.

Hole number five: mixed billing units. One client, product group A bills per pallet, product group B bills per carton, and the system only knows one of them. The floor supervisor scans pallets with a PDA in the rack aisle — the inventory checks out, the money doesn't, because the billing engine never learned the client runs two algorithms. SKU-group-level billing rules are a requirement for multi-category clients, not an advanced feature.

Warehouse supervisor verifying goods with a PDA in the rack aisle

Now reconciliation. Most 3PLs run the same broken loop at month-end: the system spits out an invoice, finance eyeballs it, hand-adjusts the wrong lines, and never fixes the table. So next month breaks the same way. Flip it. Three things each month. First, take your five biggest clients and reconcile the system invoice against the contract, line by line. Second, log every manual adjustment — anything adjusted by hand two months in a row goes back into the rate table as a configuration fix. Third, scan for rates with expiring effective dates and start renewal conversations early. Those three actions surface the leaks on their own. Half a day a month on reconciliation plugs most of a year's worth of leakage — the math always works out.

And one more that people forget: returns. FreightWaves' guide puts returns handling at $1.50–$4.00 per return plus $0.25–$1.25 per unit for inspection. When an e-commerce client's return rate spikes and that fee isn't in the table, it bleeds faster than storage ever could.

So back to the verdict: before you shop for a new system, open the rate table and walk it against the contract, line by line. Before that, export the last three months of invoices, total them by charge type, and look for the ones that exist in the contract but never got billed — that's the money you've been gifting your customers every month. Most warehouses are startled the first time they do this.

Here's my question for you: how many lines on last month's invoice did finance add by hand? If the answer is more than three, your billing engine is already leaking — and you probably have no idea how much.