Back to projects
FinMail

Finances read from your inbox

Banks have no open API. This service reads the emails they send anyway.

JavaSpring BootPostgreSQLGmail APIGeminiJWT
Finances read from your inbox

The problem

I could never keep my finances organized. I tried several apps and they all ended the same way: either I logged every expense by hand, or I entered it twice —once in the bank, once in the app. That friction meant I'd stay motivated for three days and then quit. What I needed was to have my spending organized on its own, with the least human intervention possible; if the system forces me to enter something, it already lost.

The solution

I realized something obvious that was right in front of me: my bank emails me for every transaction. If that already arrives on its own, why was I typing it in by hand? The initial idea was to parse those emails so each one became a row —amount, merchant, date— without me touching anything. Then, with the AI boom, it occurred to me to go one step further: use a model to predict which category each merchant belongs to. It's not 100% accurate, but the trick is how it learns: once the system knows a merchant's category, it never asks the AI again. That gives me two wins: I stop accepting categories over and over, and I don't waste tokens for nothing. Basically, it gets more efficient and cheaper the more you use it.

Technical decisions

Read the email, don't wait for an API

Banks expose no API, but they do send an email for every transaction. Work with what exists, not with the ideal.

Pluggable per-bank parsers

Adding a bank is implementing a parser; auth, AI and endpoints are already built.

Learn the category and stop asking

Once the system knows a merchant's category, it never queries the AI again: fewer manual confirmations and fewer tokens spent. Efficiency and savings that grow with use.

JWT auth + PWA frontend

The backend exposes a stateless JWT API and the frontend is a PWA: you use it like an app from your phone, which is where you actually check your spending.

Live

The PWA shows parsed transactions with their AI-suggested category.

Visual demo coming soon