Bring your history into Topf
Topf reads a CSV table from a bank, another app or Excel. You show it where the date and the amount are, and before anything is added you see how the transactions will land in your book.
- Topf 1.3 on iPhone or Android
- A CSV file
- No connection needed
The screens are drawn from iOS 27. On earlier versions some of them look a little different.
-
Get a CSV file
Download a statement from your bank, or an export from another app, as CSV. Leave the bank’s header above the table as it is: Topf finds the row with the column names by itself.
An Excel, Numbers or Google Sheets file has to be saved as CSV first. Topf does not read .xlsx. More about the file
-
Open the import
In Topf, open Settings, then Import in the Data group. Tap Choose file and choose the table: in Files on iPhone, in the file picker on Android.
-
Show the date and the amount
Two columns are needed: the date and the amount. If Topf did not recognize a column by its name, tap Choose and point to it. Each column shows its first value, so the right one is easy to spot.
Account, category, note and currency are optional: use them if the file has them. More about columns
-
Check how they will look
Above the columns, the first transactions appear just as they will stand in your book. If the expenses in your file have no minus and show up as income, choose Expenses without a minus in the menu of the amount.
-
Pick the account and import
On Accounts and categories, choose the account the transactions go to, or create a new one. The top line tells you how many will be added and how many are already in your book.
The button names the exact number of transactions. Writing takes seconds and works without a connection.
Changed your mind? An import is undone as a whole. The import screen shows Last import with Undo import: tap it and confirm, and what the import added leaves the book. More about undo
The file
Topf reads CSV, a common table format. If your bank or app offers CSV among its export formats, choose it. Columns may be separated by commas, semicolons or tabs; Topf works out which.
- Excel: File, Save As, and choose CSV UTF-8.
- Numbers: File, Export To, CSV.
- Google Sheets: File, Download, Comma-separated values.
A file can have up to 50,000 rows and 20 MB. A larger one is easier as several files, one per year for example.
If letters turn into odd symbols, the file was saved in an older encoding than UTF-8. Topf does not guess: it shows how the words of your file read in five encodings, and you pick the one where they are right.
A bank statement often has a few lines about the account above the table. Topf finds the row with the column names; if it chose the wrong one, open the menu under the file name and pick another row, or say the file has no headers.
Columns
Each field of a transaction gets a column of the file. Only the date and the amount are required; for the others, this is what happens without them:
- Account: you choose one for the whole file on the next step.
- Category: expenses go to Other expenses, income to Other income.
- Note: none.
- Currency: the currency of the account.
- Time: from the date, or noon.
Topf fills a field by itself only when it is sure: a column called exactly like the field, with every value readable. A file exported from Topf is recognized as a whole, in any of its languages. Whatever you choose yourself stays chosen.
Amounts
Files write amounts in three ways, and the menu of the amount covers each:
- One column with a sign: expenses with a minus, income without. Nothing to do.
- Expenses without a minus: for files where spending is positive. Without it, your expenses would arrive as income.
- Expense and income in separate columns: for statements with a debit and a credit column. Choose both.
An amount written as 1,234 means 1234 when the comma separates thousands, and 1.234 when the comma is the decimal separator. When a column can be read both ways, Topf asks and shows how a value reads in each case.
Dates
A date like 05/04/2026 is April 5 in one country and May 4 in another. Topf decides over the whole column: if every value can be read both ways, it asks, showing how each one reads.
A transaction without a time lands at noon; one dated today, no later than the current minute. Dates in the future are not imported.
Accounts and categories
On Accounts and categories, every account and category of the file gets a line, and you say where it goes: an account or category of your book, a new one, or Do not import.
Topf matches by itself only when there is one clear answer: the same account by name and currency, the same category by name and type, or whatever the last import of this file created. When several fit, the line asks you to choose, and the button waits.
A new account starts with a zero balance, and its balance becomes the sum of its transactions: a CSV file has no starting balance. You can correct it in the account afterwards.
In the free version, the import creates as many new accounts as the free version allows; the others wait on Do not import with Plus beside them. Categories have no limit.
A file from Topf
A file exported from Topf is recognized as a whole: its columns are matched by themselves, and accounts and categories are found by their IDs. It is the way to move transactions to another account or to bring back what you exported. The file holds transactions only: budgets, recurring transactions and starting balances do not travel with it, and the amounts in your main currency are not read, since the rate is taken again for each date.
In an export of all accounts, a transfer stands as two rows, and Topf puts it back together as one transfer. An export of a single account holds only its own side, which becomes a transfer if the other account is already in the book with the same currency. Files from banks and other apps have no such pairs: each row becomes an expense or income, because pairing rows by date and amount would be a guess.
Importing again
Importing the same file into the same account again adds nothing the second time. Statements that overlap, such as two months sharing a few days, add each transaction once. Imported into another account, the same file lands there anew. The same holds for an import made while you used Topf without signing in: after you sign in to Topf, the same file can add its rows again.
Topf recognizes a row by its full contents. If a bank renumbers or changes rows in every new statement, those rows can be added a second time. Before importing, check how many transactions the top line on Accounts and categories says will be added; if the result is wrong, undo the whole import.
A transaction you deleted in Topf is not brought back by importing again: import moves data in, it does not restore a backup.
Rows that were left out
Topf does not guess a row it cannot read exactly. The top line on Accounts and categories counts such rows; Details names each row and the reason:
- no date or no amount, or a date that does not exist;
- a date in the future, or an amount of zero;
- more decimal places than the currency has;
- a currency that is not recognized or differs from the account’s;
- a note longer than 280 characters.
Currency can be written as a code such as EUR or a sign such as €. The signs $ and ¥ belong to several currencies, so a code is needed for them.
Undo
Open the import again, tap Undo import under Last import and confirm. The transactions of that import leave the book, even ones you edited later; the accounts and categories it created go too, unless something else still uses them.
Undo is kept on this device until the next import. It is not available on your other devices, and an import made while you used Topf without signing in can no longer be undone after you sign in. After an undo, the same file can be imported again with any choices.
If Topf was closed in the middle of an import, what was written stays in the book and can be undone the same way: the import screen shows how many transactions were written out of the total.
Price and exchange rates
Import is free. Each transaction lands in the currency of its account, and the rate to your main currency is taken for the date of the transaction, as when you add one for a past day.