Skip to content

How to import a Monobank statement

Author: Oleksii Itsekson — the developer of FinLad, and its user since 2025

Published · Updated

A statement is the cheapest way to keep books: the bank has already recorded everything for you. Here is where to find it in Monobank — one of Ukraine’s largest banks — which format to take, and what to do with the transactions after the import.

Where to get the statement

  1. 1In the Monobank app, open the card you need and tap “Statement”.
  2. 2Choose the period. For a first import take three months: enough to see your habits, and not so much that sorting it takes half a day.
  3. 3Choose the format and send the file to yourself — by email, or through any messenger you can conveniently open on your phone.

CSV or PDF

CSV is a table: date, amount, description, balance. Any tracking app can read it, and it is the one to take whenever you have the choice.

PDF is a printed statement. It can be parsed too, but its text is laid out for eyes rather than for a program: merged columns and wrapped lines happen regularly. Take PDF when CSV is not available.

FinLad reads both, and XLSX as well. The columns are worked out on their own — even when the headers are in Windows-1251, or carry a Latin “i” in the middle of a Ukrainian word. Statement import is part of the Plus plan.

What the import does, and what is left to you

  • Duplicates do not come in twice: load the same file again, or let two periods overlap, and the transactions are not doubled.
  • A cash withdrawal becomes a transfer to “Cash” rather than an expense — otherwise every trip to an ATM would look like a five-thousand purchase.
  • The bank does not know your categories. Nobody does the first sort for you: an unfamiliar merchant is worked out once, and after that the app files its spending itself, on the device.
  • The description of a transaction is whatever the bank wrote. “LLC TRADE GROUP” stays exactly that until you tie it to a category.

Statement, or a direct connection

Monobank issues a personal token: you create it yourself in the section for developers and paste it into the app, after which transactions arrive without any files. The token is read-only — money cannot be moved with it, and your banking password is not entered anywhere.

A file stays the better option in two cases: when you need history deeper than the connection gives, and when the bank is not yours. A statement can be read from any bank; a connection only from the one that offers it.

What to do right after the first import

  1. 1Check the closing balance against what the bank shows. If the figures disagree it is almost always the period: the statement did not start from zero but from the middle, and the app has no way of knowing what came before it. The opening balance is set once, on the account.
  2. 2Go through the “Other” category. After the first import it is the largest one, and that is normal: the bank names no categories, and the app is seeing these merchants for the first time. That half hour is the whole of the manual work in an import.
  3. 3Assign the ten or fifteen most frequent merchants to categories. This pays back out of all proportion: in a typical statement they account for about half of all transactions, and from then on they sort themselves.
  4. 4Check the transfers between your own accounts. A card-to-card transfer is neither an expense nor income, and if it landed in expenses the month will look more expensive than it was.

Common problems and what they actually mean

  • The balance is off by a small amount — look for fees and interest. The bank shows them as separate lines, and they are in the CSV too, they just look like an expense with no merchant.
  • One purchase as two lines is not an import error but the way a bank shows an amount being held and then charged. The final figure can differ from the held one: that is normal at petrol stations and hotels.
  • A refund arrives as its own positive line rather than as a cancellation of the original expense. The month does not lie because of it, but the category looks odd, with the purchase and the refund sitting apart. That is correct behaviour and does not need fixing.
  • Gibberish instead of letters means the statement is in a legacy encoding and was opened as UTF-8. FinLad detects the encoding itself; a spreadsheet will not, so if you open the file by eye, choose the encoding by hand on import.
  • A payment in another currency arrives converted at the bank’s rate on the day it was charged. That is the amount actually taken from you — that is the one to keep books in, not the amount in euros at the rate on the day you bought.

The same thing at other banks

Every bank gives you a statement, and that is the main reason to prefer a file over a connection: the method is identical wherever you hold an account. Look for it under statements or transaction history, and most banks can produce CSV.

What differs is the detail: column names, the separator, the date format, sometimes two amounts instead of one — in the account currency and in the transaction currency. That is exactly the part the app takes on: FinLad works out the columns itself and shows you how it read them before it saves anything.

The tip that saves the most time: import one bank at a time and check the balance after each. Import three statements in a row and find a discrepancy, and you will be hunting for it in three files instead of one.