If you've ever refunded a Stripe transaction and noticed the dashboard shows a small loss instead of a clean zero, you're not imagining it. Stripe does not return the original processing fee on refunds — full or partial. This is a policy that catches a meaningful percentage of Stripe merchants by surprise, often only at the end of the financial year when the discrepancy lands on the P&L.
This article explains what's actually happening, why it works this way, what it costs across realistic refund volumes, and what you can do about it. Use the Stripe refund/dispute calculator to plug your own numbers in.
What Actually Happens When You Refund
A refund returns the principal — the original transaction amount — to the customer. Nothing more. The processing fee that Stripe charged on the original transaction stays in Stripe's pocket.
So a refunded $100 US card transaction nets you –$3.20: you returned $100 to the customer, and Stripe kept the $3.20 fee. Partial refunds work the same way — refund $50 of the original $100, and Stripe still keeps the full original $3.20 fee. Pro-rated processing fee returns are not a thing.
Why Stripe (and Every Other Processor) Does This
The processing already happened. Stripe's costs — interchange paid to the card-issuing bank, scheme fees paid to Visa/Mastercard, Stripe's own infrastructure cost for authorization and settlement — were incurred when the original charge cleared. The refund itself doesn't reverse interchange; the issuing bank still keeps its cut.
Stripe could choose to absorb that cost on its margin. It doesn't. Neither does PayPal, Square, Braintree, Adyen, or any other major processor. Industry standard for the last 25 years has been: principal is refundable, fees are not.
The only exception is wholesale interchange-plus pricing at enterprise scale, where some processors offer "pass-through" interchange refunds — and even there, the scheme fees and processor margin are typically retained.
What This Costs at Realistic Refund Volumes
The math compounds in non-obvious ways. Let's run a typical SaaS scenario.
A SaaS sells a $50/month subscription with a 14-day money-back guarantee. Refund rate during the trial window is 5% of new signups, and historical churn-related refunds add another 1% across the customer base.
| Metric | Value |
|---|---|
| New signups / month | 1,000 |
| Trial refund rate | 5% |
| Trial refunds / month | 50 |
| Lost fee per trial refund | $1.75 ($50 × 2.9% + 30¢) |
| Monthly cost of trial refunds | $87.50 |
| Annual cost | $1,050 |
Now layer in churn refunds: 1% of MRR = ~$300 in additional refunds, with another ~$10/month in retained fees, or ~$120/year. Total: roughly $1,170/year in retained processing fees on refunded revenue.
For larger SaaS the absolute numbers scale linearly. A 10,000-customer SaaS at $50/month with the same refund profile pays approximately $11,700/year — small enough to ignore, big enough to plug into a quarterly review.
Disputes Are Significantly Worse
If a customer disputes a charge instead of asking for a refund, the cost structure is much worse. Stripe charges $15 per dispute upfront. If you win the dispute (proving the transaction was legitimate), Stripe refunds the $15. If you lose, the customer keeps the principal via chargeback, Stripe keeps the original processing fee, AND Stripe keeps the $15 dispute fee.
Total cost of a lost $100 dispute (US): $118.20.
The right strategy depends on your category. For B2C with low-fraud profiles, accepting disputes (no contest) is often cheaper than fighting them — the operational cost of gathering evidence and submitting a response can exceed the $15 dispute fee. For B2B and high-fraud categories, fighting most disputes is worth it.
The dispute mode of the calculator models all five scenarios: full refund, partial refund, dispute won, dispute lost, dispute accepted.
Strategies to Mitigate Refund Cost
A short list of practical mitigations:
1. Surface the cost in your unit economics. Treat refund-retained-fees as a separate cost line, not as part of "Stripe fees." This makes the impact of refund-rate changes visible to product and CX teams. A 1% improvement in trial-refund rate often pays for the 14-day guarantee window in fee savings alone.
2. Steer high-ticket transactions to ACH. US ACH is 0.8% capped at $5. If a $5,000 transaction gets refunded, Stripe keeps $5 instead of $145.30 on a card. For B2B SaaS that does mid-market deals over $1k, this is a no-brainer. See the ACH sub-page for details.
3. Consider partial-refund-as-credit instead of cash refund. If your terms allow, offering store credit instead of a refund avoids the refund event entirely (no fee retained, no chargeback risk). Effective for high-value subscription products with active reactivation rates.
4. Reduce involuntary churn. Some "refunds" are actually involuntary — a customer's card expired, the charge failed multiple times, they reached out for a refund of the most recent successful month. Stripe Billing's Smart Retries (included in the 0.5% Billing fee) recover ~25-30% of card declines without merchant intervention.
5. Limit your refund window. A 14-day refund window has materially higher refund rates than a 7-day window. The customer-experience impact is small (most legitimate refund requests come in the first 48 hours); the fee savings are not.
What Doesn't Work
A few things merchants try that don't help:
- Refunding to the customer's bank account directly (off-platform). This isn't legal under most card-network rules — refunds for card transactions must go through the original processor.
- Disputing the original transaction yourself to recover fees. Disputes are customer-initiated; merchants can't initiate them. And they cost $15 per dispute even if you somehow could.
- "Just absorb the fee" — i.e., charging the customer the gross amount and using the calculator's reverse mode. This recovers the fee on the original transaction, but it doesn't help with refunds — Stripe still keeps the original (now-larger) fee on a refund. The reverse calculator helps with invoicing accuracy, not refund economics.
How to Track This in Your Stripe Dashboard
The Stripe Dashboard's "Reports" section has a "Refunds" report that shows total refunded principal but doesn't surface the retained processing fee directly. To get the actual cost, export the refund report as CSV and multiply original-transaction-amounts by your effective rate. Or paste the CSV into the bulk calculator — it computes the per-row processing fee, which is what was retained on each refund.
For teams running a quarterly Stripe cost review, this is one of the most underweighted line items. The dashboard makes it easy to ignore. The calculator makes it easy to count.