10-26-2012 Update: I’ve since switched personal finance tracking software, so these addons are no longer being actively developerd. They are available on Github for anyone interested.

Since joining the ‘real’ world and the professional work force, I started to take a greater interest in my finances.

I started with a simple spreadsheet of my known bills as a way to identifying how much of my income was unallocated. I migrated to using Number on iPad and their Personal Budget template to show future accumulated income with charts.

I eventually added on sheets from other budgeting templates to include purchases each month and what category they fit into. After about a month of tracking my expenses using that spreadsheet, I realized that I would have to completely clear the previous month’s expenses in order to track the current months. I was really disappointed that I would be losing this useful historic data.

In March of 2010, I began a search for a more sophisticated solution, preferably one that was open source, or used an open format. I found it in Ledger. Ledger is an open source, cross platform double entry accounting program that parses a plain text file of ones’ finances. Although the data file for Ledger is completely user managed, there are scripts and tools to making it close to trivial.

I transformed my bank downloadable financial data into Ledger’s format and created a budget file and was almost back to the same feature set that I had with Number on iPad. One of the only things I was missing was graphic visualizations of my data. Since ledger was capable of outputting data using a format string, I went about creating the graphs I wanted on my own.

To date, I have created five add-ons to Ledger to help me in visualizing and interfacing with the data. Only one (pygl) is in active use and development, but the others are included for posterity.

Retired:

  • pygl: PYthon Graphs of Ledger: A Django application that provides various charts of ledger data both historic and predicted. Originally it used the matplotlib library to create the charts as PNG files. More recently I’ve begun porting the whole system over to ExtJS. The backend django system produces JSON output, and the ExtJS portion captures it and renders it into tables or charts. Both the original matplotlib and ExtJS versions have tables of recent transactions, budget progress this month, and forecasted/future transactions, as well as charts of account spending, previous account balances, this month’s budget, and projected account balance. I’ve also included methods that produce iCal files of account balance and activity. This project features close to all of the functionality of the Ledger-OFC, Ledger-flot, and Ledger-iCal projects and essentially replaces them. Screenshot of pygl graphs

  • Ledger-OFC: An Open Flash Charts 2 set of graphs, including a pie chart of this months expenses, a line chart of the next years projected checking balance, and a line chart of my checking account for the current month, as well as a few more.
  • Ledger-flot: A more iPad oriented set of charts of my Ledger data using jQuery and Flot. On an iPad, the graphs are fullscreen and automatically slide-transition. The current month’s checking balance graph appears to be broken on the iPad as well as in Safari on OS X. The set of graphs isn’t as large as my OFC version, but they’re sufficient for when I’m mobile.
  • Ledger-iCal: A fairly simple script that produces an iCal file of my checking account balance for the last 14 days. I have iCal on my iMac subscribed to this so I can see my balance on my desktop via TimeWorks. I’ve also added a new script that shows all the transactions for each day (going back 14 days).
  • Ledger-pdf: An as-yet-unpublished set of scripts (python, LaTeX, etc) to produce a PDF summary of my current fiances. It uses a combination of [gnuplot](http://www.gnuplot.info) and [Google Chars](http://code.google.com/apis/chart/) to create charts for the PDF, and then does simple verbatim include of some of my ledger files (budget.lgr) as well as derived data (human readable form of the data used to produce the various charts). This has been rewritten to now produce the LaTeX file using a python and pystache and to create much better looking charts using matplotlib. My ultimate goal for this would be automating/cron’ing execution of the Makefile so that I can access an up-to-date, attractive summary of my finances on my iPad over Dropbox.

There is a Caveat Emptor to the Ledger Addons I’ve written. For ease of creation, they were hard coded with the location of the Ledger binary on my system, and the location of my Ledger data file. This will need to be adjusted by anyone who has things in a different location. I believe they do provide a nice set of extras to improve how one sees their Ledger data.