How to import a bank statement

Every bank lets you download a statement, and that file has everything a budgeting app needs in it. You do not have to connect an account, hand over a login, or wait for a bank integration that may never come to your country.

How to bring it in

  1. 1. Download a statement from your bank's app or web banking. Pick CSV or Excel if you are offered a choice, never PDF.
  2. 2. Do not tidy the file up. The account block at the top and the legal text at the bottom are skipped for you, and re-saving a CSV usually rewrites the dates.
  3. 3. Open Money Talks, go to Settings and tap Import Data.
  4. 4. Choose Smart Import, at the top of the list.
  5. 5. Pick the file, then read the preview. Check that expenses are expenses and that a payment you made abroad kept its own currency.
  6. 6. Confirm.

The file you need

Smart Import reads CSV and XLSX statements, with commas or semicolons and dots or decimal commas, and knows the merchant column by name in English, Ukrainian, Russian, Polish, German, Spanish, French and Portuguese.

You have the right file if its first line looks like this:

monobank (Ukraine):
"Дата i час операції","Деталі операції","MCC","Сума в валюті картки (UAH)","Сума в валюті операції","Валюта",...

PKO BP (Poland):
"Data operacji","Data waluty","Typ transakcji","Kwota","Waluta","Saldo po transakcji","Opis transakcji"

Sparkasse (Germany):
"Buchungstag";"Wertstellung";"Verwendungszweck";"Betrag";"Waehrung"

Three real statements, three languages, three different column layouts, one of them semicolon-separated. Smart Import reads all three because it goes by what is in the columns, not by their names.

Frequently asked questions

Which banks does this work with?

There is no list of banks, because Smart Import does not work from one. It reads the columns of whatever file you give it. We test it against real statements from monobank in Ukraine, PKO BP in Poland and Sparkasse in Germany, which between them cover three languages of column names, comma and semicolon separators, decimal commas, and an amount split across a separate debit and credit column. Statements that open with a page of account details and close with a paragraph of legal text are handled too, and tested against real ones. A statement from a bank we have never seen is read the same way.

I bank with Revolut or Zen. Is there anything different about those?

Yes, enough that each has its own guide. Both are read by an importer written for them rather than by Smart Import, because both files hide something a general reader would get wrong: Revolut keeps cancelled payments in the file and charges its fees outside the amount column, and Zen writes both sides of a currency exchange on one row. Pick Revolut or Zen from the list in Import Data rather than Smart Import, and see their pages for what each one carries.

Why not just connect my bank?

You can, where we support it. But bank connections cover a small number of banks in a small number of countries, and if yours is not among them the feature is worth nothing to you. A statement works everywhere, needs no login handed to anyone, and covers the years of history a connection would not reach back to anyway.

My card is in hryvnia and I paid in dollars. Which amount is imported?

The one you actually paid. A monobank statement carries both the amount charged to the card and the amount in the currency of the operation, and Smart Import takes the second along with its currency. A Netflix charge made in USD stays a USD transaction in your history rather than becoming a hryvnia one.

My statement has my name and IBAN at the top. Does that break it?

No. A statement is a document rather than a data file: it opens with the account holder, the IBAN and a few totals, and often ends with a paragraph of legal text. Smart Import looks past both and finds the transactions table in the middle, so you can import the file exactly as your bank produced it.

My statement came as a PDF. Can I use it?

No, and it is worth going back for the CSV rather than working around it. Almost every bank offers CSV or Excel next to the PDF, sometimes under a heading like export or download rather than statement. A PDF describes where ink goes on a page, not which number belongs to which column; a reader has to infer the table from the spacing, and it gets that wrong on exactly the rows that are unusual. Guessing at your money is the one thing we will not do, so we read the file your bank already gives you instead.

Do I need an account in Money Talks to import a statement?

No. Import works without signing up. If you do have an account, Settings keeps a Delete last import row that removes the transactions from your most recent import in one tap.

What comes across from your bank

  • Every payment with its date and the merchant name your bank recorded
  • The direction of each row, taken from the sign of the amount
  • The currency of each payment, including a card payment made abroad in a currency other than your card's
  • Amounts written with a decimal comma, as most European banks write them

What does not come across

  • Categories - A bank statement does not have any. Money Talks suggests a category for each merchant during the import instead, and you correct the ones it gets wrong.
  • Transfers between your own accounts - A statement from one account cannot know that the money went to another account of yours. Those rows arrive as ordinary payments and you fix the few that matter.
  • The running balance - Most statements carry one. It is a result of the transactions rather than a transaction, so it is not imported.
  • The account summary at the top - The opening balance, closing balance and period totals are a summary of the transactions rather than transactions themselves, so they are skipped along with the rest of the title block.

Your bank already gives you the file

Open banking gets the attention, but it reaches a limited set of banks in a limited set of countries, and the list rarely includes the one you actually use. Meanwhile every bank in the world will hand you a statement, usually as CSV or Excel, going back years.

That file has what a budgeting app needs: when the money moved, how much, in what currency, and who to. It costs you a download.

Three real statements, three languages

These are the files we test against, taken from real accounts:

monobank, Ukraine. Ukrainian column names, ten columns, a separate amount for the card currency and the currency of the operation, plus MCC codes and cashback.

PKO BP, Poland. Polish column names, amounts written -59,99 with a decimal comma, and a running balance column.

Sparkasse, Germany. German column names, semicolons instead of commas, decimal commas, and a Verwendungszweck field where the merchant lives.

Nothing about those three is similar except that each has a date, an amount and a description somewhere in it. That is the whole requirement.

Names in your own language

The column holding the merchant is called Деталі операції at monobank, Opis transakcji at PKO and Verwendungszweck at Sparkasse. None of those is the word description.

Smart Import matches that column against the names banks give it in English, Ukrainian, Russian, Polish, German, Spanish, French and Portuguese, so REWE SAGT DANKE and BIEDRONKA WARSZAWA arrive as merchant names rather than blank rows with a number attached.

Dates, amounts and currencies are found by looking at the values instead, so those work whatever the header says. The merchant column is the one part matched by name, which means a statement in some other language imports with its amounts intact and its descriptions missing. If that is yours, send us the header row. Adding it takes a minute.

The currency of the payment, not of the card

This one matters if you live in one country and spend in another.

A monobank statement records a Netflix charge twice: 199 UAH taken off the card, and 4.99 USD as the payment was actually made. Take the first and your history says you spend hryvnia on Netflix. Take the second and it says what happened.

Smart Import takes the currency of the operation. Your foreign spending stays foreign, and Money Talks converts to your base currency itself, so changing that currency later reconverts from the real amount rather than from an old conversion.

A statement is a document, not a data file

Open one in a text editor and the table is somewhere in the middle. Above it sit your name, your address, the IBAN, the period and a few totals. Below it, a paragraph saying the document is computer-generated and naming the bank’s regulator.

None of that is a transaction, and none of it has the shape of one. It is why a statement often will not open in tools that expect a data file: there is no single column layout for the whole document, so they give up on the first line and report that they cannot find the separator.

Smart Import looks for the block of lines that agree on their column count and covers the most cells, and treats that as the table. Everything above and below it is dropped.

The word doing the work there is cells rather than lines, and the difference is not academic. A summary block like this:

Total income:,1800.00,EUR
Opening balance:,0.00,EUR
Total outcome:,-900.90,EUR
Closing balance:,899.10,EUR

is four consistent lines of three columns. A statement from a quiet month can hold a single transaction, which with its header is two lines of a dozen columns. Pick whichever run is longer and you import four totals and none of the money. Pick whichever covers more cells and the real table wins, on a quiet month and a busy one alike.

You do not have to do anything with any of this. Download the file and import it as it came.

Debit and credit in two columns

Plenty of banks do not use a minus sign at all. Instead there are two amount columns, one for money out and one for money in, and each row fills exactly one of them. Ukrainian statements label them Дебет and Кредит, Polish ones Obciążenia and Uznania, German ones Soll and Haben.

Smart Import knows those pairs, which matters more than it sounds. If only one of the two columns is recognised, every row in the other one parses to nothing and is dropped, and you get a statement with all its spending and none of its income. The total still looks plausible, which is the problem.

What a statement cannot tell you

It has no categories. Money Talks suggests one per merchant during the import, and you correct the ones it gets wrong. That takes a few minutes for a year of history and it is the only manual part.

It cannot see your other accounts. Move money from your current account to your savings and the statement shows a payment out, with no way to know where it went. Those rows arrive as ordinary spending. If you import statements from both accounts you will see both halves and can fix them.