Skip to main content

Import Your Transaction History From CSV, OFX, or QFX

Christopher Wilbanks5 min read

I have argued here that a finance app should work without your bank, because handing your banking credentials to a third-party aggregator just to log a coffee is a strange trade to make on day one. But the moment somebody agrees with that and actually looks at switching, they hit the part I kept skipping. They have four years of transactions sitting in the app they are leaving. Starting fresh is a clean principle and a miserable answer to "what about everything before today."

I ran into this myself when I moved my own finances over to Trupocket. For a while I kept my old app going alongside it, which meant entering every transaction twice, and it was a chore.

Exporting your history as a file

If your bank, credit union, or old finance app has an export or download button, it gives you your transaction history as a file. Nobody has to approve that, and the two apps never need to talk to each other.

The formats that matter here are CSV, OFX, and QFX. CSV is a plain spreadsheet with one row per transaction. OFX and QFX are older financial formats that banks have offered for decades, and they label the date, the amount, and the payee inside the file. Trupocket now reads all three.

How importing a CSV, OFX, or QFX file works

You pick the account the history belongs to and upload the file. For a CSV, Trupocket shows you the columns it found and asks which ones hold the date, the amount, and the payee, since a CSV has no fixed layout. OFX and QFX label their own fields, so they skip that step and go straight to the preview.

Before you confirm, you decide what to do with each payee and category in the file that your household does not have yet, and with each row flagged as a transfer. Then you confirm, and the import is saved all at once or not at all.

A single import takes up to 5,000 rows. At 100 transactions a month, that is a little over four years of one account, and a longer history takes more than one file.

Your plan's monthly transaction allowance is a separate limit. Imported rows count against the month you import them in, whatever their dates, and Free allows 60 transactions a month, so a multi-year backlog needs Premium or above. The preview warns you if the rows you selected would go over, and the import checks again when you confirm.

The third limit is how far back your plan lets you see. Free shows the most recent 90 days, Premium the most recent 2 years, and Pro and Developer show full history. Every imported row is stored either way, but on a shorter window the older rows stay out of view until you change plans.

Nothing is written until you say so

The preview writes nothing. It compares the file against the ledger you already have and lists what the import would do: the new rows it would create, the duplicates of transactions you already have, the rows it could not read and why, the payees and categories it would have to add, and the rows that look like money moving between two of your own accounts.

Duplicates are flagged for you, because only you know whether two identical coffees on the same day were one purchase or two. Transfers are flagged for a similar reason. Moving $500 from checking to savings keeps the money in your household, and importing both statements as they are would count it twice, once as an expense and once as income.

I would rather an import stop and ask than guess, because a wrong number is much harder to find later than a missing one.

Why I built the file import first

I built the file import before any bank connection because it fits what I have been arguing on this blog: you download your own file, give it to the software you chose, and the software sees only what you handed it.

Trupocket does not connect to your bank, and this import does not change that. An optional bank connection is still on the roadmap for people who want the convenience. You would switch it on yourself and could turn it off again, and it will sit on top of a product that already works without it.

The file import also covers something a bank connection cannot reach: your old budgeting app. It is not a bank, so no aggregator connects to it, but if it can export an account's history as a CSV, OFX, or QFX file, that history can come in, one account per file, for any account except a loan.

What the import changes

Trupocket is still built around entering transactions yourself, and I still think logging your own spending is what makes you notice it. The import matters most on the first day. A new budget is easier to set with last year's spending in front of you, and category trends need a few months of data before they show a pattern. With your old history imported, the reports have something to show from the start, within your plan's history window, and from there you keep the ledger yourself.

If retyping years of transactions is what kept you from switching, you can bring them into Trupocket instead.