+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...
"Quicken is a single-entry accounting system, which means that amounts can appear out of or disappear into thin air. In a double-entry accounting system you can't put amounts in an account without taking it out of another account."
This summed it up nicely, from https://github.com/mortisj/quicken2beancount
What did you find hard to understand about double entry accounting? Seems pretty straightforward. Every transaction affects at least two accounts, and the total debits must equal the total credits. I can't imagine how introducing graph theory simplifies it, although I trust there are interesting insights none-the-less.
Thanks a lot for the shout out, Michael!
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.
What do you mean re-enter? I've been using every new version of Quicken since 1992 and never had to re-enter all my data, and I switched from PC to MAC around 2005.
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.
Problem solved for me because no banks in my country provide an API for anyone or anything to download transactions directly. Not even Quicken. Banks here are stable. The only change they tolerate is increasing their fat quarterly dividends, although there has been talk in the smoky back rooms of government about passing legislation to force them kicking and screaming into the present.
On the other hand, downloading a PDF or a CSV from time to time isn't that much of a hassle. I have Python scripts to parse the PDF and output hledger text, and hledger itself reads the CSV files and autocategorizes the transactions (I had to supply the categorization rules, naturally). You don't have to import anything, it's plain text. You don't have to copy/paste anything.
If there were APIs to download transactions, it would be as simple as
curl $BANKURL | hledger print --rules-file bank.csv.rules - >>bank.journal
or something. Of course, you don't get the colourful eye candy of Quicken.I use MoneyDance, which does automatic bank sync, is double-entry (although you can make single-entry transactions if you try hard enough), and is a program rather than a web service. It’s got some rough edges, but it meets my needs well enough. I haven’t looked into how hard it would be to read its data files if I wanted to migrate away.
Right there with you. I've tried to leave quicken multiple times. Especially when they moved to annual subscriptions. I haven't tried to leave since 2019-ish, and all the alternatives were just clunky as hell, as if the devs completely ignored UI/UX. Also, I'm on the latest quicken for mac and it has an export feature, but I have never used it. Maybe when they start charging per transaction I'll finally leave. I'm lucky enough to be able to afford it annually, but it still stinks that there's no open source alt, even to do just the basics conveniently.
Have you tried [0] Tiller Finance?
I've used tiller for several years. Handles all the connections to pull data, but all the data is completely accessible within a spreadsheet on my own storage.
Quicken isn’t Intuit (as far as I know at least). You’re probably thinking of QuickBooks?
Thanks for mentioning this. I didn't realize Intuit sold it off to private equity in 2016.
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).
Why is the parent teacher association involved in personal finances?
haha :) https://plaintextaccounting.org/
I’m fairly certain it’s Percutaneous Transluminal Angioplasty
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'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)
I have my electricity bills tracking into a KWH commodity. It has been... effectively useless :D.
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.
It is 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...
Nah not exposing the data to the LLM, just building the tools to help me manage the data, usually python scripts
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)
I think Accounting needs automation. Because manual tasks are error prone & Accuracy is a P0 requirement for finance.
Two points here.
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 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.
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 love/hate GnuCash.
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.
FYI, Mint shutdown as a service in early 2024.
https://www.cnbc.com/2023/11/07/budgeting-app-mint-is-shutti...
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.)
> IME Monarch seems like the current best option in this space...
Monarch is just horribly overpriced. I'm not opposed to paying for a SaaS or anything, but Monarch is much too expensive for what it is. Empower (used to be called Personal Capital) is free and what I use instead of Mint. In fairness, the only thing that I really ever used Mint for was to see my net worth and account balances.
I dunno. Insights from Monarch have easily saved me many times the annual cost. Other tools could as well of course, but the ease-of-use makes it easy to maintain
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.
>I think the barrier to entry is high because you first need to learn double entry bookkeeping (if you haven't already)
This. Accounting seems easy if you already know accounting. Learning accounting is difficult because the literature is dense, contradictory, and it's not helped by the fact that most accountants don't even seem to understand it at a fundamental level, they've merely memorized false-but-workable ideas like "debits increase assets because debit means left", or the silly idea about viewing it from the perspective of a bank.
Even accounting profs are surprisingly bad at at this, at least in my experience.
ehhhhhhh I don't think you need to go as far as reading dense accounting literature, I never have and I've been maintaining a beancount files for 7+ years.
I just followed the documentation in here https://beancount.github.io/docs/the_double_entry_counting_m... - it gives you the general principles to follow and you can just pick it up from there.
The point I was trying to make is that "Debits increase assets" isn't some esoteric technique; it's a fundamental aspect of double-entry that you'd need to know, but it's also counterintuitive and most of the literature out there is full of bullshit explanations that do nothing to help people understand.
The link you posted is similarly full of bullshit, written by someone who demonstrably does not understand the double entry system (they even say so in the text).
But I'm the sort of person who finds it very grating to have to do something without understanding why I'm doing it. If that's not you then party on.
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.
It's highly dependent on your personal situation.
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.
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 don't track purchases at all, I track savings. I find that much more sustainable. I have a savings rate goal (50%), and automatic withdrawals to make that goal. If I can't pay my bills without dipping into the savings then I'll have to reevaluate my spending only then. As long as my savings rate is what it needs to be I don't worry about spending money.
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.
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.
I do household finances in a spreadsheet. I do track every single transaction just to make sure there's no CC fraud (catch one stolen card every 3-ish years on average).
I do other people's finances with hledger. That is, if I'm responsible for someone else's money (trustee, etc), I add another layer of complexity for double entry, reconciliation, etc.
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.
Is there any other way to deal with comcrap? I’ve been doing the annual ritual of calling them to say the bill went up by 50% give me the best rate again. Every year it’s always a short term promo. This year took a lot longer to get through to a human
I never found efficiency. For five months I imported and categorized my transactions - from payroll through food. I definitely had reports being generated (using hledger) but the amount of time I invested and the ROI wasn’t there.
Had it been 5m a week, maybe I could’ve done it. But it was 3h/wk - finding transactions, transcoding them with scripts I was maintaining, and breaking down the costs with my wife to understand if Costco purchases were “groceries” or “home”.
I nailed the micro and failed the macro. With two kids, and no desire to invest 150h a year into this, there’s no way I can get this to work.
I imagine AI would be great at:
1. Maintaining scripts to extract and normalize various financial artifacts (PDFs, CSVs, XLSXs) into text files
2. Helping draw insights
But manual effort of:
1. Collecting from various banks, paystubs and investment accounts
2. Ensuring flows net to zero and make sense
Is Too Much Work.
The hard part has been to import all the accounts and to categorize the transactions on the 1-2 cards and 1-2 checking accounts that get used a lot. However doing hledger motivated me to simplify things. Either delete cards and accounts. Or barely use them so I can update them once or twice a year. And helps to reduce the number of categories.
I have not made updates for all of 2025 after 3 or 4 years of hledger. ROI diminished once the itch to zero everything wears off and since I have somewhat steady state expenses.
If ROI has diminished (maybe dopamine diminished?) then what keeps you motivated?
have a "Costco purchases" sub-category for "groceries". If you ever feel differently, just move it to "home". Your system has to support this though. I did multiple re-organisations in the last 10+ years.
Maybe the right way to do this is to only track accounts, and no tracking of individual txns?
Importing and tracking 401k contributions and stock dividends across multiple brokerage accounts - and then trying to handle timing differences (money in flight)… oof
Yes. Also wondering about the ROI. What do you gain by this?
For transactions: you spot fraud, mischarges or subs to cancel. Really a watchdog service would be good here. High effort, low return. IMO. (And a bit of tracking around reimbursements)
For savings: helps you keep an eye on where you’re at by forcing you to reconcile.
It’s totally worth it for a low value of invested time. But, it’s not going to be low effort.
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.
If you're on iPhone highly recommend MoneyStats. Its pretty and easier to setup/get everyone onboard
I haven't used this GUI, but this was the comment below yours.
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.
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.
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 been recording every txn with GnuCash for the last 8 years. I reached a point where I started writing scripts on top to support my multi-currency setup.
Then Claude became a thing, and I thought what if I use Hledger and let Claude manage my books ? I was reluctant to migrate years of txns, so I started with an opening balance.
This has been the highest leverage usage of Claude for me. I drop everything: bank statements, invoices, etc and ask Claude to make entries. When it makes a mistake, I add a new rule for future. Privacy issues aside, I cannot go back to traditional tools.
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.
From this post, I just got mine setup this morning. I already enjoy going through my 18 accounts every 2 weeks on pay day (yes, every credit card is the highest for the category of spend). For me, it seems like it would be just one extra step for me to get the data every 2 weeks.
But for most, I understand that they aren’t enjoying what I am doing every couple of weeks. I was using YNAB before but due to how many cards I had something got messed up in the importer all the time. Sometimes my transactions would duplicate or even get triplicated and then I would decline one of them only for it to pop up again a few days later. This lead to a very messed up and not accurate tracking. For me I was just fighting this thing every single day.
This is probably user error but after wiping it 3 times and starting over and over I just gave up and went back to mentally keeping track which worked but I needed something better.
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've been using MoneyMoney for over 12 years now (started Nov. 2013) on Mac and have never regretted it. I am automatically importing from all my bank accounts, including all statements and even track my portfolio with it. It can automatically categorize every transaction (basically string matching with OR clauses) and doing this consistently for years gave me pretty good insights on my spending behavior over time. It's a pity that they don't have a iOS app though.
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.
same. I've settled on Empower + google sheets. Empower mostly as a free shortcut to pulling a dozen account balances in seconds. Sheets for keeping quarterly snapshots(in case empower goes away like mint did) and for turning those snapshots into a graph. Took a little setup, but then it's like 15 minutes once a quarter when I get the calendar reminder. Wish I had data going further back in time, but I'm not sure what I'd do with more detail/a full budget. The only things I've ever really cared about are approximate net worth/investment returns as a sanity check on retirement assumptions.
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.
This is a very detailed document. Thank you for that. I am currently poking my head into beancount, hledger, and the new kid on the block, DIGITS(which aims to take on quickbooks head-on. I love the PTA philosophy, but I worry about catering to the non-tech data entry personnel(bookkeeping), is there a gui for these folks to enter the day to day? Essentially I would love to have the back-end be PTA and GIT for full control, and build/use data-entry front-end<bookkeeping>, and reporting/graphing/dashboards for executives and owners. Perhaps we can even do an OCR workflow ontop of PAPERLESS-NG to stream the bookkeeping into the back-end.
Call me simple. I manually export CSV files from the finance companies. (Should automate this). Vibe coded a CSV parser that will auto categorize, sort all expenses/income. Expenses go in one sheet. Income goes in another. Pivot table renders the data.
I can track money spent and earned down to the penny.
Takes less than 20 mins a month to update/manage it. I actually enjoy having sit-down time to "do finances". Keeps me leveled, and forces me to think about how much money I spent and the value I gained from the expenses.
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 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 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.
I charge different category items on different receipts which means doing several transactions at the store. Thankfully, its only 1 time per week. I've gotten pretty quick at it at the self checkout.
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).
For others who don't know what Beancount is (the link on his site is 404). It's a Python library to work with money.
https://github.com/beancount/beancount/blob/master/README.rs...
I just use Fidelity's portfolio-and-spending tracker these days. It's fine; not great. But it can automatically import from a variety of other financial institutions including Vanguard and my bank, so it's adequate for my needs. I spend a little time occasionally cleaning up the automated spending categorization.
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.
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.
Way too complicated for me :)
I just have 1 text file with monthly data. Each month is on a separate line, with only 5 columns (expanded below).
1.date 2.saldo 3.savings 4.delta 5.special income / outcome (heading line)
1 31 january 2026
2 500
3 2500
4 -80
5 dinner -50, concert - 30, sales +80, trousers -80, etcetera
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 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.
Do you manage your beancount files in version control? Or just keep free floating files around?
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.
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 :)
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)
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)
paperless-ngx and their built-in OCR might help here for the data transformation.
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'm not sure what people are defining as "plain text" here.
I feel the strong urge to let people know that excel files are just a zip file containing XML. Sure it's not quite as simple as CSV, but not far off.
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?
Accounts don't have to be physically "real" with your Bank. That's one of the insights of the "envelope system" that isn't always obvious.
One of the benefits to specifically using a double-entry system (including most of the PTA space) is that it makes it easier to build your "envelopes" as hierarchical sub-accounts. Instead of having just Assets:Checking you could have Assets:Checking:Grocery and Assets:Checking:General and Assets:Checking:Entertainment and so forth. The Assets:Checking sum of all of Assets:Checking:* will still reflect your total checking balance for situations when you need to know that information, but the sub-accounts in your double-entry system become your "envelopes" to check on your budget spending and to transfer between.
Automating your budgets can be just a matter of when you get your Income:Salary transaction you split it appropriately between the various Assets:Checking:* sub-accounts you want. You could automate other transfers between them as necessary as well.
You can also automate things like verifying your Expenses:Grocery account always takes funds from Assets:Checking:Grocery rather than any other "envelope" account when paid for by your debit card. (With Credit Cards potentially needing a different level of automation, and maybe a bunch more Liabilities:* sub-accounts.)
Your bank won't have any idea of those sub-accounts and nothing will physically prevent you from overspending those sub-accounts, of course, but also you can automate warnings for that and you would have visibility of that in your sub-accounts "going negative" when you spend too much from the same envelope.
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.
> 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"?
What's the difference
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.
you can do that or you can use free, open source solution like firefly. Accessible from everywhere, has backup options, automatic import data from bank account.
To me, the choice is very easy.
Few years ago I created simple web application to track spendings https://receipt.ifels.dev (code: https://github.com/subtle-byte/receipts) It stores all info in your browser and allows to export it as json.
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.
Anyone here using LLMs to do personal accounting?
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'm thinking more of the work to enter all the data, read receipts, check and classify bank transactions, etc.
I have 13 years of personal finances tracked in Quickbooks.
Intuit sucks as a company, but I can hack my way around their requirements for upgrades
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. :)
> 30-45 minutes every single month
That's 6–9 hours every year!
5 years: 30–45 hours
10 years: 60–90 hours
How many hours a year do you spend to make the money? How many hours is ok to spend then managing that money?
wow, a whole workday a year! People spend more time arguing on the internet in topics of no impact to their lives each year.
Arguing is fun though
I'd still consider that toil (repetitive, manual, automatable work).
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.
Yeah ok but tabs really are better than spaces!
Not sure what you are insinuating, but 30–45 minutes per month to stay on top on your finances doesn’t sound particularly crazy to me.
In case the author reads this: Your imprint is incomplete. The legal address is missing. And the blog is missing an imprint altogether.
This would be so valuable as a service.
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.
I did too with Money Sunset for quite a while, but mostly gave up in the last couple years. Several of the online accounts stopped supporting exporting to QIF/OFX, and it's not worth the effort to type in everything manually or figure out another export/conversion process.
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'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 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.
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).
Ah, not quite true. The author fixed a typo in a docstring once (https://github.com/beancount/beancount/commit/8584763b618f76...).
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?
[0] https://github.com/siddhantgoel/awesome-beancount
[1] https://github.com/siddhantgoel/beancount-n26
[2] https://github.com/siddhantgoel/beancount-ing
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.
And only... what, Italians, can write books on the Romans?
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.
Oh no, someone might make some money off work they did that was related to work a different somebody did! What a travesty! Somebody stop him!
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.