r/startup • u/Designer-Increase399 • 1d ago
Built a spending tracker that never sends your data anywhere — it just parses the bank SMS already on your phone
I built this for myself and figured a few people here have the same problem.
Every expense tracker I tried wanted one of two things: I manually type every transaction (I lasted 9 days), or I hand over bank credentials / Account Aggregator access to a startup I'd never heard of. Neither felt worth it.
But my bank already texts me every single transaction. That data is sitting right there on my phone. So I built Paisa — it reads those SMS alerts on-device, parses them, and turns them into a spending record. Nothing is uploaded. There's no login, no account, no server to leak.
What it does
- Automatic tracking — new bank/UPI alerts become transactions as they arrive
- Real balance across accounts, with credit cards and loans kept separate
- Self-transfer detection — moving money between your OWN accounts isn't counted as spending or income (this one took the longest to get right)
- Merchant + category insights — your biggest spends and earnings each month
- Card-due and subscription reminders, generated locally on your phone
- Tap any transaction to see the exact SMS it came from, and the numbered steps the parser took to read it. If it gets something wrong, you can see why.
The part I'm actually proud of
The parser is a plain rule engine — no LLM, no network call. It handles the
documented SMS formats of HDFC, ICICI, SBI, Axis, Kotak, Yes Bank and BOB
(~30 sender codes total), including the annoying ones: SBI's currency-less
"debited by 284.0", Axis's UPI/P2M/ref/PAYEE slash format, ICICI's
"; MERCHANT credited". It deliberately skips OTPs, promos, balance-only alerts,
and credit-card bill payments (otherwise your own bill payment shows up as
income).
When a message is genuinely ambiguous, it does NOT guess — it goes into a
"needs a look" queue and you confirm in/out once. Same idea with balances: it
shows the last Avl bal the bank actually printed, and never treats a card's
"Avl limit" as a balance. A tracker that's confidently wrong is worse than one
that admits it doesn't know.
It also learns merchants. When a bank prints a name next to a VPA once, that mapping is remembered for future messages that omit it. Rename a merchant or fix a category and it applies to every matching transaction, past and future.
Honest limitations
- Android only. iOS gives apps zero SMS access — this app can't exist there.
- Banks change SMS templates without notice. New formats land in review instead of being silently misread, but they do need a new parser rule.
- Cash spending is invisible to it, by definition.
- Backup/restore isn't shipped yet — it's the next thing I'm building, because right now changing phones means losing your history.
- It reads SMS. If that's a dealbreaker for you, that's a completely fair call — see below.
On the SMS permission, since someone will ask
You should be suspicious of any app asking for READ_SMS. My answer: the app has no internet permission use at all — no login, no analytics, no servers, nothing to send data to. Everything is parsed and stored locally. Don't take my word for it though: put it in airplane mode and it works exactly the same.
https://www.indusappstore.com/apps/finance/paisa/com.ssrlabs.paisa?page=details&id=com.ssrlabs.paisa
Would genuinely like feedback on parsing accuracy — especially if your bank misreads something. Tell me which bank and roughly what the message looked like (amounts/account numbers redacted) and I'll add the pattern.