Kanishk Singh

Runes of Undocumented Code

05 Jan 2026

Expensor - Design Decisions

I’ve been wanting to automate my expense tracking for some time now. Back in mid-2024 I started on expensor for this. This is a small entry describing my use case, initial design decisions, and preferences for what I need in a expense tracker. This used to live in the project README but I figured it’s better out here.

While I didn’t spend much time on the project in the following 1.5yrs, it’s my intention to pick it back up and enhance it further to the point I can start using it for myself. I’ve already proven the concept to work and I’ve gathered some interests from friends who are eager to use something like this. So, this year I intend to work on it some more.

Design Decisions

It’s well known that the transactions recorded in a Bank/CC statement aren’t precise enough. It only contains the merchant information which makes it harder to keep track of things like what exact items you purchased, the food you ordered, or path of your cab trips. Getting visibility into these aspects requires fetching them from the source, i.e relying on APIs (if these platforms have public APIs) or scraping them via various different means.

Despite this limitation of granularity, I favor my current approach and implementation for the following reasons.

Extensibility

I can quickly start recording transactions if I start using a new Bank, or a new Credit Card by simply writing a new rule. Of course, this assumes the new bank/CC would be sending emails as well, but it’s more probable that they would send emails than have a programmable API or a better means of exporting & automating my expense tracking workflow.

Maintainablity

Relying on source of transactions also means a lot more work, since I’d need to build support for them & maintaining them. If for any reason these APIs stop working, or if there’s a new source and I do not have sufficient time to add support, I lose visibility into my expenses.

Comparatively, Google’s GMail API which I currently use & support remain stable and don’t change often if they ever do.

Minimal intervention

Expensor periodically checks the inbox for new transactions. I then conduct a review of everything it discovers and add/update details as necessary. This works well because this is how I’ve been tracking my expenses for the past 3 years and my only pain point is in recording these transactions manually into a single pane (a spreadsheet). This takes a huge chunk of work off my hands and enables me to review the details with ease.

If I relied on the main source of transactions, chances are that I’d have to end up either manually collecting data from them and feeding them into expensor or even if I managed to automate them, I have the burden of keeping them up to date, which is neither pleasant nor rewarding.

I don’t need fine granularity of transactions

In the past 3 years since I’ve been manually tracking my expenses, I’ve never really had the need to gain insights into what kind of food I’m ordering often, or what routes I’m taking when using Uber/etc. I’m only interested in facts such as the total amount of money I’ve spent ordering online, or using cabs in a month. The aggregate amounts I’m spending on needs/wants/investments is what I’m actually interested in monitoring.

During manual review of these expenses, if I ever come across a spend I’ve no clue about, I can dig deeper by going to the merchant’s platform against whom the transaction was made, and add comments to the expense report. I do keep granular track of anything I buy for my hobby items, or a big purchase, but those are few and far between.

Closing

If you find yourself agreeing to some of these, I’d invite you to try it out.