Tips

How to Fight a Stripe Subscription Chargeback

How to Fight a Stripe Subscription Chargeback — and Actually Win

Subscription chargebacks are a special kind of annoying. The customer used your product for three months, forgot they subscribed, saw a charge they didn't recognize, and called their bank instead of you. Now you're out the revenue, out the product you already delivered, and out a dispute fee — and your dispute ratio just ticked up toward territory that gets accounts flagged.

You won't win all of them. But these "friendly fraud" disputes are winnable far more often than founders assume, if you submit the right evidence in the right structure. Here's the playbook.

First, know what you're fighting

A few definitions worth getting straight, because they change your response:

  • Inquiry vs. dispute. An inquiry is a question; a dispute (chargeback) is a formal reversal. Resolve inquiries fast so they never escalate.

  • Reason codes. Every chargeback carries a code — "unrecognized," "subscription canceled," "product not received," "duplicate." The code dictates what evidence wins. Fighting a "canceled" dispute with usage logs misses the point.

  • The clock. You typically get a short window (often a week to a few weeks) to respond. Stripe shows the exact deadline in the dashboard. Miss it and you forfeit automatically.

  • The economics. There's a dispute fee (around $15) whether you win or lose. Winning returns the disputed amount; losing costs you the amount and the fee and a hit to your ratio.

The evidence that actually moves the needle

Match your evidence to the reason code.

For "I didn't authorize this" / "I don't recognize this charge":

  • The signup record — timestamp, IP address, email, and the exact plan chosen.

  • Explicit acceptance of your terms and recurring-billing consent (a logged checkbox, not a buried link).

  • Login and usage logs showing the account was actively used after the disputed charge. This is the strongest single piece of evidence for a SaaS dispute.

  • Receipts and any renewal-reminder emails you sent.

  • The statement descriptor that appeared on their card.

For "I canceled this subscription":

  • Your cancellation policy and a record showing no cancellation request arrived before the billing date.

  • If they did cancel and were charged anyway, don't fight it — refund and move on. You'll lose, and you'll deserve to.

Write the representment like a bank reviewer will read it

A human (or increasingly, an automated reviewer) at the cardholder's bank skims this. Make their job easy:

  • Lead with a one-paragraph summary: who the customer is, what plan they bought, when and how they agreed to recurring billing, and proof they used the product.

  • Attach evidence, clearly labeled. "Exhibit A — signup record with IP and timestamp." Don't make them hunt.

  • Stay factual and unemotional. No outrage, no story. Dates, logs, and the agreement.

A template you can adapt:

On [date], the cardholder created an account ([email]) from IP [address] and selected the [plan name] plan at [price], billed [monthly/annually]. During signup they accepted our Terms of Service and explicitly consented to recurring billing (see Exhibit A). The account was actively used on [dates] after the disputed charge of [date] (see Exhibit B — usage logs). A receipt was sent on [date] (Exhibit C). The charge appeared as "[statement descriptor]." We have no record of a cancellation or refund request prior to the billing date. We respectfully request the dispute be resolved in our favor.

The math says prevention beats representment

Even a won dispute costs you time and a fee, and a lost one nudges your ratio toward the ~0.9%–1% threshold where card networks start formal monitoring (and where a high-risk flag and account freeze become a real risk). So the highest-leverage work happens before any dispute exists:

  • A clear, branded statement descriptor. Most "unrecognized charge" disputes die right here.

  • Renewal reminders before annual or large charges. A heads-up email costs nothing and prevents the surprise that triggers the call to the bank.

  • Frictionless cancellation. A hard-to-cancel flow doesn't retain customers — it manufactures chargebacks.

  • Dunning and smart retries for failed cards, so involuntary churn (and the disputes that follow) drops.

  • 3DS / SCA where it makes sense, which can shift liability for fraudulent transactions to the issuing bank.

  • Proactive refunds for obvious "forgot to cancel" cases under a small threshold. A refund is cheaper than a dispute fee plus a ratio hit.

  • An in-app refund/cancel path, so unhappy customers come to you instead of their bank.

When to just refund and move on

Pick battles you can win with documentation. Refund — don't fight — when the customer genuinely canceled, when it's clearly your billing error, when the reason code makes the dispute unwinnable, or when fighting a borderline case risks pushing your ratio the wrong way. Discipline about which disputes you contest is what keeps your win rate (and your account) healthy.

Winning chargebacks is about 20% argument and 80% paperwork you set up before the dispute exists. Instrument your signup and cancellation flows now, and most disputes either resolve in your favor — or never happen at all.

Keep reading:

  • A climbing dispute ratio is the fastest path to trouble — see why Stripe flags SaaS accounts as high-risk.

  • For how disputes, risk, descriptors, and billing cost fit together, read The SaaS founder's guide to a healthy Stripe setup.

ChaChing handles the recurring-billing layer on top of Stripe — including the dunning and clean descriptors that quietly keep dispute rates down.