Back to blog
Budgeting6 min read

I Automate My Expense Tracking in Google Sheets Without Linking My Bank. Here’s How

By Jun Xiang · Personal Finance

I used to spend about 40 minutes a month typing transactions into a spreadsheet. Now I spend about 15. The difference wasn't a fancy app that connects to my bank. It was a handful of Google Sheets formulas that do the boring work for me.

Here's the thing. I don't want to hand my bank login to a budgeting app. I've seen too many data breaches, and I like knowing my spending history lives in my own Google Drive. But I also don't want to type every transaction by hand. So I built a middle path: manual tracking with automated categorization.

This post shows you the exact formulas I use. Copy them, paste them, and you'll cut your monthly tracking time by more than half.

The problem with manual tracking

Manual tracking fails for one reason: it's tedious. You download your bank CSV, you open the spreadsheet, and you stare at 200 rows of transactions that all need a category. Food, transport, rent, coffee. After a few months, most people give up.

I almost did. In March last year, I stopped updating my sheet for six weeks. When I finally opened it, I had 340 uncategorized transactions staring back at me. It took me two hours to sort them all. That's when I decided to automate the categorization part.

What I automate, and what I don't

I don't automate the data collection. I still download my bank CSV every month and drop it into the sheet, following the same CSV import workflow I wrote about earlier. That keeps my data in my hands, and it means no third party ever sees my transactions.

What I automate is everything after the import:

  • Categorizing each transaction
  • Totalling each category
  • Flagging anything unusual

That's the part that used to eat my time. Here's how each piece works.

Step 1: Auto-categorize with SEARCH and IFS

The core trick is a keyword table. I keep a small sheet called "Rules" with two columns: keyword and category.

KeywordCategory
GRABTransport
FAIRPRICEGroceries
STARBUCKSCoffee
NETFLIXSubscriptions
SALARYIncome

Then in my transactions sheet, I use this formula to read the description and assign a category:

=IFERROR(INDEX(Rules!B:B, MATCH(TRUE, ISNUMBER(SEARCH(Rules!A:A, B2)), 0)), "Uncategorized")

This is an array formula, so in Google Sheets you enter it with Ctrl+Shift+Enter. It checks each keyword in the Rules table against the transaction description in B2, and returns the first match. If nothing matches, it marks the row "Uncategorized" so I can fix it by hand.

I built this with about 40 keywords, and it catches roughly 85% of my transactions automatically. The other 15% are new merchants or one-off purchases, and those take me about five minutes a month to sort.

Step 2: Total each category with SUMIF

Once every row has a category, the totals are easy. I keep a summary tab with a list of categories, and this formula pulls the monthly total for each one:

=SUMIF(Transactions!C:C, A2, Transactions!D:D)

That reads: sum the amounts in column D, but only where the category in column C matches the one in A2. Paste it next to each category name and you get a clean monthly breakdown.

Here's what my summary looked like last month:

CategoryAmount
Rent$1,450.00
Groceries$412.30
Transport$96.80
Coffee$38.50
Subscriptions$27.90
Eating out$184.20
Total$2,209.70

Step 3: Flag the unusual stuff

The last piece is a simple check. I add a column that compares each transaction against the average for its category, and flags anything more than three times the average:

=IF(D2 > 3 * AVERAGEIF(C:C, C2, D:D), "Check me", "")

This catches the big one-off purchases that would otherwise slip through. Last month it flagged a $240 electronics purchase that I'd forgotten about. Without the flag, I would have assumed my groceries were the problem.

The time math

Here's the before and after, based on my actual numbers:

TaskBeforeAfter
Import CSV5 min5 min
Categorize25 min5 min
Review totals10 min5 min
Total per month40 min15 min

That's 25 minutes a month saved, which is 5 hours a year. Not a fortune, but it's the difference between keeping up with tracking and abandoning it entirely.

Why I don't just use a bank-linked app

You might be thinking, why not just let an app do all of this? Fair question. The tradeoff is that those apps need your bank login, and they store your transaction history on their servers. I'd rather keep that data in my own Google Drive, where I control who sees it. I wrote more about why your financial data should stay in your Google Drive if you want the full reasoning.

That's actually why I built CalmExpense. It's a Google Sheets dashboard that does exactly this kind of automated categorization, but your data stays in your own Google Drive. It's a one-time $29.90 purchase, no subscription, and it supports CSV uploads from DBS, OCBC, UOB, and other banks. If you're already tracking manually in Google Sheets, it can save you about 10 minutes a month on categorization alone.

The honest part

This system isn't perfect. New merchants still land in "Uncategorized" and need a manual fix. Cash spending never makes it into the sheet unless I remember to log it. And the array formula can be slow if your sheet has tens of thousands of rows.

But here's the thing. It's good enough that I've kept it up for a year, which is more than I can say for any budgeting app I've tried. The goal isn't a perfect ledger. It's a system you'll actually stick with.

FAQ

Do I need to know how to code? No. The formulas above are copy-paste. You just need to adjust the column letters to match your sheet.

Will this work with my bank? If your bank lets you export a CSV, yes. Most banks do. CalmExpense supports DBS, OCBC, UOB, and others.

How long does it take to set up? About 30 minutes the first time, mostly building your keyword list. After that it's maintenance-free.

Is my data safe? It lives in your own Google Drive. No third party sees your transactions.

What if a transaction gets the wrong category? You'll catch it in the "Uncategorized" or "Check me" columns, and you can fix it in seconds.

Updated: August 2026

See your own spending this clearly

CalmExpense turns your bank statement into a clean dashboard inside your own Google Sheets. No bank linking, no subscription. One payment of $29.90.

Start your free trial