Sitemap

How to Build an Automatic Expense Tracker for iPhone (Without AI)

5 min readAug 19, 2026

--

Moving from Kochi to Gurugram is a cultural shift. You trade serene backwaters for multi-lane highways, beautiful coastal breezes for… vibrant air, and a relatively stable bank account for an absolute black hole of financial mystery.

Within a month of moving, I hit a wall. Every single month ended exactly the same way:

  1. I knew I had spent money.
  2. My bank account confirmed I had spent money.
  3. I had absolutely no idea where that money went.

Naturally, like any self-respecting tech person, I decided to fix my life using software. Unnaturally, I ended up fighting Apple’s ecosystem out of pure spite. Here is how I built a secure, fully automated, multi-user expense tracker using nothing but iOS Shortcuts, a custom web app, and an outright refusal to let AI touch my budget.

Step 1: The Manual Tracker App Graveyard

My first instinct was to download the top five expense tracking apps on the App Store. They all looked gorgeous. Slick charts, dark mode, pastel color palettes.

But they all had the exact same fatal flaw: They required me to type things.

[Me buys a ₹40 cutting chai]
App: "Please open me, authenticate with FaceID, click 'Add Transaction', type '40', select currency, find the 'Beverages' category, type the merchant name, and hit save!"
Me: "I would rather go bankrupt."

After roughly four days, the novelty wore off. I forgot to log a grocery run, then a dinner, and suddenly my tracker app was just another dusty icon sitting on page three of my home screen.

I needed automation. Specifically, I wanted something that looked at the one thing that knows everything about my spending: My SMS inbox. In India, every single time you breathe near a card machine or scan a UPI QR code, your bank fires off an SMS.

I searched the App Store for an automatic iOS SMS expense tracker. The results? Zero. Why? Because Apple locks down your text messages tighter than Fort Knox.

So, I did what any rational developer does when an app doesn’t exist: I spent days building a massive, complex custom web system to avoid spending 4 seconds typing an entry.

Step 2: The Battle Against the iOS Overlords

The architecture was simple in my head: Bank sends SMS ➔ iPhone reads SMS ➔ iPhone sends data to my web application API ➔ Dashboard updates. Easy, right?

Wrong.

During development, I explored two automation approaches, and they both tested my sanity.

❌ Approach A: Real-Time Automation (The Dream That Died)

iOS has an automation trigger for “When an SMS is received.” I set it up so that the exact millisecond a transaction SMS hit my phone, a shortcut would run in the background, extract the text, and hit my server API.

It worked beautifully — for about three transactions. Then iOS background limits kicked in. Apple’s operating system aggressively murders background tasks to preserve battery life. If I made two transactions in quick succession, or if my network dropped for half a second, iOS simply shrugged and killed my script. The data sync was less reliable than a weather forecast.

✅ Approach B: Scheduled Automation (The Winner)

After multiple tests and a lot of pulling my hair out, I pivoted. Instead of trying to be a real-time superhero, I went for a time-based batch processor.

Get Aswanth A M Athira’s stories in your inbox

Join Medium for free to get updates from this writer.

Now, the server sits quietly, completely passive. When a scheduled time arrives (say, every evening at 8:00 PM), my iPhone automatically runs a local iOS Shortcut. It wakes up, grabs all the bank SMS messages received in the last 24 hours, bundles them into a neat batch payload, attaches a secure token, and fires off a single, definitive outbound HTTPS POST API request to my server.

No background crashes. No missed data. Just pure, unadulterated batch stability.

Step 3: The Code (And Banning “Unwanted AI” Wrappers)

When it came to processing the text on the server side, someone inevitably asked me: “Hey, are you going to use an LLM API to scan the text and figure out what the user bought?”

Absolutely not.

I am heavily fatigued by platforms forcing unnecessary AI wrappers into every basic tool. I don’t need a multi-billion-parameter neural network hallucinating and telling me that my electricity bill payment was actually a luxury cruise booking.

Instead, I built a fast, incredibly lightweight, deterministic server-side Rules Engine inside spently.space.

If Merchant CONTAINS "Zomato" ➔ Category = "Food" 
If Merchant CONTAINS "Blinkit" ➔ Category = "Groceries"

If you continuously make transactions with a specific store or person, the system learns the pattern. Once you flag a merchant once, a custom rule locks it in. Every future transaction to that store automatically routes into its exact visual bucket with 100% predictability and zero compute overhead. It’s blazing fast, incredibly cheap to host, and completely private.

Step 4: Making It a Real SaaS (Because Sharing is Caring)

What started as a personal project to solve my own financial leaks felt like something that could genuinely help anyone suffering from manual-entry burnout. So, I upgraded the backend to support multiple users.

Now, spently.space handles full authentication:

  1. Anyone can securely sign up and log into the dashboard.
  2. The platform is completely responsive and mobile-friendly, so you can review your financial status cleanly on a laptop or on your phone while standing in line at a grocery store.
  3. You hit a button to Generate a Personal API Token.

You paste that secure token directly into the configuration prompt of your local iOS Shortcut. When your phone makes its daily scheduled POST request, the header verifies your token, handles the authentication middleware, and securely isolates your financial data into your private database schema.

The Architecture in a Hand-Drawn Nutshell 📊

Press enter or click to view image in full size

For the visual learners out there, here is exactly how the data moves without a single webhook in sight:

[ CLIENT SIDE: iPhone Local Automation ]
│
▼ (Triggered daily at 8:00 PM)
[ iOS Shortcut Runs ]
│──► Fetches local SMS messages from Bank
│──► Compiles text data into a local Batch Processor
│──► Attaches your Secure User API Token
│
└───► Fires Outbound [ HTTPS POST API Call ]
│
▼
[ SERVER SIDE: Web Application Backend ]
│
├──► [ Auth Middleware ] ➔ Verifies User Token
├──► [ Rules Engine ] ➔ Auto-categorizes Merchants (Food/Groceries)
└──► [ DB & Dashboard ] ➔ Saves records & refreshes your responsive UI

Lessons Learned (And a Few Thank Yous) 🧠

This project taught me a fundamental truth about software development: the absolute best products come from solving your own painful, hyper-specific problems first.

Building this required wrestling with regex string parsing, security layers, and iOS background automation limitations. I owe a massive, sincere thank you to Antigravity and Stitch for their incredible structural and development support throughout this build. I also have to give credit to my digital co-pilots, ChatGPT and Gemini, for keeping me sane during midnight debugging sessions when an Apple Shortcut refused to parse a string correctly.

The platform is completely live right now! If you are sick of manual expense tracking apps and want a secure, automated, AI-free alternative for your iPhone, I would love for you to try it out.

--

--