3PL removal and disposal fees: $25 floor

By Wayan Sunnasy Published 2026-08-17 Data last verified 2026-08-04 4 sources How we verify →

You have signed with the new 3PL and you are about to serve notice on the old one. Nobody quoted you the cost of getting the inventory out, because removal is not on the rate card you compared — it is further down the same pricing page, in a section you had no reason to open while you were choosing. Flexport and Walmart WFS both publish that price in public, and one of them prices a small removal order at more than twice its own printed per-unit rate.

This is the fee people mean when they say “hidden fee”, and it is the clearest case we have found where the word is wrong. Flexport’s removal ladder sits on a public support article. Walmart’s disposal fee sits in the WFS fees guide next to the fulfillment tiers everyone quotes. Neither is concealed. Both are unread, because nobody reads the exit price while they are being sold the entrance.

What does it cost to remove inventory from a 3PL?

On published rates, between $1.04 and $2.89 + $1.06/lb per unit at Flexport, with a $25.00 minimum per removal order, and $0.35 per unit to have Walmart WFS dispose of a standard item 2 lb and under instead. Flexport and Walmart WFS are the only operations in our dataset that publish a number for this at all; everyone else either records that we could not read one, or has no removal row for us to read.

Every published removal and disposal figure we hold

The unit column is copied verbatim from the row, because on this fee the unit does more work than the amount. Read it before you read the dollars.

VendorFee item, as recordedUnitAmountRead
Flexportinventory removal 0–0.5 lbper unit$1.042026-08-04
Flexportinventory removal 0.5–1 lbper unit$1.532026-08-04
Flexportinventory removal 1–2 lbper unit$2.272026-08-04
Flexportinventory removal 2+ lbper unit$2.89 + $1.06/lb2026-08-04
Flexportinventory removal minimum orderper order$25.002026-08-04
Flexportcertified disposalper order$5002026-08-12
Flexportdamaged returns disposalper disposal$0.502026-08-12
Flexportreturn-to-sender processingper unit$3.002026-08-04
Flexportreturn/disposal documentation with imagesper unit$1.802026-08-04
Flexportreturn/disposal documentation notes onlyper unit$0.102026-08-04
Walmart WFSdisposal fee ≤2 lbper unit$0.352026-08-04
Walmart WFSdisposal fee 3–500 lbper unit$0.35 + $0.20/lb over 2 lb2026-08-04
Walmart WFSremoval (return-to-seller) shippingper lb$0.402026-08-04
Walmart WFShazmat disposal/removal add-onper unit$0.502026-08-04
Amazon FBAremoval and disposal fee schedule by weightper unitQUOTE_GATED in our data — see below2026-08-04
Amazon FBAliquidation order feeper unitQUOTE_GATED in our data — see below2026-08-04

Flexport rows from the Omni-Channel Fulfillment pricing overview; Walmart rows from the WFS fees guide; Amazon rows from the Seller Central FBA removals help hub.

Now read the distinct strings in that unit column: per unit, per order, per lb, per disposal. Different bases for what an operator thinks of as one decision: get it out, or get rid of it. You cannot add a per lb figure to a per unit figure, and you cannot compare a per order figure to either without knowing what an order is allowed to contain. Most of the rest of this page is about what follows from that.

The minimum that reprices a small removal

Flexport’s removal ladder is per unit. Its minimum is per order. Those are two rows, and the second one wins whenever the removal is small.

The row reads inventory removal minimum order, per order, $25.00. The same $25 floor is written into the conditions field of the 2+ lb tier as well — removal order fee; $25 minimum order — so it is recorded twice in our dataset, from the same source, on the same read date.

Pull ten units in the lightest band and the printed rate says $10.40. The invoice says $25.00. That is an effective $2.50 per unit, just over 2.4 times the $1.04 you would have modelled from the ladder alone.

Below the floor the weight ladder stops mattering at all, which is the part that surprises people. Arithmetic is ours, rates are published:

Tier as printedPrinted rate, per unit10 units at the printed rateActually chargedEffective per unit
0–0.5 lb$1.04$10.40$25.00$2.50
0.5–1 lb$1.53$15.30$25.00$2.50
1–2 lb$2.27$22.70$25.00$2.50

Three tiers, three different published rates, one identical cost. A ten-unit removal of your heaviest 1–2 lb SKU costs exactly what a ten-unit removal of your lightest one costs.

The floor stops binding at a specific, checkable order size in each band. Again, our arithmetic on their published rates:

TierPrinted rateLargest order the $25 floor still bindsCost at the ladder rateFirst order size the ladder winsCost at the ladder rate
0–0.5 lb$1.0424 units$24.9625 units$26.00
0.5–1 lb$1.5316 units$24.4817 units$26.01
1–2 lb$2.2711 units$24.9712 units$27.24

We have deliberately left the 2+ lb tier out of both tables. Its amount is recorded as $2.89 + $1.06/lb, and unlike Walmart’s disposal formula — which reads 0.35 + 0.20/lb over 2lb and names the weight the rider starts from — our Flexport row does not record the weight at which the $1.06 per pound begins. Without that, $2.89 + $1.06/lb has at least two readings at 3 lb and we are not going to pick one and print it as a benchmark. Ask Flexport where the rider starts. It is a one-line answer and it changes every heavy-SKU estimate you build.

The operator consequence is the one nobody budgets for: if your exit involves several small removal orders rather than one large one — one per facility, one per SKU family, one for the pallets you found late — you pay the $25 floor each time, and the per-unit rate you modelled from never applies.

Stop normalizing quotes by hand. The 3PL Quote Normalizer Kit takes your order profile plus up to 5 competing rate cards and returns true all-in cost per order, a 12-month projection, and breakeven volumes — plus the RFP template and 40-point contract red-flag checklist. Get the Kit →

Remove or destroy, priced

This is a real decision at an exit and it is the one our switching-cost guide currently flags as the least benchmarked line in the whole stack. Here is what the published rows can and cannot settle.

The assumption first, because it is doing a lot of work. The illustrative order profile we use across these guides — 2,000 orders a month, 1.6 items per order, 3,200 units a month, 140 SKUs, 400 cubic feet — records throughput, not depth. We do not hold a units-on-hand figure for it and we are not going to invent one. So the table below prices one month of that profile’s outbound volume, 3,200 units, as a stated unit of measure and nothing more. If your warehouse holds three months of cover, multiply it. Rates are published; the multiplication is ours.

LineRate as printedUnitArithmeticTotal
Flexport removal, 0–0.5 lb$1.04per unit3,200 × $1.04$3,328.00
Flexport removal, 0.5–1 lb$1.53per unit3,200 × $1.53$4,896.00
Flexport removal, 1–2 lb$2.27per unit3,200 × $2.27$7,264.00
Walmart WFS disposal, ≤2 lb$0.35per unit3,200 × $0.35$1,120.00
Walmart WFS disposal, at 3 lb$0.35 + $0.20/lb over 2 lbper unit3,200 × $0.55$1,760.00
Walmart WFS removal shipping, at 1 lb a unit$0.40per lb3,200 lb × $0.40$1,280.00
Walmart WFS hazmat add-on$0.50per unit3,200 × $0.50$1,600.00

At 3,200 units the $25 removal-order floor never binds — every Flexport line above clears it by more than a hundredfold — so on a full-book exit the minimum is irrelevant and the per-unit ladder is the whole cost. The floor is a small-removal problem, not a big-removal one.

The headline comparison, and what it is not. Removing 3,200 light units through Flexport’s published ladder costs $3,328.00. Destroying 3,200 light units through Walmart’s published disposal fee costs $1,120.00. Removal runs just under three times destruction. That is two vendors, two cards and one shared order profile: it prices the shape of the decision, not a like-for-like quote, and it is not available to you as a choice unless your inventory happens to sit at both.

Within a single vendor, the published rows will not settle it. Walmart prices disposal per unit and removal per lb. Assume 1 lb a unit and the month costs $1,120.00 to destroy against $1,280.00 to ship back — but our removal row records itself as the shipping cost component of a removal order, not the total, so treat $1,280.00 as a floor and not a quote. Flexport is worse for this purpose: removal is per unit and certified disposal is $500 per order, with the conditions field stating plainly that it is charged per disposal order and not per unit. No unit cap is recorded, so we cannot price 3,200 units through it, and we have not tried.

And add the hazmat line if it applies to you. On 3,200 hazmat units Walmart’s $0.50 per unit add-on is $1,600.00, which takes its ≤2 lb disposal from $1,120.00 to $2,720.00. Set that against the $3,328.00 Flexport removal and the gap narrows from $2,208.00 to $608.00. One qualifier travels with that number and must not be dropped: we hold no hazmat row for Flexport at all — not a quote-gated one, none — so the $3,328.00 side carries no surcharge because there is nothing there to read, not because we read a zero. Any hazmat charge Flexport does levy pushes the gap back open, which makes $608.00 the narrowest it can be on these rows rather than the answer. It does not reverse the direction either way — destruction is still the cheaper of the two lines — but most of the printed reason to prefer it is gone, which is not a thing you want to discover after you have committed the pallets. Note also that Walmart’s own row records the add-on as applying to disposal/removal both, so on that card it loads whichever of the two you choose.

Two disposal prices that must not be divided

Flexport publishes certified disposal at $500 per order and damaged returns disposal at $0.50 per disposal. Both were read direct from the source on 2026-08-12.

Those two numbers look like a scandal and are not one. They are different transactions in different units, recorded in different service lines in our own data — certified disposal under removal, damaged returns disposal under returns. One is a whole disposal order with certification attached; the other is a per-event charge on a unit that came back damaged. Dividing $500 by $0.50 produces a number, and that number means nothing. We are pointing at them together only to make the opposite point: this is exactly the pair a rate-card comparison spreadsheet will silently average, and the unit column is the only thing standing between you and that mistake.

Flexport’s return-side documentation rows carry the same warning in miniature: $1.80 per unit for return or disposal documentation with images against $0.10 per unit for notes only. Same unit on both, so that one is comparable — eighteen times, said out loud because the units permit it, which is the test every other multiple on this page had to pass before we printed it.

Return-to-sender is a third exit path, and it is priced above removal

Inventory leaves a warehouse three ways: you pull it, you destroy it, or it comes back on its own because it could not be delivered. The third one has its own line.

Flexport’s return-to-sender processing is $3.00 per unit, read 2026-08-04, and it is recorded under returns rather than removal — it is the same row in both our files, tagged with one fee_uid so it counts once. It sits inside the wider returns schedule our returns processing guide prices row by row. Because it shares the per unit basis with the removal ladder and comes off the same vendor’s card, this is one of the few comparisons on this page the units actually permit:

Flexport lineUnitAmount
Inventory removal 0–0.5 lbper unit$1.04
Inventory removal 0.5–1 lbper unit$1.53
Inventory removal 1–2 lbper unit$2.27
Return-to-sender processingper unit$3.00
Inventory removal 2+ lbper unit$2.89 + $1.06/lb

Up to 2 lb, a unit that comes back to you uninvited costs more per unit than a unit you asked for, in every published band. Somewhere inside the 2+ lb tier the removal formula overtakes it: the base is $2.89, eleven cents short of the $3.00 return-to-sender rate, so eleven cents of the $1.06/lb rider is enough to reach it. We are not naming the weight at which that happens, because it depends on the weight the rider starts from and our row does not record it, for the reason given above.

What our rows do not establish is whether the $25 removal-order minimum touches this line at all. The minimum row names itself inventory removal minimum order, and nothing in the return-to-sender row’s conditions field references it. So we are not applying it, and neither should your model until someone at Flexport confirms it either way.

What Amazon FBA publishes here, and where

Amazon FBA’s removal rows in our dataset carry no dollar amount at all.

They are removal and disposal fee schedule by weight, per unit, with conditions recording that it is charged per unit as processed across standard and oversize weight bands; and liquidation order fee, per unit, with conditions recording that it is a percentage of recovery value plus a per-unit fee. Both are marked quote-gated in our data, and the notes field on each records the same reason: the Seller Central help hub page requires an authenticated Seller Central session. The schedule row’s note adds that the numeric tiers are not renderable via static fetch.

That is a precise claim and it is worth being precise about. Amazon does publish these tiers — to sellers who are logged in. Our row records that we looked, names where we looked, and puts no number in the cell. If you have a Seller Central login, the schedule is a click away and it is the single highest-value thing you can pull before an FBA exit. What we will not do is copy a figure from a third-party blog into a benchmark table and let it inherit our sourcing.

Filtering the data without miscounting it

If you work from the CSV rather than this page, two things will trip you.

One: service_line alone is not enough. Flexport’s damaged returns disposal ($0.50 per disposal) and its return/disposal documentation rows ($1.80 and $0.10 per unit) are filed under returns, not removal. Filter on service_line = removal and you miss them. Filter on fee_item containing “disposal” instead and you miss the entire Flexport inventory removal ladder and Walmart’s removal shipping row, none of which have the word in them. You need both filters.

Two: our own file used to make this worse. Flexport’s floor-loaded container unloading rows — $650 per container for a 40-foot and $325 for a 20-foot — were filed under service_line = removal in rates-platforms.csv. Unloading an inbound container is receiving, not removal. Both rows now read receiving and both notes carry the correction against a 2026-08-12 direct read; the 40-foot row’s note also records that our mid-market file had it filed correctly all along. Anyone who pulled a removal-cost figure out of our platforms file before that read would have found $650 sitting in it. We would rather say that here than have someone rediscover it.

Both files also carry the Flexport 0–0.5 lb removal row, tagged with the same fee_uid so it counts once. The rest of the weight ladder is split: the 0.5–1 lb and 1–2 lb tiers exist only in the mid-market file, the 2+ lb tier only in the platforms file. You need both files to see the complete ladder, which is a fact about our data collection and not about Flexport’s page.

Who publishes nothing here

We maintain a dataset of 241 sourced fee rows across 23 fulfillment operations. Eleven of them publish no dollar figure for removal or disposal on the evidence of a row: either an explicit quote-gated removal row, or no dollar figure anywhere in our dataset at all. Of those, ten publish no dollar figure anywhere at all, and Amazon FBA is the eleventh — its removal rows both record that we could not read a number off the page.

The remainder is a third state and it is not silence. Amazon MCF, Fulfillrite, Fulfyld, Launch Fulfillment, MyFBAPrep, ShipBob, ShipCalm, Shipfusion, Simpl Fulfillment and Simple Global each carry at least one dollar figure somewhere else in our dataset, which is why none of them is inside the count above, and every one of them has no removal or disposal row in our dataset at all. That means one of two things and we cannot tell you which from here: either they do not price removal as a separate line, or we have not found it yet. Reporting that as “they publish nothing” would be a different and false claim.

ShipBob is the marginal member of that list, and our pricing-transparency guide says so in as many words: the only row we hold for it that carries a number at all is a $0 platform fee, and the rest are quote-gated. It clears the bar by a hair, and it clears it. The full breakdown by service line is on the fee benchmark table.

If your provider is in that list, the absence is your question, not your answer. Ask what a removal order costs and what the minimum is, and ask it in the same email as the pick fee.

What to ask before you sign, not before you leave

Every number on this page is worth exactly nothing to you on the day you serve notice, because that is the day you have no leverage: your goods are in their building and your new provider has appointments booked. All of it is worth a lot during procurement.

  • “What is the removal order minimum, and is it per order or per facility?” Flexport’s is $25.00 per order. A provider with a higher floor, or one that charges it per site, has repriced every small pull you will ever make.
  • “Is removal priced per unit, per pound, per pallet, or per order?” The published rows above use per unit, per order and per lb. per pallet appears nowhere in them, which is not evidence that nobody charges it. Get the word, not just the number.
  • “For the 2+ lb tier, what weight does the per-pound rider start at?” The question we could not answer from Flexport’s row.
  • “What does disposal cost, in what unit, and does certification change it?” Flexport’s certified disposal is a per order charge. Assume nothing carries over from a per-unit disposal quote.
  • “What is the goods-removal window after termination, and what happens to inventory left in it?” Our hidden fees guide records that ShipBob’s terms of service set a goods-removal window after termination, and our contract red flags guide records the other half of the same clause — that unclaimed inventory may be disposed of after it — with the clause language beside it. A published counter-example worth quoting at a provider whose contract is vaguer.

Limitations

This is 23 fulfillment operations, and 3 of them (Amazon FBA, Amazon MCF, Walmart WFS) are marketplace programs rather than 3PLs, so a WFS disposal fee and a 3PL removal fee are not substitutable services even where the units match. Every rate here was read on the date printed beside it and both vendors change rates without notice; the Flexport removal ladder and every Walmart row above carry a 2026-08-04 read, and of the removal and disposal rows only certified disposal and damaged returns disposal have been re-read since, on 2026-08-12.

The 2+ lb Flexport tier is a formula whose per-pound starting weight our row does not record, so it is excluded from every calculation above. Freight is excluded throughout — a removal order gets your goods to a dock, not to your new provider, and no row in our dataset prices that leg. The 3,200-unit figure in the worked example is one month of an illustrative profile’s outbound throughput and is not an inventory-depth estimate for anyone. And nothing here prices an exit-specific removal: no source we have found publishes a removal or disposal fee tied to a termination event, which is the same gap our switching guide names.

Our method for reading and normalizing these rows, including what we do with formula amounts and quote-gated cells, is on the methodology page.

What to do next

  1. Price your exit at the tier, then check it against the floor. Multiply your real unit count by the published per-unit rate, and if the result is under $25.00, the answer is $25.00. Do that once per removal order you expect to raise, not once for the whole exit.
  2. Count how many removal orders your exit actually needs. One per facility, one per SKU family, one for the late-discovered pallets. Each one is a separate floor.
  3. Get the unit in writing before the amount. per unit, per lb, per order and per disposal all appear in the published data above, and a quote that names a dollar figure without one is not a quote.
  4. Decide remove-versus-destroy on your own numbers, not ours. The cross-vendor gap above is just under three times. Your own answer depends on unit weight, salvage value and hazmat status: Walmart’s published hazmat add-on alone closes most of that gap on the disposal side, and we hold no Flexport hazmat row to set against it, so ask for one before you rely on the narrowed figure.
  5. Normalize the whole card, not the removal line. Our apples-to-apples method runs four published rate cards through one order profile, and the switching cost guide puts removal back in the exit stack next to freight, receiving and the parallel run.

Figures are quoted from the vendor’s own page on the date given and cross-checked against our dataset. Where we derive a figure by arithmetic rather than reading it, the sentence says so. Where a row cannot support the arithmetic, we say that instead of doing it anyway.

Sources

Who publishes removal and disposal rates

2 of the 7 providers whose rate cards we hold publish removal and disposal rates outright. Each page below lists every fee that provider publishes, with the source URL and the date we read it.

  • Flexport 7 published removal and disposal rates · 75 fees in total
  • Walmart WFS 4 published removal and disposal rates · 26 fees in total

All published fees by vendor · What a 3PL costs in 2026

When a figure on this page changes

We re-check these rates against the vendor's own page and publish every correction. Leave an address and you get an email when a number in this guide moves or a company is added — nothing else, and nothing on a schedule. To come off, email data@ratecardlab.com and we delete the record.