Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Expenses is a tiny expense tracker written in Python. You use it thus:

    expenses add 3.10 "Cappuccino at Dark Horse"
    expenses summary
    expenses plot


  • Stores expenses in a very simple CSV file
  • Keeps a full version history of expenses in case of user error
  • Supports basic reports and plotting of expenses

Why Expenses

If you're like me, you want to keep track of your expenses in a very light-weight fashion. You'll never track them if you need to wait for a spreadsheet program to open and then nagivate to a particular cell. Also you have a shortcut for opening the terminal on your computer so a simple command-line interface is exactly what you need for your expenses.

How do I use Expenses?

Expenses itself is contained in a single executable. Put that in your PATH somewhere. It does have the following dependencies:

  • Python 2.7+
  • Mercurial (This is used to keep your expenses versioned in case you screw them up)
  • Matplotlib (If you want to use the plot feature)

When you type "expenses" on the command-line for the first time, a new Expenses setup is created at ~/.expenses/. This includes a mercurial repository at ~/.expenses/repo which contains your actual expenses file ~/.expenses/repo/expenses.csv.

You probably won't need to work with that file directly, you can use the expenses list command to view it, and the expenses edit command to edit it. By using those commands you ensure that it stays properly versioned.

Does Expenses work on Windows?


Using Cygwin it should probably work. I'm not really sure, as I don't have a Windows machine to try it on. The only real obstacle to Windows at the moment is the location to use for the Expenses data folder: on UNIX systems I use $HOME/.expenses. If anyone wants to make it pick a reasonable spot on Windows I will happily accept your patch.

Is Expenses exactly the same as PEM?

They're very similar.

PEM is the GNU Personal Expense Manager. It also takes the minimalist approach and uses a CSV datastore. I wrote this before I knew that PEM existed, however Expenses has some upsides: its versioning and plotting features do not exist in PEM. Also I like the pure-python aspect of Expenses.


Super simple expense tracker






No releases published


No packages published