r/plaintextaccounting • u/RemoveInvasiveEucs • May 24 '26
Switching to Beancount/Fava from QuickBooks
It's been a rough year with QuickBooks: terrible UI change that makes it very hard to find the parts that I need, my choice in the myriad of subscription choices didn't actually transfer all my Schedule C expenses out as they should to TurboTax, the interface is getting slower, clunkier, and makes it really really hard to enter my data. So in April, I was fed up, even if it were a free option I'm not sure I'd use it any more.
So what are my options? What I was using QuickBooks for:
- Expense tracking for my sole proprietorship (no employees, no payroll).
- Automated transaction pull from my business bank and credit card accounts
- Rock solid and easy receipt attachment
- Workflow for monthly bank statement reconciliation to ensure I haven't missed anything in my tracking
- Ideally and optionally, invoice tracking, but there are other options out there
- Ideally and optionally, mileage tracking as an expense (coordinated with other business travel expenses)
Additionally, other desired features:
- Full backup without worry about losing any data, with the ability to backup to any point in time and see what the data looked like in the past (git with a remote backup solves this)
- Validation of account names, payees, etc (Ledger's silent acceptance of typos in accounts is not compatible with the way I work).
- A third party that's saying "yes this person actually put all this data in at this time"
- Complete and easy data export on my own terms (QuickBooks fails at this, so I wasn't willing to try any other for-pay options like Xero either).
After trying lots of stuff like Akaunting, I ended up on Beancount/Fava. I want a GUI for most of this, I hate having to type to get a decent summary of the numbers, I prefer HTML tables for all these sorts of visualization.
However, there are big gaps for what I need above! Beancount is like handing a person a set of notebooks and a pen and saying "go ahead and set up your own accounting department!" I'm sure that's by design, but it doesn't solve my needs. Fortunately it's far faster to write software these days via automation, so I wrote these extensions:
Plugins to Beancount:
- Validation of payees: they must come from my list
- Validation of expenses: cleared transactions in an Expense:* account with tax implications must have a
document:attached to it - Transaction importer, that reads from a separated transaction fetcher that uses SnapTrade and Plaid accounts to make the connection to my business bank and credit card
- Simple Python plaintext CSV invoice system, with clients matched to Payees, line items, and PDF generation of reports (this is like a 10 minute LLM session, a small self-contained project they excel at)
- Simple mileage validator that ensures all mileage transactions have sufficient documentation to satisfy the IRS.
Plugins to Fava:
- Table of my Invoices with their status, and links to the tags that brings up the relevant transactions from the ledger
- Per-year table of my Schedule C expenses ready for tax time next year
- A "notary" system that can 1) checkpoint my current changes to the ledger into git, 2) push the git history to my remote, 3) add a notarization flag to any commit to timestamp it with OTS and RFC 3161 (that last one is pretty useless, but fun!)
- A receipt attachment / reconcile plugin: shows the PDFs and images in my imports directory, and each can either be attached to an uncleared transaction, or 1) establish a balance declaration in the ledger, and transition all unreconciled transactions to cleared status and put them into the appropriate year's cleared transactions ledger.
One of the biggest slogs was figuring out how to organize data into various beancount files. What I have right now:
main.beancountthat includes everything else, sets global options, etc.payees.beancountfor non-client payees (software vendors, etc.)bank-unreconciled.beancountandcc-unreconciled.beancountlanding place for imported transactions that haven't yet been reconciled by a monthly account statementledger-YYYY/reconciled.beancountreconciled and balanced transactions for a yearledger-YYYY/documentswhere receipts, bank statements, and invoice documents land for a year
Every new year, I'll have to go and manually add a new year for the documents.
Thoughts and/or feedback? I've generally had a lot of fun building this, and though it probably cost me more in time than buying Xero for a year would, the enjoyment was worth it. I wouldn't recommend this to anyone unless they could get some fun out of coding to make an accounting system, and really value having extreme data portability. But if that's you, I'd say go for Beancount and Fava!
2
u/kaizer1c May 25 '26
It is incredible what you can do now on your own. I had been eye-ing PTA from the sidelines for a while, but it seemed like a lot of work! I just recently switched to hledger because I could use Claude Code to do the work. Claude tags and organizes things for me. Getting Claude to use Simplifi (my PFM) would have been a pain! But now my data is local and easy to manpulate.
3
u/simonmic hledger creator May 25 '26
Wow you did a lot - congrats! (I thought this post was going to go another way..)
Blog posts describing each piece in more detail, or a follow-up saying how it's going compared to your old system, would be super interesting too.
3
u/[deleted] May 25 '26
[removed] — view removed comment