Designed for finance exports
The parser recognises date, description, amount, debit/credit, memo, category, and transaction id fields, including headers like Narration or Withdrawal Amt. used by many banks.
Finance file converter
Extract :61: transaction lines and :86: narratives from a SWIFT MT940 statement into CSV. Upload a file or paste its contents, check the parsed transactions, then download the CSV file.
1 · Source
2 · Result
Nothing converted yet
A sample MT940 file is loaded — press “Convert to CSV” to see how the output looks.
The parser recognises date, description, amount, debit/credit, memo, category, and transaction id fields, including headers like Narration or Withdrawal Amt. used by many banks.
Each conversion shows the parsed transactions with money in, money out, and date range, plus warnings about ambiguous dates or missing account details.
PDFs and text files are read by your browser and never sent to a server. Close the tab and the data is gone.
MT940 is the SWIFT text format that banks have used for decades to send end-of-day account statements. It is plain text with colon-prefixed fields: :61: holds one line per transaction with the value date, debit or credit mark, amount and reference, and :86: holds the narrative that describes it. The format is compact and dependable for machines, but a person opening the file sees codes and comma-decimal amounts rather than a table.
This MT940 to CSV Converter reads each :61: line with the narrative that follows it in :86:, then writes one CSV row per transaction. Dates become ISO values, debits are negative, and the bank reference after // is kept in the ID column. Counterparty names and purpose text are taken from the ?32 and ?20–?29 subfields when the bank uses them. Everything runs in your browser.
A :61: line starts with a six-digit value date (YYMMDD), an optional entry date (MMDD), a mark (C or D for credit or debit, RC or RD for reversals), an optional funds code, the amount with a comma as the decimal separator, and a transaction type letter such as N. The text after // is the customer or bank reference.
A :86: narrative from many European banks is split into subfields that start with a question mark and a two-digit code. ?00 holds the booking text, ?20 to ?29 hold the purpose, and ?32 and ?33 hold the counterparty name. Banks that do not use subfields send free text, and the converter uses that text as the description.
The converter scans the text line by line. A :61: line starts a new transaction, a :86: line starts its narrative, and any other field tag ends the current transaction. A line that is just - or -} closes the block, and the :25: account field is not read.
For each transaction, the date and amount come from the :61: pattern, the reference from the text after //, and the description from the narrative subfields. If the narrative has no subfields, the whole narrative becomes the description.
MT940 (trimmed)
:61:2605030503DN39,99NTRFNONREF//BK-1001
:86:?00TRANSFER?10000000?20INVOICE 4411?32CLOUD HOSTING LTD
:61:2605060506CN2400,00NTRFNONREF//BK-1002
:86:?00TRANSFER?20CLIENT PAYMENT?32CLIENT COCSV
date,description,amount,memo,category,id,type
2026-05-03,CLOUD HOSTING LTD,-39.99,INVOICE 4411,,BK-1001,TRANSFER
2026-05-06,CLIENT CO,2400.00,CLIENT PAYMENT,,BK-1002,TRANSFERReading the comma as a thousands separator. In MT940 the comma is the decimal mark, so 1250,00 means 1250.00. The converter handles this, but a manual edit in a spreadsheet with the wrong locale can change the value.
Expecting the entry date to be used. The first date in :61: is the value date and is the one the converter writes. The optional entry date after it is ignored.
Assuming every bank uses subfields. Narratives without ?20 or ?32 codes are used as plain text, so the Description may be a full sentence rather than a payee name.
Confusing reversals with normal entries. RC (reversal of a credit) is shown as a negative amount and RD (reversal of a debit) as a positive amount, which is the effect on the account.
Feeding in an MT942 intraday report and treating its totals as a closing balance. MT942 uses the same :61: lines, so the converter reads it like MT940, but the report is not an end-of-day statement.
Why are the names in capitals?
Most banks write MT940 narratives in capitals. The converter keeps the text as the bank sent it, so search with case-insensitive filters.
Does the converter read MT940 files with several accounts?
The :25: account field is not read, so every :61: line in the file is listed together. If your bank bundles accounts into one file, split it by account before reconciling, because the CSV has no account column.
For more background on data formats and conversion workflows, read our format guides.