Thirty daily files, one import
Banks deliver statements daily; ledgers get reconciled monthly. Somebody has to turn thirty files into one, and doing it with cat or a text editor produces a file that looks right and quietly contains the same day twice, or the days in the wrong order.
This merges them properly: in order, de-duplicated, and then read back and checked before you download anything.
Nothing is uploaded. This page is JavaScript running on your machine. Load it, disconnect from the internet, and it still works β which is the only honest way to hand a tool a live bank statement.
Ordering
Statements are ordered by account, then statement number, then page. That last step matters: :28C: is statement number / sequence number, so pages 10/1 and 10/2 share the number 10. Ordering on the statement number alone leaves them in whatever order the files happened to be selected in β which is to say, no order at all. Where two statements are genuinely indistinguishable, the order you added the files in is preserved.
You can turn sorting off if your files are already in the order you want them concatenated.
The same statement in two files
This happens constantly β overlapping date ranges from the portal, or a bank re-sending. A statement is identified by its account, its statement and sequence number, and its date. When the same statement appears in two files, it is kept once and the skip is reported, with the file it came from and the file it was already present in. Nothing is dropped silently.
The output is checked, not assumed
Concatenating text that parses is not the same as producing text that parses. So the merged file is parsed again from scratch and put through the same checks as the MT940 Validator: balances, missing statement numbers, continuity between pages, entry-level problems.
This is where merging actually earns its keep. If your thirty daily files are missing the 14th, the merged file has a gap β and you find out here, before importing, rather than from your accounting system tomorrow.
Sliced, not re-generated
Like the splitter, this works on the raw text of each file. Proprietary :NS: fields, spacing and the bank's own line endings all survive, and merging the parts of a split file returns the original byte for byte.
How to merge files
Add the files
Drop them all at once, or add them a few at a time. Each is checked as it is added.
Merge
You see how many statements were kept, which were skipped as already present, and what the re-check found.
Download
One importable MT940 file, already validated.