Refund Policy for Indie SaaS: What Works, What Backfires

A SaaS refund policy is a support tool, not a legal shield. The economics of refunds vs. disputes, the EU rules that override your terms, and what to write.

· Justin Boggs

A hand holding a paper receipt with a barcode printed on it

Photo by Am on Unsplash

The best refund policy for an indie SaaS is the most generous one you can afford, stated in one sentence, and honored without an argument. That sounds like feel-good advice. It isn't — it's the conclusion you reach from the payment economics. A refund costs you the sale. A dispute costs you the sale, plus a fee you never get back, plus your money held for two to three months, plus a rising dispute rate with the card network. Every hour you spend defending a refund policy is an hour spent converting a cheap problem into an expensive one. Here's the actual math, the rules that override your terms regardless of what you write, and the policy I landed on.

TL;DR

  • Refusing a refund doesn't make the customer go away. It converts them into a chargeback, which is strictly worse for you on every dimension.
  • Per Stripe's docs, the dispute received fee is never returned — win or lose. Cardholders typically get 120 days to file, and the full lifecycle runs 2-3 months.
  • If you sell to EU consumers, they get a 14-day right of withdrawal. There's a digital-content exception, but it only works if you collect express agreement at checkout.
  • "No refunds" is unenforceable against a chargeback and reads as a threat to honest buyers. It filters out good customers and does nothing to stop bad ones.
  • What works: a short, generous, unconditional policy — and tracking why people refund, because that's free product research.

The economics: a refund is the cheapest possible outcome

Start here, because everything else follows from it. When a customer wants their money back, you don't get to choose between "refund" and "keep the money." You choose between "refund" and "they ask their bank instead." Those are the options. The second one is called a dispute, or chargeback, and it is worse for you in every respect.

Stripe's dispute documentation lays out what happens. The card network pulls the disputed funds from your balance immediately. Stripe debits you the disputed amount plus a dispute fee. Your money is held for the entire duration of the dispute. Your dispute rate with that network goes up. And — this is the part founders miss — you can't issue a refund outside the dispute process while the dispute is open. The cheap exit disappears the moment they call their bank.

Then there's the fee, and the asymmetry buried in it. If you counter a dispute, a dispute countered fee applies on top of the dispute received fee. Stripe returns the countered fee if you win. But per their docs: "Unless otherwise stated in your Stripe contract, we never return the dispute received fee." So on a won dispute you're still down the received fee. On a lost dispute you're down the received fee, the countered fee, and the sale. There's no outcome where the dispute is free. There is an outcome where the refund is merely the price of the sale.

The timeline is its own argument.

Timeline chart showing the dispute lifecycle: cardholders can file up to 120 days after payment, the merchant has 7 to 21 days to respond, and the issuer takes 60 to 75 days to evaluate, with funds held throughout

Every figure there is from Stripe's documentation. Cardholders can typically initiate disputes within 120 days of the original payment. Once a chargeback exists you have 7-21 days to respond, depending on network. The issuer then takes 60-75 days to evaluate your evidence. The full lifecycle, start to decision, runs 2-3 months, and Stripe is explicit that you can't reliably speed it up. Compare that to a refund, which takes about fifteen seconds in the dashboard.

One more number, because it settles the "but maybe they won't actually dispute" hope. Stripe notes that when you receive an early fraud warning and do nothing, 80% of those warnings convert into a fraud dispute. The signal is real. Ignoring it is not a strategy.

So the honest framing: your refund policy isn't primarily a legal document. It's a mechanism for keeping disagreements inside your business, where they cost one sale, instead of pushing them out to the card networks, where they cost more than one sale and follow you around.

What "no refunds" actually buys you

Plenty of indie products ship with "all sales final." I understand the instinct — you're one person, you've been burned, and it feels like a wall. It's a screen door.

A "no refunds" clause does not stop a chargeback. The cardholder's bank decides disputes, not your terms page. Your policy is evidence in that process, not a veto. Stripe's guidance on dispute evidence is that for refund-related disputes you should show proof the customer agreed to and understood your terms at checkout — a clean screenshot of how the policy was presented, with the relevant clause emphasized. Note what that implies: a strict policy only helps if you can prove it was shown and accepted at the moment of purchase. A "no refunds" line buried in a terms page nobody opened is worth close to nothing when an issuer reviews the case.

And it's worse than neutral, because of who it actually filters. The person who was going to charge back was never going to read your terms. The person who reads your refund policy before buying is, by definition, a careful, conscientious buyer — exactly the customer you want. "No refunds" doesn't deter fraud. It deters them. You've built a filter that catches only good customers.

There's a second cost that took me a while to see. A strict policy commits you to enforcing it, and enforcement is a job. Now every refund request is a negotiation. You're reading emails deciding whether someone's reason is good enough, which is both miserable and a bad use of the only employee you have. Generous policies aren't just kinder; they're cheaper to operate, because there's no adjudication step. The decision was made once, in advance, and you never spend a Tuesday relitigating it.

The one place strictness earns its keep is genuine abuse — the serial refunder, the person who downloads everything and refunds everything. That's real, and it's rarer than the anxiety suggests. Handle it as an exception with a blocklist, not as a policy that taxes everyone. You don't design the front door around burglars.

The rules that override whatever you wrote

Your policy is not the top of the hierarchy. If you sell to consumers in the EU, statutory rights sit above your terms, and no amount of checkout copy overrides them.

The baseline: under EU consumer law, for something bought online, a consumer has the right to withdraw within 14 days without providing any justification — the "cooling-off period." For services, that clock runs 14 days from the day the contract was agreed. This is a right they have. It is not a courtesy you extend.

There's an exception for digital products, and this is the one indie founders need to get right. The 14-day cooling-off period does not apply to "online digital content, such as a song or movie, that you started downloading or streaming after you expressly agreed to lose your right of withdrawal by starting the performance."

Read that clause carefully, because the protection is conditional and the condition is on you:

  • The customer must expressly agree to lose the right of withdrawal.
  • Performance must have begun — they started the download.

If you didn't collect that express agreement at checkout, you don't get the exception. You just have a 14-day withdrawal right you didn't plan for. This is a checkout-flow problem, not a terms-page problem — the agreement has to be something the buyer actively made, at the moment of purchase, and something you can later show you collected.

I'll be straight about the limits of what I'm citing. The page above is the EU's plain-language citizen-information page, not the legal text. It doesn't state a trader-side reimbursement deadline, and it doesn't cover what happens if you fail to inform buyers of the withdrawal right — both of which are real provisions in the Consumer Rights Directive (2011/83/EU) that I'm not going to characterize from memory. If you're selling into the EU at any volume, that's a conversation with an actual lawyer, and I'm a founder, not one. What I can tell you is the shape of the risk: your terms don't beat statute, and the digital-goods carve-out isn't automatic.

Here's the part that makes this easy, though. If your refund window is generous enough, this whole area stops being a risk. A 30-day no-questions-asked policy is strictly more generous than a 14-day statutory withdrawal right. You can't be caught out by a rule you already exceed. Generosity isn't just good support — it's the cheapest compliance strategy available to a solo founder who cannot afford to get this subtly wrong.

Choosing a window: 7, 14, 30, or unconditional

The options, honestly compared. There's no universally correct answer, but there are wrong pairings of policy and product.

| Policy | What it signals | Real cost | Best fit | | --- | --- | --- | --- | | No refunds | "I've been burned" | Doesn't stop chargebacks; repels careful buyers | Almost nothing | | 7 days | Cautious, conditional | Below the EU's 14-day right for consumers | Products consumed instantly | | 14 days | Matches the EU floor | Meets the statutory minimum, exceeds nothing | Low-price, high-volume | | 30 days, no questions | Confidence | Slightly more refunds; far fewer disputes | Most indie SaaS | | Unconditional / anytime | Total confidence | Real abuse exposure at scale | Strong brand, high margin |

My read for a typical indie SaaS: 30 days, no questions asked. It comfortably clears the EU floor, it's long enough that the customer actually evaluates the product instead of panic-deciding, and "no questions asked" removes the adjudication work that makes refunds expensive to run.

The counterintuitive bit is that a longer window often produces fewer refunds, not more. A 7-day window creates a deadline, and deadlines create urgency to decide — including the decision to bail. Thirty days lets someone put the product down, come back, and find the value. Half the refund requests I've seen were really "I haven't had time to try this yet," which a short window converts into a refund and a long window converts into a customer.

Where a generous window genuinely hurts: high-touch products with real per-customer cost, or anything where 30 days is enough to extract the whole value and leave. If your product is a one-time export, a 30-day window is a free trial with extra steps. Match the window to when value is delivered, not to when you feel safe. And be honest about which one you're actually building.

For Coding Capybaras Pro I sell a $97 one-time boilerplate — the value is fully deliverable on day one, which is precisely the case where a strict policy is most tempting and least defensible. Someone can download everything in ten minutes. A "no refunds" line wouldn't stop that person; it would only annoy the ninety-nine who'd never do it. So the policy is generous, the abuse case gets handled as an exception, and I sleep fine.

What to actually write, and what to do after

The policy itself should be short enough to read in one breath. Mine is functionally:

Not happy? Email me within 30 days and I'll refund you. You don't need a reason.

That's the whole thing. No conditions, no eligibility criteria, no form. Three properties make it work: it's short (people read it), it's unconditional (no adjudication), and it's findable — linked from pricing and checkout, not buried in terms. Findability isn't just courtesy; per Stripe's dispute-evidence guidance, being able to show how your policy was presented at checkout is what makes it useful evidence if a dispute ever lands.

Then the operational half, which matters more than the wording:

Refund immediately, before you're sure. The instinct is to ask a couple of questions first. Don't. The clock on a dispute is already running, and a slow refund is how a refund becomes a chargeback. Refund first; ask after, if at all. You'll lose a little money to people who'd have been talked around, and you'll save more in fees and hours than you lose.

Ask one optional question, after the money's back. "Refunded — anything I could have done better?" Optional, after the fact, no pressure. The answer rate is decent because you've already done the thing you promised, and the answers are the highest-signal product feedback you will ever get. People who churn quietly tell you nothing. People who refund tell you exactly where the product broke its promise.

Track the reasons. Categorize every refund: wrong expectations, missing feature, technical problem, or simply never got started. That distribution is a roadmap. "Wrong expectations" clustering means your pricing page is overselling — that's a copy bug, not a product bug, and it's cheap to fix. A cluster of "never got started" is an onboarding problem. A cluster of "missing feature" is a positioning decision.

Watch for the pattern that means something's actually wrong. A steady low trickle of refunds is healthy. A spike is a signal — usually a broken checkout, a misleading claim you just published, or a regression. Refund rate is a quality metric, not just a cost line. I keep it on the same dashboard as the numbers in subscription billing math, because it's the fastest early warning I have.

Frequently asked questions

Does a "no refunds" policy protect me from chargebacks?

No. The cardholder's bank decides disputes, and your terms are evidence in that process rather than a rule the bank follows. Stripe's dispute-evidence guidance suggests a policy only carries weight if you can demonstrate the customer saw and accepted it at checkout — and even then, the issuer decides.

How long should my refund window be?

For most indie SaaS, 30 days no-questions-asked. It clears the EU's 14-day withdrawal right, gives people time to actually evaluate the product, and eliminates the adjudication work. Shorten it only if your product delivers its full value faster than that.

Do I have to offer refunds to EU customers?

EU consumers buying online generally have a 14-day right of withdrawal without needing a reason. There's an exception for digital content the buyer started downloading after expressly agreeing to lose that right — but you only get it if you actually collected that agreement at checkout. If your window is 30 days anyway, the question is mostly moot.

Should I refund someone who's clearly abusing the policy?

Refund them, then block them. Fighting a serial refunder costs you the dispute fee and hours you don't have, and you'll probably lose anyway. Handle abuse as an exception at the account level rather than by writing a policy that taxes every honest buyer.

Won't a generous refund policy get exploited?

Some, at the margins, and less than you fear. The people who'd exploit it aren't reading your policy in the first place. Meanwhile a strict policy visibly costs you careful buyers at checkout — a certain loss traded against a hypothetical one.

Does a refund hurt me the same way a chargeback does?

No, and this is the core of it. A refund costs you the sale. A chargeback costs you the sale, a dispute fee that's never returned, your money held for 2-3 months, and a higher dispute rate with the network. The refund is the cheap version of the same outcome.

Write it once, then stop thinking about it

A refund policy for indie SaaS should take you ten minutes to write and then disappear from your attention. Make it generous enough that it clears the EU's 14-day floor without you having to think about jurisdictions. Make it unconditional so you never spend a morning deciding whether someone's reason qualifies. Make it findable, and make sure it's presented at checkout. Then honor it fast, because speed is what keeps a cheap refund from turning into an expensive dispute.

The reframe that made this easy for me: the policy isn't there to protect me from customers. It's there to keep disagreements inside my business, where they cost one sale, rather than in front of a card issuer, where they cost considerably more. Every hour spent litigating a $97 refund is an hour not spent on the thing that would have prevented it.

If you're building an indie SaaS and want the billing side already wired up — Stripe, webhooks, the customer portal — Coding Capybaras is the free boilerplate I built for non-technical founders, so you can spend your time on the policy instead of the plumbing.