Intro
What is this
Opinionated guide on how to start (and continue) tracking personal finances using the open-source Beancount accounting system.
It comes together with some code. Lazy Beancount is Beancount packaged in Docker with batteries included:
- Fava with dashboards
- Beancount-import and some importers set up to work with it out of the box:
- from Evernight/beancount-importers: Wise, Monzo, Revolut
- IBKR (adapted from uabean)
- configuration for multiple accounts using YAML config, plus a little helper UI for statement file upload
- more importers can be integrated/enabled on request
- Streamlit-based interface for:
- manual input of total values of the accounts for automatic balancing
- fetching commodity prices via a couple clicks in the browser
- Pre-installed plugins:
- Configuration generator supporting any number of accounts (cash, investments, savings, crypto), multiple currencies and auto-conversions
- Extensive configuration example including common useful shortcuts and some useful fixes (with comments)
- All tested together (manually) in a coherent setup. Fixed package versions and Docker configuration simplify installation.
The main goal of this guide is to provide you a way to start managing your own finances using plain-text accounting gradually and incrementally. Also with various useful tools already included and set up so you don’t have to build/configure everything from scratch.
The key new feature is to allow to only enter totals for your accounts periodically via UI, while the corresponding Beancount data is generated for you. That takes very little time and you can import of fill in other data when you have time or whenever you want to do more detailed research on your finances.
Who this is for
Anyone who wants a better understanding of various aspects of their financial life. Maybe you want to see your spending patterns and optimize something. Or maybe you want to track your FIRE goals. This tool will be especially useful if you have savings and/or investments, and/or if you want to estimate and optimize taxes. You can get an idea of the existing functionality at the Functionality page. Where the feature does not exist yet, Beancount excels in flexibility and extensibility.
If your things are simple enough, you can always use spreadheets or one of the alternative tools). But with Beancount you can track almost anything finance-related and the is existing code for a lot of use-cases. In my opinion, it’s the best product in the (open source x available features x hackability) niche.
Finally, if you were already interested in plain-text accounting premises but lazy enough not to bother tracking all transactions manually or setting up Beancount from scratch and testing all the libraries. If you want to get Fava in Docker and avoid the hassle of setting up Python, pip, etc on your platform (but still want to have your data not leaking anywhere), this may be the easiest Beancount tutorial to follow.
This system may appear complicated on the first glance. You will still have to learn how plain text accounting and Beancount in particular works. In exchange you receive a lot of flexibility and ability to do whatever you want to do with your financial data (especially if you prefer Python coding over spreadsheet management).
Everything is configurable via Beancount files, YAML files (not part of the original Beancount software) and some additional UIs. Being comfortable working with command line, structured text files and version control system (e.g. git) will be a plus. Some amount of coding (in Python) will be helpful if you want to extend the framework.
Why this guide exists
At some point I started using spreadsheets to track basic personal financial data. For some time I also have been considering finding or implementing the system for tracking investments and calculating taxes. In the process I’ve been researching various available open source options. After briefly trying few ones and noting available functionality I chose Beancount. Throughout the first year I moved pretty much all of my tracking to Beancount, and it turned out to be even more flexible and feature-rich than I expected.
Multiple sources mention the learning curve as steep and, indeed, Beancount seems harder to start with than some other systems that are fully UI-based and don’t get into accounting concepts and terminology too much. However, I found my own path to Beancount pretty satisfactory and decided that this experience is worth describing to make the entry easier.
Some of the approaches I took are, probably, unconventional, and for various reasons may go against the recommendations from the original docs. Hence, the guide is referred to as “opinionated”. You don’t have to do all the things the same way and some of the ideas may still turn out to be useful for you.
Links to useful libraries and resources for Beancount are sometimes scattered and sometimes outdated. You can follow Beancount contributions doc, awesome-beancount or mailing list to keep up-to-date. This guide is an attempt to gather the best and tested resources and bootstrap an overall Beancount experience.
How to use it
The guide is designed to be followed step-by-step like a tutorial and is broken down into “stages”. You can start with Setup for installation instructions and high-level recommendations, then go through the Stage I to have something working and useful by the end of it. You can follow through the rest of the stages at your own pace, or whenever you need the functionality mentioned.
Or you can just use this site as a reference to useful resources and tips if you already use Beancount in a different way or if you prefer to develop your own approach. In case you have an existing setup, of course you can build on top of it.
Questions or feedback?
Check out this page for more information.