ledgaroo

Bank statement PDF to MT940

MT940 is the SWIFT statement file that Dutch and German accounting software reads. Drop a PDF statement and we write one, after checking every row against the figures your bank printed.

MT940 comes with Premium. Excel and CSV are free for a whole statement at a time, with no account and no limit on how many. See what Premium costs.

What is an MT940 file?

MT940 is SWIFT’s Customer Statement Message: one account’s statement for a period, written as a SWIFT message, which is plain text in numbered fields. ING calls it the End of Day statement, beside the MT942 it sends during the day.

Banks in the Netherlands and Germany have long offered it as the file to download for bookkeeping, and the packages there read it: Exact Online, AFAS and e-Boekhouden among them.

Its successor is camt.053, the ISO 20022 statement in XML, which SWIFT pairs with MT940. Germany’s banks took MT940 out of their rulebook in November 2025, as DATEV reports, and Rabobank keeps offering it but stops developing it from 15 November 2026. Exact Online and AFAS read both.

What is inside an MT940 file

This is the whole file for a statement of three transactions, as the converter writes it.

:20:LEDGAROO
:25:NL91ABNA0417164300
:28C:1/1
:60F:C260101EUR1000,00
:61:2601140114D12,40NMSCNONREF
:86:CARD PURCHASE 4821 HARBOUR CAFE 3021
:61:2601160116D214,60NMSCNONREF
:86:DIRECT DEBIT CITY POWER CO 88213
:61:2601230123C3250,00NMSCNONREF
:86:DIRECT CREDIT 012721 NORTHWIND TRADING SALARY
:62F:C260131EUR4023,00
:20:
The statement’s reference, up to 16 characters, chosen by whoever wrote the file.
:25:
The account, here the IBAN the statement prints.
:28C:
The statement number, then the number of this message within it.
:60F:
The opening balance: C for in credit or D for overdrawn, the first day the statement covers as YYMMDD, the currency, and the amount with a comma before the cents.
:61:
One transaction: the value date, the entry date as MMDD, D for money out or C for money in, the amount, then NMSC, the code for a miscellaneous transaction, and NONREF, which SWIFT asks for where the account holder has no reference. The bank’s own reference would follow after //, and a PDF statement prints none.
:86:
The information for the account holder: here, the description as printed. It runs to six lines of 65 characters, and only the first carries the tag.
:62F:
The closing balance, in the same form, dated on the last day the statement covers. The opening balance and the transactions have to come to it.

What an MT940 file cannot do

One account, in one currency.
The account is named once and every balance carries one currency code, so an account held in several currencies is a statement for each.
Only SWIFT’s own characters.
Letters without accents, digits, the space and / - ? : ( ) . , ' + are all a field can hold. An é, an & or an @ cannot be written.
Six lines of 65 characters for each description.
That is all SWIFT gives :86:. Banks fill it with code words of their own, such as ING’s /CNTP/ for the other party’s account and /REMI/ for what the payment was for, so two banks’ files say the same thing differently.
The balances have to chain.
SWIFT requires a statement’s opening balance to equal the previous one’s closing balance for that account, and AFAS blocks a statement whose opening balance is wrong. Import statements in order, with none missing.

Importing it into Software that reads MT940

Download the MT940

  1. Set up the bank account in your accounting software, under the IBAN the statement prints, if it is not there already.
  2. Find its screen for importing bank statements, choose MT940 if it asks for a format, and pick the file.

Packages differ in which MT940 files they read. Some take only the files of banks they know, as Moneybird reads only Dutch banks’ own. Ours names no bank, so import one statement and check it before you rely on it. An MT940 names its account and states its opening balance, so we can only write one when the statement prints an IBAN and its opening balance is known.

How we write an MT940 from a PDF statement

We read the transactions off the PDF and check each one against the running balance the statement prints beside it, and the totals against the ones it prints at the foot. A row that does not agree is shown in red with both figures, and the download is held until you have seen it. Then the file is written in your browser, like this:

The file states its own opening and closing balance.
An MT940 has to add up: the opening balance and the transactions must arrive at the closing one. We write it only when the opening balance is known: the one the statement printed, or, for a range of days, the balance printed on the row before it. The opening balance is dated on the first day of the period the statement prints and the closing balance on the last, or on the first and last transactions’ days where it prints no period.
The account is the IBAN the statement prints.
An MT940 names its account. We take the IBAN the statement labels as its own, where its check digits agree. A statement that prints no IBAN, as most outside Europe do not, cannot become one, and the button says so.
Amounts put a comma before the cents.
So 1850.00 is written 1850,00, with a D for money out or a C for money in beside it, as the format requires.
Every transaction is typed NMSC, miscellaneous.
A statement says what a payment was in words, not in SWIFT’s codes. Picking a code would be inventing a fact about the transaction.
The description is the words the statement printed.
A PDF prints none of the code words a bank’s own MT940 carries, so ours holds the description as printed, in lines of 65 characters under one :86:, up to the six lines SWIFT allows. A character the format cannot carry, such as an accent or an ampersand, is written as a space, and so is a colon or hyphen that would start a line.
The file names no bank.
Its reference is LEDGAROO and nothing in it says which bank wrote it. That matters to a package that reads only the MT940 of banks it knows.

Every format holds the same checked transactions. The other files we write are on the import page.

Questions

Is my statement uploaded anywhere?

No. The statement is read in your browser, on your computer. Nothing in it is sent to us or to anyone else.

Why can I not download an MT940 for my statement?

The statement printed no IBAN, or its opening balance is not known, and an MT940 needs both. The button says which one is missing. The other formats do not need them.

Does Twinfield import this MT940?

No. Twinfield reads an MT940 only from the banks on its list, and ours names no bank. For Twinfield, download the Twinfield CSV, which its import template reads from any bank.

Which currencies can the MT940 carry?

The one the statement is in. We read AUD, USD, GBP, EUR, CAD and NZD off the statement. Where the statement names none, you choose it.

Does it handle scanned statements?

Yes, as a PDF, JPG, PNG or WebP. The text is read off the picture by OCR in your browser, and the file never leaves your computer. The first scan takes longer while the reader loads. OCR can misread a figure, so a scan is checked like any other statement. If it prints no running balance, no totals and no closing balance, nothing can check the figures, so the download is held as it is for a failed check, and you look the figures over first. A date misread within the statement period passes every check, so a date OCR was unsure of is marked for you to compare with the scan. A PDF downloaded from online banking is more reliable than a scan. More about scanned statements.

Is it free, and do I need an account?

Excel and CSV are free for a whole statement at a time, with no limit on how many. Premium adds every other format, a CSV in a layout of your own, payee names with rules that set the payee and category, the working paper, part of a statement, several statements joined into one, and downloading every open statement at once. Neither needs an account: Premium is a licence key, which you paste into the page or activate from the email it comes in, and your browser keeps it. The pricing page lists each format and the price.