There’s so many ways to do personal finances but I found most of them to either be too tedious or require doing stupid things like letting third parties log into your bank account.<p>For me I simply had a spreadsheet with rows for each month and columns for each account: chequing, mortgage, RRSP, RESP, etc. I’d spend 10 mins a month logging in and typing out each balance. I’d chart the over-time trend and that’s all I needed to detect any changes in habit or ugly trajectories. 90% of what signal I needed with 10% of the effort.<p>If you don’t need to micromanage all your flavours of spending or other details, consider keeping it dead simple.
I'm not really sure about the python aspect in this article however I've been using beancount and Fava for nearly 3 years now and it's one of my favourite pieces of software. Outside of installing it I've never had to really think about python.<p>All of my financial history is contained in a text file processed by beancount and long may it continue!<p>One thing I do wonder though is how well it scales, I'm a single man so tracking everything isn't too much effort but if I had a partner it suddenly becomes at least 50% more things to track
Shameless plug of my open source finance system.
<a href="https://github.com/darcys22/godbledger" rel="nofollow">https://github.com/darcys22/godbledger</a><p>I love these command line self hosted accounting software packages. But double entry bookkeeping was invented using ledgerbooks with ruled tables. I feel the plain text dataformats are a regression compared to a sql database. A general ledger just works so well with columns that you can sum.<p>It also saves you from needing a custom tool like bean-query to replicate sqlite-ish queries because it could have been in a database from the start
I struggled with the accounting concepts until I stumbled on this blogpost from Martin Kleppmann: <a href="https://martin.kleppmann.com/2011/03/07/accounting-for-computer-scientists.html" rel="nofollow">https://martin.kleppmann.com/2011/03/07/accounting-for-compu...</a>. After that I finally 'got' the accounting graph, and I don't care too much about the medium or the software anymore (its a google sheet in my case).
I used HLedger for years it was great. I thought I could do better with a paid solution. YNAB was awful and slow. So I switched to Lunch Money. It's amazing fast and intuitive. Only it's not a good fit for me. I'm trying to shoe horn my budgeting style into and it's not working.<p>I use the envelope style. Every dollar is assigned a bucket when it comes in. All spending is done from a bucket and balances always persist. I don't like monthly budget targets. I prefer to put money in a bucket when the money comes in.<p>I might move back to plain text accounting as it is so flexible. I will miss the amazing interface to Lunch Money. I also like supporting a small business like Lunch Money.
> <i>We take the output of the previous step, pipe everything over to our .beancount file, and "balance" transactions.</i><p>> <i>Recall that the flow of money in double-entry accounting is represented using transactions involving at least two accounts. When you download CSVs from your bank, each line in that CSV represents money that's either incoming or outgoing. That's only one leg of a transaction (credit or debit). It's up to us to provide the other leg.</i><p>> <i>This act is called "balancing".</i><p>Balance (accounting) <a href="https://en.wikipedia.org/wiki/Balance_(accounting)" rel="nofollow">https://en.wikipedia.org/wiki/Balance_(accounting)</a><p>Are unique record IDs necessary for this [financial] application? FWICS, <a href="https://plaintextaccounting.org/" rel="nofollow">https://plaintextaccounting.org/</a> just throws away the (probably per-institution) transaction IDs; like a non-reflexive logic that eschews Law of identity? Just grep and wc?<p>> <i>What does the ledger look like?</i><p>> <i>I wrote earlier that one of the main things that Beancount provides is a language specification for defining financial transactions in a plain-text format.</i><p>> <i>What does this format look like? Here's a quick example:</i><p><pre><code> option "title" "Alice"
option "operating_currency" "EUR"
; Accounts
2021-01-01 open Assets:MyBank:Checking
2021-01-01 open Expenses:Rent
2021-01-01 * "Landlord" "Thanks for the rent"
Assets:MyBank:Checking -1000.00 EUR
Expenses:Rent 1000.00 EUR
</code></pre>
What does the `*` do?
It's funny that a register application is basically a trivial database, but it requires so much subtle UI/UX that it is really hard to make something usable. I've been using Quicken for 30+ years and I've tried other software, including my own and open source, and nothing really comes close the the ease of what they've built.
<shameless plug>
If you're using Python, and you want to import transaction/balance data without handing over your passwords to some third party, you can try<p><a href="https://github.com/csingley/ofxtools" rel="nofollow">https://github.com/csingley/ofxtools</a><p></shameless plug>
I find Google Sheets pretty hard to beat - you can get stock pricing data via the GOOGLEFINANCE function, and I have a simple script that does imap -> sheets for bank and credit card balances. I'm able to keep an up to date view of my net worth without resorting to Mint/Plaid et al. And you can generate whatever charts and graphs you like fairly easily - have access on your phone, etc.<p>For budgeting, I import csv from my bank/credit cards into google sheets and tag transactions with ~20 different categories - I do this every month or two and it doesn't take that long. It gives me a backwards view of my spending that I can use to influence future spending. I don't run a hard budget really.
hledger is another open-source CLI tool for accounting that works amazingly well for me. You can add transactions editing in plain text too and there is a basic web UI on top of it.
Regarding "1. Download transactions from your bank" - to avoid having to deal with PDFs, it's possible to use account aggregators to fetch your own bank data in Python-friendly formats like JSON.<p>We have this feature at Nordigen (I'm the cofounder), where we allow developers to download their bank statements in JSON format from 1,000+ European banks (free): <a href="https://nordigen.com/en/blog/download-your-bank-statement-json-format/" rel="nofollow">https://nordigen.com/en/blog/download-your-bank-statement-js...</a>
If you want an open source self hosted budgeting solution, firefly is the most commonly recommended (<a href="https://www.firefly-iii.org/" rel="nofollow">https://www.firefly-iii.org/</a>). If you are looking for something supported/less DIY and with features beyond budgeting, checkout Homechart (<a href="https://about.homechart.app" rel="nofollow">https://about.homechart.app</a>).
I'm thinking about a PF app concept where you enter your own transactions manually, but you don't have to keep track of everything down to the cent.<p>At the end of every month, banks send out statements so importing all transactions aren't necessary to keep track of one's overall financial standing.<p>Banks do make mistakes but extremely rarely that it's not worth wanting to import all transactions in the off chance that you'll catch a mistake. Retailers can make mistakes like double charge you but again those are rare and you can take a quick look at your statements to find them usually.<p>Keeping track of individual transactions are important to be able to figure out where the money is going in general but this doesn't require keeping track of 'every' transaction. Just the ones that make up the biggest percentage of the total money spent. They are usually easy to spot on the bank/creditcard statements.<p>One doesn't even have to be perfectly accurate to gain from inspecting statements either. You spent $834.56 for new tires? You can enter that as $850 and it's fine.<p>Sure, there might be cases where the total is split more or less evenly across several small transactions and that can be handled similarly to the above.<p>Knowing where the money is going isn't terribly useful actually unless there are a lot of frivolous spendings. It usually comes down to "you are not making enough money" or "the lifestyle you desire is too expensive for your current income". No app can fix either of these, other than point out the obvious problem. Most personal finance blogs end up leaning towards "how to earn more" because that's more important than keeping track of your transactions or budgeting.
I don't think double-entry bookkeeping is such a common knowledge. Anyways, there are discussions and links trying to teach "accounting for developers" on <a href="https://news.ycombinator.com/item?id=23964513" rel="nofollow">https://news.ycombinator.com/item?id=23964513</a><p>I personally find the topic difficult and comes with a lot of nonsensical jargons.
I built <a href="https://mygraph.ca" rel="nofollow">https://mygraph.ca</a> as I was tired of Mint failing to sync with Canadian banks (and later dropped Mint anyway because of the security/privacy concerns).<p>It’s not targeting technical users but it would be cool to add a SQL integration like Stripe Sigma, etc at some point.
This is really cool but I feel like it glosses over married accounting, which is a longer session of yelling things like "Honey! What's this PayPal for $117 3 weeks ago?!"