# Finding Duplicate Transactions on Bank Statement Lines

- Author: PreciseBankFlow (https://precisebankflow.com)
- Published: 2026-10-16
- Category: Bank statements in an audit
- Canonical: https://precisebankflow.com/blog/finding-duplicate-transactions-on-bank-statement-lines

> How to find duplicate transactions on a bank statement and the missing ones too: duplicate rules, check number gaps, legitimate repeats and proving a gap.
Duplicate transactions on a bank statement are lines that repeat the same payee and amount within a short window, and missing ones are lines that should be there but are not. Find duplicates with a matching rule, find gaps in the check sequence, and prove a missing line with the footing difference. Confirm each hit before calling it an error.

## What counts as a duplicate transaction on a bank statement?

A true duplicate is one real event recorded twice: a charge posted two times, a payment sent twice, or a line extracted twice from a page that was read twice. A repeat is two real events that happen to look alike. The first is an error to fix, and the second is normal activity to leave alone.

### Three ways a duplicate arises

Duplicates come from different sources, and the source decides who must act:

- **The bank posted twice.** A merchant or the bank itself submits one charge two times. The client should dispute it, and the statement is correct as printed.
- **The client paid twice.** The same invoice went out by check and by online payment. Both are real, and the second is a recovery item.
- **The data repeated.** A page was read twice, or a line wrapped across a page break and counted in both places. The statement is fine, and the extraction is wrong.

The third kind is the reason to compare the extracted lines with the PDF before you tell a client about a double charge. The footing test in the [bank statement audit guide](/blog/bank-statement-audit-footing-continuity#footing-each-bank-statement-opening-plus-activity-equals-closing) shows quickly whether extra lines crept in, since a repeated line makes the computed closing balance differ from the printed one.

## Same payee, same amount, close dates: duplicate transaction rules

The test for a possible duplicate is three conditions together: the same payee, the same amount, and dates a few days apart. A pair that meets all three goes on a list for review. The rule finds candidates, not proof, so every hit needs a person to look at the evidence.

### The rule, step by step

1. **Normalize the payee.** Strip card-processor prefixes, store numbers and trailing dates, so "SQ *HARBOR OFFICE SUP 0307" and "HARBOR OFFICE SUPPLY" read as one payee.
2. **Compare the amounts exactly.** Match to the cent and in the same direction. A debit and a credit of the same size are a reversal, not a duplicate.
3. **Set a date window.** Start with a few days for card charges. Use a wider window for checks and transfers, which can post later.
4. **Flag the pair** and attach both lines, with their dates and references, to the exception list.

### Tuning the rule

A window that is too tight misses a charge that posted on day four, and one that is too wide floods you with ordinary repeats. Start narrow on busy accounts and widen it on accounts with few lines. Add the check number or reference to the comparison when one exists, since two lines with different check numbers are rarely a duplicate. PreciseBankFlow flags pairs on this same-payee, same-amount, close-dates basis and leaves the confirming to you.

## Check number gaps and missing statement transactions

A check number gap is a number missing from a run of consecutive check numbers. Checks are numbered in order, so a number that appears on neither the cleared list nor the outstanding list needs an explanation. The cause may be a voided check, a check not yet cashed, or a transaction missing from your data.

### How to run the sequence test

List every check number that cleared in the period, in order, and mark each jump. Then for every gap, look in three places. The check register shows whether the number was issued, voided or skipped. The outstanding list shows whether it is simply uncashed. The next statement shows whether it cleared late. If it is on none of them, the number is unexplained.

Not every gap is a problem. Voided checks are normal, and a client with two checkbooks produces two interleaved sequences. Test one sequence at a time. The point is to account for each number, not to find a fault in each gap. The [outstanding checks guide](/blog/outstanding-checks-and-deposits-in-transit) explains why many gaps are only uncashed checks.

### Gaps that point to missing lines

A gap on a cleared list is the sign of a missing line when the check cleared the bank but did not make it into your extracted data. It could also mean the check cleared a different month. Look at the statement for that number before you conclude, and use the footing difference below to confirm.

## Edge case: legitimate repeats that look like duplicate transactions

Some repeated lines are correct, and a good rule has to leave them alone. Subscriptions, split payments and payroll are the three common sources. Each produces the same payee and amount more than once, and a bad rule would flag every one of them every month.

### Subscriptions and recurring charges

A monthly fee for software has the same payee and amount each month, but the dates are about thirty days apart, outside any short window. A weekly or twice-monthly charge can fall inside the window, so add a rule that treats a regular interval as a schedule, not a duplicate.

### Split payments

A client may pay one invoice in two equal halves, or a vendor may charge two equal installments. These pairs match on payee and amount and fall close together. The payment reference, if the statement prints one, separates them: a true duplicate repeats the same reference, while two installments carry their own.

### Payroll and batch payments

Payroll lines to different employees may share an amount, and a payroll batch may post as many near-identical lines in one day. Here the payee differs even when the amount does not, so the first condition of the rule already excludes them. A run of identical lines to the same payee on the same day is the one to inspect.

## How do you prove a missing transaction from the statement totals?

You prove a missing transaction by footing the lines against the statement's printed closing balance. If the opening balance plus the extracted deposits, minus the extracted withdrawals, does not equal the closing balance, the difference is the net of the lines you do not have. A difference equal to one amount points to one missing line.

The excerpt below is a ten-line example from a fictional account. It contains one duplicate, one check number gap and a footing difference. The values are made up. The opening balance is 8,000.00 and the closing balance printed on the statement is 6,636.20.

| # | Date | Description | Check | Amount |
| --- | --- | --- | --- | --- |
| 1 | 03/02 | Deposit, customer payment | | +2,400.00 |
| 2 | 03/04 | Check | 2041 | -640.00 |
| 3 | 03/05 | Check | 2042 | -1,150.00 |
| 4 | 03/07 | Harbor Office Supply | | -212.40 |
| 5 | 03/07 | Harbor Office Supply | | -212.40 |
| 6 | 03/10 | Check | 2044 | -980.00 |
| 7 | 03/12 | Deposit, customer payment | | +3,100.00 |
| 8 | 03/15 | Payroll | | -2,750.00 |
| 9 | 03/18 | Streamline Software | | -89.00 |
| 10 | 03/20 | Check | 2045 | -430.00 |

### Reading the excerpt

Lines 4 and 5 are the duplicate candidate: the same payee, the same amount and the same day. Hold it for review until you have checked the PDF or the receipts. The check column jumps from 2042 to 2044, so number 2043 is the gap.

Now foot it. Deposits total 5,500.00 and withdrawals total 6,463.80. The computed closing balance is 8,000.00 plus 5,500.00 less 6,463.80, which is 7,036.20. The printed closing balance is 6,636.20, so the computed figure is 400.00 too high. Something that took 400.00 out of the account is not in the list.

### Putting the two findings together

The footing difference is exactly 400.00, and the check gap is exactly one number. Those two facts point at the same place: check 2043 probably cleared for 400.00 and was not extracted. Do not book it yet. Open the statement PDF, find check 2043 and read its amount. If the PDF shows 400.00, the missing line is proved, and the extraction needs correcting. If it does not, keep looking, because the cause could be a bank fee or a line on a page that was missed.

The duplicate does not explain the difference, and it should not be removed to close it. Both Harbor Office Supply lines are in the extracted total, and if the bank printed both, the printed closing balance already includes them. Deleting line 5 would push the computed closing balance to 7,248.60 and widen the difference to 612.40. So the two tests stay separate. The footing difference tells you a line is missing, and the duplicate rule tells you a line may be doubled. Only the PDF, the receipts and the bank can say whether line 5 is a second real charge, and a real second charge is a dispute to raise with the merchant, not an adjustment to the data.

Each of these findings goes onto the exception list with its evidence, in the layout shown in the [reconciliation report sample](/blog/reconciliation-report-sample). The full audit steps around them are in the [audit procedures for bank reconciliation](/blog/audit-procedures-for-bank-reconciliation), and the same tie-out ideas apply to payables in the [accounts payable reconciliation template](/blog/accounts-payable-reconciliation-template). To run these checks on your own statements, [PreciseBankFlow](/get-started) lists duplicates, gaps and the footing difference as exceptions for review.
