neatstatement

Merge statement exports

Drop several CSV files and get one spreadsheet with a single header. Built for the usual case: twelve monthly exports that have to become one year.

Drop your CSV files here

or click to choose · nothing is uploaded

Why not just copy and paste

You can, and for two files it is faster. It stops being faster at twelve, and it stops being safe as soon as one month's export has a column in a different place. Pasting then puts amounts under dates without complaining.

This checks the header of every file against the first one. When they match, the header is kept once and the rows are stacked. When one doesn't, its rows are still included. A month exported with a renamed column is a real thing and dropping those transactions silently would be worse, but the file is marked so you know to look.

Order is preserved

Files are stacked in the order you add them, and rows keep their original order within each file. Nothing is sorted, because sorting by a date column that a spreadsheet has misread as text produces a convincing and entirely wrong sequence. Sort after importing, once you have confirmed the date column is really a date.

Files from two different banks

This stacks rows, it does not translate between layouts. Two banks that label the same column Description and Memo will produce a merged file with both columns half empty, because there is no safe way to guess that they mean the same thing. Guessing wrong merges two fields that should have stayed apart.

For that case, rename the headers to match before merging, in whatever spreadsheet you already use. One pass of renaming beats a merged file you have to unpick later.

After merging

Overlapping exports are the most common source of duplicate rows. A January-to-March file and a March-to-May file both contain March, so it is worth running the result through the duplicate finder before importing it anywhere that pays invoices.