When a Customer's Bank Reverses the Charge: Disputes and Chargebacks in a SaaS

A dispute freezes the money and starts a countdown, whether or not you did anything wrong. How chargebacks actually work on Stripe, what evidence wins, and the prevention that keeps the rate low.

The email that starts a countdown

Dunning handles the card that expired. A dispute is a different machine: the customer went to their bank and claimed a charge was wrong or fraudulent, the bank froze the money the same day, charged you a fee for the privilege, and gave you a window to say your part. If you don't respond in that window, the case is lost by default, no matter how solid your side was. Nobody emails you friendly reminders about it; the dashboard badge just sits there.

Most SaaS disputes are not fraud in the criminal sense. They are a customer who didn't recognize the descriptor, a team member who forgot they subscribed with the company card, or a plan that auto-renewed once past a cancellation the customer thought they'd completed. Which is good news, because the common cases are largely preventable.

Prevention happens at the charge, not the dispute

  • Descriptor. If the card statement says something your customer can't connect to a product they use, you're manufacturing disputes. Make it recognizable, and keep one descriptor rather than a different one per product unless the products genuinely have separate audiences.
  • The email goes to the payer. Every receipt and renewal notice should land where the card's owner actually looks. For team plans, that means the billing contact, not just the user who clicked "upgrade." A renewal email nobody saw looks exactly like fraud when the statement shows up.
  • Make cancellation boring. Self-serve cancel, one click, no retention maze. The friction you add to cancellations doesn't save revenue; it converts cancellations into disputes.
  • Watch for card testing. A burst of small charges with different card numbers is fraud-farm behavior, and every tested payment becomes a future dispute. Velocity limits on signup and checkout stop most of it before the first reversal arrives (our rate limiting piece covers the mechanics).

And keep the raw material for evidence from day one: invoices, the feature use after the charge, the support conversation. You can't reconstruct usage logs six weeks later.

What actually happens

The day the dispute opens, the disputed amount is reversed out of your balance and a dispute fee hits it as well, whether you win or lose. You get a deadline in the dashboard to submit evidence; lose and the money stays gone, win and the funds return (the fee typically does not). The whole cycle runs for weeks, which is why a dispute rate problem compounds quietly: each case sits open, holding money, while new ones arrive.

Card networks also monitor dispute rates by merchant, and programs that trigger once you're past roughly one percent of transactions bring fines and extra requirements. Sustained rates are the thing to watch, not the single case.

Writing the response

Stripe gives you evidence categories that map loosely to the reason the bank listed. Work the reason you actually have, in order:

  • "Unauthorized" (the most common): show the cardholder using the product after the charge. Logins, API calls, documents created, with timestamps and IP detail. For a company card where an employee subscribed, "the account holder's colleague completed signup, here is the signup session, the invoices, and the usage since" is a real answer, not a shrug.
  • "Subscription canceled but still charged": the cancellation timestamp, the confirmation email, the renewal that happened after it. If the customer canceled mid-cycle or missed your terms, say so plainly and attach the trail.
  • "Product not as described": what was delivered versus what the signup page promised, screenshots of the current page included.

Write it as a timeline, dated, in plain sentences. Evidence attached in the right category beats prose attached in the wrong one. Resist the urge to argue about how unfair this is; the person reading it is deciding on documents, not on feelings.

Know when to fold

For a small disputed charge from a customer who might still be salvageable, refunding and closing the account can beat fighting it. You lose the fee either way, a lost dispute also counts against the rate, and the hours a team spends assembling evidence rarely price out at the disputed amount. Contest the cases that are clearly wrong or that set a bad precedent; refund the rest and move on.

One thing worth wiring up early: dispute alert services, available through Stripe, notify you when a cardholder files before the bank formalizes it, and refunding during the alert window usually makes the dispute never happen. That's the cheapest dispute resolution there is: the one that doesn't open.