What are Refunds?
Refunds is the total amount of money returned to customers in a period. Unlike failed charges (money never collected), refunds represent money that was successfully collected and then given back.
Every refund directly reduces Net Cash Flow. The payment was already settled, so the refund reverses that cash movement. Stripe also typically does not return the original processing fee, meaning the net cost of a refund is the refund amount plus the fee you already paid to collect it.
Refunds are a signal. A rising refund rate can indicate pricing misalignment, product gaps, onboarding friction, or support-driven appeasement refunds masking deeper issues. Tracking the amount and rate together reveals whether refunds are growing in line with revenue or accelerating ahead of it.
The Refunds formula
| Variable | What it captures |
|---|---|
| Total Refunds | Sum of all refund amounts (from Stripe's /v1/refunds), using the refund creation date — not the original charge date |
Refund Rate
The rate version normalizes refunds as a percentage of total billings:
Monitor your refund rate
Connect Stripe and see refund trends, amounts, and rates — with alerts when refunds spike above your baseline.
Track My RefundsWorked example
March 2026: Your company has $52,300 in paid invoices and issues 4 refunds:
| Refund | Reason | Amount |
|---|---|---|
| #1 | Duplicate charge | $99 |
| #2 | Customer downgraded mid-cycle | $150 |
| #3 | Product didn’t meet expectations | $299 |
| #4 | Prorated annual cancellation | $302 |
| Total Refunds | $850 | |
A 1.6% refund rate is within the healthy range for most SaaS companies. The $850 is subtracted from Net Cash Flow, and the processing fees originally paid on those charges (~$25 at 2.9%) are not returned by Stripe — making the true cost of these refunds closer to $875.
How it’s computed
North Metric pulls refund data directly from Stripe’s /v1/refunds API during the daily snapshot:
| Variable | What it captures |
|---|---|
| Source | Stripe /v1/refunds — all refund objects created in the period |
| Amount field | refund.amount — the refunded amount in cents (divided by 100) |
| Date field | refund.created — when the refund was issued, not when the original charge was created |
| Aggregation | Sum of all refund amounts in the period |
Full vs partial refunds
Stripe supports both full and partial refunds. A $200 charge refunded $50 creates a $50 refund object — the Refunds metric captures the actual amount refunded, not the original charge amount. Multiple partial refunds on the same charge each create separate refund objects and are summed individually.
The hidden cost of refunds
Stripe does not return the original processing fee when you issue a refund. A $100 charge incurs ~$3.20 in fees (2.9% + $0.30). If you refund the full $100, you’ve lost $103.20 — the refund amount plus the non-recoverable fee. At scale, this makes refunds more expensive than they appear in the raw metric.
Refunds in Net Cash Flow
The total_refunds variable feeds directly into the Net Cash Flow equation: total_cash_received - total_refunds - total_fees. A refund spike in one month can depress Net Cash Flow even if MRR is growing steadily.
Refunds vs Failed Charges
Both reduce your effective revenue, but at different stages of the payment lifecycle.
| Refunds | Failed Charges | |
|---|---|---|
| What happened | Payment succeeded, then money was returned | Payment was attempted but never succeeded |
| Cash impact | Cash leaves your account (negative settlement) | Cash was never collected (no settlement to reverse) |
| Fee impact | Original processing fee is not returned — you pay twice | No fee charged — Stripe doesn't charge for failed attempts |
| Root cause | Product misfit, billing errors, cancellation policies, disputes | Expired cards, insufficient funds, bank declines |
| Prevention | Better onboarding, clearer pricing, prorated downgrades instead of full refunds | Card updater services, smart retry timing, dunning emails |
Refunds cost more than they look. You lose both the refund amount and the original processing fee. A $100 refund actually costs ~$103.
Failed charges cost nothing until they churn.No money changed hands, so there’s no fee loss. The cost comes later if the failure converts to involuntary churn.
Common Refunds mistakes
- Attributing refunds to the wrong month. A charge from January refunded in March should appear in March’s refund total, not January’s. This matches when the cash actually leaves your account. Backdating refunds to the charge month distorts both months.
- Ignoring the processing fee loss. Stripe keeps the original processing fee on refunds. At 2.9% + $0.30, a $500 refund actually costs $514.80. At scale, this hidden cost can be material — a company issuing $10K/month in refunds loses an additional $300+ in non-recoverable fees.
- Not segmenting by reason. Duplicate-charge refunds are billing bugs (fix the system). Product-dissatisfaction refunds are churn signals (fix the product). Prorated cancellation refunds are policy-driven (evaluate the policy). A single refund total hides these distinctions.
- Confusing refunds with chargebacks. A refund is voluntary — you initiate it. A chargeback (dispute) is involuntary — the customer’s bank reverses the charge. Chargebacks carry additional fees ($15–$25 per dispute) and, at high rates, can result in Stripe placing your account under review.
- Using refunds to mask churn. Proactively refunding a dissatisfied customer prevents a chargeback and preserves the relationship, but if the customer then cancels, the refund just accelerated the cash impact of churn. Track whether refunded customers stay or leave.
Refund Rate benchmarks
Refund Rate benchmarks are segmented by MRR tier. Lower is better — a rate below 0.5% is strong, and above 2% warrants investigation. Larger companies tend to have lower refund rates due to more mature billing systems and clearer pricing.
| MRR Tier | Range | Top 25% | Median | Bottom 25% |
|---|---|---|---|---|
| Seed | < $10K | 0.5% | 1.0% | 2.0% |
| Early | $10K – $50K | 0.3% | 0.8% | 1.5% |
| Growth | $50K – $100K | 0.3% | 0.7% | 1.2% |
| Scale | $100K – $500K | 0.2% | 0.5% | 1.0% |
| Enterprise | $500K+ | 0.2% | 0.5% | 1.0% |
| Refund Rate benchmarks from 1,400+ Stripe-verified SaaS companies. | ||||
How does your refund rate compare?
Benchmark your Refund Rate against 1,400+ SaaS companies at your MRR stage.
Benchmark My SaaSFrequently asked questions
What is a good Refund Rate for SaaS?
Below 0.5% is strong. The median refund rate across SaaS companies ranges from roughly 0.5% to 1.0% depending on stage. Above 2% suggests a systemic issue — pricing misalignment, product gaps, or an overly generous refund policy that’s being exploited.
Does Stripe return processing fees on refunds?
No. Stripe keeps the original processing fee when you issue a refund. A $100 charge with a $3.20 fee costs you $103.20 if fully refunded — you return $100 to the customer but don’t get the $3.20 fee back. This makes refund prevention more valuable than the refund amount alone suggests.
How do refunds affect MRR?
Refunds don’t directly affect MRR. MRR measures the subscription amount, not cash collected. A refund reduces Net Cash Flowbut leaves MRR unchanged unless the customer also cancels or downgrades their subscription. If refunds consistently precede cancellations, they’re an early churn signal.
Should I use the refund date or the charge date?
The refund date. North Metric uses the refund creation timestamp (refund.created), not the original charge date. This matches cash-basis accounting — the cash leaves your account on the refund date. Backdating to the charge date distorts both the original period (inflated refunds) and the current period (understated refunds).
What is the difference between a refund and a chargeback?
A refund is voluntary — your team initiates it through Stripe. A chargeback (dispute) is involuntary — the customer’s bank reverses the charge on their behalf. Chargebacks carry additional fees ($15–$25 per dispute), can take months to resolve, and at high rates (>1% of transactions) can trigger Stripe account review. Proactive refunds to dissatisfied customers prevent chargebacks and their compounding costs.
Ready for metric clarity?
Connect Stripe and let AI build your metrics system. No manual setup, no guesswork.
Get Started