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.

SymptomLikely classFirst checkCarry or correct
Same amount appears every monthOpening balance or prior-period issueCompare current opening balance to the last approved closing balanceCorrect the prior baseline before reconciling the current month
Difference changes by one or two days of activityTiming or cutoffCheck statement start and end dates against the ledger periodCarry valid timing items, correct cutoff errors
Same fee, payment, or transfer type is always unmatchedMissing record or duplicate recordFilter both files by description, reference, and amount patternCorrect missing or duplicate entries
Rows disappear after sorting, filtering, or formula fill-downScope or formula errorCompare row counts, blank keys, and formula rangesCorrect the spreadsheet logic and rerun
Bank is always higher than books by the same amountMissing receipt or overstated prior adjustmentSearch bank-only rows and prior reconciling itemsCorrect if posted, carry only if timing is valid
Books are always higher than bank by the same amountMissing payment, duplicate receipt, or uncleared itemSearch book-only rows and old outstanding itemsCorrect 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:

CheckWhat to compareWhat failure looks like
Prior bank statement closing balanceLast reconciled bank statement balance vs current opening bank balanceThe bank file starts from the wrong statement balance
Prior books closing balanceLast approved ledger cash balance vs current ledger opening cash balanceThe ledger opening balance changed after the prior close
Prior reconciliation reportLast final difference vs current brought-forward differenceA 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:

  1. Open the final reconciliation report from the last approved month.
  2. Record the approved bank balance, book balance, and unresolved difference.
  3. Open the current month ledger export.
  4. Compare the opening cash balance to the approved closing book balance.
  5. 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:

BoundaryBank statementLedger or cashbookWhat to prove
Start dateFirst bank transaction date in fileFirst ledger transaction date in scopeBoth begin after the same prior close
End dateLast bank transaction date in fileLast ledger transaction date in scopeBoth stop at the same cutoff
Date typePosted datePosting date, payment date, or invoice dateBoth files use the date needed for cash matching
StatusPosted transactions onlyPosted, pending, imported, or approvedPending 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:

ItemAmountTreatmentReason
Deposit received in books, not bank480.00CarryPosted by bank after month end
Bank fee on statement, missing from books12.40CorrectBank has posted it; books need the entry
Pending card payment in ledger export73.18Exclude from current bank matchNot 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.

DifferenceWhat it usually meansFirst search
Bank is higher than booksReceipt exists in bank but not books, payment duplicated in books, or prior adjustment understated booksBank credits, book debits, old adjustments
Books are higher than bankPayment exists in bank but not books, receipt duplicated in books, or outstanding receipt carried too longBank debits, book credits, stale deposits in transit
Same amount every monthPrior balance, recurring fee, recurring transfer, or formula range issuePrior close, recurring descriptions, formula scope
Difference flips directionAmount sign, debit/credit mapping, or import column issueSign 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:

FieldWhy it helps
DescriptionFinds recurring bank charges, subscriptions, processor fees, or transfers
AmountFinds the repeated difference or a multiple of it
Day of monthShows monthly timing patterns
ReferenceConfirms whether the same item is posting under different IDs
AccountFinds 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:

MonthBank statementBooksDifference
JanuaryBank fee 12.40No entry12.40
FebruaryBank fee 12.40No entry12.40
MarchBank fee 12.40No entry12.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:

CheckWhat failure looks like
Row countBank file has 1,284 rows, formula range covers 1,250
Blank keysRows with no reference are excluded from lookup results
Duplicate keysOne lookup returns the first match and hides the second
Filtered rowsA hidden filter removes fees, zeros, or transfers
Amount column mappingFormula points to debit only, credit only, or the wrong net column
Header shiftLookup 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:

MonthOpening balance checkedDifferenceCause classEvidenceTreatment
JanuaryYes12.40Missing recordBank fee posted, no book entryCorrect
FebruaryYes12.40Missing recordBank fee posted, no book entryCorrect
MarchYes12.40Missing recordBank fee posted, no book entryCorrect

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:

CauseTreatment
Changed opening balanceCorrect the prior-period baseline and rerun current reconciliation
Valid timing itemCarry with evidence and clear it when it posts
Missing bank-posted itemRecord the missing book entry
Duplicate book entryRemove or reverse the duplicate
Wrong accountReclassify to the correct cash or clearing account
Formula or filter errorFix 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.