Skip to main content

Command Palette

Search for a command to run...

We Automated My SG Banking Workflow with Claude Code

My Python scripts handled it. Claude Code gave the system a brain.

Updated
6 min read
We Automated My SG Banking Workflow with Claude Code
R
Head of Data in Singapore. Builds data platforms by day and AI-powered personal automation by night. Hybrid athlete, miles hacker. Eddie is my dog — he has opinions about all of this.

I have accounts across most of Singapore's major banks and more credit cards than I'd like to admit. If you're a miles hacker in SG, you know the game — different cards for different spend categories, bonus multipliers, statement date deadlines. It's a part-time job disguised as a rewards programme.

Every month, that means downloading statement files, importing them into YNAB, categorizing 200+ transactions, and figuring out whether I've hit my bonus caps before each billing cycle closes. It used to take me 2-3 hours. Now it takes 4 minutes.

Your Data Isn't Yours

Singapore has no open banking APIs. No Plaid. No way to programmatically access your own transaction history. You want your data? Log into internet banking, navigate three menus deep, download a file. In 2026, some banks still export XLS. Every bank does it differently, and none of them think that's a problem.

YNAB has a perfectly good API. The tool works. The banks are the bottleneck.

Almost Twenty Years of This

My budgeting obsession didn't start with code. It started with 20 Rappen.

In 2007, I was a broke college student in Switzerland — one of the most expensive countries on Earth — and I built my first accounting tracker in a spreadsheet. It had no reconciliation feature, so when the numbers didn't balance, I'd spend hours hunting for the discrepancy. One night I kept my girlfriend at the time waiting while I tore through receipts looking for a missing 20 Rappen. That's about 30 Singapore cents. She was furious. I found it. I felt vindicated. The relationship did not benefit.

Almost two decades later, I have 28,000+ transactions in YNAB going back to 2015. The obsession never went away. It just got better tools. Every partner since has had the same complaint — I optimise things that normal people don't even notice, and I can't stop.

So in 2020 I started building the pipeline in Python. Weekends, mostly. One bank at a time, one parser at a time. By 2024 it handled every major bank in Singapore — format detection, statement parsing, YNAB import. Three hours down to 30 minutes. Solid, but dumb. Rules-based, no memory, no judgement.

Why I Bothered

Personal accounting is defensive. You're not making money doing it. You just want to know if you're on track — and the process of finding out is so tedious that most people either give up or stay anxious. I didn't want to spend my evenings reconciling transactions. I wanted to walk my dog, cook dinner, train for a half marathon. But I also can't not know where my money's going. So the only option was to make the process disappear.

The Python pipeline handled the mechanical part. But categorization was still a nightmare — merchant names on bank statements are basically encrypted. "PAYNOW-FAST OTHR QSB-SQR-SG-XXXXXXXXXXXX" is a coffee shop. "ZARCO MEDITERR" is a Mediterranean stall inside a hawker-bar called AliBaBar. No rules engine in the world is solving that without context.

That's where Claude Code came in. Not a chatbot — an AI layer with persistent memory that actually learns how I think about money. 2 hours a week became 4 minutes. I built three things on top of it:

Three layers: ETL, AI categorization, and mile hacking advisory

1. The Auto-loader. Bank files go in, clean YNAB transactions come out. All the format chaos handled silently. Turned a 45-minute manual import into a 30-second command. Boring, essential, the foundation everything else sits on.

Auto-loader output — 8 accounts processed, 58 new transactions, 116+ duplicates detected

2. The Categorizer. Rules handle the obvious 80%. For the ambiguous 20%, Claude presents them for human review, learns from my corrections, and writes new rules automatically. First run: 40% auto-matched. After a month: 85%+. It remembers that the same coffee shop is "Dining Out" when I'm alone and "Dating" when I'm with my girlfriend. The system gets smarter every session because the memory persists. Every correction is an investment, not a chore.

AI categorizer output — suggested categories with confidence scores

3. The Mile Hacker. This one came out of pure spite.

Mastercard has no public API. HeyMax — the miles aggregator everyone in Singapore uses — can track your balances but can't tell you whether you're on track to hit your bonus caps before each statement date. Nobody can, because nobody has the cross-bank transaction data to do the math.

But I do. My pipeline already knows every transaction on every card.

So I built an advisory layer that tracks spend against bonus caps per billing cycle — which cards have tiered multipliers, what the thresholds are, how many days are left, whether my run rate will get there organically. Every session outputs a status table:

Mile hacking advisory output — per-card status with days remaining and spend recommendations

It's the feature no fintech app in Singapore offers. Not because it's technically hard — it's basic arithmetic. But because no app has access to cross-bank transaction data. I only have it because I built the ugly plumbing layer underneath. The boring infrastructure enables the interesting product. It always does.


My girlfriend says I'm more obsessive about optimisation than most people.

Last month I misclassified a credit card's bonus category as "Beauty" instead of "Shopping" and lost a month's worth of bonus miles. Built an entire AI-powered financial automation system and still got done in by my own ADHD. She could see the melted-face emoji forming in real time and launched into preemptive there-there's.

But I don't need there-there's. I need to fix the system. Like Craig in Dinosaur Office said: "I'll save this company the only way I know how — with a PowerPoint presentation." Same energy. Except my version has been: spreadsheet → Excel macro → Python script → AI pipeline. Each time something breaks, I don't mourn. I upgrade.

Accounting day takes 4 minutes instead of 2 hours. I'll take the diagnosis.


I'm exploring whether to open-source the bank statement parsers. If you're a YNAB user in Singapore fighting the same CSV battles, I'd love to hear from you.


Rory Tan is Head of Data in Singapore. He builds data platforms by day and AI-powered personal automation by night. This is part of a series on building in public.