I’ve been tracking personal finances for more than 7 years now, and my workflow survived multiple approaches, applications, and country moves. I’ve started, as usual, with Google Sheets and manual entry, but, as I’m quite a lazy person, that did not last long. I tried several mobile applications, that were reading the SMS logs to gather the transaction log, and I’ve settled upon using the ZenMoney app, as it had a neat interface, had quite a lot of features and used GoCarldess API’s to do oauth2 flows with banks and export transactions automatically, which worked way better than SMS parsing. SMS parsing led to multiple issues with out-of-order delivery, which disrupted transaction order and account states. It also did not work particularly well with currency exchanges and cross-account transfers.

I absolutely love finances and gathering data, but I also like having control over my data in case SaaS companies go down. So, I’ve been doing a little research in my leisure time and stumbled upon the beancount Python package. Essentially, it is an open-source ledger engine and a set of utilities around it, to handle accounting in plain-text files. It has an immense documentation of concepts, so if you are a bit interested in finance, I recommend reading the docs and purchasing the author’s book as well. Those are very comprehensive readings on the topic, which will help you in a very easy manner grasp the main accounting ideas and enhance your overall finances understanding.

Beancount supports importers interfaces, so I quickly built an exported from ZenMoney CSV files (github, PyPI), was able to import my 7 years of financial transactions and play around the reporting. Not that I have a lot of things to do with that information, but it was quite fun to dive into the finances/accounting territory and play around with the wonderful tools people build.