โ† Finthemis

I store my financial data in plain text files

By Alex ยท May 2026

Every budget app I've used stores my data in a way I can't see. SQLite databases, CoreData stores, proprietary cloud formats, or worst of all, on someone else's server with no export button. My financial history ends up locked inside an app that might get acquired, shut down, or just stop being updated.

When I built Finthemis, I made a different choice. All your data lives in a folder you pick, stored as CSV and JSON files you can open in any text editor or spreadsheet app.

What the folder looks like

Here's the actual structure:

Finthemis/
  config.json
  account-history.csv
  transactions/
    2026-01.csv
    2026-02.csv
    2026-03.csv
  income/
    2026-01.csv
    2026-02.csv

That's it. config.json holds your categories, rules, and account definitions. Transaction and income CSVs are split by month. Account history is one flat CSV with every balance snapshot you've ever recorded.

Open any of these in Numbers, Excel, or Google Sheets and they just work. The columns are human readable: date, amount, description, category. No binary blobs, no internal IDs you need to decode.

Why this matters

The obvious reason is backup and portability. Your data is files in a folder. Put the folder in iCloud Drive and it syncs. Put it in Dropbox. Put it on a USB stick. Copy it to your laptop. The app doesn't care where the folder lives, you just point it there.

But the deeper reason is trust. Financial data is deeply personal. I don't want to trust a startup's servers with my net worth, spending habits, and income history. I don't want to wonder what happens to that data if the company pivots or gets bought. And I don't want to be stuck if I decide to stop using the app. With plain files, "stopping" means... you still have all your files. Open them in a spreadsheet and keep going manually.

You can edit them

This is the part that surprised me most during development. Once your data is in plain CSV files, editing it outside the app becomes natural.

Miscategorized a transaction? Open the CSV in Numbers, change the category column, save. The app picks up the change on next launch. Want to bulk-import six months of history from your bank? Export a CSV from your bank, massage the columns to match, drop it in the transactions folder. Done.

You can even add new rows without opening the app. Leave the ID column blank and the app generates one automatically. Fill in the category name (not the ID) and the app resolves it.

The app treats the folder as the source of truth, not its own internal state. It reads on launch, writes on change. The files are not an export format. They are the format.

What about performance?

A fair question. Reading CSV files on every launch sounds slow. In practice it's not. A year of daily transactions is maybe 400 rows. Five years is 2,000. CSV parsing is fast, and the entire dataset fits comfortably in memory.

The app loads everything into RAM on launch and writes individual files as you make changes. Writes are atomic (temp file, then rename) so you can't corrupt data by force-quitting mid-save. It's the same strategy that text editors have used for decades, and it works.

What this rules out

There are real tradeoffs. Plain files mean no real-time sync between devices. If you edit the same CSV on your phone and your iPad at the same time, you'll get a conflict, and the conflict resolution is whatever iCloud Drive does (which is: pick one, put the other in a conflict copy). For a budget app where you typically add a few transactions a day from one device, this hasn't been a problem. For a collaborative app with multiple users editing simultaneously, it would be a dealbreaker.

It also means no server-side features. No shared budgets, no bank aggregation APIs, no push notifications from a backend. Finthemis is a local-first app. Everything happens on your device. If that's a limitation for you, there are plenty of apps that take the server approach. This one doesn't.

The folder is the product

I think of Finthemis less as a database with a UI and more as a really good editor for a specific folder structure. The folder exists independently of the app. The app just makes it pleasant to work with: nice charts, rule evaluation, widgets, quick entry. But the data belongs to the folder, and the folder belongs to you.

If I disappear tomorrow and never ship an update, your budget data is still there. Open it in Numbers and everything still makes sense. That's the bar I'm building to.

Finthemis stores your budget as plain CSV and JSON files in a folder you choose. No accounts, no servers, no lock-in. Launching soon.

Subscribe โ†’