About

Built for people who keep real spreadsheets.

I built Fins because I had four cards, three sign-up bonuses, and forty perks in flight, and nothing on the market actually wanted to help me keep track of them.

The two-month problem

Every spreadsheet I had tried for tracking credit card rewards fell apart inside two months. Once you have four cards with different earn rates, sign-up bonus deadlines, and recurring benefit credits, a flat sheet stops telling you anything useful.

Finstracker is the answer I wrote for myself. It stores your cards, your transactions, and your perks, then shows you the parts that matter: how many points each card holds, what they're worth in dollars at your card's redemption rate, how close you are to finishing the sign-up bonus, and how much of your annual credits you have already captured this year.

Built on opinionated choices

It runs on Node + Express on the back end, MongoDB through Mongoose for storage, and vanilla HTML / CSS / JS on the front end with no build step. Auth is bcrypt-hashed passwords with JWT bearer tokens.

Three principles guided most of the decisions:

  • Derive on read. Cached totals drift. Computing them from the source of truth every time is faster than debugging stale state.
  • Cascade server-side. Deleting a card removes its transactions in the same handler call. No orphaned rows, no client-side coordination.
  • Empty states are a feature. The first version of the dashboard showed a broken chart with zero data. The current empty state is the version users actually understand on the first try.

What it isn't

Finstracker does not link to real bank accounts. Transactions are entered by hand or through CSV import. It does not support multi-user households (every record is scoped to a single user). It is not packaged as a native mobile app, though the layout works down to 375px wide. And it does not do receipt OCR or recurring auto-posts.

Those last two sit on the future-improvements list, not in this version.

The part nobody tells you

Tracking perks is genuinely hard, and that is not an accident. Credit card companies make money when you forget. The $300 travel credit you didn't use, the Uber Cash that expired at the end of the month, the dining statement credit that quietly reset in January — those are the rebates that pay for the annual fee on paper but never make it back to you in practice. The benefits are split across portals, buried in PDFs, scattered across different reset cadences (monthly, quarterly, semi-annual, calendar year, cardmember year), and almost never surfaced inside the app where you'd actually look. After a few months of trying to keep a spreadsheet honest, the math gets away from you, the card stops paying for itself, and that is the outcome the issuer is optimizing for.

Fins exists to flip that. One place to see what you've already captured, what's still on the table, and what's about to expire — before it does.

Who built it

Hi, I'm Eduardo Gomez. I built and maintain Finstracker on nights and weekends. You can find me on LinkedIn, and if you have feedback, found a bug, or just want to argue about which card has the best lounge access, drop me a line. I read every message.

See what your cards are actually doing for you.

Free for 7 days. No credit card required.

Start your free trial