68 comments

[ 4.5 ms ] story [ 77.8 ms ] thread
Plain text files are appreciated.

I started storing all my notes (500+ by today) in markdown files locally. It's easy to search and navigate with grep and ag/rg. It's easy to edit in Vim or your favorite editor. It's easy to append all sorts of informations. I add some flags and properties in metadata, like last_reviewed, some tags, etc.

The versioning and sync is solved by git + a private github repo.

I have 14 years of personal (and 2 years of sole proprietorship) finance data in beancount. I tried all the available personal finance apps there are, from cloud/online offerings to offline apps. Eventually, I settled on beancount because it is the most versatile file format. In addition to tracking finances, I can track stocks, unvested RSU grants, vacation hours, and even personal training I have paid for but yet to use.

It's cumbersome at times, and I do miss the (G)UI of entering transactions, but with (neo)vim I got used to it and I breeze trough my finances in 15-20 minutes once a week.

> 30-45 minutes every single month

That's 6–9 hours every year!

5 years: 30–45 hours

10 years: 60–90 hours

I've been beancount'ing for years now

As we've crossed into the new year I've switched to a similar directory setup as the OP with 1 file per year. Previously I just had one file that was from 2022 which ended up being like 2 million lines of text, which was starting to bog down the emacs plugin.

What I appreciate the most about this approach to personal finances is it just tracks everything. Investments, pensions, RSUs, bank accounts. You could even go as far as accounting for any resource that's modellable, e.g. energy usage in kwh vs. bills. I probably wouldn't go that far though :D

Also you can build a bunch of tooling around it too, with the advent of LLMs my toolset for beancount management has expanded quite significantly. Most recently I got claude to rewrite my transaction rules engine https://djharper.dev/post/2025/08/19/using-llms-to-turn-scri... into something nicer with a UI. This would have taken days to build in the before times, and I probably would not have bothered because it's overkill for 1 user (me)

Having all transactions in bank accounts makes it trivial to regularly export statements and parse them into financial insights.

I made a tool that parses transactions (of my specific bank) into categories based on tx description and a GUI to analyze them in different time frames.

Highly recommend.

beancount is definitely fun. I also jumped on this bandwagon in 2025 and it's been a great archaeology experiment of digging through old emails and trying to find as much data as I can about what the heck this random checking transaction is from 2012.

I think a nice thing about beancount is that given how simple it is you can almost even ignore whole parts of it. In my case I chose to write my own importing tooling essentially without learning at all about the built-in one: https://github.com/Julian/alubia. I had no intention to make that approachable for lots of users not named me (in fact none of my actual importers are present) but it's been very fun to watch my ledger get more and more accurate.

I began with PTA recently. I think the barrier to entry is high because you first need to learn double entry bookkeeping (if you haven't already) and then you need to decide between ledger-cli, hledger, or beancount, with the differentiators being on the margins and with some promise of being able to switch later. The choice really comes down to which tool has the documentation/community that makes the most sense to you at the time.

Then, there's the import workflow: which "accounts" should you start with? How much history do you pull in? How do you set up an automatic importer? Hledger has a DSL. Beancount uses Python. Either way, an OP says, much of your time is spent manually editing text.

And finally, then what? Can I make a budget now? Will this thing do my taxes? Am I more financially responsible? How do I explain this to my spouse? My pension is kind of like a commodity, but I don't know what the unit price is, and I don't sell units, but what's a virtual PnL and what if I only have a quarterly PDF!?

It may sound like I'm ranting, but I have found that realizing I don't know the answers to these questions (or even that they exist) is the true benefit of PTA.

Every year, I'm asked if I want a different pension investment mix or if I want to change my car insurance. Or, I might wonder if I'm getting a good deal on my internet plan or if a new job offer's total comp is actually better. Am I "on track" for "retirement," how long until I have enough for a new roof, am I keeping up with inflation, did I spend too much on gifts this year?

There's immense privilege in not really needing to know the answers to these questions; getting them "wrong" won't really hurt you. But, being familiar with the routine minutiae of your economy by way of counting every cent, is rewarding, enlightening, and empowering—even if it's also finicky and brittle sometimes.

I may have to try beancount again. OP's importers look promisingly robust compared to my hledger scripts.

Shoutout to fava, the beancount GUI frontend:

https://beancount.github.io/fava/

I really like its big picture view of the accounts, the search / query interface, and live editing of transactions.

In case the author reads this: Your imprint is incomplete. The legal address is missing. And the blog is missing an imprint altogether.
I can get all my historic accounting records into any of the PTA tools, but then I'm stuck without standard processes for creating invoices, doing deposits, writing off bad debts, depreciation, loan repayments, recurring payments, etc. etc.

All those require standard entries and processes, which I've yet to find, which means that now I need to become an accountant and write these standard tools.

None of which generates any income and only creates more work for myself.

I absolutely hate my current accounting software, but this is not (yet) a viable option as far as I can tell.

Happy to learn I'm wrong.

Very good for a budget. And as a text file, they rot just about the same speed as the media.

But what about basic Cost Of Goods Eaten?

I have fading thermal tapes in boxes with grocery store purchases. They get scanned once a year into large PDFs: grocery, home goods, repairs (large purchases are kept separately for easier finding).

I’m considering if a personal AI subscription to manage the data interrogation is worth the cost (not excited about the $20/mo cost. NPR should get the next $5 of my monthly).

Now here’s the funny part. The data sits in a box all year or in PDFs for years, and gets little attention. What janky home server AI could I spin up to perform as bad as me (but no worse)? Maybe move the data in those text files and PDFs into SQLite?

Thanks for showing this! I personally have a 4 years old Money Manager EX (MMEX) database, but I am always looking forward to something new, yet nothing for me have worked as good as MMEX. This looks good enough, albeit I need a GUI for this, and the comments might already put me into the right direction.

I am already used to logging everything manually, so importing isn't needed for me. Also I think having some 'manual labor' in this regard can help with becoming more 'in tune with your finances', to actually learn what is going on, instead of having an app that you check once a month.

I started to use PTA several times already, and I always have an issue with the granularity of transactions. For example when I go to the local supermarket, do I track food and hygiene products separately ? Some supermarkets give the subtotal for different categories, some don´t. It could be useful to see where the money goes.

I'm about to start out again and I chose not to track different categories individually, knowing that I can still add sub-accounts to distinguish between them later (even if I can´t recover the information for older transactions.)

Now I just need to investigate how to track gains/losses on the ETFs I own but that's common enough that there should be information out there on how to do it.

What's the startup time for using beancount if I've never done it before?

I just spent a few hours using LLMs (aider, specifically) to reconcile my books for the past year. Worked great, but was slightly fiddly.

+1 to OP's book, which is the best beginner guide I've found for understanding Beancount / plaintext accounting.

I was also confused about double-entry accounting for most of my life until I read the article, "Accounting for Computer Scientists"[0] by Martin Kleppman (author of Designing Data-Intensive Applications). It explains double entry accounting in a surprisingly accessible way by putting it in terms of graph theory. I don't even like graph theory that much or consider myself competent in it, but Kleppman's explanation was extremely effective.

[0] https://martin.kleppmann.com/2011/03/07/accounting-for-compu...

I'm a big fan of plain text accounting also. Like the author - I started 10 years ago (mine from 2015). I use hledger mainly and also wrote converters for bank I use (xlsx to csv).

It's crazy to see just how much money I've paid Netflix since 2015 (and I'm a sub since 2011). Or Starbucks (which I rarely go to). But it's very powerful. One thing I've long wanted is better visualizations.

Looks like it's four years for me with beancount.

    $ git log --oneline --reverse | head -n1
    5f72575 Initial commit: January 2022
My importers take care of reconciling the common transactions, like train fares and groceries, which means my monthly session takes under an hour. The slow bits are exporting CSV statements from my banks, and reconciling transactions from amazon and the local pet supply store (is it useful in practice to track litter and treats separately? probably not).

I'm also yet to migrate to beancount v3.

I found that doing anything too detailed was too big of a chore for what I got out, and that I didnt get much from doing budgeting.

I ended up just logging my total holding of cash and stocks spread over my different bank accounts and my investment portfolio. Doing it every few months helped me make sure that my overall holdings went up. As long as I pay off my bills and then save enough to see my holdings rise I am happy. However I can see that having a more detailed overview over your spending might help you cut down even more.

I go a step further than this, which is to make the beancount files 100% generated by a program - no manual edits allowed at all. I have a version-controlled directory with the raw data (csvs, pdfs, weird text formats) from a bunch of different sources (bank accounts, payslips, pension funds, mortgage statements, and stock market price data). The process is then just an ETL pipeline to an intermediate data structure. That data structure can be serialized to beancount format, hledger format, whatever. I've even had it output prometheus metrics so I can create nice dashboards in grafana.

I dump more raw data in every month, handle the 1-2 new edge cases in code, and voila: a complete, accurate, queryable, debuggable, visualizable, and fully reproducible history of my finances.

How do you deal with one of transactions? How do you assign them to the right account?
For checking accounts, I have a list of rules that each transaction passes through. If a rule matches it generates the double-entry transaction going from the checking account to the account listed in the rule (or vice versa if the amount is positive). Earlier rules take precedence over later rules. If no rule matches it errors and prints out the transaction so I can add a new rule.

The main account I use for day to day spending is Monzo, they correctly categorise 99% of my transactions for me (and this is included in the csv export) which makes this way easier.

For anyone else wondering which PTA solution to try/choose, I found this summary: https://plaintextaccounting.org/FAQ#which-pta-app-should-i-c...

I think I'll finally give PTA and beancount a go this year. I'm tired of changing and re-learning tools due to enshittifcation, so I heavily prefer those that use open formats / plaintext. I use Obsidian for my notes, specifically because it's just Markdown files. Since I realized that I don't even really use most of Obsidian's features, I might just switch to a regular editor + a markdown viewer.

Do folks any recommendations for automation around banking? We use a sort of "envelope system" across many accounts, and it would be helpful to have some timing to help automatically move and rebalance funds across the accounts.

My bank has some very limited options to move specific amounts of money on a weekly schedule, but I'm looking for something more powerful then that.

Should I look at like ~Stripe~ Plaid or something? Or are there more pre built tools?

I've been doing it since 2011 with ledger, so over 14 years! It's quite cool to see my finances over that time and reflect on it. I made a machine learning thing years ago to read my bank statements and categorise them into my accounts. I also have a few scripts for plotting it all with matplotlib, including an overall wealth plot which shows key life/world events for context. Can share these if there's any interest.

I'm now considering combining by finances with my partner. It would make a lot of things easier. We'd get paid into a joint account and then pay ourselves into individual "spending accounts" according to our budget. Anyone have any experience with this kind of thing?

I've tried to track personal finances several times, but it only started to work when I've discovered the idea (from https://github.com/adept/full-fledged-hledger) that you need to treat the whole PTA story more like a project compilation:

- Everything is managed by build system that is able to track dependencies

- Inputs from financial institutions are kept in the repo as is

- Those inputs are converted by your scripts to .csv files that are readable by PTA import engine

- There are rules files that describe how to convert .csv lines to PTA entries

- Generated files are included from per-year PTA journals (and you can put any manual transactions in here also)

The benefit is that you can change any part of this pipeline, and just re-generate the changed parts:

- improve the program that converts to .csv - raw data immediately gets better across the whole repo

- add/customize import rules - better classification is immediately applied to all of the past data

And with this approach you can start small (like, a single month of data from your primary bank), and refine the thing in steps, like adding more historical data or adding more data sources (examples being not only bank statements, but even things like itemized Amazon orders and Paypal slips).

Thank you! I’ve always procrastinated tracking finances, but as a programmer who believes in reproducible builds, this just clicked.

I just downloaded a bunch of qfx and csv files, and got Claude Code to do this. Took an hour to create the whole system from nothing. Then of course I stayed up until 2am getting CC to create Python rules to categorize things better, and trying to figure out what BEENVERI on my bank statement means

(If you do this, make Claude generate fingerprints for each transaction so it’s easy to add individual overrides…)

Getting Claude to write a FastAPI backend to serve up a “Subscriptions” dashboard took about 3 minutes, plus another minute or two to add an svg bar graph and change ordering.

Crazy times.