I built a finance tracker using Notion

iopreneur Finances

A few days ago I decided to build a finance tracker that will make it easy to track my income and expenses. This is important for me because I have a goal to invest 20% of my income every year, therefore I need to know how much I'm earning, how much I'm saving and how much I have left to spend every month, without breaking my goal. One of the biggest challenges was to convert the amount of my income and expense entries to USD (which is my base currency) and keep them up to date as the currency conversion rates keep changing.

Why I chose Notion

I chose to build my finance tracker with Notion because it's the platform I use for all my data tracking and note taking. Also, the ability to have access to my tracker on all my devices is important because it means that I can track an expense as soon as I make it, otherwise I will likely forget.

Creating the databases

The main two databases in my tracker are Income and Expenses. At a base level the Income database included the following fields:

  • Name - a description of the income source.
  • Type - whether it's income generated from my job or from a side-project.
  • Amount - the amount of income.
  • Date - the date I received the income in my bank account.

and the Expenses database the following fields:

  • Name - what the expense was.
  • Category - the category it fits under (e.g. Groceries, Accommodation, Entertainment).
  • Description - an optional field to enter notes about the expense.
  • Amount - the amount of the expense.
  • Date - the date I made the expense.

💡 Adding currency conversion

After creating these two database I realised that even though my base currency is USD, the currency of my income and expenses is not always in USD. Therefore, I had to find a way to make sure that the numbers I was entering were automatically converted to USD, no matter what the initial currency is.

To achieve this I created a database called Currency Converter. This database had two fields:

  • Name - the three letter code of the currency (e.g. EUR, GBP).
  • Rate - the conversion rate between the initial currency and my base currency, USD.

With this data I was then able to create a relation field on both the Income and Expenses database that allowed me to select the initial currency from the Currency Converter database, and then with a Formula field calculate the amount in USD.

But the problem didn't end there. As you might be aware, currency exchange rates change every few seconds. Therefore, the rates I copied and pasted for each currency wouldn't be accurate for very long, and I did not want to manually update them every day. I had to figure out a way to automate the process.

I solved the problem by creating a simple Make scenario that retrieves all the records in the Currency Converter database, gets the latest exchange rate for each currency and then updates the records. I scheduled the scenario to run once a day so all my numbers are up to date.

Generating monthly reports

In order for me to be able to calculate my total income and expenses for each month, and then deduct them to find the amount I'm saving, I had to create a database with reports. This database has the following fields:

  • Name - the name of the report (e.g. April 2022).
  • Total Income - the sum of the income received in a specified month.
  • Total Expenses - the sum of the expenses received in a specified month.
  • Savings - the savings after total expenses have been deducted from total income.

💡 Relating the income and expenses to a report.

Even though my report database had the above fields, I did not want to calculate and enter the numbers manually at the end of each month. I wanted an easy way to automate the calculations by simply selecting which report an income or expense record should link to.

I achieved this my creating a Relation field on both the Income and Expenses databases and choosing the Monthly Reports database as the one I wanted to relate the records to. This way, I could simply select the report name from the field and it would automatically create the link.

Then on the Monthly Reports database I updated the Total Income and Total Expenses fields to be of type Rollup so I could create a sum of the Amount ($) field retrieved from each related income or expense record.

Generating yearly reports

Finally, I created a Yearly Reports database in order to summarise the data from the Monthly Reports database. This database has the following fields:

  • Name - the name of the report (e.g. 2022).
  • Total Income - the sum of the total income from each month.
  • Total Expenses - the sum of the total expenses from each month.
  • Total Savings - the sum of the savings from each month.

To automatically fill out these numbers the the yearly report record I had to create a Relation field on the Monthly Reports database and choose Yearly Reports as the one I wanted to relate the records to.

Therefore, Total Income, Total Expenses and Total Savings were fields of type Rollup which summed the numbers from the related monthly report records.

Dynamically calculating my savings target

By summarising my whole year into the above three metrics, I was now able to evaluate if I have reached my yearly savings target and if I've put aside the 20% of my income ready for investment. To do this, I added the two following fields:

  • Investment Target - the percentage of my income I want to invest (e.g. 20%).
  • Investment Target Reached - whether my target has been reached or not.

Here's the formula for the Investment Target Reached field:

Summary

Overall, this was a fun project that exercised my Notion skills and helped me achieve my goal of tracking the status of my yearly investment target.

If you would like to get access to this Notion template click here.

Â