Convert MT940 to CSV
Drop in an .mt940 file and get back a plain CSV, with a balance check that proves nothing was dropped.
No sign-up needed. Files never leave your browser.
- Both balances come from the file, so the reconciliation needs nothing typed in
- Nothing is uploaded. The file is read in this browser tab and never stored
- No account and no card, with no limit on conversions
MT940 is the SWIFT Customer Statement Message, and it is what most European banks hand you where an American bank would hand you an OFX file. It is readable text, but it is written for machines: every field opens with a tag like :61:, and one transaction packs nine subfields together with nothing separating them.
The reason to be careful converting it is that the comma is the decimal point. SWIFT amounts carry no thousands separator at all, so 1234,5 is one thousand two hundred and thirty-four and a half. Anything reading that comma as a thousands separator produces 12345 instead: a number ten times too large, in a file where nothing else looks wrong.
The other trap is the reversal. A statement line marked RC reverses a credit, so it takes money out despite the C, and RD does the opposite. Both are read here as what they undo rather than as the letter they carry.
New to these formats? Read what an MT940 file is and what varies in a bank statement CSV. They cover what each one holds, and what neither can tell you.
A converter that tells you when it missed something.
Most tools hand you a file and let you find out in your ledger. Every conversion here is reconciled against the closing figure first. That figure is read from your statement’s balance column, or typed in from the page when there isn’t one.
When the totals don’t meet you get the exact size of the gap, every row that did read, and the converted file anyway.
Sample balance check
A transaction may be missing. Review the rows below, or re-upload including all pages.
A sample result. This is the same component the converter uses.
Client statements never leave the tab
Conversion runs in your browser, in JavaScript on this page.
Closing the tab discards the file and everything read out of it. There is nothing to delete later and nothing to breach.
There is no upload step to decline, because there is no upload. Open your browser's network tab and convert. You will see no request carrying your data.
Once this page has loaded, conversion runs with no connection at all. Useful on a client site with locked-down wifi. It also proves the file stays put.
Questions people actually ask
What does the output look like?
Four plain columns: date, description, direction and amount. Dates are yyyy-mm-dd, and amounts use a decimal point with no thousands separator, so a spreadsheet reads them as dates and numbers rather than text.
Does it read a file with several statements in it?
Yes. MT940 downloads often hold consecutive months, or several accounts, concatenated one after another. Every statement in the file is read, the opening figure is taken from the first and the closing from the last, so the period covered is the file's rather than its first block's.
Do I have to type in the balances?
No, and this is the one format where that is true without qualification. An MT940 states both its opening and its closing balance outright, in its :60F: and :62F: fields, so the reconciliation runs on the file's own figures and neither is inferred from the other.
What if my file is named .sta or .940?
It still works. MT940 is the name of a SWIFT message type rather than a registered file format, so banks use .mt940, .940, .sta and plain .txt interchangeably. The format is detected from the contents, not from the name.
Does my statement get uploaded anywhere?
No. The conversion runs inside your browser using JavaScript on this page. The file is read from your disk into memory, converted, and offered back as a download. Nothing is sent to a server, so there is nothing for us to store, log or delete. You can confirm this by opening your browser's network tab while you convert.
Do I need an account?
No. There is no sign-up, no email capture and no usage limit on CSV conversion.
How do I know every transaction came through?
Every conversion shows a balance check above the results. If your file has a running balance column, the opening and closing balances are read from it. Otherwise you type them in from your statement. The check adds up every converted transaction, compares the total to the closing balance, and tells you the exact size of any difference.
My dates came out wrong. What happened?
A date like 05/01/2026 is ambiguous: 5 January in the UK and most of Europe, 1 May in the US. Turn on the day-first option and the file is re-read immediately. If your statement contains a date that can only be day-first, such as 19/02, the converter points this out before you download.
Some rows were skipped. Is that a problem?
Usually not. Totals rows, page footers, repeated column headings and blank lines carry no transaction date, so they are left out and counted. The skipped count is shown with the results so you can check it against what you expected.
Try it on the statement that’s annoying you right now.
No account, no card, no limit. If the layout isn’t recognised you will know immediately, rather than after a support ticket.