Menu

  • 01About
  • 02Book
  • 03Podcast
  • 04Blog
  • 05Resources
  • YouTube
  • LinkedIn
  • me@vikrantneb.com

Executionis the job.

Everything else is theory.

  • About
  • Book
  • Podcast
  • Blog
  • Resources
Execution Under PressureBuy on

© 2026 Vikrant Neb. All rights reserved.

Built for operators, not observers.

← All resources

Every Line on the Invoice

What 3PLs Charge For, and Why Each Charge Exists

The charges you will find across B2B warehousing, cross-dock and e-commerce fulfillment, the different ways operators package them, and whether the cost behind your rates is one you can actually prove.

By Vikrant Neb · Author, Execution Under Pressure · Founder & CEO, Leanafy & Kurieta

Read the paperDownload PDF

About this paper

Every charge on a 3PL invoice exists to recover one of five things: space, touches, systems, materials, or exceptions. Pricing models differ in how they package those five, not in whether they recover them. A model that looks cheaper has usually moved a cost into a line you are not looking at. A rate is only as good as the cost behind it, and that cost has to be recorded, attributed and earned by an efficient operation. And the best rate card in the world only earns what the operation actually records.

A rate card is a list of prices. An invoice is a list of events. The margin lives in the gap between the two.

— Vikrant Neb

Inside · 40 pages

  1. 01Why This Paper
  2. 02The Five Things Every Charge Recovers
  3. 03Anatomy of a Real Quote
  4. 04Can You Stand Behind Your Quote?
  5. 05B2B Warehousing: Pallets In, Pallets Out
  6. 06Cross-Dock and Transload: Pricing Speed
  7. 07E-Commerce: Five Ways to Charge
  8. 08Storage Is Not One Charge
  9. 09The Hourly Layer
  10. 10Pass-Throughs: Where Revenue and Margin Part Ways
  11. 11Terms, Discounts and Fees That Shape Behavior
  12. 12Where the Invoice Breaks
  13. 13What Each Model Rewards and Punishes
  14. 14What To Do This Week
  15. 15Closing Thoughts
  16. 16Where This Series Goes Next
  17. 17About the Author

White Paper

Every Line on the Invoice

What 3PLs Charge For, and Why Each Charge Exists

The charges you will find across B2B warehousing, cross-dock and e-commerce fulfillment, the different ways operators package them, and whether the cost behind your rates is one you can actually prove.

Authored By: Vikrant Neb · Author — Execution Under Pressure | Founder & CEO — Leanafy & Kurieta

Companion to Paper 02 · 25 min read

Invoice · Month-end · illustrative

Inbound receipt, 4 ASNsTouches$62.00
Pallet storage, 42 positionsSpace$840.00
Order fee, 1,282 ordersTouches$3,525.50
Additional units pickedTouches$1,546.90
Store integration, monthlySystems$150.00
Mailers and dunnageMaterials$769.20
Parcel postage, cost plusMaterials$9,412.18
Receiving without ASNExceptions$50.00
Total due$16,355.78

Illustrative figures. Not any operator’s rates.

  • Space Rent and racking. The footprint a client occupies or reserves.
  • Touches Labor every time a person or machine handles the product.
  • Systems Software, integrations, support, account management, billing itself.
  • Materials What the 3PL buys on the client’s behalf, from boxes to postage.
  • Exceptions Work caused by something not going to plan.

Why This Paper

“A rate card is a list of prices. An invoice is a list of events. The margin lives in the gap between the two.”

— Vikrant Neb

In the last paper I argued that you should price the work you actually do, not the work you assumed at onboarding. The most common question I got back was a simpler one: what should the work actually be priced as? What do other operators put on the invoice, and why?

This paper is the reference that goes underneath that argument. It lays out the charges you will find across B2B warehousing, cross-dock and e-commerce fulfillment, the different ways operators package them, and the reason each charge exists in the first place. Then it asks the harder question underneath every rate: is the cost behind it one you can actually prove?

I built it from real rate cards, proposals and monthly invoices from several 3PLs in the United States and Canada, shared with me for this purpose. No operator or client is named, and no real rate is quoted as theirs. Where I show numbers, they are illustrative ranges to make the math readable, not a price list.

I wrote it for two readers. The operator building or revisiting a rate card, and the brand trying to read one.

The Short Version

Every charge on a 3PL invoice exists to recover one of five things: space, touches, systems, materials, or exceptions. Pricing models differ in how they package those five, not in whether they recover them. A model that looks cheaper has usually moved a cost into a line you are not looking at. A rate is only as good as the cost behind it, and that cost has to be recorded, attributed and earned by an efficient operation. And the best rate card in the world only earns what the operation actually records.

The Five Things Every Charge Recovers

Strip away the labels and every line on every invoice I looked at is trying to recover one of five costs. Operators name them differently, split them differently and bundle them differently. The five underneath do not change.

What it recoversWhat drives the costWhere it shows up on the invoice
SpaceRent, racking, the footprint a client occupies or reservesPallet, bin, shelf, square-foot or cubic-foot storage; dedicated space; pick-face fees
TouchesLabor every time a person or machine handles the productReceiving, put-away, picking, packing, pallet handling in and out, labeling, returns
Systems and adminSoftware, integrations, customer service, account management, billing itselfSetup, monthly platform or portal fees, per-integration fees, EDI, hourly CSR and account management
MaterialsWhat the 3PL buys on the client’s behalfBoxes, dunnage, pallets, shrink wrap, parcel postage, freight
ExceptionsWork caused by something not going to planNon-compliant receipts, rework, special projects, aging inventory, late payment, missed appointments

The first two are where most operators focus. The last three are where most margin quietly leaks, because they are the ones most often absorbed instead of billed.

Keep this table in mind for the rest of the paper. Every model that follows is a different answer to the same question: which of these five do we show as separate lines, and which do we fold into something else?

Anatomy of a Real Quote

One of the proposals I reviewed still had the 3PL’s working notes sitting in the margin beside the rates. The client never saw them. They are the most honest part of the document.

Next to the rate card were four numbers: annual rent, annual salaries, annual transport cost, and a staffing plan. One full-time person in the slow months. Three during the four-month peak. Every rate on the page had been backed out of those numbers.

That is what a quote really is underneath. It has three layers, and they produce the fourth thing, the one the client signs.

  1. Layer 1Cost baseWhat the building, the people and the systems cost to run for this client.
  2. Layer 2Volume modelUnit × assumed annual quantity × rate, rolled up to one annual figure.
  3. Layer 3AssumptionsSKU count, inventory range, order mix, peak, cutoff, an expiry date.
  4. ResultRate cardWhat the client signs, and all they ever see.

The proposal stated its assumptions plainly: the SKU count, an inventory range from low season to peak, the split between B2B and B2C orders, a same-day cutoff, a note that inventory could vary by fifteen percent, and a date the pricing expired.

The third layer is the one that matters later. A rate card is only fair for as long as its assumptions hold. When the SKU count doubles, when the peak moves, when the order split flips from wholesale to direct-to-consumer, the rates are still on the page but the math underneath them is gone. That is attribute drift, from the last paper, seen from the quoting side.

If your quote does not write down its assumptions, you have nothing to reopen when they stop being true.

Two habits separate the operators who handle this well. They write the assumptions into the proposal where the client signs, not in an internal spreadsheet. And they put an expiry date on the pricing, so a review is scheduled rather than negotiated.

Can You Stand Behind Your Quote?

A quote you can defend is built on a cost you can prove. Most 3PLs cannot prove theirs, and it is rarely because they are careless.

There is no standard costing model for warehousing. Almost every operator has built their own, usually in a spreadsheet, shaped by whoever built it and by the assumptions they made at the time. It works for the person who built it. Anyone else inherits assumptions they cannot see. So before asking whether your price is right, it is worth asking whether the cost model underneath it is.

The starting point needs no software. Take the last twelve months of your income statement and ask, line by line, which of these costs are fixed and which are truly variable.

Fixed, variable, and the costs in between

TypeHow it behavesExamplesHow it reaches a rate
FixedStays the same whether the building is busy or quietRent, property tax, racking, WMS license, salaried managementSpread across pallet positions, square feet or clients
VariableRises and falls with every unit of workHourly labor, temp labor, packaging, per-transaction software feesPriced per touch: per receipt, pick, order, pallet
StepFlat until a threshold, then jumpsA supervisor per crew, a second shift, more square footage, a new WMS, automation, rented equipment for peakUsually missed, because it only appears when volume crosses a line

Fixed cost has one property that catches operators out: its cost per unit depends on how full the building is. Take an illustrative building costing $900,000 a year to run, with 10,000 pallet positions. Move the slider.

Exhibit A · Illustrative

Same pallet, emptier building

Cost per position, full
$7.50
Cost per position, now
$9.38
Extra rent per pallet
+25%
$900,000 a year ÷ 10,000 positions ÷ 12 months, divided by the share of positions actually filled.

The pallet did not change. The building got emptier, and every remaining pallet carries more of the rent. That is the expansion trap from the last paper, expressed as a unit cost.

Cost climbs in steps. Volume climbs in a line.

Volume grows more or less smoothly, a few hundred orders more each month. Fixed cost does not. It sits flat while the current setup absorbs the growth, then jumps when something has to be added to keep up. Some steps are operating costs: a second shift, another supervisor, more square footage. Some are capital: a new WMS when the old one cannot keep up, put-to-light or conveyor when manual picking hits its ceiling, racking for the new space. Capital steps tend to be the steepest, because the whole investment lands before the volume that justifies it.

Exhibit B · Illustrative

Fixed cost steps, volume climbs

$0k$40k$80k$120k0k10k20k30kstepstepM1M5M9M12Orders on right axis

Fixed cost / monthOrders / month

$4.00$5.00$6.00$7.00$8.00$7.50$4.80$5.57$4.22$5.50$4.23M1M5M9M12

Fixed cost per order

Month 5: second shift and a supervisor. Month 9: new WMS and automation. Illustrative figures, not from any operator.

The second chart is the one that matters for pricing. Fixed cost per order falls while volume fills the current step. Then the next step arrives and it jumps back up. More volume lowers your unit cost only while it is filling the step you already paid for.

That changes the answer to the most common request in a renewal: we are growing, so give us a better rate. Growth does not automatically earn a discount. It depends on where the client’s volume lands. Growth that fills existing capacity can fund a lower rate. Growth that forces the next step, a new shift, more space, a system or automation built for this client, has to pay for that step first. Two practical habits follow:

  • Know where the next step is before you price the growth. If a client’s forecast pushes you past it, price the step into the rate, or into a separate charge, before you agree to it.
  • Match capital recovery to the contract. An investment made for one client should be recovered over that client’s contract term, with an early-exit clause that covers what is left if they leave before payback. Otherwise the step stays on your books after the volume that justified it has gone.

Four questions before you trust the number

01

Is the cost recorded?

Labor hours coded to the client and the activity, not just to the building. Exceptions logged when they happen. And the hours nobody is paid for, which the book put at over $20,000 a year for an owner spending three hours a day covering gaps at thirty dollars an hour. If it is not recorded, it is not in the cost, and the price built on it is too low.

02

Is it attributed to the right place?

Shared costs should follow the activity that causes them, not revenue. Allocating overhead by revenue share makes large, simple accounts look expensive and small, complicated accounts look cheap, which is the averages problem from the last paper in another form. Most cost models assume an average travel distance across the building. For the building as a whole, that average holds. But if the only open space for your newest client is at the far end from receiving, every put-away and pick for that client takes far longer than the model assumed, and the rate card never knows.

03

Is the operation efficient enough to justify it?

A cost can be recorded perfectly and still be the wrong cost to price from. Small gaps compound with volume. A few extra seconds per order that nobody notices at a hundred orders a day become real money at a thousand. If your pickers do sixty picks an hour where a well-slotted operation does ninety, building the quote from your cost hands your inefficiency to the client. They will find a 3PL who does not. The LED client in the last paper was exactly this: the cost was real, but it came from a layout problem, not the work.

04

Does it hold at the volume you quoted?

Step costs arrive at thresholds. Utilization moves with every client who arrives or leaves. A cost that was true at 70 percent full is not true at 95 or at 50.

Exhibit C · Illustrative

Labor cost per pick, by productivity

Labor cost per pick
$0.43
Against market range
Inside
Market range$0.00$0.25$0.50$0.75$1.00$0.8730/hr$0.5845/hr$0.4360/hr$0.2990/hr$0.22120/hrYou: $0.43 at 60/hr
Shaded band: illustrative market range of $0.30 to $0.75 per unit picked. Not any operator’s rates.

The exhibit shows why the third question matters. At an illustrative $26 an hour fully loaded, a picker doing 30 picks an hour costs more per pick than the top of the market range. At 90 an hour, the same picker costs less than the bottom of it. The rate card is the same in both buildings. The margin is not.

Cost plus, or market rate? Market first, then prove your cost fits under it

So is a quote really cost plus profit? For most standard services, the market sets the price far more than your cost does. So work top-down. Take what the market pays for a pallet position in your area and what your building actually costs you. Work out how many positions you need, and how full they must be, before you break even. Then ask whether you can tolerate how long it takes to get there.

Your cost does not change what clients will pay. A building rented at the top of the market, or equipment far beyond what the work needs, raises your cost without raising the price anyone will accept. The real question becomes: if the price is X, what has to be true about my cost for the margin to be acceptable?

The market is not one number either. When I shopped 3PLs as a brand, I saw neighbors in the same area charging eight, twelve and eighteen dollars for the same storage. Some of that spread is service and location. A lot of it is operators who do not know their true cost.

So the market sets the ceiling, and your true cost, run through the four questions above, sets the floor. Your price lives between the two, and where you are in that gap tells you what to do.

  • The market is well above your cost. Price to the market, not to cost plus a margin. Pure cost-plus pricing here leaves money on the table for no reason.
  • The market is close to your cost. You will not win on price alone. There has to be another reason the client picks you: speed, accuracy, a capability, a relationship.
  • The market is below your cost. First ask the third question. If your cost is high because the operation is inefficient, fix the operation. If the operation is genuinely efficient and the market still pays less, redesign the service or walk away from the account.
  • There is no market reference. Custom projects, kitting, unusual compliance work. Here cost plus margin is the honest method, as long as the cost passed the four questions.

A quote you can stand behind is one you would be comfortable walking the client through, line by line, if they asked to audit it.

That is the real test. Not whether the price wins the deal, but whether you can explain what drives every rate on it, show that the cost behind it was recorded and attributed honestly, and show that your operation earns it.

B2B Warehousing: Pallets In, Pallets Out

B2B warehousing has the oldest and simplest pricing in the industry, and it has survived because it maps cleanly onto the work. Product arrives on pallets, sits on pallets, and leaves on pallets or cases. The rate card follows the pallet.

One Midwest account I reviewed was billed on exactly six lines:

ChargeUnitWhat it recoversBucket
Inbound order chargePer receiptDock appointment, paperwork, system entry, the first touchSystems
Inbound pallet handlingPer pallet inUnload, verify, label, put awayTouches
Initial storagePer pallet, on arrivalThe first storage period, charged the moment the pallet landsSpace
Recurring storagePer pallet, per monthRent for everything still in the building on the billing dateSpace
Outbound pallet handlingPer pallet outRetrieve, stage, loadTouches
Outbound order chargePer orderOrder entry, bill of lading, carrier coordinationSystems

The inbound and outbound rates were identical. That is common and deliberate. Handling in and handling out are priced as mirror images, so the client pays for the round trip whether the pallet stays a week or a year.

Initial and recurring storage

The split between initial and recurring storage is the part most brands do not understand, and it matters more than the rate itself. Initial storage is charged when the pallet arrives. Recurring storage is charged on everything in the building at the start of each new period.

Most operators soften the initial charge with a split-month rule. A pallet received before the 15th pays a full month. A pallet received on or after the 15th pays half. The account above ran exactly that rule, and so did the billing setup behind it.

Here is what that does to a fast-moving account. In one month, that same client received roughly 540 pallets and shipped roughly 510. The initial storage charge on the pallets that arrived brought in more revenue than the recurring charge on the pallets that stayed. On freight that turns quickly, the storage money is earned at the dock, not in the rack.

On fast-turning freight, the storage revenue is in the arrival, not the stay.

Dedicated space

The other B2B model is dedicated space. The client reserves a block of pallet positions or square feet, sized for their peak, and pays a flat monthly amount whether it is full or empty. One public warehousing agreement I reviewed billed storage as a single fixed monthly figure for a set block of square footage, with handling priced per case and per pallet on top. The proposal I described earlier did the same, sizing space for a peak of roughly three and a half times the low-season inventory. The client pays for the peak all year. In exchange, the space is guaranteed to be there when the peak arrives.

Retail compliance

Once B2B orders go to large retailers, a new layer appears: EDI connections for purchase orders, advance ship notices and invoices, carrier-specific labeling, pallet builds to a routing guide, and delivery appointments. These are billed as setup fees per trading partner, monthly EDI fees, per-label fees and a flat retail order fee. The reason they exist is the retailer’s chargeback program. Every mislabeled carton or late ASN comes back to the brand as a deduction, and the 3PL is paid to prevent that.

Illustrative ranges only, not a quote, and highly dependent on market and volume: pallet storage from roughly $15 to $40 per pallet per month; pallet handling from roughly $4 to $12 per pallet each way; case picks from roughly $1 to $3.50 per case; EDI setup from roughly $500 to $2,500 per trading partner. Coastal and port markets sit at the high end. Inland markets sit at the low end.

Cross-Dock and Transload: Pricing Speed

Cross-dock is the one service where the client is paying you not to store anything. Freight comes in one door and leaves by another, ideally the same day. So the pricing drops the space bucket almost entirely and charges for touches and dock time.

Operators price it in one of four units:

  • Per pallet, for clean, palletized freight that only needs to be moved from one trailer to another.
  • Per load or per container, a flat fee for the whole unload and reload, when the freight profile is predictable.
  • Per hour, when the work is sorting, re-palletizing or building mixed loads and the effort varies with every shipment.
  • Per carton, for small or mixed freight that has to be broken down.

Two terms decide whether a cross-dock account makes money.

Free time. Most cross-dock pricing includes a window, often a day or two, during which freight can sit on the floor at no extra charge. After that, staging is charged per pallet per day. Transload, which involves consolidating or re-sorting before the freight leaves, usually sits between cross-dock and storage: a per-container fee plus daily staging once free time runs out. Free time is where cross-dock quietly becomes warehousing without anyone repricing it.

Floor-loaded versus palletized. A floor-loaded container is unloaded by hand, carton by carton, and it ties up a door and a crew for hours. One rate card I reviewed charged a flat fee per floor-loaded container, by container length, on top of the hourly receiving labor, specifically to cover the dock time and the pallets needed to build the freight up. A palletized trailer can be cleared in a fraction of that time. If both are quoted at the same per-pallet rate, one of them is losing money.

Illustrative ranges only: same-day cross-dock at roughly $250 to $450 per standard container; transload with a few days of staging at roughly $350 to $650 per container, plus roughly $2 to $6 per pallet per day after free time; per-pallet cross-dock from roughly $5 to $30 depending on labor and market.

When cross-dock quietly becomes storage

Picture a cross-dock account priced per pallet with two days of free time. For the first few months it runs as designed. Freight lands in the morning and leaves the same afternoon. Then the client’s outbound pickups start slipping. A day here, two days there. Pallets begin sitting four and five days, then a week before a full load is ready.

Nobody changes the pricing, because nothing in the operation was tracking how long each pallet sat on the floor. The dock doors reserved for same-day turns become a staging area. Inbound freight for other clients waits for space. The operator is now running a storage account, in the most expensive square footage in the building, at a cross-dock rate.

The fix is not a new rate. It is a clock. Every cross-dock pallet timestamped in and out, and staging billed from the first hour after free time ends. The rate card already allowed for it. The operation just never recorded it.

E-Commerce: Five Ways to Charge

E-commerce is where pricing models multiply, because the work is small, repetitive and highly variable from one order to the next. The same five buckets are still underneath. What changes is how many lines the client sees.

A typical e-commerce rate card, line by line

Pulling together the e-commerce rate cards and invoices I reviewed, a full a la carte rate card usually carries most of these lines. The last column is the part nobody puts on the rate card: where each line tends to lose money.

ChargeUnitWhat it recoversWhere it goes wrong
Setup and onboarding
Systems
One timeAccount setup, SKU load, integration testing, trainingDiscounted to win the deal; the real onboarding hours are never recovered
Store or marketplace integration
Systems
Monthly, per connectionKeeping each sales channel connectedThe client adds a new channel and the fee never follows
Platform or portal fee
Systems
Monthly or weeklySoftware, client visibility, supportExtra users, reports and custom requests creep in at no charge
Receiving
Touches
Per receipt, plus per carton or unitCount, verify, label, put awayLoose cartons, mixed SKUs and missing ASNs take hours that a per-receipt fee never covers
Storage
Space
Per bin, shelf, pallet or cubic footSpaceSlow SKUs sit in prime pick locations at the same rate as fast ones
Order fee
Touches
Per orderOrder release, packing slip, label, first cartonTreated as all-in, so extra cartons and special packing ride along free
Pick fee
Touches
Per additional unit or lineEach extra walk and reachBundles and promotions push units per order up while the quote assumed one
Packaging and materials
Materials
Per box, or cost plus a markupBoxes, mailers, dunnageVendor prices rise and the rate card does not
Inserts and custom packing
Touches
Per order or per unitExtra touches at the pack stationMarketing adds them after go-live and nobody adds a line
Returns
Touches
Per return, plus per unit restockedReceive, inspect, restock or disposePriced as a token fee when a real inspection takes minutes
Postage
Materials
Carrier cost plus a markupParcel shippingAddress corrections and carrier surcharges absorbed instead of passed on
Peak or rush
Exceptions
Per order surcharge, or a seasonal rateOvertime, temp labor, extended shiftsNot written into the contract before Q4, so it cannot be charged in Q4
Monthly minimum
Space
Per monthThe fixed cost of carrying a small accountWaived to win the client and never reinstated

Every line maps back to one of the five buckets. And notice where the right-hand column concentrates: almost none of the leakage is in the order fee everyone negotiates. It is in receiving, returns, materials, inserts and the lines that were waived to close the deal.

One order, priced a la carte

To see how the lines stack, build an order. The default is three units of two SKUs, shipped in a mailer with a marketing insert.

Exhibit D · Illustrative

A la carte versus all-inclusive, one order

LineQtyRateAmount
Order fee1$2.75$2.75
Additional units picked2$0.50$1.00
Mailer1$0.60$0.60
Insert1$0.15$0.15
Fulfillment before postage$4.50

At $3.50 all-inclusive, the operator collects $1.00 less for this order than a la carte.

Illustrative rates: $2.75 per order, $0.50 per additional unit, $0.60 per mailer, $0.15 per insert. Not any operator’s rates.

On an all-inclusive rate of $3.50, the default order collects a dollar less for the same work. A single-unit order with no insert comes to $3.35 a la carte, so the all-inclusive rate collects fifteen cents more. That is the whole trade between the first two models below, in one order.

1. A la carte

Every activity is its own line. This is the most common model and the one that tracks the work most closely. The fulfillment fee alone is usually built in layers, and every rate card I reviewed layered it slightly differently:

  • a fee per order, for the order record, the packing slip, the label and the carton;
  • a fee per line or distinct SKU, because every additional location is another walk;
  • a fee per unit, because every additional piece is another reach;
  • sometimes a fee per box or master pack, when one order ships in several cartons.

One operator went a step further and priced the unit by its unit of measure: one rate for an each, a higher rate for an inner pack, another for a case. Another priced unaltered cases and pallets separately, meaning sealed cases or full pallets that leave untouched. That single definition matters more than it looks, and I will come back to it in the section on where invoices break.

2. All-inclusive per order

One rate per order covers pick, pack and standard materials, sometimes more. The client gets a number they can budget. The operator carries the risk that orders get bigger, heavier or more complicated. Published comparisons put all-inclusive pricing roughly 15 to 25 percent above the equivalent a la carte bill, which is the price of that risk.

3. Two fees

A fulfillment fee per order and a storage fee by cubic foot, and nothing else. Some network fulfillment models have run this way. It is simple for the brand and forces the operator to price materials, labor and systems into one number.

4. Flat fee, storage free while it turns

A single per-order fee, no storage charge at all, on one condition: the inventory keeps moving. Once product sits past a set age, it starts paying storage, and the charge steps up the longer it stays. The largest marketplace fulfillment networks run a version of this logic, with aging surcharges that start around six months and climb from there. For the operator, the model only works if the aging penalty is real and enforced. Without it, free storage becomes a warehouse full of someone else’s dead stock.

5. Flat monthly fee

A fixed monthly amount for an agreed scope, sometimes with a volume band and an overage rate above it. It is common with smaller brands and with brands whose volume is steady. The operator is selling capacity, not transactions. It works until the scope drifts and nobody reopens the band.

When the model does not match how the client moves

Each of these models is built around an assumption about how inventory will behave. The margin depends on the client behaving that way.

In the book I described a 3PL doing about two million dollars a year that took on two early-stage e-commerce clients. The pricing was built on high storage and low activity charges, the right structure for slow, steady inventory. These clients turned inventory fast. They generated pick fees, pallet-in fees and labor the contract did not cover, and the two accounts lost about five thousand dollars a month.

The repricing conversation kept getting put off, because they were growing clients. Then Q4 arrived, both scaled, and those two accounts lost twelve and a half thousand dollars in a single quarter. A business that should have made around one hundred and fifty thousand dollars that year on its other accounts barely broke even. Nothing about the rate card was wrong on paper. It was the wrong model for how those clients moved.

The flat monthly fee fails the same way in the other direction. Picture a brand signed at a flat monthly amount for a band of around two thousand orders. A year later it ships four thousand, with more SKUs and heavier multi-unit orders. The fee is unchanged, because the overage clause was written but never triggered. The client feels they have a fair deal. The operator is doing double the work for the same fee.

The free-storage model has its own version: a catalog that moved fast at signing slows down, the aging threshold is written in the contract, and nobody enforces it because the client is otherwise easy to work with. Twelve months later, the fastest pick zone in the building is holding someone else’s slow stock for free.

Illustrative ranges only: a la carte fulfillment commonly lands around $2 to $3.50 for the first item in an order plus roughly $0.30 to $0.75 per additional item; one industry survey put the average B2C pick-and-pack fee near $3.20 per order before storage and materials.

Storage Is Not One Charge

Storage looks like the simplest line on the invoice. It is actually two decisions: what unit you charge by, and how you count it. Two operators can quote the same rate and send very different invoices because they made those two decisions differently.

What you charge by

Across the rate cards and invoices I reviewed, I found at least five storage units in use, sometimes three of them on the same client’s invoice:

UnitBest fitWatch out for
Per pallet positionUniform, palletized B2B inventoryHalf-empty pallets billed as full ones
Per bin or shelf, by sizeSmall, high-velocity e-commerce SKUsWho decides which size a SKU needs
Per square or cubic footMixed sizes, oversized items, high SKU countsMeasuring it consistently month to month
Pick face versus backstockOperations with a forward pick area fed from reserveWhether moving stock between them is billed
Dedicated spaceSeasonal peaks the client needs guaranteedPaying for peak capacity all year

One of those invoices charged the client for the order preparation area itself, by the square foot, as a separate storage line. It is a fair charge. That space is reserved for one client’s packing and it is rent the operator pays.

The billing period varies too. Most operators bill monthly. One rate card I reviewed billed every storage type weekly: small, medium and large bins, pickable pallets and backstock pallets, each at its own weekly rate. Weekly billing tracks real usage more closely and makes most of the next argument disappear.

How you count it

There are three common ways to turn a storage rate into a monthly charge:

  • Snapshot. Count what is in the building on one day and bill the whole month on that count.
  • Anniversary. Each pallet gets its own clock from the day it arrives and pays a full period regardless of when it leaves.
  • Daily proration. Each pallet pays for the days it actually occupied space.

One operator published a worked example that shows why this matters. Same rate, same month, same inventory movements. Depending only on which day the snapshot was taken, the storage bill ranged from $875 to $1,500.

Exhibit E · Published example

One month, one rate, three snapshot dates

Counted on the 1st$1,000Counted on the 15th$1,500Counted on the last day$875
$25 per pallet per month. 40 pallets on the 1st, 20 received on the 15th, 25 shipped on the 25th.

Two operators can quote the same rate and send invoices that differ by half. The rate card shows the rate. It does not show the counting rule.

None of these methods is dishonest. Each one fits a different operation. Snapshot is simple to administer. Anniversary protects the operator on fast-turning inventory. Daily proration tracks real use most closely but needs a system that knows where every pallet was every day. The mistake is not choosing one. The mistake is not writing down which one you use.

The Hourly Layer

Every rate card I reviewed had a section of hourly rates. It is where operators put the work that is real but too irregular to price per unit.

The hourly layer was usually tiered by who does the work:

  • warehouse labor for special projects, rework and returns processing;
  • consolidation and replenishment;
  • inventory counts requested by the client;
  • customer service time;
  • supervision, account management and project management;
  • IT and custom development.

Each tier carried its own rate, rising from floor labor to IT. The logic is straightforward. A client who needs weekly calls, custom reports and proforma invoices is consuming management time, and that time costs more than a picker’s.

Two operators, one activity, opposite answers

Replenishment is the clearest example of how differently operators think about the same work.

Operator A

Bill it by the hour

Replenishment and consolidation billed hourly. On one client’s invoice, those hours were among the largest labor lines on the page. Many SKUs in small pick locations, fed from bulk pallets, forced constant moves, and the operator billed every one.

Operator B

Build it into storage

The rate card stated plainly that pick face replenishment had no cost to the client. The labor was recovered through two storage rates: a higher weekly rate for a pickable pallet on the floor, a lower one for backstock in the racks.

Both approaches are defensible. The first puts the cost exactly where it is caused and lets the client see what their SKU profile does to the floor. The second gives the client a simpler, more predictable bill and protects the operator as long as the storage rates were set with replenishment in mind. The dangerous version is a third one: replenishment is neither billed nor built into anything else. It simply disappears into overhead.

The same pattern showed up with inventory counts. One operator performed routine monthly cycle counts at no charge and billed full counts by the hour only when the client asked for one. Routine work is built into the rates. Work done on request is billed separately. That is a clean line, and it is worth copying.

Pass-Throughs: Where Revenue and Margin Part Ways

On several of the monthly invoices I reviewed, freight was the largest line on the page. On some, it was larger than every warehouse charge combined. That is the first thing to understand about pass-throughs: they make a 3PL’s revenue look much bigger than the business it actually runs.

Three things get passed through most often: parcel postage, LTL and truckload freight, and packaging materials. Operators recover their cost, and sometimes a margin, in different ways:

ApproachHow it worksWhat it tells you
Cost plus a markupCarrier or vendor cost plus a fixed percentage, commonly around 10 to 15 percentMargin scales with spend, visible to the client
Cost plus a service feeFreight billed at cost, with a flat fee per bookingMargin moves from the markup into a service line
Price list by itemEach box size or material priced as its own lineEasy to audit, needs updating when vendor prices move
Management feeA percentage added as a separate line on top of materialsHonest about the margin, invites negotiation
CreditsCarrier rebates or negotiated discounts shown as negative linesShows the client the operator is sharing savings

One rate card I reviewed did something subtle. It billed parcel at cost plus ten percent and materials at the operator’s own vendor pricing plus ten percent, but billed LTL and truckload freight at straight cost, with a flat fee every time the operator booked a load. The margin did not disappear. It changed form, from a percentage that grows with the freight bill into a fixed fee for the work of booking it.

Pass-through revenue is not margin. Know what your business looks like with it taken out.

Two cautions. First, if pass-throughs are a large share of revenue, a rising top line can hide a flat or shrinking warehouse business. Report both. Second, packaging is often priced once and never updated. Box prices rise, the per-box line on the rate card does not, and a pass-through quietly becomes a subsidy. On two invoices from the same operator, the same box size was priced differently for different clients, which is fine if it is a decision and a problem if it is an accident.

Terms, Discounts and Fees That Shape Behavior

Some of the most important pricing on a 3PL rate card is not a rate at all.

What gets discounted, and what does not

One rate card I reviewed printed three columns for every line: the standard rate, the negotiated discount, and the rate after discount. Reading down the discount column tells you exactly how that operator thinks about margin.

  • Discounted, some by as much as half: the per-order fee, the per-item fee and the storage rates. These scale with volume, so they are where the operator competes.
  • Held at zero discount: receiving, labeling, bagging, pallet prep, freight prep, returns and every penalty fee. These pay for specific extra work, so the operator will not trade them away.
  • Marked not negotiable: setup, the platform fee, user logins, EDI, custom development, and the markups on parcel and materials.

That is a margin policy, written into the rate card. Printing the standard rate next to the discount does something else as well. It keeps the list price visible on every invoice, so when the contract is renewed, the conversation starts from the real rate and not from the discounted one.

Volume discounts deserve one more check before they go on any rate card. As the cost section showed, cost rises in steps. A tiered discount that drops the rate at every volume band assumes cost per unit keeps falling. It does not, at least not right after each step. Set the tiers where the volume actually fills capacity you already have, not at round numbers.

Fees that exist to change behavior

Several charges I found were not really there to earn money:

  • a penalty for a delivery that arrives without a scheduled appointment;
  • a fee when the 3PL has to enter a receipt the client should have entered;
  • a charge for receiving without an advance ship notice;
  • a zero-dollar line for freight that arrives with no receipt in the system, whose only purpose is to state that the receiving service level no longer applies.

The receiving fee on that same rate card was designed the same way. The per-receipt fee covered the first hour of labor. Additional hours were billed only when the shipment broke the receiving guidelines. A client who ships clean freight never sees the hourly line. A client who does not, pays for it. The price is teaching the client how to ship.

A good penalty fee is one the client never pays, because it changed what they did.

Technology: three different models

The three operators priced technology three different ways. One charged a one-time integration fee plus a flat monthly portal and support fee. One charged a monthly fee per integration, plus a monthly WMS fee, and passed through the EDI network and shipping-label software as separate lines. The third charged a weekly platform fee, a monthly fee per additional user login, a per-user fee for its customer messaging channel, EDI connections sold in bundles of five, and custom work by the hour. All three are reasonable. What matters is that the systems bucket is recovered somewhere, and that it grows when the client adds integrations.

Commercial terms are pricing too

The invoices and proposals also carried terms that move real money: setup fees, monthly minimums, net payment terms, a credit limit, a surcharge on card payments, a higher fee on late invoices, a pricing expiry date, and, for one operator with a second facility across the border, rates adjusted for the exchange rate. None of these appear in a per-order comparison. All of them show up in cash flow.

Where the Invoice Breaks

A rate card is a list of prices. An invoice is a list of events. Between the two sits the thing that actually decides what you earn: how each charge gets triggered.

Every charge, in any billing system, from a WMS to a spreadsheet, has the same anatomy:

  1. 1TriggerWhat fires it
  2. 2ConditionPallet or bin, B2B or B2C, before or after the 15th
  3. 3UnitPer pallet, order, line, each
  4. 4RateThe number everyone negotiates
  5. 5Billing periodWhen it lands on the invoice

The rate is the part everyone negotiates. The trigger is the part that decides whether the rate is ever collected. In practice there are three kinds of trigger, and each one fails in its own way.

TriggerExamplesHow it failsThe safeguard
Fires from a warehouse eventPallet received, order shipped, unit pickedBills what was scanned, not the work that was doneClear unit definitions, and a review of unusual volumes before invoicing
Entered by a personLabels applied, pallets shipped, boxes used, project hoursIf nobody enters it, it is never billedA checklist tied to the work order, closed before the job is
Fixed and recurringPlatform fee, integration fee, monthly minimumForgotten, or never updated when scope growsA scheduled review of every recurring line against current scope

The correction log

One Midwest operator sent me several months of billing files, and each came with a tab of manual corrections, every one with a written reason. Every correction on that tab came from the same problem: what the system recorded was not the work that was actually done.

Over-billedMore than 7,000 unit picks billed on an order that was really full pallets shipped untouched, corrected by roughly $1,800.Event
Nearly never billedOver 1,600 label fees and 1,250 case picks for a marketplace shipment, added back more than a month later.Entered by a person
Under-billedNearly fifty pallets for an outbound marketplace shipment staged on the floor into the next month, outside any storage location, so the system never charged storage until they were billed by hand.Event
Over-billedA receipt billed as 42 pallets that was really 42 cases, inflating handling and storage.Event
Over-billedInternal replenishment transfers charged to the client as customer orders.Event

Two things stand out. The first is that the errors ran in both directions. A billing system that over-charges is a customer audit waiting to happen. One that under-charges is margin you earned and never collected.

The second is who fixed them. Every one of those corrections was made by a person, weeks after the month closed. That is the hidden labor I wrote about in the book: cost that sits on nobody’s P&L line because it is absorbed by someone’s extra hours.

The definition that would have prevented the biggest one

The full-pallet correction is the pen example from the last paper in reverse. There, the same labor produced two different bills depending on how the rate card was written. Here, a pallet that left the building untouched was billed as though every unit had been picked by hand. The rate card I described earlier, with a separate rate for unaltered cases and pallets, would have billed that order correctly the first time. One definition on the rate card, and the correction never happens.

The rate card only earns what the system actually records.

Drift, seen from the billing side

The billing setup behind that operator’s invoices showed one more thing. One client carried seventeen separate charge lines, and their start dates were spread across more than a year. The order fee came first. Then boxes and outbound pallets. Then storage, receiving, returns and the store integration. Then a labeling service specific to that client. The shipping-label software fee arrived a year into the relationship. The same setup charged B2B and B2C orders the identical order fee, even though the work behind them is different.

Nothing about that is wrong. It is how accounts grow. But it means the pricing on a mature account was never designed as a whole. It was assembled one line at a time, and nobody has looked at all seventeen lines together since. That is attribute drift from the last paper, visible in the billing setup itself.

What Each Model Rewards and Punishes

There is no correct pricing model. There is only a model that fits a particular operation and a particular client, and one that quietly does not. The table below is how I would read any rate card before signing it, from either side of the table.

ModelRewardsPunishesWhere the margin leaks
Pallet in, pallet out with initial and recurring storagePredictable B2B freight, clean receiptsBrands that turn inventory quickly and feel they pay storage twiceFloor-staged or unlocated pallets that never trigger storage
Dedicated spaceClients who need peak capacity guaranteedClients whose peak shrinks after signingSpace sized for a peak that no longer comes
A la carte fulfillmentAccurate cost recovery, activity-level visibilityClients who want one number to budgetCharges nobody enters, units that are defined loosely
All-inclusive per orderBrands with stable, simple ordersThe operator, when order size or complexity growsRising units per order, heavier items, extra materials
Flat fee, storage free while it turnsFast-moving catalogsSlow or seasonal inventoryAging penalties that are written down but never enforced
Flat monthly feeSteady-volume clients, simple billingClients with seasonal swingsA volume band nobody reopens as the account grows
Replenishment billed hourlyOperators whose clients have complex SKU profilesClients who cannot predict the billHours that are worked but never logged
Replenishment built into storageClients who value a predictable billThe operator, if storage rates ignored itA SKU profile that changes after the rate was set

Notice that every row has a leak, and nearly every leak is the same shape as the ones in the last paper: an assumption made at signing that nobody checks again.

What To Do This Week

The last paper ended with a five-point pricing gut check. This one ends with a rate card gut check. It takes an afternoon, and it works whether you run the warehouse or buy from one.

01

Sort every line into the five buckets.

Space, touches, systems, materials, exceptions. Any bucket with no lines in it is being absorbed somewhere. Find out where.

02

Write down the counting rules.

For storage: snapshot, anniversary or daily, and what happens mid-month. For picks: what counts as an each, a case and an unaltered pallet. If it is not written down, it is not agreed.

03

Check the trigger on your ten largest charges.

Does it fire from a scan, depend on someone entering it, or recur on a schedule? For each one, name the safeguard.

04

Open last month’s corrections.

Count them, sort them by direction and by trigger, and estimate the hours spent making them. That number is the cost of your billing process, and it is probably not on anyone’s P&L.

05

Pull your oldest account’s rate card and read every line together.

When was each one added? Does the whole still describe the work you do for that client today?

06

Rebuild one rate from scratch.

Pick your most common charge, usually the pick or the order fee. Work out its true cost from recorded hours, attributed overhead and today’s utilization. Then compare it to what you charge and to what the market pays. If you cannot build it, that is the finding.

None of this changes a single rate. It tells you whether the rates you already have are being collected, and whether they still describe the work.

Closing Thoughts

Every 3PL invoice is an argument about five things: space, touches, systems, materials and exceptions. The models differ in how they package that argument. Some show every line. Some fold everything into one number. Some give storage away and charge for time instead. None of them is wrong, and none of them is safe on its own.

What decides the margin is rarely the rate. It is whether the rate card writes down its assumptions and its counting rules, whether every charge has a trigger someone trusts, and whether anyone reads the whole thing again after the account has grown.

Price the work. Then make sure the work is what gets recorded.

I am always glad to compare notes on rate cards, from either side of the table.

Where This Series Goes Next

This is a companion to the second paper in a series of operator-focused field guides for 3PLs scaling into fulfillment.

03

The Integration Moat

API and EDI architecture as a competitive advantage. How leading 3PLs onboard brands in a week, what the right integration stack looks like at each volume stage, and why integration breadth beats integration depth for most operators.

04

Labor That Survives a 5x Swing

Cross-training, temp-staffing partnerships, peak-season planning, and the design choices that make labor interchangeable.

05

Why the WMS Always Goes First

Vendor evaluation, implementation pitfalls, and surviving a WMS transition without losing clients.

06

Returns Are Reverse Manufacturing

Designing a returns operation at scale, and the technology that makes high-volume returns profitable.

07

Reading the Brand-Side Signals

How to detect a quiet exit before it happens.

08

The Fulfillment-Native 3PL

Synthesis. What the 3PL of the next decade looks like.

About the Author

Vikrant Neb is an industrial engineer who has spent his career around operations. He has run e-commerce companies, led manufacturing operations through Kurieta during his consulting years, and worked with 3PLs across the full range of volumes and transitions covered in this series.

He is the founder of Leanafy, a warehouse management system built specifically for 3PL operators, and Kurieta Operations Consulting. His book, Execution Under Pressure: The Hidden Reasons Why 3PLs Stop Growing and How to Fix Them, came out in 2026. He hosts the Execution at Scale podcast and splits his time between Indianapolis and Vancouver.

This paper covers one slice of his work, what 3PLs charge for and why. He is always glad to compare notes with operators and brands working through a rate card.

vikrantneb.com · linkedin.com/in/vikrant-neb

Want a copy to keep or forward? Download the paper.

Sources for illustrative figures

Real rate cards, proposals and invoices were shared privately and are not cited. Public figures used for illustration came from these pages, accessed September 2026:

  • Warehouse storage and handling benchmarks
  • 3PL fee benchmarks and survey averages
  • B2B and retail compliance pricing
  • Cross-dock and transload costs
  • All-inclusive versus transactional pricing
  • Storage billing methods compared
  • Marketplace aged inventory surcharge
  • Initial and recurring storage, split-month billing

Also in the series

Every Minute on the FloorWhat Each Client Actually Costs to Serve→The Hidden Cost of Getting Pricing WrongA 3PL’s Guide to Margin That Disappears Before You Notice→The Execution Gap: Why 3PLs Between $5M–$75M Stop GrowingA 3PL’s Journey Into Fulfillment→

Looking for something that isn’t here? Tell us what would help.