One Year Later: Still No API, But Now I Have Help

Sometimes the best interface is a well defined prompt.


It’s been a year since I started this blog, and I figured revisiting one of my earlier posts would be a good way to mark the occasion.

If you haven’t read it, here’s the tl;dr: I wanted programmatic access to my transaction data. My bank does not provide API access to customers. As a result, I did what most software engineers typically do and built my own hacky solution.

The resulting pipeline uses AWS SES to receive my email alerts, Lambda to parse them, and S3 to store them where I use Athena to query the data.

Banks still don’t offer direct API access to customers. So for the past year, I’ve been consistently getting my daily reports that let me see when I’ve overshot my monthly budget.

I’m the API Now

With a year’s worth of transaction data in S3, I thought I could make it easier to retrieve the data by providing the programmatic access I wanted in the first place.

The idea was to create a set of endpoints exposed using API Gateway/Lambda. For example, to see the transactions from last month just send a GET request to /transactions with a set of parameters.

I wanted to set up the endpoints so I could build a web app on top of it. But I never got around to doing it.

Stop Trying to Make Fetch() Happen

I’ve implemented web apps using React before, but it’s not my most favorite thing to do. The problem is, I end up over obsessing about how the elements are displayed on the page. Then, I make a change that eventually breaks the whole thing and in frustration I just revert back to where I started.

However with the tooling available now, I can just point Claude Code to the DB, retrieve the transaction data, and return a formatted report with charts and spending breakdowns.

Clicking each category button filters the table

Now I can skip the process of building a UI, and ask Claude to summarize my monthly spend and highlight the fact that I bought yet another pair of headphones (for some reason I still end up going back to my original wired ones).

The cost comparison between the two is pretty trivial. An API endpoint + web frontend comes out to a fraction of a cent per request, and Claude Code is just part of the monthly subscription. I’m better off spending my time investigating why I’ve ordered so much from DoorDash this month.

For an actual cost reference, invoking Claude via Bedrock with similar context runs roughly about $0.04 per request.

Minimum Vibable Product

To be clear, I really do like my daily summary emails. They provide me with just enough info to guide my spending and help me avoid the transaction alert spam.

So the pipeline is here to stay, but I no longer need to create an API wrapper and web interface when I can simply ask Claude to get the information and generate a report for me.

Banks still haven’t given me an API, but at this point I’m not sure I even need one.