A small unexplained bank reconciliation difference that comes back every month is not noise. It is a pattern, and the repeated amount is evidence.
The mistake is treating each month as a fresh mystery.
If January is out by 12.40, February is out by 12.40, and March is out by 12.40, the first question is not "Which row is missing this month?" The first question is "What carried forward?"
That usually points to one of four recurring issues:
- The opening or prior-period balance is wrong
- A timing item is being carried incorrectly
- The same transaction type is missing or duplicated every period
- A formula, filter, or mapping is excluding the same row pattern every month
Do not force the reconciliation to balance with a miscellaneous adjustment. That hides the evidence. The goal is to prove whether the difference belongs in the next period or needs correction now.
Classify the difference before changing anything
Before you edit formulas, add an adjustment, or re-import the bank file, classify the failure. A recurring difference is easier to investigate when you separate timing from error.
| Symptom | Likely class | First check | Carry or correct |
|---|---|---|---|
| Same amount appears every month | Opening balance or prior-period issue | Compare current opening balance to the last approved closing balance | Correct the prior baseline before reconciling the current month |
| Difference changes by one or two days of activity | Timing or cutoff | Check statement start and end dates against the ledger period | Carry valid timing items, correct cutoff errors |
| Same fee, payment, or transfer type is always unmatched | Missing record or duplicate record | Filter both files by description, reference, and amount pattern | Correct missing or duplicate entries |
| Rows disappear after sorting, filtering, or formula fill-down | Scope or formula error | Compare row counts, blank keys, and formula ranges | Correct the spreadsheet logic and rerun |
| Bank is always higher than books by the same amount | Missing receipt or overstated prior adjustment | Search bank-only rows and prior reconciling items | Correct if posted, carry only if timing is valid |
| Books are always higher than bank by the same amount | Missing payment, duplicate receipt, or uncleared item | Search book-only rows and old outstanding items | Correct error or carry valid outstanding item |
This table matters because "small difference" is not a diagnosis. A 7.50 difference can be a bank fee, a duplicated card charge, a rounded import, or an opening balance problem. The amount alone is not enough. The repetition tells you where to look first.
If the wider issue is that the books do not tie at close, use the same order of checks described in what to do when books do not match the bank at month end. For a recurring small difference, the order is even stricter: baseline first, period second, timing third, row-level errors fourth.
Step 1: prove the opening balance
The opening balance is the fastest way to explain a bank reconciliation small unexplained difference every month.
If the current month starts from the wrong balance, every later month inherits the same problem. You can match every current-period transaction perfectly and still finish out by the same amount.
Start with three numbers:
| Check | What to compare | What failure looks like |
|---|---|---|
| Prior bank statement closing balance | Last reconciled bank statement balance vs current opening bank balance | The bank file starts from the wrong statement balance |
| Prior books closing balance | Last approved ledger cash balance vs current ledger opening cash balance | The ledger opening balance changed after the prior close |
| Prior reconciliation report | Last final difference vs current brought-forward difference | A prior reconciling item was removed, edited, or duplicated |
Do this before looking for missing rows.
Suppose March was finalized with a bank balance of 18,240.22 and a book balance of 18,240.22. April opens with the bank file at 18,240.22, but the ledger opens at 18,252.62.
April is already out by 12.40 before any April transaction is tested.
That 12.40 might have been caused by a late edit to March, an imported bank fee posted after the close, a changed journal, or a deleted transaction. But it is not an April matching problem. If you search April rows for that amount, you will waste time.
The practical check is:
- Open the final reconciliation report from the last approved month.
- Record the approved bank balance, book balance, and unresolved difference.
- Open the current month ledger export.
- Compare the opening cash balance to the approved closing book balance.
- If the opening balance changed, stop current-month matching and find the change.
A changed opening balance must be corrected at the source. Do not bury it in the current reconciliation. If the prior month changed, the current month is downstream of that change.
Step 2: confirm the period and cutoff
If the opening balance is clean, check the period boundary next.
Small recurring differences often come from a cutoff rule that is applied differently every month. The bank statement might run from the 1st through the last calendar day. The ledger export might include transactions posted through midnight, imported through the next morning, or filtered by invoice date instead of payment date.
Compare the boundary fields directly:
| Boundary | Bank statement | Ledger or cashbook | What to prove |
|---|---|---|---|
| Start date | First bank transaction date in file | First ledger transaction date in scope | Both begin after the same prior close |
| End date | Last bank transaction date in file | Last ledger transaction date in scope | Both stop at the same cutoff |
| Date type | Posted date | Posting date, payment date, or invoice date | Both files use the date needed for cash matching |
| Status | Posted transactions only | Posted, pending, imported, or approved | Pending rows are not mixed with posted cash |
A cutoff problem creates a pattern because the same type of row lands near the edge every month.
Examples:
- A bank fee posts on the last day of the month, but the ledger import catches it on the first day of the next month.
- A card payout is recorded in the books by payout creation date, while the bank records it by deposit date.
- Payroll clears the bank on the final business day, but the ledger posts the payroll journal on the nominal pay date.
- A transfer leaves one account before month end and arrives in the other account after month end.
Those are not all errors.
This is where timing and correction split.
A valid deposit in transit or outstanding payment can carry forward. A transaction posted to the wrong period needs correction. A pending item imported into the ledger before it posts to the bank should usually be excluded from the bank reconciliation until it becomes a posted bank transaction.
Write the decision down in the reconciliation report:
| Item | Amount | Treatment | Reason |
|---|---|---|---|
| Deposit received in books, not bank | 480.00 | Carry | Posted by bank after month end |
| Bank fee on statement, missing from books | 12.40 | Correct | Bank has posted it; books need the entry |
| Pending card payment in ledger export | 73.18 | Exclude from current bank match | Not posted in bank period |
If the same 12.40 bank fee is missing every month, the problem is not timing. The bank has posted it. The books need the entry.
Step 3: use the sign of the difference
The direction of the difference tells you what kind of record to search for.
Do not start by scanning every row. Start with the sign.
| Difference | What it usually means | First search |
|---|---|---|
| Bank is higher than books | Receipt exists in bank but not books, payment duplicated in books, or prior adjustment understated books | Bank credits, book debits, old adjustments |
| Books are higher than bank | Payment exists in bank but not books, receipt duplicated in books, or outstanding receipt carried too long | Bank debits, book credits, stale deposits in transit |
| Same amount every month | Prior balance, recurring fee, recurring transfer, or formula range issue | Prior close, recurring descriptions, formula scope |
| Difference flips direction | Amount sign, debit/credit mapping, or import column issue | Sign convention and mapped amount columns |
Suppose the bank is lower than the books by 12.40 every month.
That points to one of these:
- A bank fee appears on the statement but is not entered in the books
- A payment is entered twice in the books
- A receipt is still sitting as outstanding even though it never reached the bank
- A prior-period correction increased books but did not belong in cash
Now search only the rows that fit that direction. Filter bank debits for 12.40. Filter book credits for 12.40. Check recurring descriptions: service charge, monthly fee, card fee, account maintenance, transfer charge.
If the bank is higher than books by 12.40, reverse the search. Look for missing bank credits, duplicated book payments, or prior items that reduced books incorrectly.
The sign does not solve the reconciliation by itself. It cuts the search area. That is the point.
Step 4: test recurring transaction patterns
When the amount repeats, search by pattern rather than by month.
Pull three months of bank transactions and three months of ledger transactions into separate views. You are looking for the same row type failing in the same way.
Use fields like these:
| Field | Why it helps |
|---|---|
| Description | Finds recurring bank charges, subscriptions, processor fees, or transfers |
| Amount | Finds the repeated difference or a multiple of it |
| Day of month | Shows monthly timing patterns |
| Reference | Confirms whether the same item is posting under different IDs |
| Account | Finds transactions posted to the wrong cash or clearing account |
Look for four recurring causes.
Cause 1: the same fee is missing every month
Bank fees are common because they are small, recurring, and easy to miss when the ledger is updated from invoices or receipts rather than from the bank statement.
The pattern looks like this:
| Month | Bank statement | Books | Difference |
|---|---|---|---|
| January | Bank fee 12.40 | No entry | 12.40 |
| February | Bank fee 12.40 | No entry | 12.40 |
| March | Bank fee 12.40 | No entry | 12.40 |
This is an error, not a timing item. The bank has posted the charge. The books need the expense.
The correction is not a balancing adjustment. It is a proper bank fee entry in each affected period, posted to the correct expense account.
Cause 2: a recurring transfer is matched on the wrong date
Transfers create small recurring differences when one side is matched and the other side is carried incorrectly.
For example, a monthly sweep leaves Account A on the last day of the month and reaches Account B on the first day of the next month. If Account A and Account B are reconciled separately, the same amount may appear as a timing item in one account and an unresolved difference in the other.
This is valid timing only when the transfer is real, documented, and clears in the next period.
It becomes an error when:
- The transfer is carried after it has cleared
- The receiving side is posted to the wrong account
- One side is duplicated
- The clearing account is not reviewed
Do not leave an old transfer on the reconciliation because it "has always been there." A carried timing item needs evidence in the next period.
Cause 3: one transaction type is mapped to the wrong account
Recurring differences can appear when imports map one transaction type away from the cash account being reconciled.
This happens with payment processor fees, loan interest, merchant charges, refunds, and internal transfers. The bank has the cash movement. The ledger has the transaction, but it sits in the wrong account or under the wrong sign.
Check:
- Is the row present in the ledger at all?
- Is it posted to the cash account being reconciled?
- Is the sign correct?
- Is the amount gross when the bank amount is net?
- Is the fee posted separately or netted against income?
If the row exists but is mapped to the wrong account, the reconciliation will still show a difference. Presence is not enough. The cash account must be right.
Cause 4: the spreadsheet excludes the same rows every month
If the bank and ledger data are right, the recurring difference may be inside the spreadsheet.
This is common when formulas were built around last month's file shape. The data changes, but the formula range does not.
Run these integrity checks:
| Check | What failure looks like |
|---|---|
| Row count | Bank file has 1,284 rows, formula range covers 1,250 |
| Blank keys | Rows with no reference are excluded from lookup results |
| Duplicate keys | One lookup returns the first match and hides the second |
| Filtered rows | A hidden filter removes fees, zeros, or transfers |
| Amount column mapping | Formula points to debit only, credit only, or the wrong net column |
| Header shift | Lookup still points to the old column position |
A spreadsheet failure can look like an accounting difference because the final number is small. That does not make it an accounting issue. If the formula skipped one recurring fee row every month, the fix is to correct the comparison logic and rerun the reconciliation.
For a broader breakpoint approach, use the same method as finding where a wrong reconciliation broke: compare the last trusted output to the current one, then isolate what changed.
Build a clean proof file
Once you have a likely cause, prove it with a small working file. Do not keep the proof only in your head.
Create a short table with one line per affected month:
| Month | Opening balance checked | Difference | Cause class | Evidence | Treatment |
|---|---|---|---|---|---|
| January | Yes | 12.40 | Missing record | Bank fee posted, no book entry | Correct |
| February | Yes | 12.40 | Missing record | Bank fee posted, no book entry | Correct |
| March | Yes | 12.40 | Missing record | Bank fee posted, no book entry | Correct |
That table is the difference between a guess and a defensible fix.
The evidence column should name the exact row, amount, date, and source file. "Bank fee missing" is too vague. "2026-03-31 bank service charge 12.40 appears in bank CSV and has no ledger row in March cash account" is useful.
Then decide the treatment:
| Cause | Treatment |
|---|---|
| Changed opening balance | Correct the prior-period baseline and rerun current reconciliation |
| Valid timing item | Carry with evidence and clear it when it posts |
| Missing bank-posted item | Record the missing book entry |
| Duplicate book entry | Remove or reverse the duplicate |
| Wrong account | Reclassify to the correct cash or clearing account |
| Formula or filter error | Fix the spreadsheet logic and rerun from the source files |
Do not use one generic journal to clear all causes. Each class has a different treatment. A timing item is not corrected. A missing fee is not carried. A formula error is not fixed with a ledger entry.
When to stop looking manually
Manual investigation works when the difference is one row, one month, and the source files are small.
It stops scaling when the same unresolved amount returns every close and the proof depends on filters, lookups, hidden rows, and old copied tabs. At that point, the reconciliation problem is not judgment. It is file comparison and exception reporting.
The finish line is not a zero difference created by force. It is a reconciliation report that says what carried forward, what was corrected, and why the same small amount will not appear again next month.
