Operational

    Refunds

    Total refund amounts issued in the period — revenue returned to customers, subtracted directly from your cash flow.

    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

    Refunds
    Refunds = Sum of all refund amounts issued in the period
    VariableWhat it captures
    Total RefundsSum 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:

    Refund Rate
    Refund Rate = Total Refunds ÷ (Paid Invoices + Total Refunds) × 100
    Refund date, not charge date
    Refunds are attributed to the period when the refund is issued, not when the original payment was collected. A charge from January that’s refunded in March appears in March’s refund total. This matches cash-basis accounting — the cash leaves your account in March.

    Monitor your refund rate

    Connect Stripe and see refund trends, amounts, and rates — with alerts when refunds spike above your baseline.

    Track My Refunds

    Worked example

    March 2026: Your company has $52,300 in paid invoices and issues 4 refunds:

    RefundReasonAmount
    #1Duplicate charge$99
    #2Customer downgraded mid-cycle$150
    #3Product didn’t meet expectations$299
    #4Prorated annual cancellation$302
    Total Refunds$850
    Refund Rate = $850 ÷ ($52,300 + $850) × 100 = 1.6%

    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:

    VariableWhat it captures
    SourceStripe /v1/refunds — all refund objects created in the period
    Amount fieldrefund.amount — the refunded amount in cents (divided by 100)
    Date fieldrefund.created — when the refund was issued, not when the original charge was created
    AggregationSum 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.

    RefundsFailed Charges
    What happenedPayment succeeded, then money was returnedPayment was attempted but never succeeded
    Cash impactCash leaves your account (negative settlement)Cash was never collected (no settlement to reverse)
    Fee impactOriginal processing fee is not returned — you pay twiceNo fee charged — Stripe doesn't charge for failed attempts
    Root causeProduct misfit, billing errors, cancellation policies, disputesExpired cards, insufficient funds, bank declines
    PreventionBetter onboarding, clearer pricing, prorated downgrades instead of full refundsCard 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

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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 TierRangeTop 25%MedianBottom 25%
    Seed< $10K0.5%1.0%2.0%
    Early$10K – $50K0.3%0.8%1.5%
    Growth$50K – $100K0.3%0.7%1.2%
    Scale$100K – $500K0.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 SaaS

    Frequently 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