How to find revenue you earned but never billed
Revenue leakage rarely shows up in the P&L as a problem. It shows up as nothing at all: an escalator nobody applied, a minimum nobody charged. The only way to see it is to compare what you were owed with what you billed.
Where the leakage comes from
Leakage is almost never fraud. It's a contract term that lives in a PDF and never made it into the billing system, or a manual step that someone forgot during a busy month. The common types:
| Leak | How it happens | What the check compares |
|---|---|---|
| Escalator not applied | Annual CPI or fixed uplift in the contract; billing still on year-one price | Contract escalator date and rate vs invoiced unit price |
| Expired-rate billing | Promotional or pilot rate ended; billing never switched | Rate end date vs invoice date |
| Missed minimums | Customer used less than the committed minimum; shortfall never invoiced | Contracted minimum vs actual usage per period |
| Missed accessorial or extra charges | Rush fees, extra handling, overages, out-of-scope hours delivered but not billed | Delivery or job records vs invoice lines |
| Unbilled delivery | Shipment or service completed, invoice never raised | Fulfilment or timesheet records vs invoices |
| Unexplained credit notes | Credits issued to settle a complaint, with no approval or reason code | Credit notes vs approval log and dispute threads |
Step 1: build a contract terms register
You can't check billing against contracts if the terms only exist as PDFs. Have AI read each signed contract, order form and amendment, and extract the terms that drive billing into one table per customer:
- Products or services, unit prices and the date each price applies from and to
- Escalator clauses: index or fixed percentage, anniversary date, any cap
- Minimum commitments and how shortfalls are billed
- Accessorial or extra-charge schedules
- Payment terms and any agreed discounts
Every extracted term should carry the document name, page and clause it came from. Someone on the commercial or contracts team then confirms the register once. After that, it only changes when a new contract or amendment is signed.
Step 2: line up delivered against billed
Next, match what operations recorded (usage logs, shipment records, timesheets, job tickets) to invoice lines. The tool should group by customer and period and return only the differences: delivered and not billed, billed at a different quantity, or billed under the wrong product code. This is where unbilled delivery and missed extras show up.
Step 3: check the price on every line
For each invoice line, look up the price that should have applied on that date from the register. Flag lines where the invoiced price is lower, with the expected price, the clause, and the dollar difference. Escalators are the most common finding, because they often fall on contract anniversaries scattered through the year rather than at a single renewal date.
Step 4: review credit notes
Pull every credit note for the period and match each to a reason: a dispute thread, a returns record, an approved concession. Credits with no reason, or with a reason that doesn't match the amount, go on the list. This catches revenue given away informally as well as simple errors.
What to do with a finding
The tool flags; a person decides. Whether to back-bill, bill going forward only, or let a gap go is a commercial decision. The tool drafts the corrected invoice and a note to the account owner; the account owner and finance agree what happens next.
- Every finding opens its source. Contract clause, delivery record and invoice line, side by side, so the account owner can see the case in one view.
- A reviewer pass checks the math. A separate check recomputes each expected amount before it reaches anyone. An over-stated finding damages trust in the whole process.
- Fix the cause, not just the invoice. Each finding should end with the billing system change that stops it recurring: a scheduled price change, a minimum rule, a product code.
Common mistakes
- Running it once. A one-time audit finds the backlog; the monthly run stops new leakage. Most of the long-term value is in the second.
- Skipping the register review. If nobody confirms the extracted terms, the first wrong finding will end the project.
- Sending back-bills without the account owner. A surprise invoice for three years of missed escalators can cost more than it recovers. Agree the approach first.
- Counting findings as recovered. Report what was identified, what was billed and what was collected as three separate numbers.
FAQ
How much revenue do companies typically leave unbilled?
Estimates vary widely by industry and billing complexity. First reviews often find leakage of 1 to 3% of billed revenue, concentrated in missed price escalators, minimum commitments and extra charges. Companies with many custom contracts and manual billing steps tend to sit at the higher end.
Can AI read contracts accurately enough for billing checks?
Yes, for extracting prices, dates, escalators and minimums, provided every extracted term cites its clause and a person confirms the register once. After that review the register is the reference, and the AI only compares records against it.
Should we back-bill customers for missed escalators?
That is a commercial decision for the account owner and finance together. Some companies back-bill in full, some bill from the next period only, and some trade the back-bill for a renewal. The tool should draft the options with the dollar amounts and leave the decision to people.
Get new playbooks by email
Practical notes on AI in finance from a sitting CFO. Occasional, no selling.
Subscribe