Methodology
A benchmark is only worth what its sourcing is worth. Here is exactly how this dataset is built, what we refuse to publish, and where it is weak.
Where numbers come from
A figure enters the dataset only from a vendor's own published pricing page, rate card, or help documentation; a carrier's official surcharge page; or a named third-party survey that we attribute explicitly. We do not take rates from aggregator blogs, lead-generation marketplaces, or content farms, because those numbers are usually recycled from each other and cannot be traced. Where we cite a survey run by a company that also sells into this market, we name the source in the row so you can discount it as you see fit.
The schema
Every row records the vendor, service line, fee item, unit of charge, amount in USD, conditions attached to the rate, source URL, and the date we accessed it. The conditions field is not decoration. A pick fee attached to "first item, orders under 1,000 per month" and one attached to "all-in, 501 to 1,000 orders per month" measure different things, and stripping that context is how misleading averages get made.
What we will not do
We do not average across structurally different fee models. We do not convert a "from $1.75" floor or an "up to $1.75" ceiling into a point estimate. We do not present a historical rate change or a pricing announcement as a current rate; those rows are labeled and dated in place. We do not fill a gap with an estimate because a table looks incomplete. When a vendor publishes nothing, the honest datapoint is that they publish nothing, and we record that instead.
Verification cadence
Every row carries the date it was last checked. Rows are re-verified on a rolling schedule so that no figure goes more than a quarter without being looked at again. When a rate changes we update the row and note the change rather than silently overwriting it, because the direction of travel on fees is itself useful information. When we get something wrong, the fix is logged on the corrections page.
Reader-submitted rate cards
Operators send us quotes and invoices. We normalize them into the same schema, strip every identifying detail about the submitting brand, and mark them as submitted data so you can weigh them differently from published rates. We name the vendor. We never name the brand. See how submissions work.
Known limits
The published band skews small. Most 3PLs serving DTC brands are quote-gated, including almost every well-known name, so 10 of the vendors we checked contribute a "publishes nothing" row rather than rates. That means the visible spread understates what large, sales-led providers actually charge, and it means a quote you receive may sit well outside our published range for reasons that have nothing to do with you being overcharged. Amazon's current per-tier FBA tables render only inside a JavaScript calculator and are not extractable, so we hold verified announcements and dated baselines for FBA rather than a current table. Treat every number here as a negotiating input, not a verdict.
Independence
No vendor pays to appear in the dataset, to be excluded from it, or to influence how a rate is presented. If we ever earn affiliate revenue from a company that appears in these tables, that relationship will be disclosed on the page where it applies. Nothing here is legal, tax, or financial advice.
Current dataset: 196 published rows, 30 distinct sources, last verified 2026-08-04.