{"slug": "i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that", "title": "I Built an SMS-Reading Expense Tracker. Then I Learned Why Nobody Else Does That.", "summary": "A developer built an SMS-reading expense tracker for Android, but abandoned the approach after discovering that Google Play Protect blocks apps requesting SMS permissions, distribution is nearly impossible, and iOS never allows third-party SMS access. The project, Spendlee, pivoted to a voice/text logging system using Android's SpeechRecognizer to avoid restricted permissions.", "body_md": "*Cross-posted from the Spendlee repo, where the full technical postmortem lives in *\n\n`docs/PIVOT-FROM-SMS-TO-VOICE-AI.md`\n\n.Every UPI transaction in India comes with an SMS receipt. So the first version of what's now **Spendlee** skipped manual expense entry entirely — a `BroadcastReceiver`\n\nwould catch the bank text, regex out the amount and merchant, and fire a notification: *\"New transaction detected — log it?\"*\n\nZero typing. Zero friction. The single biggest reason expense trackers get abandoned, solved before the user even opened the app.\n\nIt worked. I built the whole thing — SMS receiver, bank-specific and generic UPI parsers, the notification flow, confirm/categorize screens, Room storage. Then I tried to actually ship it.\n\n**Google Play Protect doesn't care that you're not malware.** The moment a signed APK requesting `RECEIVE_SMS`\n\n/`READ_SMS`\n\nwas installed outside the Play Store, Play Protect blocked it on sight — the same heuristic that catches SMS-stealing malware doesn't stop to ask whether this particular app is a personal finance tool you wrote yourself. Getting around it meant disabling a security feature and enabling \"install from unknown sources,\" which is a fine ask for a developer testing their own build and a hard no for handing the APK to a friend or spouse.\n\n**Distribution was harder than the app.** You can't even email the thing to yourself — Gmail strips `.apk`\n\nattachments outright. Every distribution path led back to the same trade: disable one protection, then another, for an app whose entire value proposition was supposed to be *effortless*.\n\n**The Play Store isn't a clean escape hatch either.** Declaring `RECEIVE_SMS`\n\n/`READ_SMS`\n\nthere requires a separate Permissions Declaration Form with strict, inconsistent review outcomes, plus a mandatory privacy policy — a reasonable cost for a company shipping an official banking app, a lot of process risk for a side project whose core feature is exactly the permission pair Google scrutinizes hardest.\n\n**And then the wall that actually mattered: iOS.** No third-party iOS app has ever been allowed to read SMS content — not behind a permission dialog, not through a special entitlement, not at any App Store review tier. This isn't a policy form to fill out; it's OS-level sandboxing Apple enforces uniformly. Which meant the SMS-reading architecture could *never* have an iOS counterpart, full stop — any plan to eventually port this to iPhone was dead the moment SMS reading became the core mechanism, regardless of how much more Android engineering went into it.\n\nI replaced automatic detection with **user-initiated voice/text logging**:\n\n`SpeechRecognizer`\n\n— no cloud speech API, no extra permission risk.`RECORD_AUDIO`\n\nisn't in Android's Restricted Permissions bucket — no Play Protect flag, no special declaration form.Full writeup with more detail: [ docs/PIVOT-FROM-SMS-TO-VOICE-AI.md](https://github.com/shadow-monarch9/Spendlee/blob/main/docs/PIVOT-FROM-SMS-TO-VOICE-AI.md). Repo:", "url": "https://wpnews.pro/news/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that", "canonical_source": "https://dev.to/shadowmonarch9/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that-309a", "published_at": "2026-07-27 16:11:33+00:00", "updated_at": "2026-07-27 16:31:28.764977+00:00", "lang": "en", "topics": ["developer-tools", "ai-products"], "entities": ["Spendlee", "Google Play Protect", "Android", "iOS", "Apple"], "alternates": {"html": "https://wpnews.pro/news/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that", "markdown": "https://wpnews.pro/news/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that.md", "text": "https://wpnews.pro/news/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that.txt", "jsonld": "https://wpnews.pro/news/i-built-an-sms-reading-expense-tracker-then-i-learned-why-nobody-else-does-that.jsonld"}}