Elbank is a new Emacs package I’ve been working on lately. It’s a personal finances and budgeting package for Emacs that uses Weboob for scraping data from bank websites.

Overview buffer

I started building Elbank after using Ledger for several years. While Ledger is a real gem, I didn’t want to spend time doing bookkeeping anymore.

Instead, I wanted a simple reporting tool that would automatically scrap data and build reports within Emacs from it.

Setting up Weboob

To use Elbank, you will first have to install Weboob. Weboob is a collection of applications used to interact with websites from the command-line. Elbank uses the banking application named boobank to scrap data.

The list of currently supported bank websites is available on this page.

Fortunately, installing Weboob should be a breeze as there are packages for most GNU/Linux distros, and an homebrew formula for Mac users.

Once Weboob is installed, run boobank in a console to setup your accounts.

Installing Elbank

You can now install elbank from MELPA1 by running M-x package-install RET elbank RET, and voila!

Using Elbank

The overview buffer

Run M-x elbank-overview to get started. The overview buffer lists all accounts as custom reports and budgets.

Press u to import the bank statements from your bank website.

You can click on each account or report displayed in the buffer to open them.

Categorizing transactions

Transaction categories is an important aspect of Elbank. Categories make it possible to filter and budget.

Transactions are automatically categorized when reporting, using the custom variable elbank-categories.

Here’s an example value for elbank-categories, you should adjust it based on your own transactions and categorizing needs.

(setq elbank-categories
      '(("Expenses:Food" . ("^supermarket" 
                            "^restaurant" 
                            "Local store XXX" 
                            "Bakery XXX"))
        ("Expenses:Rent" . ("Real Estate Agency XXX"))
        ("Income:Salary" . ("Bank transfer from Company XXX"))))

Each transaction’s text is matched against the regular expressions of elbank-categories, the first match defines the category of a transaction.

Reports

Evaluate M-x elbank-report to create a new report. The command will ask you for an account, period and category, which are all optional.

Report

Here’s the list of keybindings available in a report buffer:

  • f c: Filter the transactions by category
  • f a: Only show transactions in a specified account
  • f p: Select the period of the report
  • G: Group transactions by some property
  • S: Sort transactions
  • s: Reverse the sort order
  • M-p: Move backward by one period (month or year)
  • M-n: Move forward by one period (month or year)

You can also customize the variable elbank-saved-monthly-reports and elbank-saved-yearly-reports to conveniently get a quick list of commonly used reports from the overview buffer.

Budgeting

The custom variable elbank-budget is used to define a monthy budget. It defines how much money we want to spend by category of transaction, like "Food" or "Rent".

(setq elbank-budget '(("Expenses:Food" . 300)
                      ("Expenses:Rent" . 450)
                      ("Expenses:Transport" . 120)
                      ("Expenses:Utilities" . 145)))

Note that budgeted amounts are positive numbers while expenses have negative values.

Press b from the overview buffer or evaluate M-x elbank-budget-report to see your expenses based on your budget.

Budget report

You can switch periods with M-p and M-n the same way as in report buffers.

Conclusion

That’s all for now!

Elbank is still in its infancy, but I’m already using it daily. If you find any bug or would like to suggest improvements, feel free to open a ticket on the GitHub project.

  1. As of today, the package is not yet in MELPA, but a pull request is in review to add it to the repository.