Who it's for: finance assistants, accountants and controllers in SaaS teams who use a billing system (such as Stripe Billing, Chargebee or Recurly) alongside a ledger (such as Xero, QuickBooks, Sage or NetSuite).
What you'll get: a monthly reconciliation process for billings and debtors, a worked example with reconciling items and correcting journals, where AI helps, and a risks and controls table.
Reading time: about 11 minutes. Keep it open next to both exports.
Why the billing system and the ledger drift apart
In most SaaS companies the billing system raises the invoices and the ledger just receives them through a sync. Syncs fail quietly. A missing tax code, a new customer not mapped, a credit note dated on the wrong side of month-end, and suddenly revenue, deferred revenue and debtors are all slightly wrong. A monthly reconciliation catches it while the list is short, rather than at year-end when the auditors find it for you.
Key terms
- Billing system: the tool that holds subscriptions and raises invoices and credit notes. It's the source of customer billing data.
- Ledger (general ledger): the accounting system that holds the company's books. It's the book of record for the accounts.
- Sync or integration: the connection that copies invoices, credit notes and payments from the billing system into the ledger.
- Net billings: invoices raised in the month less credit notes, before VAT.
- Debtors (accounts receivable): amounts customers owe, including VAT.
- Reconciling item: a specific, explained difference between two reports, with an owner and a fix (or a reason no fix is needed).
What you're actually reconciling
There are three separate checks. Many teams only do the first, which is how the other two go wrong for months.
| Check | Billing system report | Ledger report | Where AI helps |
|---|---|---|---|
| 1. Billings | Invoices and credit notes dated in the month, net of VAT | Credits to revenue and deferred revenue from sales invoices in the month | Matching invoice numbers across both lists |
| 2. Debtors | Open invoices (aged debtors) at month-end | Trade debtors control account balance | Finding invoices paid in one system but open in the other |
| 3. VAT | Tax charged on invoices in the month | VAT output tax postings from sales | Spotting invoices with missing or unexpected tax codes |
Deferred revenue has its own reconciliation (see the related guides below), but it depends on this one. If billings are wrong, the deferred revenue schedule will be wrong too.
The monthly reconciliation, step by step
| Step | What "done" looks like | |
|---|---|---|
| ☐ | Confirm the billing system has closed the month: all renewals, usage invoices and credit notes raised | No invoices for the month still waiting to be issued |
| ☐ | Check the sync log for errors and retry any failed records | Error list is empty, or every remaining error is noted |
| ☐ | Export invoices and credit notes from the billing system for the month, with invoice number, customer, date, net, VAT and currency | Export saved with the date and time it was run |
| ☐ | Export the same period's sales invoices and credit notes from the ledger, with the billing reference | Export saved alongside the billing system one |
| ☐ | Compare totals: net billings, VAT and gross, by currency | Total difference calculated for each currency |
| ☐ | Match line by line on invoice number to find the items behind any difference | Every unmatched invoice or credit note listed |
| ☐ | Classify each item: sync failure, timing, rate, duplicate, manual entry | Each item has a cause and an owner |
| ☐ | Post correcting journals or fix the sync, then re-run the ledger report | Unexplained difference is nil |
| ☐ | Repeat for debtors: billing system aged debtors vs ledger trade debtors | Balances agree, or differences listed and explained |
| ☐ | Get the reconciliation reviewed and signed off | Reviewer's name and date on the working paper |
AI shortcut: give an approved AI tool both exports as CSV files and ask it to match on invoice number, then list (1) invoices in the billing system but not the ledger, (2) the reverse, (3) matched invoices where the amount, date or currency differs. Ask for a summary table with totals that tie to both reports. Check those totals yourself before trusting the detail.
The usual causes, and what to do about each
| Cause | What it looks like | Typical fix |
|---|---|---|
| Sync failure | Invoice in billing system, missing from ledger | Fix the mapping (customer, tax code, product) and re-sync |
| Timing | Credit note raised on the last day, landed in the ledger dated the next month | Correct the date so it sits in the right month |
| Exchange rate | Same invoice, slightly different sterling amount | Document the rate source in each system; align settings if the difference keeps growing |
| Duplicate | Same invoice posted twice after a retry | Delete or reverse the duplicate |
| Manual entry | Invoice raised straight in the ledger, bypassing the billing system | Raise it properly in billing, or agree a documented exception |
| Payment mismatch | Paid in the ledger, still open in billing (or the reverse) | Mark it paid in the system that's behind |
Worked example: MonthEndClub Co Ltd, October
MonthEndClub Co Ltd (a fictional UK SaaS company) uses a billing system synced to its ledger. Here's the October billings check.
Step 1: compare totals
| Net billings, October | £ |
|---|---|
| Billing system: invoices | 412,600 |
| Billing system: credit notes | (8,400) |
| Billing system: net billings | 404,200 |
| Ledger: net sales invoices posted for October | 395,865 |
| Difference to explain | 8,335 |
Step 2: find the items
Matching on invoice number turns up three items.
| Item | Cause | Effect on ledger vs billing (£) |
|---|---|---|
| INV-1045, annual subscription for a UK customer | Sync failed: no tax code on new customer | Ledger lower by 9,600 |
| CN-212, downgrade credit on a monthly plan, raised 31 October | Synced on 1 November and dated November | Ledger higher by 1,350 |
| INV-1052, US customer billed in US dollars | Billing system and ledger used different exchange rates | Ledger lower by 85 |
| Net difference explained | 9,600 − 1,350 + 85 = 8,335 | |
The explained total matches the difference, so nothing is left unexplained.
Step 3: post the corrections
INV-1045. Fix the customer's tax code and re-sync, or post the invoice. It's an annual subscription billed in advance, so it goes to deferred revenue. VAT at the standard rate of 20% (as at October 2026) is £1,920.
| Account | Dr | Cr |
|---|---|---|
| Trade debtors | £11,520 | |
| Deferred revenue | £9,600 | |
| VAT output tax | £1,920 |
Then check the deferred revenue schedule picks up any October release for this contract.
CN-212. Re-date the credit note to 31 October. The effect in October is:
| Account | Dr | Cr |
|---|---|---|
| Revenue | £1,350 | |
| VAT output tax | £270 | |
| Trade debtors | £1,620 |
Make sure it's removed from November, or it will be counted twice.
INV-1052. No journal. The ledger is the book of record and its rate follows the company's FX policy. The £85 is documented as a rate difference. If rate differences grow month on month, a common approach is to align the two systems' rate sources.
Step 4: the debtors check
| Debtors at 31 October | £ |
|---|---|
| Billing system: open invoices (including VAT) | 286,400 |
| Ledger: trade debtors before corrections | 274,915 |
| Add: INV-1045 posted | 11,520 |
| Less: CN-212 moved into October | (1,620) |
| Ledger: trade debtors after corrections | 284,815 |
| Remaining difference | 1,585 |
The remaining £1,585 is two items: a customer paid £1,500 by bank transfer, which was matched in the ledger but never marked paid in the billing system (so billing still shows it open), and the £85 rate difference on INV-1052 (US customers are outside the scope of UK VAT here, so there's no VAT on it). The fix for the first is to mark the invoice paid in the billing system, otherwise the customer gets a dunning email for money they've already paid. Check: 284,815 + 1,500 + 85 = 286,400.
AI shortcut: for the debtors check, give an approved AI tool the billing system's open invoice list and the ledger's open items list and ask which invoices are open in one but not the other, and whether any payments in the bank export match those amounts. You confirm each match against the bank statement.
If you report under US GAAP (ASC 606)
The reconciliation itself is the same. Revenue recognition for subscriptions is broadly the same under ASC 606 and IFRS 15, so the corrections above would typically be the same too. The main differences tend to show up elsewhere, such as in contract costs and disclosures.
Common mistakes and audit watch-outs
- Only reconciling totals. Two errors can cancel out. Match line by line at least monthly.
- Ignoring the sync error log. It's the cheapest early warning you have. Check it before you export anything.
- Fixing the ledger but not the billing system. If a payment is recorded only in the ledger, the customer still gets chased.
- Leaving "known differences" for months. An explained difference still needs a fix date. Old items turn into unexplained ones when people leave.
- Manual invoices raised outside billing. They skip the billing system's controls and its deferred revenue data.
- Reports run at different times. A billing export from Day 1 and a ledger export from Day 3 won't agree. Note the run time on both.
- Trusting an AI match list without checking totals. AI can drop rows or mismatch similar invoice numbers. Tie its totals back to both source reports before using it.
Tools that can help
Billing systems such as Stripe Billing, Chargebee and Recurly each offer native integrations with ledgers such as Xero, QuickBooks, Sage and NetSuite, and most have a sync log worth checking every month. Excel or Google Sheets with a lookup on invoice number is enough for the matching in smaller teams. An approved AI assistant can do the first pass of matching and classification. None of these replace the reconciliation; they just make the list of differences shorter and faster to find.
Key risks and controls
| Risk | Control | How to evidence it |
|---|---|---|
| Invoices missing from the ledger | Monthly line-by-line billings reconciliation | Signed reconciliation with nil unexplained difference |
| Revenue in the wrong month | Cut-off check on credit notes and invoices dated near month-end | List of items dated last 2 and first 2 days, reviewed |
| Sync failures going unnoticed | Sync error log checked before close | Screenshot or export of the log, dated |
| Debtors overstated or customers chased in error | Monthly debtors reconciliation between systems | Reconciliation showing each open difference and fix |
| AI matching errors | AI totals tied back to source reports; person reviews exceptions | Tie-out shown on the working paper, reviewer sign-off |
Rates, thresholds and rules in this guide
Figures were checked against the pages below in October 2026. They change regularly (often each April or at Budget time), and we can't guarantee they're still current or right for your situation. Always check the official page before relying on them.
- VAT rates (GOV.UK): the UK standard VAT rate of 20%
- Place of supply of services (VAT Notice 741A) (HMRC, GOV.UK): the business-to-business place of supply rule, which puts services to overseas business customers outside the scope of UK VAT
Key takeaways
- Reconcile three things monthly: billings, debtors and VAT.
- Check the sync error log first; it often explains most of the difference.
- Match line by line on invoice number, not just totals.
- Every reconciling item gets a cause, an owner and a fix.
- Fix both systems, not just the ledger.
- Let AI do the matching; a person checks the totals and signs off.
FAQs
Which system is right when they disagree?
Neither by default. The billing system is usually the source for what was invoiced, and the ledger is the book of record for the accounts. Each difference is investigated and the system that's wrong gets fixed.
How often should the billing system be reconciled to the ledger?
Monthly, as part of the close, is common practice. Teams with high volumes or frequent sync issues often run a lighter check weekly so month-end isn't a surprise.
What's an acceptable difference?
Many teams set a small threshold for rounding and rate differences, but the aim is nil unexplained difference. A difference you can explain is fine for now; one you can't explain isn't.
Can AI do this reconciliation for me?
AI is good at the matching and at grouping differences by likely cause. It can't confirm why a sync failed or approve a journal. Use only company-approved tools for customer data, check its totals against both reports, and keep the review and sign-off with a person.
Related guides
- How to Build and Reconcile a Deferred Revenue Schedule
- Stripe Payout Reconciliation: Fees, Refunds, Disputes and FX
- Balance Sheet Reconciliations: What Good Looks Like
- The SaaS Month-End Close Checklist
More in Revenue guides.
From the Club
For when two systems finally agree. The Team Mug · The Dad Hat
Join the Club. New guides, early access and members-only batches. Join here.
This guide is general information about common practice. It isn't tailored to any business, and standards, tax rules and figures change. Check your own circumstances, the latest rules and, where needed, a qualified professional before acting.
Last reviewed: October 2026.