Revenue Leakage: Follow the Missing Payment
A month can look healthy in the sales report and disappointing in the bank account. A customer agreed to a price, an invoice went out for less, and several subscription payments failed before anyone noticed. Those differences deserve attention, but they are not automatically the same problem. The short invoice points back to a commercial or billing decision; the failed payments point to collection; the sales report may be using a different basis again.

Stripe describes revenue leakage as expected income lost through gaps such as uncollected billing and underpricing. The useful question is therefore specific: which amount did the business have a basis to expect, at what stage did it disappear, and can it still be recovered? Answering that question is more valuable than applying one percentage to the difference between a forecast and a bank balance.
Decide which amount is missing before calculating leakage
Start with a defined set of customer transactions and a defined period. For each transaction, distinguish the amount the contract or agreed price calls for, the amount invoiced, the amount paid, and the amount recognized as revenue. Each amount answers a different question. A contract-to-invoice gap may reveal a missing charge. An invoice-to-payment gap shows an outstanding collection. A difference between cash and recognized revenue may simply reflect when service is delivered.
That last distinction matters even when all the other records agree. Under IFRS 15, revenue reflects the transfer of promised goods or services, using the contract, performance obligations, transaction price, allocation, and satisfaction of those obligations. Payment and revenue recognition need not fall in the same month. Treating every pound or dollar absent from recognized revenue as leakage would mislabel timing as loss; treating every paid invoice as revenue already earned can make the opposite mistake.
Consider an illustrative annual service contract priced at $1,200, paid on day one, with one evenly delivered service over twelve months. The assumed first month has $1,200 of cash and $100 of service delivered. On those assumptions, the $1,100 difference is not missing income: the customer paid for service still to be supplied. If the contract instead promised a distinct item delivered immediately as well as a continuing service, the allocation would need to reflect the actual promises. The point of the illustration is to settle the basis before using a gap as a loss figure.
The same discipline applies to a cash shortfall. An unpaid invoice can remain collectible, a subscription payment can be in a recovery process, and a customer can have a legitimate agreed discount. Keep those cases visible. They call for different action, and adding them into a single “lost revenue” number would hide the decisions that matter.
Follow the price from agreement to invoice
The first practical comparison is between what the customer agreed to buy and what the business charged. Stripe identifies billing errors, pricing discrepancies, and failure to apply contract terms as causes of revenue leakage in its revenue leakage guide. These are related but distinct. A delivered service left off an invoice is a capture problem. An invoice using an old price is a price problem. A negotiated condition that never reaches billing is a handoff problem. Each suggests a different fix.
Use the signed terms, approved changes, pricing record, delivery record, and invoice for the same customer and period. Read across one charge at a time. Was the item within the agreed scope? Was it delivered or otherwise billable under the agreement? Which rate or price applied on that date? Did the invoice include the right quantity and price? The answers establish whether there is a claim to more money, not merely a difference between two databases.
Suppose, illustratively, a contract calls for ten units at $100 each and all ten are billable in the period. If the invoice contains nine units, the contract-to-invoice shortfall is $100. If it contains ten units at $90, the shortfall is also $100, but the remedy differs: the first calls for correcting quantity capture, the second for correcting the price used. If the customer had an approved $10-per-unit discount effective before the invoice, neither difference is leakage. The approval and effective date decide the case.
This is why I would begin with the contract and invoice for a specific account, rather than with a companywide “leakage rate.” A broad rate cannot tell whether the amount was ever owed. It also cannot show whether the error is repeatable. One wrong price applied to every renewal may deserve a prompt system correction; one missing line on an isolated invoice may need a customer-specific correction. That is a prioritization judgment, not a claim that either pattern exists in a particular business.
There is a cost to this approach. Someone must maintain a usable record of agreed changes and effective dates, and a billing owner must have a way to resolve ambiguous terms. Without those records, an apparent undercharge cannot be confidently distinguished from a concession that was already authorized. Where the contract is unclear, first establish what the customer actually agreed to; a price list alone does not settle it.
Treat failed payments as a collection problem with a clock
A correctly priced invoice can still fail to produce cash. For subscriptions, Stripe documents retries, customer emails, and payment-method updates as ways to recover failed recurring payments. A failed first attempt therefore deserves action, but it is too early to count the whole amount as permanent loss. The right question changes from “Was the customer charged correctly?” to “What portion of the failed amount has been recovered, and what remains open?”
Stripe defines its recovery rate as the share of failed subscription payment volume successfully recovered after failure. The denominator is failed payment volume, not all contracted revenue or all invoices. For example, if an illustrative cohort has $10,000 of failed subscription payments and $6,000 is subsequently collected, its recovery rate on that cohort is 60%. The remaining $4,000 is unrecovered at the observation date. Calling all $10,000 “lost” ignores the collections; calling the $4,000 final leakage may be premature if recovery is still under way.
Use a failure cohort rather than mixing unrelated calendar totals. Identify payments that first failed in the selected period, then show how much of that same cohort was recovered by a stated follow-up date. That makes the numerator and denominator comparable. Keep “still in recovery” separate from “not recovered after the chosen window.” Stripe notes that recent periods can show a temporary drop in recovery rate while automatic retries are unfinished. A comparison between an old, settled cohort and a new, open one can otherwise make recovery appear to worsen when the newer payments have simply had less time.
Failure reasons and recovery methods can also guide the next move. Stripe’s recovery analytics separates recovered volume by retries, emails, and other methods, and shows failed volume by decline reason. If the issue is a temporary payment failure, a retry may resolve it without a customer conversation. Where the customer needs to update a payment method, an email that makes that action clear has a different role. Do not send every unpaid account down the same path merely because all of them appear in the same receivables total.
I would use automated recovery for recurring payment failures where the customer and payment arrangement permit it, while keeping a route for a person to handle high-value or disputed cases. Automation saves repeated manual follow-up, but it does not decide whether an invoice was correct or whether a contract gives the customer grounds to dispute it. A customer who is disputing scope needs the underlying charge resolved before increasingly forceful collection messages make sense.
Calculate a gap on one basis, then explain its status
A practical calculation begins with one question. For billing leakage, compare the amount properly billable for the selected customers and period with the amount actually billed for those same customers and period. For collection exposure, compare amounts due on those invoices with cash received against them by a specified date. For recognized revenue, use the applicable accounting treatment to compare what should have been recognized with what was recorded. Stripe’s discussion of calculating leakage starts from what should have been billed and what actually was billed or received; the comparison becomes useful only when its two sides describe the same population and measure.
Imagine a deliberately simplified month with $100,000 properly billable under the agreed terms, $96,000 invoiced, and $93,000 collected against those invoices by month end. The $4,000 difference between billable and invoiced is a potential billing gap. The $3,000 difference between invoiced and collected is a collection balance at that date. Reporting “$7,000 of revenue lost” would overstate what the numbers establish: the unpaid $3,000 may arrive later, and some of the $4,000 may still be billable after correction. Nor can $93,000 of cash be substituted for recognized revenue without considering what was delivered.
For each gap, attach a plain status. Was the charge never raised, underpriced, corrected, still open, recovered, or determined not to be owed? This makes the number actionable. The question “How much leakage do we have?” becomes several answerable questions: how much agreed value was not billed, how much billed value remains uncollected, how much of that collection balance is still within a recovery window, and how much has been written off or otherwise determined unrecoverable? Those totals should carry the same dates and population, so that a correction is not counted as a new sale and an open balance is not silently turned into a final loss.
This framing also prevents false precision. A signed contract and a clear invoice difference can support a specific billing shortfall. A disputed interpretation of contract scope cannot. Put uncertain items in an unresolved category with the term or approval that would settle them. An attractive single percentage is less useful than a smaller number whose components are real and whose next steps are known.
Close the point where the money went missing
If agreed work was omitted from an invoice, correct the capture step that should have carried it into billing and decide whether the specific customer can be billed under the agreement. If an old price survived in billing, fix the effective price and its date for future invoices, then separately consider past invoices. If contract terms were misread, settle the interpretation and make the billing instruction explicit. The billing, pricing, and contract gaps Stripe describes do not yield to one universal remedy.
For failed recurring payments, recovery needs its own owner and observation window. Turn on the retries and customer messages appropriate to the payment setup, make payment-method updates easy to complete, and track what those actions actually collect from each failure cohort. Stripe’s recovery documentation describes these mechanisms, while its analytics identifies payments still in recovery and amounts recovered by method. Review a mature cohort before deciding that a change improved or harmed results.
Prioritize a fix by the amount at stake, whether the charge is truly owed, whether the error will recur, and whether collection is still possible. A recurring price mismatch may justify changing the billing rule first, even if the immediate shortfall is modest. A large one-off underbill may justify prompt account-level review first. The trade-off is straightforward: a rushed demand for money can create a customer dispute if the contract basis is weak; an uncorrected billing rule keeps generating the same gap. Resolve the contractual basis and stop the repeat error in parallel where both are present.
Revenue leakage is best treated as a specific break in the path from agreement to billing to collection. Name the missing amount on the right basis, mark what has already been recovered, and leave accounting timing out of the loss figure. Then the remedy becomes concrete: fix the charge, recover a valid unpaid amount, or correct the process that allowed the gap to recur.