Where it leaks
Seat and device drift
New users and devices are onboarded faster than the contracted quantity is updated, so the monthly invoice sits below the true per-seat or per-device run-rate.
Licence and usage recharges billed short
Vendor licence costs land in the ledger and overages accrue, but the matching recharge is never raised, billed short, or lost to stale FX when a dollar licence is recharged in sterling.
Managed-service charges that quietly stop
A recurring monthly retainer stops appearing for a client who is still being served, often after a migration or billing change, and the gap goes unnoticed.
Failed Direct Debits on retainers
Monthly retainers collected by Direct Debit fail and are never retried or chased, so an invoiced month simply never reaches the bank.
Unbilled project and ad-hoc work
Project hours and out-of-scope call-outs are delivered but never make it onto an invoice, or are billed below the agreed rate.
Duplicate charges and unapplied credit notes
The same project or licence line is invoiced twice, or a credit note raised for an offboarded seat is duplicated or left unapplied, moving money the wrong way.
The scale
Revenue leakage across a business is commonly estimated at around 1% to 3% of turnover, so on an MSP turning over £20m, purely as an illustration, that is roughly £200k to £600k a year. Direct Debit is often part of it: GoCardless has observed that about 2.9% of Direct Debit payments fail, across roughly 55,000 businesses.
How it is found
It is found by reading your own invoices, payments and ledger data read-only, with no change to your billing systems, and it usually surfaces within days.
How to find it
How to spot a frozen retainer rate
A frozen retainer is the commonest MSP under-bill, and it shows up as a flat line in the amount column of your own invoices.
- 1Export sales invoices with customer, date, amount and status from Xero or QuickBooks, plus recurring charges from Stripe, over an eighteen to twenty-four month window so you span at least one contract anniversary.
- 2Group by customer, sort by date so each account reads as a column down the page, then read the amount down each recurring account.
- 3Flag any retainer billed the identical value across a contract anniversary: the export proves the price never moved, it does not prove it should have.
- 4Confirm outside the finance data by comparing today's seat, device or site count and the agreement's uplift clause before you correct anything.
Checking failed collections and ageing work
Both hide in the ledger and both are found by comparing what was owed against what actually landed.
- 1Pull failed direct debits from GoCardless and failed or declined charges from Stripe across the same window.
- 2For each failure, check whether a later payment from the same customer succeeded, and set aside any that self-corrected.
- 3Treat what is left as unrecovered retainer revenue, since the service almost always kept running while the collection did not.
- 4Separately, filter the sales ledger to invoices past due and still unpaid, and total the overdue balance per customer rather than per invoice, so you chase by exposure not by whichever invoice is oldest.
Finding duplicates, unapplied credits and stopped retainers
The last three shapes each leave a distinct trace once each customer's history is lined up.
- 1For duplicates, sort each customer's invoices by amount and date and look for two of the same value landing close together, one automated and one manual, or a rerun batch; confirm the work was delivered only once.
- 2For unapplied credits, list open credit notes and cross-check each against that customer's overdue invoices: a credit left unallocated while the account still owes is cash owed on one line and owing on another.
- 3For stopped retainers, list customers with an established cadence of three or more invoices and check whether the next invoice appeared roughly on schedule.
- 4Flag any whose next invoice is overdue to appear by more than about one and a half cycles but not so long the account is plainly gone, and treat that broken rhythm as a question for the account owner, not proof the customer has left.
Take the full guide with you
If it is useful, you can get your own number for free from a read-only look at your finance data, with nothing to install and no obligation.
Common questions
What causes most revenue leakage in an MSP?
The biggest sources are usually under-billing where seat and device counts have grown past the contracted quantity, licence recharges that are missed or billed short, and recurring retainers that quietly stop or fail on Direct Debit. Because MSPs bill in several overlapping ways at once, small gaps repeat every month until someone reconciles them.
How is this different from running an aged debtors report?
An aged debtors report shows invoices you raised that have not been paid. Revenue leakage is the money that was never invoiced correctly in the first place, or that failed on collection and was never chased, so it often never appears on a debtors report at all.
Can you really detect this from finance data alone?
Yes, for anything the numbers reveal: duplicate charges, invoices below the per-seat or per-device run-rate, recurring charges that stopped, failed Direct Debits, short payments and unapplied credit notes. It will not judge contract-clause wording, only show where an invoice sits below what your own data implies it should be.
We issue a lot of SLA service credits and de-scopes. Can those leak?
Yes, in a specific way. A credit note gets raised for a service credit, a mid-term de-scope or a billing correction, and then never set against an overdue invoice on the same account. You end up owed money on one line while owing a credit on another, and the two never meet. To find it by hand, list your open credit notes and cross-check each against that customer's overdue invoices. Any credit sitting unallocated while the account still carries an overdue balance is worth allocating, though a person still confirms and applies it.
How do I know if we have under-billed a managed contract without re-reading every agreement?
Start from the billing pattern, not the paperwork. Group each recurring customer's invoices by date and read the amount column down the cycles. If a retainer has billed the identical value across a contract anniversary, at least one renewal has passed with no change, which usually means seat growth the service desk never passed to billing, an agreed uplift nobody applied, or both. The invoice history tells you where to look. Confirming it means checking today's seat count and the agreement's uplift clause, which sits outside the finance data, so it stays a job for a person.
Keep reading
- How LeakIQ works for Managed IT and MSPs
See it applied to your systems, not just the theory.
- What revenue leakage is
The plain definition, and why earned revenue slips before the bank.
- Revenue leakage in every other sector
The same field guide for facilities, waste, logistics, security and more.