Case study
Kharcha, an intelligent layer on five years of every rupee I’ve spent
- Type
- Self-initiated concept. Not built.
- Role
- Everything. I’m the user, the researcher, and the designer.
- Research
- Over five years of my own daily expense tracking.
The concept
I’ve tracked every rupee I’ve spent for over five years. Five bank accounts, sixteen credit cards, and a handful of wallets. I log all of it in Money Manager, an app for tracking personal expenses, where each of those is its own account, because an account is anything that can hold money. It comes to more than twenty-five of them. Tracking all of it is a chore I do every night, and it grows every time I open a new card.
Kharcha is a concept for what happens when an intelligent layer sits on top of everything I’ve logged. It reads the payment notifications that already hit my phone, sorts them into the categories I already use, and turns five years of manual tracking into something an LLM can actually work with.
I haven’t built it. Everything after this describes how Kharcha works as if it exists, because I’ve lived the problem long enough to know exactly what it should do.
0+
Years tracked daily
0+
Accounts in the ledger
0
Credit cards
01 / The problem
Every app built to solve this fell short somewhere, so I still track it manually
Every transaction I make already arrives as an email or an SMS the moment it happens. The notification has the amount and the account it came from. Every night I open a separate app and enter all of it again, manually. For over five years I have been the piece in the middle, moving the same information from a notification into a ledger, night after night.



I track manually because I have tried most of the apps built to avoid it, and each one fell short somewhere that mattered to me.
Where every app fell short
Two of those situations come up constantly, and they are the ones I most want to keep catching by hand:
The split bill
When I split a group bill, the full amount leaves my account, but only a fifth of it is actually mine. The rest is me covering friends who pay me back later, so my real spend is that small share, not the total. An app that reads only the bank notification sees the whole amount and files it as mine, because the notification has no idea it was a split. I catch this manually today, and I want to keep catching it.
Food this month: ₹5,000, all filed as mine
The returned purchase
A ₹1,000 shirt I buy and return should cancel out of my records, because I never actually spent that money. Instead it sits in my expenses, inflating every chart that rolls up from there, and the refund coming back gets read as fresh income on top. No app I have used untangles this. Most banks do not even send a notification when a refund lands, so I often only notice by remembering one was owed.
₹1,000 of apparel spend that never happened, plus phantom income
None of this is a data problem. The data is complete and it arrives on time. It just arrives as text written for a person, and I am the person reading it and cleaning it up every night.
02 / The taxonomy
Five years of tagging built the structure an AI would actually need


The confirmation email already says what I bought. Kharcha reads it, works out the product, and sets the category. The detail was always in the inbox.
A finance app that starts from raw transactions asks a model to invent a structure that was never there. Kharcha starts from the opposite end, with a structure five years of real decisions already built, so the model works inside a system instead of guessing at one. That is what an off-the-shelf app cannot hand it.
03 / How it works
Every transaction already emails me. Kharcha does the rest
Every transaction I already get as a notification flows through the same path, from raw email to a tagged entry, on its own. None of that is the intelligent part; it is plumbing whose only job is getting the data in clean.
Data
Reads the notifications, pulls the numbers, stores them
Intelligence
Categorizes, learns my merchants, asks when it can't tell
Output
One clean statement across every account, mine end to end
Email or SMS, exactly as it already arrives
Pulls the amount, no model involved
Only touches the fuzzy parts
Resolved against five years of history
Filed into the existing taxonomy
One structured entry, owned end to end
The amount is pulled by pattern-matching and has to appear in the original email before anything saves. The LLM only touches the fuzzy parts, like a mangled merchant name.
I own the data end to end. Only the few emails that actually need categorizing ever reach an outside model, and even that could run locally instead of on Gemini.
It files what it’s sure of and asks about the rest
Kharcha handles the repetitive majority on its own and only comes to a human when a transaction needs context it cannot see.
Tier 1 · Auto
Known merchant, known pattern. Instant classification, and no LLM call needed.
Swiggy order → Food → Delivery → "Dinner delivery"
Tier 2 · LLM
Known merchant, ambiguous category. The LLM resolves it using taxonomy context and recent patterns.
Amazon order → [Shopping? Groceries? Gift?] → LLM reads the email body → Groceries
Tier 3 · Human
Unknown merchant or truly ambiguous. A Telegram notification asks for a manual review, and the answer is learned.
New merchant "QuickHeal" → Unknown → asks via Telegram → I say Health → learned
And once a month, Kharcha reads my card and bank statements and reconciles them against what it captured, catching anything it missed and surfacing refunds the notifications never mentioned.
04 / A day with Kharcha
A normal day, and I never open the ledger
The system stays invisible and works off the emails I already receive, surfacing only when something needs me.
Coffee at the counter
The UPI debit notification lands. Kharcha pulls the amount, recognises the café, and files it under Food → Coffee.
Cab to work
The ride receipt arrives seconds later. Known merchant, filed as Transport → Cab. I never see it happen.
An Amazon order
The bank notification only says Amazon. The order confirmation says what I actually bought, so Kharcha reads it and files the order as Electronics.
A charge it can't place
A merchant Kharcha has never seen, and the notification carries no context. It asks me on Telegram instead of guessing, then remembers the answer.
Groceries on the way home
DMart debit notification. Known merchant, filed as Groceries, and Kharcha goes quiet again.
The day, summarised
Six transactions, one question, everything tagged. Kharcha sends the summary. I never opened the ledger.
Where automation ends
Everything up to here just gets the data in. The point was always what I could do once it’s all there.
Up to here, Kharcha does what I did every night, only faster and without me in the middle. A payment notification lands, it works out the category, and the entry goes where it belongs. That takes care of the chore.
For five years this history has just sat there. I could scroll it and I could search it, but I could never ask it anything. An LLM reading across the whole of it is what changes that. I can ask where my money went and get a real answer back. It can flag a charge that doesn’t fit how I usually spend, measured against my own history rather than a fixed limit. And it can look at where my money is heading and help me plan for something I haven’t bought yet.
Everything ahead is what it looks like.
05 / The app
The three things Kharcha does
Everything Kharcha reads needs somewhere to live, and an app is that place. It’s where all that history becomes something I can use, and where the intelligence gets room to show its work instead of just answering in text. Three things it does, and each one only works because of the years of history underneath it.
Talk to my money
Ask it anything about my spending and get a real answer back
Know my money
Understand what’s happening right now, and it tells me what’s off before I think to look
Plan my money
Work out what I can afford and set the goal, before I’ve spent a rupee
The past
Talk to my money
Everything I've logged has just sat there. I could scroll it and I could search it, but I could never ask it a real question. An LLM reading across all of it is what changes that.
It reads across everything I've logged in one go, so it catches the slow changes I'd never have thought to check for.
I ask in plain language and it answers from my own history, without me working out what to search for.

I ask how my grocery spend has moved and get the trend, then ask what’s driving it and get the answer broken down by store and order size.
The present
Know my money
The numbers stay up to date on their own now. But up-to-date numbers across all my accounts still don't add up to a picture until something pulls them together. This is where the app tells me what my money is doing this month, and what it thinks I should know.
It knows what a normal month looks like for me, so it can tell when something doesn't fit without me setting a single rule.
I ask what's going on this month and get an answer worked out across every account at once.


Net worth up top with the balance breakdown underneath, and cashflow for the month split into income, expenses, and what got saved. Then goals and what’s worth a look, and recent activity with upcoming bills flagged where I’ll see them.
The future
Plan my money
This is the furthest I took the idea. Talking and knowing both look at money that's already moved. Planning looks forward. I tell it something I want, say a bike in six months or a house in a few years, and it works out whether I can get there and how, then builds the goal and tracks it for me.
It keeps the plan against how I'm actually spending, so it speaks up when a goal starts drifting before I'd notice myself.
I ask about something I want and it works out the answer from where my money is already heading.


I ask for a bike worth ₹2.6 lakh in six months and get my full money picture, then drill into the food and groceries spending eating the budget. Then a calculator I can drag to model the cut, and the goal card and monthly reminder the agent sets up once I confirm it.
Asking whether I can afford the bike doesn't have to mean reading a paragraph back. Kharcha builds the thing I need to see. A calculator I can move myself, set against my real spending, so I can try a cut and watch the goal come within reach. The goal works the same way. I don't fill in a form, the agent builds the card and it tracks itself from there. This is the part I find most interesting to design, an intelligent layer that renders itself as something I can use instead of something I have to read.
Where I’d start
If I were shipping this tomorrow, I’d do it in Telegram and skip the app. Everything up to here already reaches me there, and a chat window is enough to prove the part that matters, that the intelligence is the product and the interface is just where it shows up. The app earned its place here by giving that intelligence room to show its work as something I can use instead of read.
I’d build the reading pipeline and the taxonomy first, because everything else is a view on top of them. And the whole time I was writing the spec, one question kept coming back. Where should Kharcha act on its own, and where should it stop and ask me. The pipeline handles the routine without me. The intelligence is what knows when a transaction needs an answer only I can give. That line, between what it handles and what it brings to me, is what I kept designing around.
The structure has to come from somewhere
Kharcha works because I already had a taxonomy, five years of my own decisions about where things go. Someone starting from scratch wouldn't have that on day one. The looking-back abilities would be thin at first, and the system would have to build its structure over months of use before it got good, rather than arriving already knowing me.
The genuinely hard calls still land on me
When a transaction is truly ambiguous, Kharcha stops and asks. That's the design working as intended, but it does mean the system is never fully hands-off, and how often it asks depends entirely on how messy my spending gets.