My less obsessive personal finance workflow: I have a spreadsheet. I update it by hand once a month, and have been doing so for ~20 years. Takes about 5 minutes. I only track the categories I care about. Those have varied a bit over time, but have always included staples like power, heating, water, ISP, rent/mortgage, insurance, savings, etc. I don't track things like groceries or restaurants or anything else that I consider to be part of "living life".
Two main goals: track how my expenses evolve over time, and stay on top of how much money I need to reserve for the coming year to pay those bills. Anything that's leftover is spending money. Which I dutifully spend.
I do the same, except I track even a bit less. I track monthly all account balances, salary/income, paid taxes, transfers to investment accounts, rent/mortgage, and health insurance. This is enough to map investment performance, financial position, and necessary living costs. Mostly everything else is "a life lived" expense and I don't see a need to do any finer tracking there.
If you have plenty of income, tracking grocery expenses might be a waste of time, like tracking how much air you breathe.
If your income is barely meeting your expenses (or worse), the grocery budget is one of the few places you can make meaningful decisions that will lower your costs.
And there's a tricky middle ground where it feels like you have enough income, but if you don't pay attention, you'll die by a thousand cuts to small expenses that feel insignificant by themselves.
I used to track every single payment, thinking I was doing excellent budgeting. But in reality it was mostly bikeshedding. The current approach works well for me, but I can totally see a use for tracking more in some cases. If I were a smoker or a heavy drinker I'd probably track those, for instance.
Yes, very true. It might be useful to start with overtracking to see where the money actually goes.
I didn't track anything until about 5 years ago as my mental model was "track all purchases", and I wasn't willing to do that. Someone had to point out that higher level tracking can be quite useful too, and this is what I found to work well for me. That's why I bring this up in related topics: it's not an all-or-nothing choice.
I am also using a spreadsheet now. I used to do things in plain text files, even did one year entirely in org-mode in emacs. But I started a spreadsheet the year I got married so my spouse and I can look at things together.
We track way fewer categories than you do. But in addition, we also track larger expenses by amount. Right now everything over $100 gets an entry. That means a fancy $100+ dinner gets tracked but a normal $30 dinner doesn’t.
If you want a bit more automation on your spreadsheet, check out Tiller. They provide the integrations with your banks to automatically download your transactions into a spreadsheet (support Sheets or Excel), as well as some handy templates that you can use for budgeting/dashboarding/whatever. But fundamentally, just pulling data into a spreadsheet so that you can use it however you want.
I'm also less obsessive than some people but I don't want to use anything proprietary or have to pay for a product to track my finances ("Hey you spend a lot, we can help, how about you spend more on us?" is just ridiculous).
I do everything with CSV exports of my bank accounts and credit cards. I drop the exports once a month into a directory and Python scripts (my newer versions of which are mostly written by LLMs) take all the analysis from there, breaking things down by category and by merchant (so that I can see if I'm unintentionally spending more on a particular merchant over time or if that merchant is charging more without notice).
I also have one credit card for strictly recurring expenses ONLY and never put non-recurring expenses on it. That way it's quite easy to see on that credit card bill what changed from month to month. If Comcrap tries to charge me $10 more one month they're going to be getting nasty messages from me pretty quickly.
> I also have one credit card for strictly recurring expenses
I do the same. I have a bank account dedicated to all those recurring expenses I track. Every year I make a budget for those categories, work out the monthly average, and set up a transfer for that amount into that account. Some prices fluctuate quite a bit (like power) while my mortgage has a fixed rate, so I apply a healthy margin to make sure there are no nasty surprises.
+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.
I'll see your decade old text file and raise you one more: my current quicken file goes back to 1992! Lemme tell you about gas and grocery prices back then... (hint $1.09/gallon in Oneida, NY and $15/bag at Price Chopper)
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).
The mortgage payments always confused me and that link has a good explanation of how it works. Have you used that code base in your own system or just the principles? I don’t know Haskell so not sure how much I can/need to modify.
Do you want to share what's confusing about mortgage payments?
You have a balance that accrues a monthly interest. Separately, you're told that you're owed a monthly payment. If monthly payment > interest, then the difference is subtracted from the balance. No need for haskell.
Yes, I'm using parts of this codebase. But Haskell is only being used as a build tool, so you can replace it with anything that you're comfortable with, like make, bazel, ...
I started decades ago using Quicken. Then had to re-enter all my data when a new version came out and support for the old version was EOLed. So I switched to GNU Cash and re-entered everything again. Then there were migration issues with GNU Cash.
Finally I discovered PTA. I chose hledger (because of possible performance issues with beancount). I learned double-entry bookkeeping (it's pretty simple, honestly). I write Python scripts to import investment statements sent in PDF format (broker does not support transaction downloads) and pay stubs (payroll company does not do transaction downloads) and CSV imports for bank and credit card statements which lets me autocategorize most transactions. Turns out it's exactly what I wanted all this time I just didn't know it.
I spend about an hour each month updating accounts. I generate investment reports, budget reports, and tax summaries. It's all there, except tracking the ACB of my investments (which I probably could do except a simple spreadsheet is less effort). Everything I need for my coming retirement this year.
And because it's plain text I will never have to lose everything when data formats change due to new upstream releases. And because it's plain text I can use git to track changes and recover and do better off-site backups.
I guess the downside is it doesn't work on your phone and you have to know what you're doing. But if information like how much money you have and where you're spending it is actually important, it's the right tool for the job.
I can't seem to ween myself off of reliance on Quicken. I really want to, and I hate that I am tied to Intuit software. I hate that every transaction I've made since 2000 is stored in a proprietary binary blob.
But I can't find an alternative that has cracked the killer feature: Syncing with each of my online accounts. I like to track every expense and every transfer down to the penny, and then update from the bank's online connection to confirm each of them. I do this daily so I can catch any fraud or mistakes. I have 27 accounts tracked, and I'm simply not going to log in to each of them using their janky web sites, download CSVs, and import them manually into personal finance software. It's just not going to happen. Quicken's support for this is far and away the best out there.
Doing this all in plaintext and copy/pasting from downloaded CSVs every day seems like an absolute nightmare.
Unfortunately, the trend seems to be banks turning down their public-facing OFX services, and instead moving to the model where Intuit is the middleman and you need to tether yourself to them, who in turn channel your requests to the banks. So it's been getting even more and more difficult to escape from Quicken.
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)
I track my propane in an LPG commodity at a fixed price per season. It saved me about $100 once when a transaction wouldn’t balance. I was accidentally partially charged for a short load delivery on one of my tanks at almost double the rate. Even if it seems silly to track at this fidelity in the moment, I wouldn’t have caught this tracking USD alone. Billing mistakes happen and can be costly!
Nice! That sounds really useful; in my case the KWH usage (and price/KWH) I pull directly out of the ConEd bill, so my only chance to notice those sorts of things would be post hoc looking back in time for big jumps in rate or usage I think.
But good to hear the positive story side for this.
I struggle with tracking the actual cost of my energy usage between changing electric rates, the various solar costs, SRECs, different loans and credits and incentives to be able to make an intelligent decision on what the benefit or cost is of cutting an appliance or adding something new. It’s a lot.
And when it’s fragile even when working. The cost per unit changes with limited notice in various ways (line rate, unit cost, time period that various rates occur, the day, ‘free’ power bonuses etc).
I'm curious about this as I've thought about building personal software to manage my data (such as finances) via LLM, however I'm apprehensive about actually supplying that data to the LLM to help build the tool. Is this what you're doing? Now that I think about it, I could probably 'anonymise' the data with a local model...
Just go for it in your favorite programming language, it's a nice exercise and in the meantime you can learn about (double entry) bookkeeping.
I did that for myself and it took me at most three months of parttime working on it, resulting in a bespoke solution. No need to keep paying some SaaS or fiddling around in Excel. One still needs to learn the bookkeeping system though, but that's true for all options. A SaaS is not magically make that go away.
A lot of people in this thread comingling "plain text" with "double entry".
Beancount is both, but you can do either one or the other or both. In particular, you DONT need to learn double entry to do plain text accounting. Of course, you SHOULD learn double entry accounting because it's a great tool for organizing knowledge.
Whether plain text is beneficial for accounting is less clear cut in my mind. I think plain text is backlash against the over-reliance on "services", "clouds", and "lock in", but I think it's misguided. If you're concerned with someone locking you in, it's perfectly concievable to do double entry accounting which lives only on your computer and manipulated with software that is under your control (read: free software).
So in summary, my opinon is:
- accounting: important
- double entry: important
- avoid clouds and ventor lock in: important
- avoid proprietary file formats: important
- plain text: unimportant
(I use GnuCash. It's not without its flaws, but it's great if you agree with the above views)
First, automation is a new orthogonal dimension. You can have automation with or without plain text.
Second, your emphasis on "automation" leads me to believe that perhaps you misunderstand what accounting is. Accounting is not just taking a list of transactions and recording them (database, file etc). That is called bookkeeping. Yes, accounting is also amenable to automation, but much less so than bookkeeping. Although, you could argue that when applied to the life of a normal individual, accounting and bookkeeping are almost indistinguishable. You have income, you have costs, and you have a mortgage - pretty straightforward. My point is in general you cannot entirely automate accounting. The reason for that is that accounting isn't just processing bytes, but instead requires the understanding of the underlying economics associated with the transactions. This understanding in turn isn't stored anywhere other than the accountant's mental model of the entity he's doing the accounting for.
EDIT: Just to be clear, I don't disagree with you that accounting could use more automation. Everything could use more automation. But for something it's more straightforward than others.
This! It blows my mind every bank doesn't have a sort of scripting language of some sort that let's me automate whatever I want to happen. I've seen a few services that supposedly enable this but their prone to breakage, don't support one bank or another, or are simply way too expensive.
I suppose one problem with this is that accounting needs legal responsibility in case of mistakes. Software usually (if not always) does not guarantee anything (in the legal sense) and its seller/producer does not assume any responsibility whatsoever.
I've been using it for years, and it helps a lot. I would pay good money for someone to improve the UI, maybe even separate the accounting engine into a library that could be used by different UIs.
100% on the UI. My main gripe with GnuCash is that it's impossible to do "mass actions" from the UI.
On the point of "library" - you know that "GnuCash the app" comes with its lib, and there's python wrappers? I've only ever used these to produce reports (read, reports different from the ones provided by the UI). However I believe it's also possible to do things like inserting transactions via these python wrappers.
Another example of something which is possible via the python wrappers is labels. GnuCash doesn't support labels, but it supports adding general text to each transaction and to each leg of each transaction. So you can e.g. use hashtags in the text, and then consume transactions into python and aggregate on these hashtags, making them effectively labels.
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.
Besides being a mathematician and a programmer, I have a degree in finance and banking, so I learned double-entry accounting pretty early. As a mathematician, I appreciate the beauty of this very clever, very general and very abstract system. As a geek, I've been using ledger-cli with Emacs for a decade now, and Gnucash earlier.
Re: learning curve, it's not that difficult. Shameless plug: I wrote a textbook (actually, a textbooklet, if that is a word;-)) about the basics of DEA, focused on personal finance and using ledger-cli: https://leanpub.com/personal-accounting-in-ledger/
If you're running a business, double entry BK is essential. If you're doing personal finances it is completely overkill. I think the perfect tool is just excel or any similar spreadsheet, and track what matters for you. I usually add numbers weekly to my spreadsheet.
Double-entry bookkeeping is a transformational way of thinking about money. There's a reason it took over the world. Even if I just tracked expenses in a spreadsheet, it would help that I know double-entry.
The concept of DE BK is simple, yet powerful. The difficult part is to track every penny. For personal finances that doesn't make much sense, but for a business it's essential.
I think there's definitely something in it around there's a huge learning curve.
Double entry book keeping isn't that difficult but that's easy to say once you've been doing it a while
I've been doing PTA since around 2018 and there's definitely lessons I've learned along the way along with plenty of mistakes.
I think the main benefit for me is just the system gives you a complete picture of your finances. The commercial services you can pay for just give you a view into a certain slice (e.g. open banking in UK/Europe to see your current account(s)) - I think mint.com did something similar in the US but it never came over here, I don't know if it still exists. Maybe that's enough for most people, but for me I want everything, investments, liabilities, assets etc. None of these commercial offerings have that because it's so complex and niche, e.g. your open banking provider won't tell you how your pension is doing.
It's also just nice to have the provenance of transactions, e.g. if you receive some shares from work, and you sell the shares and the money ends up in your bank account - the incoming transaction will just be the net proceeds but it won't tell you if you paid any tax prior to that - PTA gives you a more of a complete picture that tracks the whole chain of events that led up that transaction into your bank happening. Overkill for most people? Probably.
Mint's value to me was destroyed long before 2024; its originally-reliable backend was swapped out for a third-party one (plaid?) and half my accounts couldn't sync -- making it useless. YMMV, but IME Monarch seems like the current best option in this space...
I work at Plaid, so this got me curious about who their provider was -- per Wikipedia, Mint used Intuit's internal account aggregation tools from ~2010-2024. It's possible that Mint swapped out to some other third party provider and Wikipedia doesn't know about it, but based on both internal and external records, I'm pretty sure it wasn't Plaid. (Intuit's Credit Karma, which was marketed to Mint customers as a replacement after Mint shut down, does use Plaid.)
I have no experience w/ PTA, but was a Mint user for a couple years before it got killed, and recently discovered Monarch which has similar features. But just this week I got set up w/ eMoney thanks to a friend who works in wealth management. It provides a centralized dashboard (like Monarch), but also the ability to run forecasts / projections, which will be helpful as things have gotten more complicated for us as a couple (running two S-Corps, paying for daughters' college tuitions, etc).
As an ex-Mint user, Monarch has been a very useful and I feel I spend way less time monkeying around trying to recategorize transactions. I really like the budget rollover feature, it really helps smooth out things like yearly insurance renewals. My only fear is if they start getting greedy and jack up the yearly subscription fee. I feel like around $100/year is just about right.
This sounds super cool and useful to me, but how does this work with a partner who's non-technical? Managing personal finances is something that we do together and having a nice clean UI that makes sense to her is important. Is there a way to achieve that with beancount? Currently we're using YNAB, which is mostly great although sometimes unstable and limited in ways.
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 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.
That's good enough for most people, but I also track my fixed costs over time, so I have a picture of how much money I need every month, and what could be eliminated if needed.
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.
Am I the only one using Microsoft Money Sunset Edition? Granted I cannot connect to banks and get live quotes, but I think it is well done and has a lot of features.
Where the date is the last day of the month that I need to make (the next day there is income, for me it's 19th, not 31th). Saldo is my bank account that day. Savings are, well, savings in a separate account. delta is the sum of special income and outcome. row 5 is all special income and expenses. Groceries are not listed, I need them every month anyway.
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.
In 2025 I started managing my small business finances using hledger (started with beancount, but got confused with missing packages in the new version). I use Claude Code to help me enter transactions eg from pdf receipts and to ensure the books are balanced. It's quite a pleasant experience I must say, as I find accounting tedious / not my cup of tea
I was really into this idea a few years ago. Even started logging.
However, I just cannot bring myself to constantly pull the transactions down manually from multiple banks.
Many suggest automating. How is this working in practice? Are there providers like Plaid you can use? Build web scrapers? Build PDF statement parsers?
I ended up just paying YNAB the $130/year or whatever they’re at now. High wife approval factor and everything just connects. They also have an API. In theory I could just constantly backup YNAB with PTA by pulling down transactions from the API.
I went the "build a few PDF statement parsers" route.
Some I wrote by hand using PyMuPDF, some I coerced Claude into writing (again using PyMuPDF) by uploading a sample bill (I'd never put my own data into an LLM but it's nice being able to find a sample bill, gets it close enough to correct that I can do the remaining bits if there are variations in bills over time).
Overall it's effort (and yes certainly a bunch effort for manually downloading transactions). The financial industry is very behind on this stuff clearly. I'm not sure in a few years whether I'll still think it's worth the effort I put in, which has gone down over the past few months as I automate things, but until it stops being fun I'll keep going.
I just made the jump to PTA and it is really, incredibly slick. Finally escaped the financial system's grip on my data. Look into SimpleFIN to get data feeds, but I also used LLMs and browsermcp to download all my statements from all of my banks.
Really awesome to have control finally. I am very interested in extending PTA to be more like blockchain ledgers, with signing for every transaction and decentralizing the ledger. still mulling through how this would work, but it would essentially be KERI based.
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.
It's about the value to you versus the effort you put in. For me the granularity you are talking about is too much effort. All my supermarket shops go in one big category "groceries and household".
Start easy and see what you want to get out of the data. If you can store the original source (e.g receipts) so that you can later go back and increase the granularity if you find yourself wanting it, that would be ideal.
Right, don't let decision paralysis prevent tracking.
I just put "Groceries" account based on the total that gets charged to my card. If there's a substantial item that doesn't fall into groceries then I can split that out on a case-by-case basis (e.g. I go to Costco and buy both a bunch of cereal and a dehumidifier).
Depends on how many different financial systems you need to import from. It took me a weekend to set up the importers alone between checking, savings, investments, mortgage, pay slips, and all the credit cards. Some don’t have csv output so had to do pdf to text conversion. There are examples in beancount but each bank was different for me.
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.
it's good (even novel) if you're a dev or are used to working with this kind of interface.
But for the vast majority of people (even including devs), this will not be ideal at all and most people don't really care about it being in text files.
What I'm trying to say is that its designed for a very specific niche userbase and I doubt most people will have the same experience as you described after trying every single personal finance app to settle on this.
How US centric is the software? I've found that a lot of these accounting/finance type programs have very prescriptive ideas and expected usage of it that doesn't really seem to even remotely match the type of exported data I get from my UK bank account.
The core software itself is completely agnostic to currency or country. Otoh the importer ecosystem is somewhat US focused but a) you can easily write importers yourself b) I just published importers for a bunch of UK institutions (e.g. HSBC, Barclays, AJ Bell) - see the other post hanging around the HN frontpage :)
$ 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).
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?
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?
If you just want to ingest varied data into a consistent format, qwen2.5vl:7b works well (in my use cases better than qwen3vl). The ollama version is quantized, perfectly adequate, and runs on normal consumer hardware (even more so if you don't care about speeds that feel interactive)
> Imagine one account for categorizing supermarket spending, one for tracking your income, one for your Netflix subscription, and so on.
Why would you go that unintuitive route instead of simply having a category "Supermarket" (with your most common supermarkets autocategorized by name) and payee "Netflix"?
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 don't want to cause a scene, but if you're not running your own business, why would you do this? There are commercial services out there that take next to no time every month.
Anathema?
Yes, I know the data live in a data-center/cloud. But, don't the content of all those statements, payments and bills live there too. Yes, I know the service might go away tomorrow. But, couldn't one find the new-new service and import it all again from the banks, cc companies, utility companies etc.?
I like text accounting. It's useful. It has a niche. But, is this the best use of your time every month?
Tastes differ, but 30-45 minutes a month to hand-key data (or write the scripts that avoid that) isn't my taste.
> Tastes differ, but 30-45 minutes a month to hand-key data (or write the scripts that avoid that) isn't my taste.
I'd wager it isn't most peoples' taste, which is why the off-the-shelf cloud-based options are as popular as they are. I see people in here doing things like writing PDF statement parsers and then dealing with the maintenance that this strategy entails whenever formatting changes and, well, I appreciate the people to whom this appeals, but I am not one of those people. :)
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.
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.
the beauty of beancount (and other plain text accounting ledgers) is the ability to automate them. I also have to go over my accounts in my bank app's automatic categorization and revise them every month, as some transactions get mislabeled.
I'd hope not. The math is simple and the concepts are simple. Even if you could trust the LLM to give the right advice or calculations, which you can't, there's the opportunity cost of developing those skills yourself. Would you rather have those primary and fundamental skills for the rest of your life or the more secondary skills that are proprietary to the moment and contemporary tools and models? There's an important difference between self sufficience and dependence.
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.
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?
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.
This seems to be, in effect, advertising for a book about how to use the underlying FOSS software to do this.
I would be okay with that as a monetization model, except that the book author despite being a self-described FOSS dev doesn't seem to have anything to do with the project (https://github.com/beancount/beancount/graphs/contributors).
Aside from the fact that writing a book about Beancount is a positive contribution, the author maintains a list of Beancount resources[0] and has written several beancount plugins.[1, 2, 3, 4] I have personally benefited from his contributions to the Beancount ecosystem.
Can you point to some of your contributions to this project?
If you look at their personal profile they've made a lot of content with activity and collaboration outside of the main beancount repo, related to beancount. They definitely meet the criteria for 'FOSS dev' in that it's FOSS, too.
Thanks. I was not denying the author FOSS creds generally, just expecting actual involvement. It seems this is someone who cares about the project (and I do like the sound of the project).
I'm just, you know, pretty sensitive to HN submissions trying to sell me something.
That’s a bad analogy because the qualification is being born in a region not acquiring knowledge thru working. an equivalent would be only electrician can write a book on wiring.
Do you mean wire and tool manufacturers? Electrician is mostly a user. Or to avoid flawed analogies - should books on Windows, Office, ... be only limited to a small subset of Microsoft employees? I'd assume the book is for users, what does it matter if the author contributed to the project?
And that's still ignoring that evangelism is also a valuable contribution.
Two main goals: track how my expenses evolve over time, and stay on top of how much money I need to reserve for the coming year to pay those bills. Anything that's leftover is spending money. Which I dutifully spend.
If you have plenty of income, tracking grocery expenses might be a waste of time, like tracking how much air you breathe.
If your income is barely meeting your expenses (or worse), the grocery budget is one of the few places you can make meaningful decisions that will lower your costs.
And there's a tricky middle ground where it feels like you have enough income, but if you don't pay attention, you'll die by a thousand cuts to small expenses that feel insignificant by themselves.
I didn't track anything until about 5 years ago as my mental model was "track all purchases", and I wasn't willing to do that. Someone had to point out that higher level tracking can be quite useful too, and this is what I found to work well for me. That's why I bring this up in related topics: it's not an all-or-nothing choice.
We track way fewer categories than you do. But in addition, we also track larger expenses by amount. Right now everything over $100 gets an entry. That means a fancy $100+ dinner gets tracked but a normal $30 dinner doesn’t.
I do everything with CSV exports of my bank accounts and credit cards. I drop the exports once a month into a directory and Python scripts (my newer versions of which are mostly written by LLMs) take all the analysis from there, breaking things down by category and by merchant (so that I can see if I'm unintentionally spending more on a particular merchant over time or if that merchant is charging more without notice).
I also have one credit card for strictly recurring expenses ONLY and never put non-recurring expenses on it. That way it's quite easy to see on that credit card bill what changed from month to month. If Comcrap tries to charge me $10 more one month they're going to be getting nasty messages from me pretty quickly.
I do the same. I have a bank account dedicated to all those recurring expenses I track. Every year I make a budget for those categories, work out the monthly average, and set up a transfer for that amount into that account. Some prices fluctuate quite a bit (like power) while my mortgage has a fixed rate, so I apply a healthy margin to make sure there are no nasty surprises.
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...
- 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).
You have a balance that accrues a monthly interest. Separately, you're told that you're owed a monthly payment. If monthly payment > interest, then the difference is subtracted from the balance. No need for haskell.
Finally I discovered PTA. I chose hledger (because of possible performance issues with beancount). I learned double-entry bookkeeping (it's pretty simple, honestly). I write Python scripts to import investment statements sent in PDF format (broker does not support transaction downloads) and pay stubs (payroll company does not do transaction downloads) and CSV imports for bank and credit card statements which lets me autocategorize most transactions. Turns out it's exactly what I wanted all this time I just didn't know it.
I spend about an hour each month updating accounts. I generate investment reports, budget reports, and tax summaries. It's all there, except tracking the ACB of my investments (which I probably could do except a simple spreadsheet is less effort). Everything I need for my coming retirement this year.
And because it's plain text I will never have to lose everything when data formats change due to new upstream releases. And because it's plain text I can use git to track changes and recover and do better off-site backups.
I guess the downside is it doesn't work on your phone and you have to know what you're doing. But if information like how much money you have and where you're spending it is actually important, it's the right tool for the job.
But I can't find an alternative that has cracked the killer feature: Syncing with each of my online accounts. I like to track every expense and every transfer down to the penny, and then update from the bank's online connection to confirm each of them. I do this daily so I can catch any fraud or mistakes. I have 27 accounts tracked, and I'm simply not going to log in to each of them using their janky web sites, download CSVs, and import them manually into personal finance software. It's just not going to happen. Quicken's support for this is far and away the best out there.
Doing this all in plaintext and copy/pasting from downloaded CSVs every day seems like an absolute nightmare.
Unfortunately, the trend seems to be banks turning down their public-facing OFX services, and instead moving to the model where Intuit is the middleman and you need to tether yourself to them, who in turn channel your requests to the banks. So it's been getting even more and more difficult to escape from Quicken.
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)
But good to hear the positive story side for this.
And when it’s fragile even when working. The cost per unit changes with limited notice in various ways (line rate, unit cost, time period that various rates occur, the day, ‘free’ power bonuses etc).
I did that for myself and it took me at most three months of parttime working on it, resulting in a bespoke solution. No need to keep paying some SaaS or fiddling around in Excel. One still needs to learn the bookkeeping system though, but that's true for all options. A SaaS is not magically make that go away.
Beancount is both, but you can do either one or the other or both. In particular, you DONT need to learn double entry to do plain text accounting. Of course, you SHOULD learn double entry accounting because it's a great tool for organizing knowledge.
Whether plain text is beneficial for accounting is less clear cut in my mind. I think plain text is backlash against the over-reliance on "services", "clouds", and "lock in", but I think it's misguided. If you're concerned with someone locking you in, it's perfectly concievable to do double entry accounting which lives only on your computer and manipulated with software that is under your control (read: free software).
So in summary, my opinon is:
- accounting: important
- double entry: important
- avoid clouds and ventor lock in: important
- avoid proprietary file formats: important
- plain text: unimportant
(I use GnuCash. It's not without its flaws, but it's great if you agree with the above views)
First, automation is a new orthogonal dimension. You can have automation with or without plain text.
Second, your emphasis on "automation" leads me to believe that perhaps you misunderstand what accounting is. Accounting is not just taking a list of transactions and recording them (database, file etc). That is called bookkeeping. Yes, accounting is also amenable to automation, but much less so than bookkeeping. Although, you could argue that when applied to the life of a normal individual, accounting and bookkeeping are almost indistinguishable. You have income, you have costs, and you have a mortgage - pretty straightforward. My point is in general you cannot entirely automate accounting. The reason for that is that accounting isn't just processing bytes, but instead requires the understanding of the underlying economics associated with the transactions. This understanding in turn isn't stored anywhere other than the accountant's mental model of the entity he's doing the accounting for.
EDIT: Just to be clear, I don't disagree with you that accounting could use more automation. Everything could use more automation. But for something it's more straightforward than others.
I've been using it for years, and it helps a lot. I would pay good money for someone to improve the UI, maybe even separate the accounting engine into a library that could be used by different UIs.
On the point of "library" - you know that "GnuCash the app" comes with its lib, and there's python wrappers? I've only ever used these to produce reports (read, reports different from the ones provided by the UI). However I believe it's also possible to do things like inserting transactions via these python wrappers.
Another example of something which is possible via the python wrappers is labels. GnuCash doesn't support labels, but it supports adding general text to each transaction and to each leg of each transaction. So you can e.g. use hashtags in the text, and then consume transactions into python and aggregate on these hashtags, making them effectively labels.
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.
Re: learning curve, it's not that difficult. Shameless plug: I wrote a textbook (actually, a textbooklet, if that is a word;-)) about the basics of DEA, focused on personal finance and using ledger-cli: https://leanpub.com/personal-accounting-in-ledger/
Double entry book keeping isn't that difficult but that's easy to say once you've been doing it a while
I've been doing PTA since around 2018 and there's definitely lessons I've learned along the way along with plenty of mistakes.
I think the main benefit for me is just the system gives you a complete picture of your finances. The commercial services you can pay for just give you a view into a certain slice (e.g. open banking in UK/Europe to see your current account(s)) - I think mint.com did something similar in the US but it never came over here, I don't know if it still exists. Maybe that's enough for most people, but for me I want everything, investments, liabilities, assets etc. None of these commercial offerings have that because it's so complex and niche, e.g. your open banking provider won't tell you how your pension is doing.
It's also just nice to have the provenance of transactions, e.g. if you receive some shares from work, and you sell the shares and the money ends up in your bank account - the incoming transaction will just be the net proceeds but it won't tell you if you paid any tax prior to that - PTA gives you a more of a complete picture that tracks the whole chain of events that led up that transaction into your bank happening. Overkill for most people? Probably.
https://www.cnbc.com/2023/11/07/budgeting-app-mint-is-shutti...
https://news.ycombinator.com/item?id=46464042
https://beancount.github.io/fava/
I really like its big picture view of the accounts, the search / query interface, and live editing of transactions.
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 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.
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.
I just have 1 text file with monthly data. Each month is on a separate line, with only 5 columns (expanded below).
Where the date is the last day of the month that I need to make (the next day there is income, for me it's 19th, not 31th). Saldo is my bank account that day. Savings are, well, savings in a separate account. delta is the sum of special income and outcome. row 5 is all special income and expenses. Groceries are not listed, I need them every month anyway.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.
However, I just cannot bring myself to constantly pull the transactions down manually from multiple banks.
Many suggest automating. How is this working in practice? Are there providers like Plaid you can use? Build web scrapers? Build PDF statement parsers?
I ended up just paying YNAB the $130/year or whatever they’re at now. High wife approval factor and everything just connects. They also have an API. In theory I could just constantly backup YNAB with PTA by pulling down transactions from the API.
Some I wrote by hand using PyMuPDF, some I coerced Claude into writing (again using PyMuPDF) by uploading a sample bill (I'd never put my own data into an LLM but it's nice being able to find a sample bill, gets it close enough to correct that I can do the remaining bits if there are variations in bills over time).
Overall it's effort (and yes certainly a bunch effort for manually downloading transactions). The financial industry is very behind on this stuff clearly. I'm not sure in a few years whether I'll still think it's worth the effort I put in, which has gone down over the past few months as I automate things, but until it stops being fun I'll keep going.
Really awesome to have control finally. I am very interested in extending PTA to be more like blockchain ledgers, with signing for every transaction and decentralizing the ledger. still mulling through how this would work, but it would essentially be KERI based.
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.
Start easy and see what you want to get out of the data. If you can store the original source (e.g receipts) so that you can later go back and increase the granularity if you find yourself wanting it, that would be ideal.
I just put "Groceries" account based on the total that gets charged to my card. If there's a substantial item that doesn't fall into groceries then I can split that out on a case-by-case basis (e.g. I go to Costco and buy both a bunch of cereal and a dehumidifier).
I just spent a few hours using LLMs (aider, specifically) to reconcile my books for the past year. Worked great, but was slightly fiddly.
https://github.com/beancount/beancount/blob/master/README.rs...
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.
I'm intrigued by this and now thinking I should start doing it. Just start with a clean slate for 2026 and see how I go.
But for the vast majority of people (even including devs), this will not be ideal at all and most people don't really care about it being in text files.
What I'm trying to say is that its designed for a very specific niche userbase and I doubt most people will have the same experience as you described after trying every single personal finance app to settle on this.
I'm also yet to migrate to beancount v3.
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?
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?
Why would you go that unintuitive route instead of simply having a category "Supermarket" (with your most common supermarkets autocategorized by name) and payee "Netflix"?
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.
Intuit sucks as a company, but I can hack my way around their requirements for upgrades
Anathema?
Yes, I know the data live in a data-center/cloud. But, don't the content of all those statements, payments and bills live there too. Yes, I know the service might go away tomorrow. But, couldn't one find the new-new service and import it all again from the banks, cc companies, utility companies etc.?
I like text accounting. It's useful. It has a niche. But, is this the best use of your time every month?
Tastes differ, but 30-45 minutes a month to hand-key data (or write the scripts that avoid that) isn't my taste.
I'd wager it isn't most peoples' taste, which is why the off-the-shelf cloud-based options are as popular as they are. I see people in here doing things like writing PDF statement parsers and then dealing with the maintenance that this strategy entails whenever formatting changes and, well, I appreciate the people to whom this appeals, but I am not one of those people. :)
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.
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.
That's 6–9 hours every year!
5 years: 30–45 hours
10 years: 60–90 hours
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.
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 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 would be okay with that as a monetization model, except that the book author despite being a self-described FOSS dev doesn't seem to have anything to do with the project (https://github.com/beancount/beancount/graphs/contributors).
Ah, not quite true. The author fixed a typo in a docstring once (https://github.com/beancount/beancount/commit/8584763b618f76...).
Can you point to some of your contributions to this project?
[0] https://github.com/siddhantgoel/awesome-beancount
[1] https://github.com/siddhantgoel/beancount-n26
[2] https://github.com/siddhantgoel/beancount-ing
[3] https://github.com/siddhantgoel/beancount-dkb
[4] https://github.com/siddhantgoel/beancount-commerzbank
I'm just, you know, pretty sensitive to HN submissions trying to sell me something.
And that's still ignoring that evangelism is also a valuable contribution.
I know money is the root of all evil and all that, but a total aversion to it isn't a very healthy way of interfacing with it at all.