My Plain Text Accounting Work Flow

To keep track of my personal finances I use hledger. I’ve been using it for almost 2 years now and it works great. Why use a command line tool? I work as a developer so I’m completely comfortable using the command line. The reports I get with hledger are better than any tool I’ve ever used. I also like the idea being in control of my data - it’s plain text. I stick to using features that can be compatible with other ledger tools as well, like ledger. Since the data format is a simple text file, I version it using git.

What are the drawbacks? Well, my wife doesn’t know how to use it. To get around that, I print off reports and we review them together. Now, I run a balance command, take a screenshot, and send it to her via iMessage. If we need to try down, I run hledger web and run the register report to see how balances of things changed over time.

So as far as my work flow goes, I use an envelope based system. I have the normal 5 accounts (Assets, Income, Expenses, Liability, and Equity) plus I have a new one, Buckets. Buckets has it’s own 5 sub accounts (Assets, Income, Expenses, Liabilities, and Equity), that mirror the main accounts. Within Buckets:Assets I have my envelopes. The total of Buckets:Assets must be the same as Assets. I haven’t found a way of enforcing this, so after I update my journal file, I run a balance command and check.

Whenever I update my journal file each real transaction has a shadow transaction with it that moves money in the fake buckets account. For example:

2020-01-10 CKCD DEBIT 01/09 AMAZON.COM SEATTLE WA
  Assets:Checking  $-58.25
  Expenses:Pet  $58.25
  Buckets:Assets:Pet  $-58.25
  Buckets:Expenses

The buckets accounts allow me to maintain balances for specific sub accounts. The normal expenses account allows me to check how much per month we are spending in any given subaccounts.

Weekly Habits

I try to update my journal every week. It usually works out to every two weeks. To update my journal, I download a csv file from my bank. I look at the last transaction in my journal file and delete any transactions already entered in the journal file from the csv file. I wrote a node.js script that categorizes everything. I run the conversion once and look it over. If there’s anything new that new needs categorized, I update the script and rerun it. That usually looks like node scripts/index.js csv/2020-01-22-checkings.csv It outputs to stdout. On a mac I pipe that to my clipboard once it looks good and append it to my journal. I update any hard to categorize accounts in the journal file by hand. When I’m done, I run a balance report to see if Assets matches Bucket:Assets, and that my Assets match what’s really in my bank account. Once I’m satisfied with that, I run a balance report on Bucket:Assets to see where those accounts stand. I also run a balance report for the month on Expenses to see where all my money has gone. If something looks off in Buckets:Assets I run a registry report on the specific sub account to see what might have thrown it off. Once I’m satisfied my wife and I review the bucket balances together and drill in specific sub accounts using the registry command.

Monthly Habits

Any income I get goes in Buckets:Assets:Income. At the beginning of every month, I take the money from Buckets:Assets:Income and distribute it to the other sub accounts. Untils it’s balance is 0 or if I know next month I’ll be short and I need to reserve funds. Having been self employed for the past 5 years, my income can fluctuate a lot from month to month. That looks something like this:

2020-01-01 Monthly Fill
  Buckets:Assets:Auto:Gas  $50
  Buckets:Assets:Income

That takes money from the Income account and puts it in the Gas account. I run my weekly reports on the previous month to get a snapshot of that, and then I run those reports on the current month. Usually we overspend in a particular area. To fix that, there’s a Buckets:Assets:Savings account where that money gets pulled from to compensate.

Conclusion

The more frequently I update my journal, the more in control I feel of my finanaces. When I update the journal less frequently, the household spending can get out of control. However, out of any tool I’ve used I feel like hledger puts me in control of my finances.

My work flow isn’t perfect, but it works for me. I think there could be a better way implement the envolope system, but what I do works for me so far. In the future I may investigate other possibilities. I think things I can do better is try to my the journal updating process easier and less painful. The worst part for me is categorizing our Amazon transactions. The auto categorizing is a step in the right direction but I’m not sure if automating it helps. Looking though each transaction to make sure it’s categorized correctly forces me to think about where my money is going and if it should be going there.

The other thing is it would be great if there was a tool that made it easy for my wife to have a look in our finances. hledger-web is a step in the right direction, but requires a dedicated server running plus all the security implications that brings. What would be ideal is a mobile client that run hledger or ledger under the hood, that uses git as a backend to retrieve data.