How do you check billing automatically?
Which billing checks to automate, from missing invoices to forgotten price indexation, and how to set them up without a flood of false alerts.
You check billing automatically by comparing every invoice run with what should have been invoiced: the contracts, the orders, the hours delivered and the agreed prices. A check then looks for four things: what is missing, what is too low, what is duplicated and what should no longer be there. An accounting package checks whether an invoice is technically correct. Whether it is commercially correct is something you have to organise yourself, and that is exactly where automatic checking makes the difference.
What does an accounting package check, and what not?
Xero, NetSuite, Exact, AFAS and similar packages are good at what they are meant to do. They make sure an invoice has a number, the VAT is right, debits and credits balance and the debtor exists. An invoice that is technically correct goes out without an error message.
What they do not know: whether this customer should have had an indexed price this year. Whether last month's extra work is on the invoice. Whether a subscription that was expanded in March from 20 to 35 licences is also being invoiced for 35. That information sits in a contract, a CRM, a time-tracking system or an email, and the accounting package cannot see those sources.
The result is that most invoicing errors are not errors in the system's sense. They are omissions. And an omission produces no error message.
What are the four questions of a billing check?
Every automatic billing check is a variant of one of these four questions.
1. Is something missing?
Something was delivered or agreed with no invoice against it. Examples:
- An order was delivered but not invoiced because the delivery note never came back.
- A project booked 40 hours of extra work that was not included in the stage invoice.
- A new contract was signed, but the recurring invoice was never set up.
- A customer started using extra licences without the billing being adjusted.
This is the most expensive category, because the money does not come in late: it does not come in at all. How to track this down systematically is covered in how to find forgotten invoices.
2. Is the amount too low?
The invoice exists, but the amount does not match the agreement:
- The annual indexation in the contract was not applied.
- A temporary introductory discount is still running after its agreed end date.
- An old rate is still in the item file or the customer-specific price list.
- A volume discount is applied while the customer no longer reaches the volume.
3. Is something duplicated or too high?
That sounds like the customer's problem, but it is yours too. A customer who pays too much notices sooner or later. Then come credit notes, conversations and sometimes a damaged relationship. Duplicate invoices often arise during migrations, with manual corrections and with subscriptions that are invoiced both automatically and by hand.
4. Is something running that should have stopped, or has something stopped that should be running?
A cancelled contract that is still being invoiced leads to a credit note and an irritated former customer. A contract that renewed automatically but whose billing stopped because someone entered the end date in the system simply produces nothing any more. The latter only surfaces when someone wonders why a customer who still calls every day no longer generates any revenue. See also revenue leakage from expired contracts.
Where does the expected amount come from?
Checking an invoice means comparing it with an expectation. That expectation has to come from somewhere, and that is the core of the work.
| Type of revenue | Source of the expectation | Typical check |
|---|---|---|
| Recurring contracts | Contract or contract module, CRM | Amount, frequency, indexation, term |
| Orders and deliveries | Orders and delivery notes in the ERP | Every delivered order line invoiced |
| Hours and projects | Time tracking, project budget | Billable hours and extra work invoiced |
| Licences and usage | Product data, usage metering | Quantities and tiers match usage |
| One-off deals | CRM | Won deal has an invoice |
The better the source, the more reliable the check. The difficult case is agreements that exist only in a PDF or an email: an indexation clause in section 7.3, a special rate the account manager once promised. Those have to be extracted from the document first and recorded as structured data. Whether that is done by hand or with the help of AI, the rule stands: no recorded agreement, no check. The article can AI check whether contracts are billed correctly? goes into this in more depth.
Should you check before or after the invoice run?
You can run the check at two moments.
Before the invoice run. A draft run is compared with the expectation and exceptions are held back or flagged. This prevents errors from reaching the customer. It requires the check to fit your invoicing process, and someone to handle the alerts in time, otherwise the check holds up your invoicing.
After the run. The invoices that were sent are compared with the expectation. This is simpler to set up and holds nothing back. The drawback: invoices that are too high are already with the customer. For missing and too-low invoices it makes little difference, because you can still send them.
For most companies, checking afterwards is the best start. Once the check has proved reliable for a few months, you move the most important rules forward.
Where does it go wrong?
Comparing only the total. "September revenue is in line with August" is not a check. A missing invoice of EUR 4,000 disappears in a total of EUR 700,000. Check at the level of customer, contract or order line.
Not setting a tolerance. Rounding, currency differences and pro-rata calculations produce small differences. Without a tolerance you get hundreds of alerts worth a few cents. With too wide a tolerance you miss the errors you are looking for. Set both an absolute and a relative threshold, for example: difference greater than EUR 25 or greater than 2 percent.
No distinction between cause and effect. If twenty invoices are too low because one price list was not indexed, you want one alert with twenty examples, not twenty separate alerts. Group by cause where you can.
The check lives in one spreadsheet. Many companies have a finance employee who keeps a monthly Excel file that sets contracts against invoices. That works until that person goes on holiday or leaves. A check that depends on one person is not a control, it is a habit.
Worked example
Worked example: suppose a maintenance company has 300 service contracts with an average value of EUR 3,600 a year. The contracts include annual indexation based on a published price index (for example the national consumer price index). Because of a staff change in administration, the indexation on 1 January was not applied to 80 contracts. For the example, assume indexation of 3 percent.
You then miss EUR 108 per contract per year, so 80 times EUR 108 is EUR 8,640 in the first year. Because the next indexation is calculated on the amount that is too low, the gap carries on every year and grows with it. A check that compares, per contract, whether the invoiced amount equals the base price plus accumulated indexation finds this in the first invoice run in January. A check on totals never finds it.
A checklist to start with
- List your revenue types (recurring, orders, hours, licences, one-off) and estimate the annual amount for each.
- For each type, decide where the expectation comes from, and whether that source is structured and up to date.
- Choose the two revenue types with the highest amount and the least reliable source. That is where you start.
- For each customer or contract, record a key that exists in both systems: contract number, customer number or order number.
- For each type, write out the four questions: is something missing, too low, too high, is it rightly still running?
- Set tolerances and group alerts by cause.
- Run the check after the fact for three months and track what it finds in euros.
- Move the most reliable rules to before the invoice run.
Billing checks are part of a broader question: which source says what revenue ought to be? That comes together in how to get a single source of truth for revenue. If you want to know where the biggest leaks in your chain are before you build anything, you can also start with a one-off Revenue Audit.
Frequently asked questions
Isn't this simply the auditor's job?
No. An external auditor checks whether the annual accounts give a true and fair view, not whether you have invoiced every agreement with every customer. A missing invoice is not an error in the annual accounts: there is simply less revenue. The difference is explained in revenue audit vs financial audit.
How often should I check billing?
After every invoice run. For recurring billing that is usually monthly. For order invoicing it can be daily. A check once a year finds errors that are by then twelve months old.
What if my contracts only exist as PDFs?
Then the first step is to record the terms from those PDFs: amount, term, indexation, notice period, special rates. That can be done by hand or with the help of AI, but check the result. Only then can you compare automatically.
Should I still correct wrong invoices after the fact?
Invoices that were too low can often still be supplemented, depending on your contract and the relationship. Check what your terms and conditions say, how long ago it was, and the rules in your jurisdiction. More important is that the error does not come back from now on.
More in this cluster
- How do you get a single source of truth for revenue?Start here
- CRM vs ERP: where does your real revenue come from?
- Why CRM data is not the same as financial data
- CRM-to-billing reconciliation explained
- How do you connect CRM to billing?
- How do you connect CRM to ERP?
- How do you check CRM data automatically?
- How do you connect sales data with financial data?