Audits · Checklist
Revenue Leakage Audit
Find the specific places your SaaS business is losing real money — failed payments, refunds, coupons, and billing drift.
About this audit
Revenue leakage is money your business has already earned but never actually collects — through failed payments that never recover, refunds that go untracked, coupons that quietly discount more than intended, or invoices that simply never get paid. Unlike churn, leakage often goes unnoticed because the customer relationship looks intact on the surface.
This audit walks through the specific places leakage typically hides: payment retry logic, billing drift, coupon spend, duplicate records, and tax handling. Each one represents real money that a small process fix can usually recover.
Failed Payments & Retry
Why it matters: A naive retry schedule (e.g. always retry in exactly 3 days) recovers meaningfully fewer payments than one that adapts retry timing based on decline reason and card network behavior.
Impact: Lower recovery rate on failed payments than the business could achieve with the same customer base.
How to fix: Enable Stripe's Smart Retries, which use machine learning to pick optimal retry timing per decline type.
Manual
Why it matters: Many declines are temporary — insufficient funds on payday-adjacent dates, a bank flagging a routine charge. Cancelling immediately turns a recoverable, temporary issue into a permanent lost customer.
Impact: Customers who would have recovered on retry 2 or 3 are lost entirely.
How to fix: Configure cancellation to trigger only after the full retry schedule is exhausted, not on the first failure.
Automated by Dnoise
Why it matters: A proactive heads-up before the charge gives the customer a chance to update their card before any disruption, rather than reacting to a failure after the fact.
Impact: More failed payments than necessary, each one requiring a full recovery cycle instead of being prevented.
How to fix: Send an expiring-card notification a few days before the renewal date, not just after a decline.
Manual
Billing Drift & Uncollected Invoices
Why it matters: The longer an invoice sits unpaid, the less likely it is to ever be collected. Custom or manually-invoiced accounts especially need a human follow-up trigger.
Impact: Uncollected revenue accumulates silently with no one accountable for chasing it down.
How to fix: Set an automatic escalation (internal alert or sales follow-up) for any invoice past_due beyond a defined threshold.
Manual
Why it matters: A manual refund is still a real cash outflow. If it's not reflected in reporting, revenue is overstated by exactly the refunded amount.
Impact: Net revenue numbers look better than the cash the business actually has.
How to fix: Route all refunds, manual or automated, through the same revenue-reducing pipeline.
Automated by Dnoise
Why it matters: Without this number, you can't tell whether trial-to-paid friction is a real problem or a non-issue, and you can't measure the impact of any change you make to the trial flow.
Impact: No visibility into a potentially large source of lost revenue at the top of the funnel.
How to fix: Track trial start and paid-conversion events for every trial cohort, even ones without a card on file.
Manual
Coupons & Discounts
Why it matters: Without a consolidated view, it's easy for coupon-driven discounting to grow well beyond what was originally intended, unnoticed.
Impact: Discount spend can silently erode margin with no one tracking the cumulative effect.
How to fix: Build a simple report that sums total discount value currently active across all subscriptions.
Automated by Dnoise
Why it matters: Old codes can circulate outside their intended audience (forums, deal sites) and get redeemed well after they should have expired.
Impact: Unplanned discounting from codes that should no longer be valid.
How to fix: Periodically review and deactivate coupon codes past their intended lifespan.
Manual
Zombie & Duplicate Records
Why it matters: This isn't leakage in the traditional sense, but it's a support and refund-request risk — someone will eventually notice the charge and dispute it, often demanding a longer refund window than they'd otherwise get.
Impact: Elevated chargeback and refund risk, plus poor customer experience when they do notice.
How to fix: Cross-reference billing activity against product usage to flag subscriptions with zero usage over an extended period.
Manual
Why it matters: This is almost always a bug (a webhook processed twice, a billing job run twice) and results in the customer being charged twice or the revenue being double-counted internally.
Impact: Double-billing risk to customers and inflated revenue reporting if not caught.
How to fix: Add a uniqueness constraint on invoices per subscription per billing period, and alert on any violation.
Automated by Dnoise
Tax Handling
Why it matters: Incorrect tax collection creates compliance risk and, if under-collected, means the business ends up absorbing the tax liability itself.
Impact: Potential compliance exposure and margin erosion from unrecovered tax.
How to fix: Use a tax calculation service that determines the correct rate based on customer location for every transaction.
Manual
Why it matters: A silent gap in tax collection compounds over time and is much harder to fix retroactively across hundreds of historical invoices than to catch as it happens.
Impact: Growing compliance exposure that's expensive to unwind later.
How to fix: Add a check that flags any taxable-jurisdiction invoice with zero tax applied for manual review.
Manual
Frequently Asked Questions
How much revenue does the average SaaS business lose to leakage?
It varies widely, but involuntary churn from failed payments alone typically accounts for 20-40% of total customer loss, and much of that is recoverable with proper retry logic and dunning. This audit doesn't estimate a dollar figure for your business — it flags the specific mechanisms that cause leakage so you can fix them directly.
Is revenue leakage the same as churn?
No. Churn is a customer who leaves. Leakage is money lost while the customer relationship is technically still active — an uncollected invoice, an unaccounted refund, a stale coupon. Some leakage eventually turns into churn, but not all of it does.
Want this checked automatically, every month?
Connect Stripe in read-only mode and Dnoise flags these issues automatically — no manual audit required.
Connect Stripe — free →