How it works
Add your files and press Combine files. The tool reads each one, finds its row of column headings — skipping lines such as the account number and statement period that many bank exports put first — and lines the columns up by name. Then it removes duplicate rows, sorts by date if there is a date column, and shows you the result before you download it.
It is written in Python and uses the open-source openpyxl library to read Excel files and XlsxWriter to write them. It runs Pyodide — the Python language compiled to WebAssembly — so the work happens inside your browser tab. The first time, the browser downloads about 6 MB (Python and the libraries), which it then keeps in its cache, so later visits start in a second or two.
Duplicates across overlapping exports
Download January 1–31 from your bank, then January 15 to February 15, and the second half of January appears twice. Removing every repeated row would fix that — but it would also delete genuine repeats, like two identical coffees bought on the same day.
So by default the tool keeps each row as many times as it appears in any one file. Rows repeated because two files overlap are removed once; repeats inside a single file stay:
| Row | In file 1 | In file 2 | In the result |
|---|---|---|---|
| Jan 2 · Coffee · −3.50 | 2 | — | 2 |
| Jan 15 · Salary · 2,000.00 | 1 | 1 | 1 |
| Jan 30 · Rent · −900.00 | 1 | 1 | 1 |
| Feb 3 · Books · −20.00 | — | 1 | 1 |
Rows are compared after tidying: capitals and extra spaces don’t matter, 2,000.00 matches 2000, and a date typed as text in a CSV matches the same date stored as a date in Excel. Every removed row is listed, with the file it came from, so you can check it.
What you get
- Combined — all rows, with a heading row that stays in view, filters on every column, numbers stored as numbers and dates as real dates.
- Removed duplicates — each removed row and which file it was a copy of.
- Summary — the rows in each file, where its headings were found, and how many rows were removed.
Choose CSV instead for a single plain file, ready to import into accounting software. Text that starts with =, +, - or @ is protected so a spreadsheet can’t run it as a formula.
Before importing into QuickBooks or Xero
Combining exports first and removing the overlap means you import each transaction once. Then turn the file into the right format with Bank statement to QuickBooks or CSV to Xero. If duplicates have already reached your books, see how to fix duplicate bank transactions.
Frequently asked questions
Is it free?
Yes. There is no sign-up and no limit on how often you use it. The site is supported by advertising.
Are my files uploaded?
No. The files are read and combined by Python running in your browser, and the result is saved straight to your device. Nothing is sent to a server.
What if the files have different columns?
Columns are matched by name, ignoring capitals, spaces and punctuation, so “Transaction Date” and “transaction date” become one column. A column that only some files have is kept, and it is empty for the rows from the other files. The first file’s column names and order are used.
Which duplicates are removed?
By default, rows that appear in more than one file — the overlap you get when two exports cover the same days. If a file has two identical rows, such as two coffees on the same day, both stay. You can also remove every repeated row, or keep everything.
Can I remove duplicates from a single file?
Yes. Add one file and the tool removes its repeated rows, keeping the first of each. The removed rows are listed so you can check them.
Which files can I add?
CSV, TSV and text files with commas, semicolons, tabs or pipes, and Excel .xlsx and .xlsm files — up to 50 files, 100 MB in total. Old .xls files need to be saved as .xlsx first.