How to Spot a Bookkeeping Error Before It Compounds
Why this matters
A one-off bookkeeping error is an annoyance. A repeating one is a different animal, because it does not just sit there being wrong: it becomes the baseline. By month four it is in your trailing average, so the variance checks that would have caught it now compare the error against itself and report no variance. By month eight you are pricing against it. By month twelve it is in the numbers you hand a lender or an accountant, and unwinding it means touching every month of the year.
The catch window is short and it is early. A recurring error found in month two costs a correcting entry and a conversation. Found in month eleven it costs a restatement, and every decision made in between was made on a number that was not real.
The thing to understand first
A reconciled set of books can be completely wrong. Reconciliation compares your records to the bank and answers two questions: does everything the bank shows exist in my books, and does everything in my books exist at the bank. Both can be yes while the entry is in the wrong account, in the wrong month, or on the wrong basis.
So if your entire error-detection strategy is "we reconcile every month," you are catching one family of errors and blind to the rest. Four classes survive a clean reconciliation, and one never touches the bank at all.
- Right total, wrong account. The money moved exactly as the bank says and landed in the wrong category. Distorts every percentage you read, changes nothing about the bank.
- Right account, wrong period. Recorded a few days either side of the cutoff. Both months reconcile. Both months are wrong, in opposite directions.
- Duplicated with an offset. Entered twice by two routes, once from the feed and once from a bill, with something else absorbing the difference. Reconciles if the offsetting entry is plausible.
- Correct entry, wrong basis. A rule applied consistently and correctly to every transaction, where the rule itself is wrong. The most invisible class, because consistency is what makes an error look like a trend.
And the one outside all four: work never recorded anywhere. A completed job that was never invoiced does not appear in the books, the bank, or the reconciliation. There is nothing to disagree with.
The checks, in order of how fast the error compounds
1. Trend-scan every account as a percentage of revenue
Every month, look at each expense category as a share of revenue against the trailing three months. Not the totals, the shares.
What it catches: classification errors, fast. A cost that moved into the wrong account shows as a pair: one line up, one line down, by similar amounts, in the same month.
What breaks if you skip it: classification errors are silent by design. Nothing is missing, nothing fails, and the only trace is a share that moved. Skip this and the error has to get large enough to notice by feel, which takes months.
The signature worth memorizing: if every expense percentage moves in the same direction at once, suspect the revenue figure, not the costs. Costs do not coordinate. A denominator does.
2. Check what appeared and what went silent
Two short lists at close. Accounts that received their first entry this month, and accounts that carried a balance last month and none this month.
What it catches: a new account created to hold something the coding rule did not cover, which is a rule problem being solved quietly. Also a vendor that stopped billing, which is either a service you no longer need or an invoice nobody has seen.
What breaks if you skip it: the chart of accounts accumulates categories nobody decided on. Two years later there are three accounts holding versions of the same cost, and no trend line for that cost is readable.
3. Run a cutoff test on the month boundary
Pull the last five transactions of the closing month and the first five of the next, and check each date against the source document, not against the entry.
What it catches: period errors, which are the hardest to see afterward because both months reconcile.
What breaks if you skip it: a cost lands in the wrong month, which means two months are wrong in opposite directions and your month-over-month comparison is wrong by double the error.
4. Scan for duplicates in a tight window
Same vendor, same or near-same amount, within about ten days.
What it catches: a bill paid twice, or entered once from the bank feed and once from a bill.
What breaks if you skip it: duplicates found within weeks are recoverable with one call to a vendor who still has the record open. Found at year-end they are often written off, and the shop absorbs a cost twice.
5. Reconcile completed jobs to invoices issued
Count the jobs marked complete in the month. Count the invoices issued for them. Investigate every gap.
What it catches: the class that touches nothing. This is the only check that will ever find it.
What breaks if you skip it: you did work and never asked to be paid for it, and no report anywhere will tell you. It does not show as a loss. It shows as nothing.
6. Sample against your written rule
Ten to twenty transactions from the closed month, re-coded by the owner without looking at how they were coded, then compared.
What it catches: basis errors and rule drift, which the trend scan cannot see because they are perfectly consistent.
What breaks if you skip it: a wrong rule applied faithfully produces smooth, plausible trends forever.
7. Tie revenue to the invoice register
The revenue line on the P&L against the total of invoices issued in the same period. They will differ for defensible reasons, including deposits, credits, and any accrual entries. Every difference should have a name.
What it catches: revenue recognized on the wrong basis, which is the single most distorting error a service shop can carry.
What breaks if you skip it: every percentage on the P&L shares that denominator, so a wrong revenue figure makes all of them wrong at once while each one individually looks reasonable.
Worked example: the error that made a good month look great
A shop takes deposits on larger install work. The deposits are coded to revenue on the day they arrive.
That is a basis error, class four. It reconciles perfectly, because the cash genuinely arrived. It is applied consistently to every deposit. Nothing about it looks like a mistake.
Watch what it does to two months, with the shop's true underlying performance held completely constant at 58% direct cost and 42% gross margin.
A busy month, where deposits taken exceeded deposits earned out by the equivalent of 8% of true revenue. Recorded revenue is 1.08 times true revenue. Direct cost is unchanged at 0.58 of true revenue, because no work was done for those deposits yet. Recorded gross margin is 0.50 divided by 1.08, about 46.3%, against a true 42%. The month reports 4.3 points of margin the shop did not earn.
A quiet month two months later, where the work those deposits paid for got done and deposits earned out exceeded new deposits by the same 8% of true revenue. Recorded revenue is 0.92 times true revenue. Direct cost is still 0.58. Recorded gross margin is 0.34 divided by 0.92, about 37%.
So gross margin appears to swing from about 46% to about 37%, a 9-point move, with zero change in how the shop actually performed. The owner spends the quiet month hunting for a margin problem in labor and materials that does not exist, and spent the busy month believing in a margin that also did not exist.
Now apply check 1 to the quiet month. Direct cost as a share of recorded revenue is 0.58 divided by 0.92, about 63%, against 0.58 divided by 1.08, about 54%, in the busy month. Materials moved. Labor moved. Subcontract moved. Vehicle moved. Overhead moved. Every single expense percentage moved the same direction by a similar proportion, which is the denominator signature, and it points straight at the revenue line. Two minutes on check 7 finishes it: the invoice register does not contain those deposits, because no invoice was issued.
The balance sheet consequence is the one that would have hurt more. A deposit is money owed as work, so it belongs as a liability until the work is done. Booked as revenue, it never appears as a liability at all, and the shop reads a cash balance as though it were free cash. A shop holding deposits worth half a month of revenue is running with half a month of somebody else's money on the assumption that it is theirs.
The eleven-month version of this is worse than eleven times the one-month version, because the seasonal swing looks exactly like a real seasonal margin pattern. By the second year the shop is not carrying an error, it is carrying a belief about its own seasonality.
Correct forward or restate
Once you find a repeating error, the next decision is how far back to go, and there are two different questions inside it.
Correct forward when the error is confined to the current year, has not been reported outside the business, and the cumulative effect is small relative to the year. Fix the rule, book one correcting entry, and note it in the close packet so the trailing comparison is not read as a real change.
Restate when the affected months were used outside the business, in a loan application, a lease guarantee, an insurance filing, a valuation, or anything supporting a tax return. That decision is not yours to make alone, and it is not your bookkeeper's either. It goes to the accountant who signs your return, and it goes there before anything is edited, because unwinding entries in an already-reported period can make the reconstruction harder.
The judgment in between belongs to your accountant too. The useful thing you can do without them is document what you found, when it started, and which months carry it.
Verifying that the check itself works
The checks fail quietly, in one predictable way: they run, they find nothing, and everyone concludes the books are clean when what actually happened is that the check stopped being performed.
- Seed a known item once a year. Ask your bookkeeper to leave one genuinely ambiguous transaction on the exceptions list rather than resolving it. If it comes back on the list, the process is alive.
- Track the exception count, not just the exceptions. A list that runs 8 to 12 items a month and suddenly runs zero has usually not gotten better. Ask what changed.
- Check that the sample is random. If the same kinds of transactions keep appearing in your sample, someone is choosing them, and the sample is now a demonstration rather than a test.
References
- Generally Accepted Accounting Principles (GAAP), revenue recognition, matching, and accounting period concepts
- U.S. Small Business Administration (SBA), small business recordkeeping and internal control practices
- See related: When the Bank Balance Lies: Reconcile Discipline; The Monthly Close SOP; How to Read Your Own Profit and Loss Statement