Revenue leakage is recurring revenue a company earned and never collected, or lost without a decision: failed payments that were never retried, cards that expired before renewal, discounts that never ended, seats used but never billed, and renewals that lapsed unnoticed. The seven causes, the formula, a worked example, and how each one shows up in Stripe or any billing system.
Short answer
What is revenue leakage in SaaS?
Revenue leakage is recurring revenue a company earned and then lost without anyone deciding to lose it: failed payments never recovered, cards that expired before renewal, discounts that never ended, seats used but not billed, renewals that lapsed unnoticed, plan changes never invoiced, and ad-hoc credits. It differs from churn (a decision) and from bad debt (usually unrecoverable). Leakage rate = (revenue that should have been collected − revenue collected, excluding customer decisions) ÷ contracted recurring revenue. Every cause is detectable in billing data.
Most of what gets called churn in a SaaS company includes a share that was never a decision. A card failed. A discount outlived its term. A contract ended and nobody on either side noticed. None of those customers chose to pay less, and most of the money is recoverable, which is what makes leakage the cheapest revenue a company can find. This post defines it, lists the seven causes with how each shows up in billing data, gives the formula, and sets out how to stop each one.
Revenue loss is any decline in revenue. Churn is loss where the customer decided: they cancelled, downgraded, or negotiated. Leakage is loss where nobody decided. All leakage is loss; most loss is not leakage. The distinction is operational: churn is fixed in the product and in customer success, leakage is fixed in billing operations, and a company that lumps them together sends its CSMs to save customers whose only problem is an expired card.
| Cause | What it looks like | How to detect it | Typical size |
|---|---|---|---|
| Failed payments never recovered | An invoice fails, one automated email goes out, nobody follows up, the subscription lapses weeks later | Open invoices with a failed attempt and no later successful payment; subscriptions ended with reason payment_failed | Largest. Typically 20-40% of all churned MRR was this. |
| Cards expiring before renewal | The card on file expires in the month before the next charge; the charge fails on schedule | Default payment method expiry date earlier than the next billing date | Large and entirely predictable weeks ahead. |
| Discounts that never ended | A 3-month launch discount is still applied 18 months later | Coupons or discounts on active subscriptions with no end date, or an end date in the past | Small per account, silent, and adds up over years. |
| Unbilled seats or usage | A team of 14 is using an account billed for 10 seats | Active users per account above the billed quantity; metered usage above the invoiced amount | Medium; it is also the expansion nobody asked for. |
| Renewals that lapsed unnoticed | An annual contract reaches its end date; nobody on either side acted; access continues or stops without an invoice | Contracts with an end date in the past and no renewal invoice | Rare but large per incident. |
| Plan changes not invoiced | A customer was upgraded in the product; billing was never updated | Plan or tier in the product differs from the price on the subscription | Medium; common after manual upgrades. |
| Ad-hoc credits and refunds | Support issues a credit to close a ticket; no policy, no record of why | Credit notes and refunds without a linked reason or approver | Small individually; a policy problem, not a billing one. |
Revenue leakage (period) = revenue that should have been collected under existing contracts and price lists − revenue actually collected, excluding amounts lost to explicit customer decisions.
Leakage rate = revenue leakage ÷ contracted recurring revenue for the period.
In practice the numerator is built cause by cause rather than from the top down, because “should have been collected” is only knowable per cause: the failed invoices that never settled, the expected renewal invoices that never issued, the discount amounts past their end date, the unbilled seats at list price.
A SaaS company with $400,000 contracted MRR closes a quarter. From billing: 23 invoices failed and were never settled ($19,400); 6 cards expired the month before renewal and the charges failed ($5,200); 41 subscriptions still carry a launch discount that was meant to last 3 months ($3,100 per month of foregone revenue); 9 accounts use more seats than they are billed for ($2,700 at list); 2 annual contracts passed their end date with no renewal invoice ($4,000).
The numbers are invented; the shape is not. In most subscription books the first two causes dominate, which is why the fix that pays back fastest is a recovery sequence and a card-expiry check, not a pricing review.
Every cause above is a query against billing objects. Failed payments: invoices with status open or uncollectible that have a failed attempt and no later successful payment, plus subscriptions ended with cancellation_details.reason = payment_failed. Expiring cards: the default payment method's exp_month and exp_year against the subscription item's current_period_end. Discounts: active subscriptions with a coupon whose end is null or past. Unbilled seats: item quantity against active users from product data. Lapsed renewals: contract end dates with no subsequent invoice. The Stripe measurement notes cover the fields and the traps in each.
Each cause becomes a monitored condition with an owner and a response:
The common thread is that every check reads billing data rather than relying on someone remembering. Leakage is what happens in the gaps between people's attention, and the fix is to stop depending on attention.
Failed and expired-card revenue is recoverable for weeks after the failure; most customers pay when asked properly, because they never intended not to. Lapsed renewals are recoverable if the customer is still using the product. Discounts and unbilled seats are recoverable from the next invoice forward, and rarely retroactively; raise them as a conversation, not a back-bill. The one thing not to do is project a recovery rate before running the sequence on your own book. The share you recover depends on your customers and your timing, and a figure quoted in advance is someone else's.
Revenue leakage in SaaS is recurring revenue the company earned the right to collect and then lost without anyone deciding to lose it: subscription payments that failed and were never retried or fixed, cards that expired before a renewal charge, discounts that were meant to end and never did, seats or usage delivered but never billed, and renewals that lapsed because nobody noticed the date. It differs from churn in that the customer did not choose to leave, and from bad debt in that it is usually recoverable.
Revenue loss is any decline in revenue, including the customer deciding to cancel, downgrade or negotiate a lower price. Revenue leakage is the subset of loss that happened without a decision on either side: a failed payment, an unbilled seat, a discount nobody removed. All leakage is loss; most loss is not leakage. The distinction matters because leakage is fixed in billing operations and loss is fixed in product and customer success.
The main causes of revenue leakage in a subscription business are failed payments never recovered, cards expiring before the next charge, promotional discounts that outlive their term, usage or seats consumed above the billed amount, contracts that auto-renewed at an old price or lapsed unnoticed, invoices issued late or not at all after a plan change, and refunds or credits applied without a policy. In most SaaS books the first two are the largest by far.
Revenue leakage for a period = revenue that should have been collected under existing contracts and price lists − revenue actually collected, excluding amounts lost to explicit customer decisions (cancellations, negotiated discounts). The revenue leakage rate is that figure divided by contracted recurring revenue for the period. In practice it is computed cause by cause: failed invoices that never settled, expected renewals that did not bill, discounts past their end date, and unbilled usage, each valued from billing records.
In Stripe, revenue leakage shows up as invoices with status open or uncollectible that carry a failed payment attempt and were never settled; subscriptions with a default payment method whose card expiry precedes the next billing date; subscriptions with a coupon that has no end date; subscription items whose quantity is below the seats actually in use; and subscriptions that ended with cancellation reason payment_failed. Each is a query against the subscription, invoice and payment-method objects.
Revenue leakage is prevented by turning each cause into a monitored condition with an owner: a recovery sequence that starts the day an invoice fails and stops when it settles, a card-expiry check that emails the customer a month before the charge, an end date on every discount, a monthly reconciliation of seats used against seats billed, and a renewal calendar read from the billing system rather than a spreadsheet. The common thread is that each check reads billing data, not memory.
The four causes Exeechain's leak scan reads from a Stripe account are the first, second, fifth and fourth rows above (failed payments, cards expiring before renewal, renewals at risk, and unbilled expansion), each reported per customer with the dollars attached and nothing projected. The worked example is invented and its proportions are illustrative; the 20-40% figure for the failed-card share of churn is an industry range, not a measurement Exeechain took.
Keep reading
Retention metrics
9 min read · Sep 18, 2026
Retention metrics
9 min read · Sep 18, 2026
Retention metrics
9 min read · Sep 18, 2026
First scores in 15 minutes. Full accuracy in 24 hours. From $299/mo. Failed payments, expiring cards and slipping renewals named per customer, then recovered under your approval.
Not ready to switch? Size your leak from your MRR and churn rate, with no billing access at all.