Guide · 5-check playbook
How to Audit a Stripe Account for Revenue Leaks: The 5-Check Playbook
The five categories of unintended revenue loss hiding in your Stripe account, why each one accumulates over time, and the practical trade-offs between doing it yourself and using a purpose-built tool.
The median SaaS company loses roughly 9% of recurring revenue to failed payments alone, and that is just one of five common categories of Stripe revenue leaks sitting inside every Stripe account.1 For a business doing $500K ARR, that is $45,000 a year, silently, with nobody on the team aware.
A Stripe revenue audit (also called a Stripe billing audit) is a structured review of your billing data that surfaces five categories of Stripe revenue leaks: unrecovered failed payments, involuntary churn from dunning fatigue, customers stranded on deprecated pricing, paused-but-active subscriptions that have stopped billing, and discount coupons that were supposed to expire but never did. You can audit your Stripe account yourself using Stripe Sigma if your team is comfortable with SQL, or you can use a purpose-built audit tool. This playbook walks through what each of the five checks finds, why each category accumulates over time, and the trade-offs between doing it yourself and using tooling.
What a Stripe revenue audit actually checks
A Stripe revenue audit is not the same thing as a churn analysis or a finance reconciliation. It is a targeted scan for Stripe revenue leaks: revenue that you have already earned but are not collecting, broken down into a few recognizable patterns that recur across nearly every SaaS company on Stripe. When you audit your Stripe account this way, you are looking for the patterns that compound, not for any single transaction.
The five checks come out of a simple observation: revenue leaks rarely show up as one big problem. They accumulate. A failed payment here, an expired coupon there, a customer left on last year's pricing, a subscription somebody paused six months ago and forgot about. Each individual leak is small. Across hundreds or thousands of subscribers, they add up to a measurable percentage of ARR. Industry research puts the typical range at 1% to 5% of revenue lost to billing leakage, with failed payments alone accounting for another 7% to 11% of recurring revenue at the median SaaS company.2 1
The point of an audit is not to find one big mistake. It is to surface the long tail of small ones that nobody is actively looking for, then quantify them in dollars so you can decide what to fix first.
The five checks
Every credible Stripe billing audit looks at the same five categories. Each one has a distinct mechanism, a distinct typical dollar value, and a distinct fix. The order below is roughly the order of average dollar impact, biggest first.
1. Recovery gaps: failed payments that never came back
A recovery gap is a payment that failed and was never successfully retried, manually charged, or recovered by Stripe's Smart Retries.3 The customer's card declined, Stripe's retry schedule ran out, no email got a response, and the charge stayed in payment_failed status. The revenue was earned, the invoice was created, but no money moved.
Stripe's built-in retry logic recovers roughly 15% of failed charges on its own.1 Teams that layer optimized dunning workflows on top push that to 35% to 40%, and best-in-class operators reach 70% on average.4 The gap between the worst and best performers on this single metric is the difference between losing 7% of revenue annually and losing 2%.
This category is almost always the single biggest leak in a Stripe revenue audit. It is also the easiest to attribute a real dollar value to: each unrecovered charge has an amount, a customer, a date, and a failure reason you can put a finger on. Audits typically find dozens to hundreds of these in any account over a year old.
2. Involuntary churn: silent cancellations after a failed payment
Involuntary churn is what happens when a recovery gap stays uncollected long enough that Stripe cancels the subscription on your behalf. The customer did not deliberately leave. They did not click cancel, write a request, or churn for a product reason. Their card failed, the dunning sequence ran out, and the subscription quietly auto-cancelled.
Involuntary churn accounts for 20% to 40% of total churn at most subscription businesses.5 For a SaaS company tracking only voluntary cancellations in its dashboards, that is roughly a third of all attrition completely invisible. The customer was happy. They wanted to keep paying. Their card just stopped working.
This check is distinct from recovery gaps because the dollar impact is forward-looking. The lost charge is already captured in the recovery gap finding. The involuntary churn finding adds the annualized value of the subscription that just got auto-cancelled on top, because that future revenue is now gone too. A $299 per month subscription cancelled in March represents $2,990 of revenue you would have collected through year-end, plus everything beyond. Audits typically find a small count of these but each one carries high dollar value.
3. Legacy pricing: customers on deprecated plans
Most SaaS companies on Stripe have changed their pricing at least once. They renamed a plan, raised prices, added a tier, retired a product. The deprecated Price objects do not get deleted from Stripe. They get marked active=false.6 Customers subscribed before the change keep getting billed at the old rate, indefinitely, regardless of whether the underlying plan still fits the business.
A Stripe revenue audit surfaces every active subscription that is still being billed against an active=false Price. These customers fall into two camps: ones who were grandfathered on purpose (a legitimate decision), and ones who got grandfathered by accident because nobody ran a migration when the pricing changed.
The dollar impact per customer is usually small on a monthly basis, often $10 to $50, but it compounds across a customer base. A 300-customer account with even four legacy-pricing holdouts at $20 per month uplift translates to roughly $960 per year. That is real money, and the migration path is often a one-time email. Audits routinely find five to twenty of these per account, with long-tenured accounts holding the highest counts.
4. Zombie subscriptions: active but not billing
A zombie subscription is one that Stripe marks as active but is not actually generating revenue. The most common pattern is pause_collection: an admin paused billing on a subscription, often to handle a customer billing dispute or a refund situation, and never unpaused it.7 The customer still has access to your product, because Stripe still reports the subscription as active and your app reads that status, but no money has moved in months.
These are the most psychologically expensive findings in an audit because they read as obvious in hindsight. Somebody paused this subscription in February. It is October. The customer has been getting eight months of free service. Either they should be paying again or they should not still have access. Either way, somebody on the team needs to make a decision.
Audits typically find one to five zombie subscriptions per account, but each one tends to be a high-value customer (you usually only manually pause the bigger accounts). A single Business-plan zombie on a $899 per month plan that has been paused for ten months is $8,990 of foregone revenue plus an ongoing $10,788 annualized drag. This category is small in count but high in dollar value per finding.
5. Discount leakage: coupons that never expire
Discount leakage is the accumulating cost of promotional coupons that were supposed to be temporary but have no expiration logic configured. Stripe's coupon API has a redeem_by field for setting a hard expiration, plus a duration field that controls whether the coupon applies once, repeating for a fixed number of months, or forever.8 The leak almost always comes from forever coupons attached to active subscriptions, where the original marketing campaign that issued them ended three years ago but the discount is still applied to every renewal.
The classic example is the launch-month coupon. A SaaS company runs a 20% off EARLYBIRD2024 promotion in March 2024, attaches the coupon to early signups, and never sets a redeem_by or a duration=repeating with a month count. Two years later, the same customers are still getting 20% off, and the company has no current marketing reason to discount them.
A Stripe revenue audit surfaces every active subscription with a coupon that has no expiration. The annualized impact per finding is simply twelve months of the discount value. These usually rank lowest in dollar value per finding, but the volume can be high and the fix (set a redeem_by date and notify customers gracefully) is one of the easiest items on the list.
The five-check matrix
The five checks side by side, with what each finds, the typical dollar range per audit, how you would surface it in Stripe Sigma if you wanted to audit your Stripe account yourself, and how a purpose-built audit tool surfaces it.
| Check | What it finds | Typical $ range | In Stripe Sigma | In a tool |
|---|---|---|---|---|
| Recovery gaps | Failed charges with no successful follow-up payment within 14 days | 2% to 7% of ARR | SQL across payment_intents, charges, and customers with a window function |
One-click finding with dollar impact and Dashboard link per leak |
| Involuntary churn | Subscriptions auto-cancelled within days of a failed payment | $500 to $10,000+ per audit | Join subscription_cancellations to recent payment_failed events with time delta |
Auto-correlated and surfaced as a separate check from recovery gaps |
| Legacy pricing | Active subscriptions on active=false Price IDs |
$200 to $5,000 per audit | Join subscriptions to prices filtered on active=false |
One-click finding per affected customer with uplift estimate |
| Zombie subscriptions | Subscriptions in active status with pause_collection set |
$1,000 to $30,000 per audit | Filter subscriptions on the pause_collection JSON field |
One-click finding with pause duration and foregone revenue |
| Discount leakage | Active subscriptions with coupons that have no redeem_by date |
$100 to $3,000 per audit | Join subscriptions, discounts, and coupons |
One-click finding with twelve-month forward impact |
Doing this audit yourself with Stripe Sigma
Stripe Sigma is a SQL editor built directly into the Stripe Dashboard. It exposes every Stripe object (charges, subscriptions, customers, coupons, prices) as a queryable table, lets you write SQL against your live transactional data, and is read-only by design so you cannot accidentally write anything.9 For a technical team that already knows SQL, Stripe Sigma is genuinely useful, and for many teams it is the right answer.
Stripe Sigma pricing starts at around $0.02 per 1,000 query rows on the pay-as-you-go plan, with monthly subscription tiers above that based on charge volume.10 For a 5,000-charge-per-month business that runs a handful of audit queries each month, the cost typically lands well under $100 per month, which is reasonable for the value it provides on the right team.
The honest limitations of running a Stripe revenue audit yourself with Sigma are not about Sigma the product. They are about what a self-serve audit requires from the team: somebody has to write five different SQL queries to surface the Stripe revenue leaks in each category, validate the results against the actual data model, decide how to format the findings for the rest of the team, and remember to re-run the audit on a cadence. The queries are not trivial. Detecting a recovery gap requires correlating failed payment_intents with subsequent successful payments from the same customer within a 14-day window, while excluding refunds. Detecting involuntary churn requires joining subscription cancellation events to failed payment events with a maximum time delta. Each of the five checks is a real piece of analytical work.
The case for doing it yourself: you already have a senior engineer with bandwidth, you want full control over the methodology, and the audit is part of a regular reporting rhythm. The case against: it is a recurring cost in engineering time, every time you audit your Stripe account again you pay it, the results sit in Sigma and not in a shareable artifact, and nobody actually re-runs the audit on a regular cadence after the first time.
When a purpose-built audit tool makes sense
A purpose-built Stripe revenue audit tool gives you the same five categories of Stripe revenue leaks without the SQL, formatted as a shareable PDF report with prioritized findings, dollar impact estimates, and recommended actions for each leak.
The honest case for a tool over a DIY audit is straightforward: most teams do not have the SQL bandwidth to run a thorough audit every quarter, and the cost of a one-time audit is a fraction of the engineering hours required to build and maintain the equivalent in Sigma. The audit becomes a thing you do once, get a number from, and either act on or shelve. It is not an ongoing project.
That is the gap Bleedpoint fills. Each audit returns a structured PDF-style report with all five categories evaluated, dollar impact estimated per finding, and a recommended action surfaced for each leak. If you want to see what the output actually looks like before deciding whether the format is useful, the sample report on the site is a fictional walk-through of a 14-finding audit with a total at risk of about $60K.
Frequently asked questions
Can I do a Stripe revenue audit myself with Stripe Sigma?
Yes. Stripe Sigma is a SQL editor built into the Stripe Dashboard with full access to your billing data, and a competent technical team can write the five queries needed to surface the same categories any audit tool would find. The trade-off is engineering time and ongoing maintenance. A typical first-time audit takes a senior engineer about a day to set up across all five categories, then a few hours to re-run on each cadence.
How long does a Stripe revenue audit take?
For a tool-driven audit, most accounts complete in three to five minutes regardless of subscriber count. Larger accounts above roughly 10,000 active subscriptions can take up to fifteen. For a manual Sigma-driven audit, the first run is usually a half-day to a day of an engineer's time, with re-runs taking an hour or two once the queries are written.
What is the difference between a Stripe revenue audit and revenue recovery?
A Stripe revenue audit is a diagnostic. It surfaces what you are losing, broken down by category, with dollar values. Revenue recovery is the action you take afterward. The most common recovery levers are enabling Stripe Smart Retries, sending customer-facing dunning emails with payment-update links, migrating legacy-pricing customers to current plans, unpausing or formally cancelling zombie subscriptions, and putting expiration dates on long-running coupons.
Will running an audit affect my customers in any way?
No. A read-only audit, whether through Sigma or a tool with read-only OAuth scope, cannot create charges, issue refunds, modify subscriptions, change pricing, or send any customer-facing communication. The audit reads data only and produces a report. Any subsequent action on findings is something you do explicitly in the Stripe Dashboard or via a recovery workflow.
What is a zombie subscription?
A zombie subscription is a subscription that Stripe still reports as active but is not actually generating revenue, almost always because billing was paused with pause_collection and never resumed. The customer typically still has access to your product because your app reads the subscription status as active, but no charges are being created. Audits commonly find one to five of these per account, often on high-value customers.
How often should I audit my Stripe account?
Most SaaS teams benefit from running a full Stripe revenue audit quarterly. The categories that accumulate fastest are recovery gaps and involuntary churn, both daily events, so quarterly cadence catches them before they compound. Legacy pricing, zombie subscriptions, and discount leakage accumulate more slowly and can be checked semi-annually if quarterly feels too frequent.
Stop guessing. Audit your Stripe account.
Free scan. See exactly what you're leaking, then unlock the full report for $99. Read-only access, no subscription required.
References
- PaymentRescue. How Failed Payments Cost SaaS Companies 9% of Revenue. Citing data from Stripe, Recurly, and ProfitWell. paymentrescue.dev
- Lago. Revenue Leakage in SaaS: How Billing Gaps Cost 1-5% of ARR. Citing MGI Research. getlago.com
- Stripe. Smart Retries and revenue recovery. Stripe Documentation. docs.stripe.com
- Recurly Research, summarized in Monetizely. Understanding Involuntary Churn: The Silent Revenue Killer in SaaS. getmonetizely.com
- ProfitWell research, summarized in multiple industry reports. See also Lago's citation of involuntary churn at 20% to 40% of total churn. getlago.com
- Stripe. Manage prices: deactivating a Price. Stripe Documentation. docs.stripe.com
- Stripe. Pause payment collection on a subscription. Stripe Documentation. docs.stripe.com
- Stripe. Discounts and coupons. Stripe Documentation. docs.stripe.com
- Stripe. How Sigma works. Stripe Documentation. docs.stripe.com
- Stripe. Stripe Sigma pricing. stripe.com/sigma/pricing
- Baremetrics. How to Recover Failed Payments and Save Lost Revenue. Industry data on 5% to 15% MRR loss to failed payments. baremetrics.com
- Freemius. Reduce SaaS Failed Payments, Recover Up to 70% Lost Revenue. Industry retention research on involuntary churn. freemius.com