Your Refund Policy at Cancellation Is a Retention Lever, Not Just a Finance Decision
No-refund cancellation policies don't stop money from leaving — they just decide whether it leaves through a support ticket or a chargeback.
Ask most SaaS founders what their refund policy is at cancellation and you'll get a version of "we don't do refunds, it's in the terms." It's treated as a solved problem — a line of legal boilerplate, not a decision that affects retention numbers. That's backwards. The subscriber who wants their money back after cancelling doesn't stop wanting it because your terms of service say no. They just pick a different door: your support inbox, or their bank's dispute form. One of those doors costs you nothing extra. The other costs you a flat fee on top of the revenue you were going to lose either way.
That number is the whole argument for treating refund policy as a retention decision rather than a finance footnote. Three out of four subscribers who end up disputing a charge never gave you the chance to make it right first. Some of that is genuine friendly fraud — people who know exactly what they signed up for and dispute anyway because it's less effort than asking. But a meaningful chunk of it is subscribers who checked your cancellation page, found no refund option and no clear way to ask, and concluded their bank was the faster path to their money.
What "no refunds" actually saves you, and what it costs
A blanket no-refund policy is attractive because it looks like free money — you keep 100% of every charge on a cancelled account. But that's only true for the subscribers who accept it quietly. For the ones who don't, the policy hasn't prevented a loss, it's just changed which loss you take. When the same subscriber disputes instead of requesting a refund, you lose the revenue anyway — Stripe reverses the charge either way — and you additionally eat a $15 dispute fee that a straightforward refund would never have triggered. Lose enough of those and you also start climbing toward the chargeback ratio thresholds that put your merchant account under network monitoring, a cost that has nothing to do with the dollar amount of any single dispute.
The data on what happens when a subscriber does get a chance to talk to you first makes the tradeoff concrete:
Source: Javelin Strategy & Research, via Chargeback.io's 2026 Chargeback Statistics report.
Three quarters of subscribers who reach a human or a self-serve refund option before reaching their bank never file a dispute at all. Almost a third of them are satisfied by a refund specifically — not a discount, not an apology, an actual refund. If your cancellation flow has no path to that outcome, you're not eliminating those refund requests, you're routing a third of them straight into the 25% who escalate regardless, plus whatever share of the other 75% figure above never even tried the merchant route because your policy already told them not to bother.
The four refund postures, and what each one actually does
Most SaaS cancellation policies fall into one of four postures, and they trade off cost, dispute exposure, and operational complexity differently enough that "no refunds" being the cheapest-looking option on a spreadsheet doesn't mean it's the cheapest in practice.
| Policy | Revenue kept | Dispute exposure | Ops cost |
|---|---|---|---|
| Hard no-refund, access continues to period end | Highest, on paper | Highest — no legitimate channel to ask | Low — nothing to process |
| No refund, but manual exceptions on request | High, minus ad-hoc exceptions | Medium — depends on response speed | High — every request needs a human |
| Self-serve partial refund, unused-time only, time-limited window | Medium — gives back only unused time | Low — legitimate ask has a real answer | Low — automatable via the refunds API |
| Store credit instead of cash refund | Medium-high — money stays in your system | Medium — some subscribers reject credit and escalate anyway | Low — automatable, no cash leaves |
The manual-exception row is the one most companies drift into by accident rather than choosing deliberately. Support says "no refunds" in the help center, then a founder or a senior support rep quietly approves refunds anyway for anyone who complains loudly enough or CCs the right person. That's the worst combination on the table: subscribers who don't complain loudly enough get nothing and some of them dispute, subscribers who do complain get inconsistent outcomes depending on who reads the ticket, and every approved exception still requires a human to process it manually in the Stripe dashboard. A published, consistent policy — even a strict one — outperforms an unpublished, inconsistent one on every axis in that table.
Building a self-serve partial refund into your cancellation flow
The mechanism that makes a partial-refund policy cheap enough to actually run is the same one Stripe already uses for mid-cycle proration credits, applied in the other direction. Instead of crediting unused time toward a future invoice, you refund it in cash against the original charge:
- Calculate the unused fraction:
(days_remaining_in_period / total_days_in_period), using the subscription'scurrent_period_endand the charge date. - Multiply that fraction by the amount actually charged for the period to get the refund amount.
- Call
refunds.create({charge: charge_id, amount: refund_amount})against the original PaymentIntent or charge, not a new transaction. - Cancel the subscription with
cancel_at_period_end: falseso access ends immediately rather than continuing through time you just refunded — otherwise you've given the money back and left the door open.
The window matters as much as the calculation. A common structure is: full self-serve eligibility within 14 days of an annual renewal charge (the "I forgot I was on autopay" window, where the case for a refund is strongest), a smaller or no refund on monthly plans past the first few days of a cycle, and no eligibility at all once meaningful usage has occurred in the current period — which you can check against your own product-usage logs before approving, the same signal a chargeback evidence case would use to win a dispute after the fact. Publishing that window explicitly, with the days-remaining math visible on the cancellation confirmation screen rather than buried in a terms page, is what turns it from a policy into something a subscriber trusts enough to use instead of their bank.
Why annual plans need a different answer than monthly ones
The stakes here scale directly with how much money is sitting on the table when someone cancels. A monthly subscriber who wants a refund is asking for a few weeks of a small charge. An annual subscriber who cancels two months into a twelve-month prepaid term is asking about ten months of revenue you're currently holding — and per our annual vs monthly billing guide, annual charges already generate disproportionately more disputes than monthly ones precisely because the dollar amount is large enough to notice and forgetting a renewal is more common over a 12-month gap than a 30-day one. A no-refund policy on an annual plan isn't just risking a chargeback on the disputed amount — it's risking one on the largest single charge that subscriber will ever make with you, at the exact moment their trust in the relationship is lowest.
This is also where a pause offer, covered in our pause vs discount vs downgrade comparison, becomes a genuine alternative to a refund rather than a consolation prize. A subscriber eight months into a twelve-month annual term who's cancelling for "not using it right now" reasons, not "this doesn't work" reasons, may prefer freezing the remaining four months against future access over getting a partial refund now — it resolves the same underlying complaint without moving cash either direction. Surface both options at cancellation and let the subscriber's stated reason route them to the one that actually fits, rather than defaulting every cancellation into the same binary of "keep it all" or "refund it all."
Store credit: the option that works for some subscribers and backfires on others
Store credit sits between cash refund and nothing, and it's tempting because the money never technically leaves your business. For a subscriber who's cancelling because of a temporary budget cut, not because they're unhappy with the product, credit toward a future resubscription can land well — it's a soft version of the pause offer above, framed as goodwill instead of a freeze. For a subscriber who's cancelling because the product didn't work for them, credit toward a product they've already decided not to use reads as a non-answer, and it's exactly the subscriber most likely to escalate to a chargeback when a credit shows up instead of the cash refund they asked for. The rule of thumb: offer credit as a choice alongside a smaller cash refund, never as a forced substitute for a refund someone explicitly requested — a substitution that ignores what was actually asked for is the fastest way to turn a resolvable request into a dispute.
Friendly fraud doesn't disappear because you refund more — but it gets smaller
None of this eliminates chargebacks entirely, and it isn't supposed to. A share of disputes are filed by people who know exactly what they're doing and would dispute a charge regardless of what refund options existed — card networks and payment researchers call this friendly fraud, and it's a large, well-documented share of overall dispute volume. Chargeflow's 2026 chargeback research estimates friendly fraud accounts for 40-80% of chargeback losses industry-wide, totaling an estimated $132 billion a year in disputed revenue merchants never recover. A generous refund policy won't touch that segment — someone determined to keep both the product access and the money will dispute either way.
What a clear, self-serve refund path does is shrink the much larger segment sitting behind that number: subscribers who aren't trying to defraud anyone, who have a legitimate ask, and who file a dispute purely because it was the only visible option once your cancellation page offered them nothing. A subscription cancellation study by A Closer Look found 28.9% of respondents rated the cancellation process itself as "somewhat" or "very" difficult — and a refund request with no visible path is one more difficulty layered on top of a process that's already frustrating a meaningful share of the people going through it. You can't refund your way out of intentional fraud. You can absolutely refund your way out of the fraud you accidentally manufactured by giving someone no other option.
Tracking whether your policy is actually working
The signal to watch isn't your refund total — it's the ratio between refunds you issued and disputes you received on cancelled accounts in the same period. A rising refund total alongside a falling dispute count means the policy is doing its job: redirecting requests that used to become chargebacks into a channel you control. A rising refund total alongside a flat or rising dispute count means you're now paying twice — giving back cash voluntarily and still eating dispute fees on top — which usually points to a policy that's generous in theory but invisible in practice, buried in a help center article nobody reads at the moment they're actually cancelling. Our chargebacks and disputes guide covers how to pull dispute data out of Stripe alongside your cancellation events so the two numbers actually sit next to each other in your reporting instead of living in separate dashboards; the churn calculator is a fast way to sanity-check how much of your reported churn is coming through disputes versus your actual cancel flow, which is the split that tells you whether this problem is even worth solving for your business yet.
A cancellation flow that only ever says "no refunds" is optimizing for a number that looks good until the dispute fees start showing up in a different report. Building the refund conversation into the flow itself — even a strict, time-limited, unused-time-only version of it — is what keeps a subscriber's last interaction with your product a conversation instead of a bank dispute. That's the same principle CancelFlow applies to save offers generally: give the subscriber a real answer at the moment they're asking, instead of a policy page they have to go looking for after they've already decided your support inbox isn't worth the wait.
Frequently asked questions
Should a SaaS company refund unused subscription time when someone cancels?+
There's no universal right answer, but the decision shouldn't be made in isolation from your dispute rate. A hard no-refund policy is cheapest on paper, but it pushes a share of subscribers who feel entitled to money back toward filing a chargeback with their bank instead of asking you — and a chargeback costs you the revenue plus a $15 Stripe dispute fee, versus a refund that only costs you the revenue. Partial, self-serve refunds on annual plans within a defined window (commonly 14-30 days after a renewal charge) are the middle ground most SaaS companies land on.
What's the difference between a refund and a chargeback for a SaaS business?+
A refund is voluntary and you control it — you or the customer requests it, you approve it, the money goes back through the original payment method with no extra fee. A chargeback is a forced reversal initiated through the card network after the cardholder disputes the charge with their bank, and it comes with a mandatory dispute fee (Stripe charges $15 in the US, non-refundable even if you win) regardless of whether the charge was legitimate.
Does refunding a subscriber count as churn?+
The cancellation counts as churn regardless of whether you refund. What changes is how it shows up in your books: a refund is a clean, immediate revenue reversal you initiate and can categorize correctly from day one. A chargeback filed weeks later on the same cancellation often gets logged as a separate payments incident, which means the same lost customer can quietly show up twice in your reporting — once as a churned account, once as a disputed charge — if your churn tracking doesn't cross-reference the two.
Can you offer a partial refund automatically through Stripe when someone cancels?+
Yes. Stripe's refunds API lets you issue a refund for any amount up to the original charge, and you can calculate the unused-time portion the same way Stripe already calculates proration credits — days remaining in the billing period divided by total days in the period, multiplied by the amount charged. Triggering that calculation automatically inside your cancellation flow, rather than routing every request to a human for manual approval, is what makes a partial-refund policy operationally cheap enough to actually offer.
Stop losing subscribers today
One script tag. One function call. A live cancellation flow in under 10 minutes.
Start free trial →