General Ledger vs Subledger
Why accounting systems split into a general ledger and subsidiary ledgers, how control accounts tie them together, and what it means when the two stop agreeing.
The division of labour
The general ledger holds one balance per account. Accounts receivable is a single figure: what every customer owes you, added up. Accounts payable is another. Inventory is another.
A subledger holds the detail behind one of those figures. The receivables subledger lists every customer, every open invoice, and every payment applied against it. Its total, by construction, equals the general ledger's receivables balance.
Same information at two resolutions. The GL answers how much; the subledger answers who, which invoice, and since when.
Why not keep it all in one place
Three reasons, and the first is the one that actually drove the design.
The financial statements need a small, stable chart of accounts. A balance sheet with one line per customer is not a balance sheet. The GL has to collapse detail to be readable at all.
Second, the detail is operationally different. Chasing an overdue invoice means knowing the customer, the terms, the contact, and the ageing. None of that belongs in a ledger designed for statutory reporting, and all of it is essential to collections.
Third, access. The sales team needs to see a customer's open items. They do not need to see payroll, and in most businesses they should not. Subledgers partition detail so it can be secured independently.
Control accounts
The GL account that summarises a subledger is a control account, and it is governed by one rule: nothing is posted to it directly. Every entry arrives through the subledger.
Raise a customer invoice and the subledger records it against that customer; the control account moves by the same amount in the same instant. The two cannot diverge, because there is only one event.
Which subledgers exist
| Subledger | Control account | Detail it holds |
|---|---|---|
| Receivables | Trade debtors | Customer, invoice, due date, payments applied |
| Payables | Trade creditors | Supplier, invoice, terms, payments made |
| Fixed assets | Fixed assets, accumulated depreciation | Asset, cost, method, life, depreciation to date |
| Inventory | Stock on hand | Item, location, quantity, valuation |
| Payroll | Wages payable, PAYE control | Employee, gross, deductions, net |
Each is a specialised record whose total is one GL line. The pattern is identical in every case.
What reconciliation is actually checking
Reconciling a subledger to its control account asks one question: does the detail still add up to the summary?
In a system that enforces posting rules, it always will, and the reconciliation is a formality that takes seconds. In a system that does not, or where someone has an override, it will not — and the gap is the thing you have to explain.
The usual causes, roughly in order of frequency:
- A manual journal posted directly to the control account, bypassing the subledger.
- A posting dated into a period that the subledger and the GL closed at different times.
- A foreign-currency revaluation applied to one and not the other.
- An integration posting a summary total while the subledger recorded line detail, with rounding between them.
How one transaction moves through both
Worth tracing a single sale end to end, because the mechanics are easier to see than to describe.
You invoice a customer 10,000 plus 1,700 sales tax. One event, recorded in two places at once. The receivables subledger opens an item: this customer, this invoice number, 11,700 due in 30 days. The general ledger takes the double entry.
| Account | Debit | Credit |
|---|---|---|
| Trade debtors (control) | 11,700 | |
| Sales revenue | 10,000 | |
| Sales tax payable | 1,700 |
Three weeks later the customer pays 11,700. Again one event in two places: the subledger applies the receipt against that specific invoice and closes it; the ledger records the cash.
| Account | Debit | Credit |
|---|---|---|
| Bank | 11,700 | |
| Trade debtors (control) | 11,700 |
The control account nets to zero for this customer, and the subledger shows an invoice raised and settled with dates against it. Neither record was updated by hand, and neither can drift from the other, because both are consequences of the same posting.
Notice what the application step does that a bank-only view cannot. A payment of 11,700 arriving in the bank tells you money came in. Applying it to invoice 4471 tells you which obligation was discharged — and therefore what is still outstanding. Part-payments make this sharper still: 5,000 against an 11,700 invoice leaves a 6,700 open item that keeps ageing, rather than a customer who looks half-settled across their whole account.
Why the close has an order
Month-end runs subledgers first, general ledger last, and the sequence is not arbitrary. Each subledger has to be complete before the figure it feeds can be trusted.
- Close the operational subledgers: stop new postings into the period for receivables, payables, inventory and payroll.
- Run the period processes that generate entries — depreciation from fixed assets, inventory revaluation, accruals for goods received but not invoiced.
- Reconcile each subledger to its control account, and resolve any gap before continuing rather than after.
- Post the remaining general journals: prepayments, provisions, anything with no subledger behind it.
- Close the general ledger period and produce the statements.
Reversing the order is the classic mistake — producing a trial balance, reviewing it, and reconciling afterwards. Every figure reviewed before reconciliation may move, so the review has to happen twice and the first pass was wasted.
Reading a balance properly
The practical payoff. A receivables balance of 847,000 tells you almost nothing on its own. Whether it is healthy depends entirely on what is underneath it — and that is a subledger question.
847,000 across forty customers, none older than 45 days, is a working receivables book. The same 847,000 with 600,000 owed by one customer at 180 days is a solvency problem wearing the same number. The GL cannot distinguish them. The subledger shows it immediately, which is the entire reason for the split.

