3PL returns processing fee, unit by unit

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

Returns processing appears on every list of 3PL hidden fees, and it is not hidden. Flexport, Fulfyld, Launch Fulfillment, ShipCalm and Walmart WFS each print a returns price on a public page, and we read those pages on the dates in the table below. What makes returns genuinely hard to compare is not secrecy: it is that the published prices are charged for different events, in different units, so the lowest headline rate can produce the highest line on your invoice.

How much do 3PLs charge to process a return?

Among the third-party providers in our dataset that publish a rate, a single-item return runs $2.00 to $4.95: Launch Fulfillment $2.00 per return, Flexport $3.00 per unit, Fulfyld $3.50 per return for the first item, ShipCalm $4.95 per return. Walmart WFS is the outlier and the only weight-laddered schedule here, at $4.70–17.55 per unit.

Those numbers are almost useless on their own, because they are not all measured against the same thing. Widen the return to four items in one parcel and the ranking inverts, using nothing but the published rates and multiplication:

ProviderRate as publishedA 4-item return costs
Launch Fulfillment$2.00 per return (vendor-labelled sample rate)$2.00
ShipCalm$4.95 per return$4.95
Fulfyld$3.50 per return first item + $0.50 per item after$3.50 + 3 × $0.50 = $5.00
Flexport$3.00 per unit4 × $3.00 = $12.00

At one item Flexport is cheaper than both Fulfyld and ShipCalm. At four items it is more than double Fulfyld and nearly two and a half times ShipCalm. Nobody changed a price. The unit did the work.

This is the same failure mode behind the correction with the biggest consequence we have logged: we priced Amazon MCF by multiplying a per-unit fee as though it were charged per order, and the published figure understated it by 50%. That one is in the corrections log with the arithmetic shown, because it reached the front page before we caught it. The unit column is not metadata. It is the fee.

Every published returns row we hold, unit first

Sorted by unit of charge, copied verbatim from the unit column rather than paraphrased. Where the same fee appears under both of our Flexport extracts it is listed once.

Unit of chargeProviderFee itemAmountRead
per returnLaunch Fulfillmentreturns processing fee$2.00 — vendor labels it a sample rate, not a guaranteed quote2026-08-04
per returnFulfyldfirst item returns processing$3.502026-08-04
per returnShipCalmper-item returned fee$4.952026-08-04
per itemFulfyldadditional item returns processing$0.502026-08-04
per unitFlexportreturn-to-sender processing$3.002026-08-04
per unitFlexportreturn/disposal documentation notes only$0.102026-08-04
per unitFlexportreturn/disposal documentation with images$1.802026-08-04
per unitWalmart WFSstandard item return processing$4.70–17.552026-08-12
per unitWalmart WFSbig & bulky return processing$155 + $0.80/lb over 90 lb2026-08-04
per disposalFlexportdamaged returns disposal$0.502026-08-12
per packageFlexportsignature-required package fee$5.00 — see the caveat below2026-08-04 / 2026-08-12
flatShipBobreturns managementnot published2026-08-04

Sources, in order: Launch Fulfillment, Fulfyld, ShipCalm, Flexport, Walmart WFS, ShipBob.

What each unit rewards, and who it punishes

A return is one physical event with several countable properties: parcels, items, units, and whatever you do with the goods afterwards. Each unit of charge picks one of those and ignores the rest.

  • Per return. The bill tracks return events. A ten-item return costs the same as a one-item return. This is the unit that favours apparel and anything else where customers order three sizes and send two back, and the one a provider has most reason to qualify.
  • Per item. Fulfyld’s $0.50 additional-item fee is that qualification. Its first item is priced per return and everything after it per item, and it is the only hybrid among the returns rows we hold.
  • Per unit. The bill tracks units handled. Flexport’s $3.00 return-to-sender and Walmart’s standard return processing both work this way. Cheapest-looking at one item, and linear in basket size forever after.
  • Per disposal. Charged against a decision rather than a receipt. Flexport’s damaged returns disposal is $0.50 per disposal, read 2026-08-12. If the unit does not come back into sellable stock, this is the line that catches it.
  • Per package. Charged against parcels rather than contents. The only row we hold in this unit is Flexport’s signature-required package fee, and it carries a caveat we print in full below rather than lean on.

The practical consequence: ask for the unit before you ask for the rate. A quote of “$3.00 for returns” is not a number until you know whether the 3 is multiplied by returns, items, units or parcels, and the four answers are not close to each other at any realistic basket size.

The return and its paperwork are priced separately

Flexport prices the physical handling of a return and the evidence of its condition as separate lines, and the evidence itself is priced at a notes rate and an images rate:

Fee itemUnitAmount
return-to-sender processingper unit$3.00
return/disposal documentation notes onlyper unit$0.10
return/disposal documentation with imagesper unit$1.80

Same physical return, same warehouse, same unit of charge. $1.80 ÷ $0.10 = 18 times the price, decided entirely by whether you want photographs. All three rows were read 2026-08-04 from Flexport’s Omni-Channel Fulfillment pricing overview, and both documentation rows carry the recorded condition optional return documentation — so this is opt-in rather than a default, and it applies to disposals as well as returns.

If you run a chargeback or supplier-recovery process, photographs are not optional in practice, and the fee stops being an add-on and becomes part of your unit cost of a return. If you do not, $0.10 buys a note and that is all you need. The decision is worth making deliberately once rather than inheriting from a default nobody chose.

Flexport’s 76 rows in our dataset, counted across both of our separately sourced extracts of its card, are more than double any other company’s, and its returns and disposal lines are where that shows: it prices handling per unit, documentation per unit at a notes rate and an images rate, damaged-goods disposal per disposal, and — in the removal service line — certified disposal at $500 per order, with the condition recording that it is charged per disposal order and not per unit. That row was read 2026-08-12.

Resist the ratio there. $500.00 ÷ $0.50 = 1,000, but the two amounts are charged in different units, so that figure is not a price comparison. It is a warning that two very differently sized services sit near each other on one card, and nothing about the card stops you ordering the wrong one.

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 →

160 returns a month, priced from the rows

Illustrative order profile: 2,000 orders a month, an 8% return rate, so 160 returns. The rates are published; the multiplication is ours and is shown in full so you can substitute your own volume.

If every return is a single item:

ProviderArithmeticMonthly
Launch Fulfillment160 × $2.00$320.00
Flexport, handling only160 × $3.00$480.00
Flexport + notes-only documentation$480.00 + (160 × $0.10)$496.00
Fulfyld160 × $3.50$560.00
Flexport + documentation with images$480.00 + (160 × $1.80)$768.00
ShipCalm160 × $4.95$792.00

If every return is four items in one parcel:

ProviderArithmeticMonthly
Launch Fulfillment160 × $2.00$320.00
ShipCalm160 × $4.95$792.00
Fulfyld160 × ($3.50 + 3 × $0.50)$800.00
Flexport, handling only160 × 4 × $3.00$1,920.00
Flexport + notes-only documentation$1,920.00 + (160 × 4 × $0.10)$1,984.00
Flexport + documentation with images$1,920.00 + (160 × 4 × $1.80)$3,072.00

The spread between the cheapest and the dearest line widens from roughly two and a half times ($320.00 against $792.00) to roughly nine and a half times ($320.00 against $3,072.00) on a change in basket size alone, with no rate anywhere having moved. Launch Fulfillment’s $2.00 is the cheapest line in both tables and is the one figure here the vendor itself labels a sample rate rather than a guaranteed quote, which is exactly the sort of thing that should be read off the row and not off the ranking.

None of this is a like-for-like comparison of service. It is a like-for-like comparison of billing mechanics, which is the part a rate card is supposed to tell you and mostly does not. The same exercise across a whole card is what our apples-to-apples method walks through.

Where our own two records of one fee disagree

The per package row in the table above deserves its caveat printed rather than buried.

We hold two separately sourced sets of Flexport rows. In one of them, the signature-required package fee of $5.00 sits in the returns service line and is labelled signature-required package fee, and it carries a 2026-08-04 read. In the other, the same fee — same amount, same source page, tagged with the same internal identifier — sits in the other service line and is described as optional delivery service; $5.00 per PACKAGE under zone-based pricing, with a note recording that the source also prices it at $5.00 per order under unit-based pricing, and that we hold no row for that second reading. That second record was read direct in the browser on 2026-08-12, so the newer of our two reads is the one that calls it a delivery service rather than a returns line.

The shared identifier is a real check and a narrow one: our build uses it to confirm that two records of one fee still agree on the amount and on the company. It does not compare their service line or their unit, which is exactly why this disagreement survived long enough to be written about here.

So one of our two records treats it as a returns line and the other treats it as an outbound delivery option, and the same fee carries a different unit depending on which pricing model the merchant is on. We have not resolved which classification is right, and we are not going to resolve it by picking the one that makes a better article. It is in the table because it is in the returns rows; it is flagged here because a reader building a returns model on it would be building on a row we ourselves hold two ways. The disagreement between our own two records is how we have found several errors before — the corrections log has the Flexport unit fixes from 10 and 12 August 2026, both surfaced the same way.

ShipCalm’s row says per return; ShipCalm’s fee name says per item

The second thing in the table that needs reading twice. Our ShipCalm row records the unit as per return at $4.95, and the fee item the vendor names is per-item returned fee. Those two are not the same claim, and the difference is not small:

  • Read as recorded, per return: a four-item return is $4.95, and 160 of them a month is $792.00.
  • Read as the fee name suggests, per item: a four-item return is 4 × $4.95 = $19.80, and 160 of them a month is $3,168.00 — exactly four times as much.

We publish the unit as our row records it, which is per return. We are flagging rather than asserting the alternative, because the arbiter is ShipCalm’s own page and we have not re-read it since 2026-08-04. Note also that our hidden fees guide summarises this fee as per item; that page and this row have picked different readings of the same source, and the honest position today is that the ambiguity is unresolved. If you are pricing ShipCalm, get it in writing before it becomes a $2,376.00-a-month surprise on the arithmetic above.

One more ShipCalm line belongs beside that $4.95, and it is not a returns row in our dataset. ShipCalm publishes a Returns or Dropship platform add-on at $49 per week, which we hold under account management rather than returns, with the condition recorded as add-on to Essentials plan, read 2026-08-04 from the same pricing page as the $4.95. It is the only row we hold that prices access to returns handling rather than a returns event, and it does not move with volume: 52 × $49 = $2,548 a year at any return count, so it lands hardest per return on whoever has the fewest. Our row does not record whether that add-on is required in order to be billed the $4.95, so that is a question for ShipCalm and not an inference for us. The worked tables above price the per-return line only.

Walmart WFS: the only weight ladder, and the note we got wrong

Every third-party returns rate here is weight-independent. Walmart WFS is not: standard item return processing is $4.70–17.55 per unit, and its conditions field records that this is a separate schedule from fulfillment, running $1.25 per unit higher on every tier up to 20 lb and identical from 21 lb up. That row was re-read direct on 2026-08-12.

It carries that conditions field because we published it wrong. Our row used to say the returns schedule mirrors the standard fulfillment fee tiers, which is true only from 21 lb up; below that, an operator estimating a light-item return from the $3.45 fulfillment fee would have been low by $1.25 a unit on every single one. We re-read Walmart’s returns table, rewrote the field, and logged it on 12 August 2026. The full tier-by-tier treatment, including which cells are recorded and which are derived, is in the WFS return processing fee guide rather than repeated here.

One detail from that work belongs here. Our other WFS returns row, big & bulky return processing at $155 + $0.80/lb over 90 lb per unit, still carries the note that it mirrors the big & bulky fulfillment fee — and on that row the note holds: our big & bulky fulfillment row carries the same amount string, which is the check the WFS guide runs. What that row does still carry is a 2026-08-04 read date, against 2026-08-12 on the row we went back to. The same label was wrong on one row and right on the other, and the only way to know which was to read the source again.

Who publishes nothing here

We maintain a dataset of 241 sourced fee rows across 23 fulfillment operations. Eleven of the 23 publish no dollar figure for returns processing anywhere we looked. Ten of those publish no dollar figure anywhere at all, on any service line. The eleventh is ShipBob, and its row is the more interesting case:

ShipBob’s returns management row exists, records the unit as flat, and records the amount as not published. That is the mirror image of everything above. The other providers here publish an amount whose basis you have to work out; ShipBob publishes the shape of the fee and not the amount. Both leave a gap, and only one of the gaps is obvious at a glance.

ShipHero and Simple Global both name returns as a billing category without pricing it, which is a sourced claim rather than silence, so we hold each as a quote-gated row — filed under account management rather than returns, because that is where the vendor’s own page makes the statement, and neither therefore counts as a returns row above. ShipHero — which publishes no dollar figure anywhere in our dataset — lists its 3PL billing categories as recurring, receiving, storage, shipment, return and ad hoc, with no dollar amount against any of them. Simple Global sits differently: it publishes hourly value-added service rates, so it is not in that group, and it has no returns row of its own. Its quote-gated row records what its pricing page does not carry — a returns fee, a setup fee, packaging, order minimums, a kitting flat rate or an account management fee. Both read 2026-08-04.

Then there is the third state, which is not silence and which we do not report as silence: the remaining operations have no returns row in our dataset at all. That includes Amazon FBA and Amazon MCF. For Amazon FBA we hold a removal and disposal fee schedule row that is itself quote-gated, and no returns row; for Amazon MCF, no returns row either. “No row” means one of two things — the provider does not price returns as a separate line, or we have not checked it yet — and we are not going to let it read as evidence of concealment. The full breakdown by service line is on the fee benchmark table.

What should I ask a 3PL about returns before I sign?

Each of these is aimed at an ambiguity that is real in the published rows above, not at a generic checklist item.

  1. What is the unit of charge, in your own words? Not the rate. The unit. Then ask them to price a four-item return out loud. If the two answers disagree, you have found the thing this article is about before it reaches an invoice.
  2. Is documentation billed separately, and at what grades? Flexport publishes $0.10 per unit for notes and $1.80 per unit with images, read 2026-08-04. If a provider charges for evidence at all, get the grades and the price of each in writing: a single headline returns rate cannot tell you which grade it includes.
  3. What happens to a unit that cannot be resold? Disposal may be priced per disposal, per unit, per order, or not at all. Flexport’s own card carries $0.50 per disposal for damaged returns and $500 per order for certified disposal.
  4. Is returns pricing inside the signed agreement, or on a separate rate card? The hidden fees guide covers why “a separate rate card subject to change” is the clause that matters more than the number attached to it.
  5. Which fees on this card are sample or illustrative rates? One of the rows in our table says so on the vendor’s own page. Rates that carry that label are not quotes, and treating them as quotes is how a comparison spreadsheet ends up wrong in your favour.

Limitations

This is 23 fulfillment operations, and three of them (Amazon FBA, Amazon MCF and Walmart WFS) are marketplace programs rather than 3PLs, so their returns economics are not comparable to a contracted provider’s in anything but the arithmetic. Every rate above was read on the date printed beside it and most carry a 2026-08-04 read; published rate cards change without notice, and a rate card is not a quote.

Three specific soft spots, named rather than smoothed over. The per package row is classified as a returns line in one of our Flexport records and as an outbound delivery option in the other, and the source prices that fee in a second unit we hold no row for. The ShipCalm unit and the ShipCalm fee name disagree, and we have not re-read the source to settle it. And the big & bulky WFS returns row carries an older read date than its sibling, which is the row that turned out to need one.

The worked examples are arithmetic on published rates at an assumed volume and basket size. They are not quotes, and they do not include inbound shipping on the return, restocking labour, refund processing, ShipCalm’s weekly returns platform add-on or the cost of the unit itself. We also hold no row for a return-label rate from any provider here, which means we have not recorded one — not that none is published. How we read, normalise and date these rows — including what we do with ranges, hybrids and vendor-labelled sample rates — is on the methodology page.

What to do next

  1. Pull one month of returns off your own settlement or billing report and count two things: return events and items returned. The ratio between them is the only number that tells you which unit of charge you should be shopping for.
  2. Re-price your current provider at your real basket size, not at one item. Use the arithmetic in the tables above with your own volume substituted. If your provider charges per unit and your average return carries more than one item, your effective rate is not the number on the card.
  3. Ask the questions above in writing, especially the documentation one. Get the unit confirmed in the same message as the rate, because the rate alone is not an answer.
  4. Check whether returns sit inside your signed agreement, using the contract red flags checklist. Returns pricing on a separate, amendable rate card is the arrangement worth negotiating out.
  5. Normalise the whole card, not the returns line. Our apples-to-apples method runs four published rate cards through one order profile, and the fee benchmark table has every row above in context with the rest of the dataset.

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 our own two records of the same fee disagree with each other, we say that too, and show both.

Sources

Who publishes returns rates

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

  • Flexport 7 published returns rates · 75 fees in total
  • Walmart WFS 2 published returns rates · 26 fees in total
  • Fulfyld 2 published returns rates · 12 fees in total
  • ShipCalm 1 published returns rate · 35 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.