BankSheet

Duplicate Transaction Finder: Find and Remove Duplicate Bank Transactions

Drop one bank CSV to find repeated rows, or drop several exports of the same account to merge them without double-counting the overlap. Review every group, then download a cleaned CSV — free, no signup.

Free · No signup · Runs in your browser. Your file is read on this device and is never uploaded to BankSheet.

How to find duplicate transactions in a bank CSV

  1. Export the transactions as CSV

    Download the period from online banking as CSV, or use a CSV a converter produced. If you have overlapping downloads of the same account, export each one.

  2. Drop the first file, then add the others

    The header row is found automatically. Check the detected Date, Description, Amount (or Debit and Credit) and Balance columns. Add more exports of the same account one at a time; they must have the same columns.

  3. Choose how strict the match is

    By default a duplicate has the same amount to the cent, the same description (ignoring case and spacing) and the same date. Allow dates up to 5 days apart if your exports disagree on dates, or stop requiring the description to match.

  4. Review each group and download

    Each group says why it was flagged and whether it is removed by default. Tick or untick groups, then download a cleaned CSV. Your original files are not changed.

Find duplicate transactions in a bank CSV

Rows are grouped when they have the same amount to the cent, the same description once case and extra spaces are ignored, and the same date. Rows without an amount (bank summary lines, notes) are never grouped.

Each group lists the file, the line number, the date as written, the amount and the running balance where the export has one, so you can find the rows in the original file.

Merge overlapping bank statement exports without double-counting

When two downloads of the same account cover overlapping dates, the shared transactions appear in both files. Drop both and those rows are flagged as “in more than one file”. The copies from the file holding the most of them are kept and the copies from the other files are removed.

The cleaned CSV uses the first file's header and keeps every other row exactly as it was written. It is sorted oldest first by default; untick “Sort cleaned file by date” to keep the original file order.

Duplicate or genuine repeat payment? Let the running balance decide

Two identical card payments on the same day are real; a line copied twice is not. When the export has a running balance column, the balance tells them apart.

  • Same balance on every copy: the balance never moved for the extra rows, so they look like copied lines. Removed by default.
  • Balance changes on each row: probably genuine separate transactions. Kept by default.
  • No balance column: there is no way to tell, so the group is kept by default for you to check against the statement.

Remove duplicates before importing into QuickBooks or Xero

Clean the CSV before you import it, then run the free balance checker on the result to prove the remaining rows still explain the change from opening to closing balance.

This tool only removes rows you approve. It does not categorise transactions or match them to your ledger; that still happens in your accounting software.

Works with these exports

Any comma, semicolon or tab separated bank export with a header row works:

  • One signed Amount column, or separate Debit and Credit (Withdrawal and Deposit, Money out and Money in) columns.
  • US (MM/DD/YYYY), UK and EU (DD/MM/YYYY), ISO (YYYY-MM-DD) and written dates like Oct 5, 2026.
  • Up to 12 files of up to 10 MB each, all with the same columns.

Frequently asked questions

How do I find duplicate transactions in a bank statement?

Export the statement as CSV and drop it here. Rows with the same amount, description and date are grouped, and each group shows the line numbers and running balances so you can confirm them against the statement.

How do I merge two bank CSV files without duplicates?

Drop the first export, then the second. Transactions that appear in both files are flagged as overlap and removed from the second copy by default. Download the cleaned CSV to get one file, sorted by date.

Will it remove genuine repeat payments?

Not by default. When the running balance changes on each of the identical rows, they are treated as separate real transactions and kept. Groups without a balance column are also kept until you tick them.

What if the same transaction has different dates in two exports?

Set “Dates may differ by” to allow up to 1, 2, 3 or 5 days. Amount and description still have to match unless you untick “Description must match”.

Does it change my original file?

No. It builds a new CSV on your device. Rows that are kept are written with their original cell values.

Can it find duplicates in a PDF bank statement?

This free tool reads CSV exports. For a text-based PDF statement, BankSheet (getbanksheet.com) extracts the transactions and runs an opening-to-closing balance check before export, so a doubled line makes the check fail. The first 10 pages are free.

Do you see or store my bank data?

No. The file is read by JavaScript in this page and the result is built on your device. Nothing from the file is sent to a server. We only record that the tool was used, with a rough row-count range and the outcome (for example pass or fail), never dates, descriptions, amounts, or balances.

More free bank statement tools

  • Bank statement balance checker — Drop a bank CSV and see the exact row where the running balance stops adding up, plus likely missing or duplicate transactions.
  • Bank CSV to QuickBooks & Xero format — Turn any bank CSV export into the QuickBooks Online 3- or 4-column layout or the Xero bank statement template, with dates and signs fixed.
  • OFX to CSV converter — Open an OFX, QFX or QBO bank download as a CSV: dates, signed amounts, payee, memo, check number and FITID, ready for Excel.
  • All free tools

Related guides