Your data

How to Import Bank Transactions From a CSV File

Shape a bank export or spreadsheet so it imports cleanly: column names, date order, decimal separators, signs and duplicate handling.

Educational scope. This guide explains a planning method, not personal financial, investment, credit, tax or legal advice. Ratios and examples must be adjusted to real essentials and local rules.

CSV is not one format. The same bank can ship a comma file to one customer and a semicolon file to another, write 1.234,56 in one country and 1,234.56 in the next, and put the day before the month or after it. Tenthwise reads all of those, shows you what it understood, and writes nothing until you agree with the preview.

What to remember

  • Any delimiter works: comma, semicolon, tab or pipe.
  • A header row is required; the column order does not matter.
  • Only a date and an amount are mandatory.
  • Everything is parsed in your browser. No file is uploaded.
  • Rows that already exist are skipped, so re-importing a statement cannot double a month.

The simplest file that works

Two columns are enough. A date and an amount give a usable ledger; everything else adds detail you can also fill in later.

If you want the full Tenthwise shape, download the template and keep its header exactly as it is. An export from Tenthwise already uses that header, so a file you export can always be imported back.

  • date — 2026-01-31, 31/01/2026 and 01/31/2026 are all read.
  • amount — a single signed number, or two separate money-in and money-out columns.
  • type — income, expense, saving, investment or debt. Omit it and the sign decides.
  • category — matched against your category names; unmatched names are left uncategorised rather than invented.
  • merchant, note — free text.
  • recurring — yes/no, true/false or 1/0.

What the importer works out for itself

The delimiter is detected by counting separators outside quoted text, so a comma inside a shop name does not confuse it. Column names are matched against a list of the usual headers in several languages, including Datum, Bedrag, Importo, Betrag, Montant and Buchungstag.

The decimal convention and the date order are read from the data, not assumed from your locale. If any day in the file is above twelve, that settles day-first against month-first regardless of the dropdown. Every one of these guesses is shown and can be changed before you import.

Signs, debits and credits

Most banks write spending as a negative number, which is the default. Some write every amount as a positive and put the direction in a separate column, and some use two columns — often labelled Paid out and Paid in, or Debit and Credit.

All three shapes work. Map the two money columns and the column itself becomes the sign; the amount you see in Tenthwise is always the absolute value, with the direction carried by the transaction type.

Reconcile before you commit

The preview reports money in, money out, how many rows were already in your ledger, and how many could not be read at all. Compare the two totals against the statement before importing: if they do not match, a column is mapped wrongly or the decimal convention is inverted.

Rows that cannot be read are listed with their line number and the reason. They are skipped, never guessed at. A row with an unreadable date is a row you should look at, not one the software should invent a date for.

Duplicates and repeated imports

A transaction is treated as already present when its date, amount, type and merchant all match something in your ledger. Importing January twice therefore adds nothing the second time.

The trade-off is deliberate: two genuinely identical payments on the same day to the same merchant will import as one. If that happens, add the second one by hand, or put something distinguishing in the note column before importing.

Getting your data out again

Export from the Transactions view writes the same header the importer reads, so the file round-trips without loss. The JSON backup in Settings is the complete workspace, including accounts, debts, goals, budgets and snapshots.

Both are plain files on your device. Nothing about export or import requires an account, and neither sends your ledger anywhere.

Frequently asked questions

Is my bank statement uploaded anywhere?

No. The file is read in your browser, and the transactions are written to your local workspace. Nothing is sent to a server during a CSV import.

My bank uses semicolons and commas for decimals. Will that work?

Yes. The delimiter is detected from the file and the decimal convention from the amounts. Both are shown before you import and can be corrected.

What if my file has no header row?

Add one. A single line such as date,amount,description at the top is enough; the importer needs names to map columns to.

Why were some rows skipped?

They had no readable date or no readable amount. Every skipped row is listed with its line number, so you can fix the file and import again rather than losing the row silently.

Can I import a PDF bank statement?

Not yet. A statement reader is built but stays switched off until the paid tier and its data-processing terms are complete. CSV is the supported route today.

Sources and method

Original documentation of the Tenthwise import behaviour. Column-name hints are drawn from public bank export formats; no external service is contacted during an import.

Book ideas are paraphrased and implemented as original workflows. See the full source and methodology note for canonical authors, limitations and local-source availability.