Developer: Godi Narayana SwamyEffective: July 10, 2026Version: 1.0
🔒
100% Offline
No servers. No cloud. All data lives on your phone.
🚫
No Tracking
Zero analytics, zero telemetry. None.
💬
Only Bank Alerts
We only process transaction alerts from your bank. Never OTPs, never personal messages.
🛡
Encrypted Storage
AES-256 encrypted database with keys in Android's secure storage.
Your data never leaves your device.
spnd. has no servers, no backend, no cloud database, and no analytics. All your financial data is
stored locally in an AES-256 encrypted database on your phone. We have no ability to access your
data remotely because no copy exists outside your device. You can verify this by using the app in Airplane Mode — it works exactly the same.
1. About spnd.
spnd. is a privacy-first personal expense tracker for Android, designed for users in India.
The app automatically detects bank transaction SMS messages and converts them into categorized
expense records — giving you a clear picture of your spending without any manual effort.
spnd. is built on a core principle: your financial data belongs to you and only you.
The app operates entirely offline. There are no user accounts, no registration, no login, no cloud sync,
and no data collection of any kind. We do not run any servers and have no mechanism to access your data remotely.
2. Our Zero-Server Architecture
Unlike most finance apps, spnd. does not have any backend infrastructure:
No servers — we do not operate, rent, or use any server, cloud instance, or API endpoint
No database in the cloud — there is no Firebase, AWS, Azure, or any remote database
No user accounts — there is no registration, login, or sign-up process
No data transmission — the app makes zero network calls to any server owned by us
No analytics or telemetry — we do not use Google Analytics, Firebase Analytics, Mixpanel, Amplitude, Crashlytics, Sentry, or any other tracking tool
The only network activity the app performs is a one-time font download from
Google Fonts when the app first launches, described in detail below.
How to verify this yourself:
Turn on Airplane Mode and use spnd. — every feature works normally because nothing depends on the
internet. You can also check Android Settings → Apps → spnd. → Mobile data & Wi-Fi
to see that the app uses negligible data.
spnd. requests READ_SMS and RECEIVE_SMS permissions to provide its
core functionality: automatic transaction tracking from bank SMS alerts.
3.1 Why SMS Access Is Required
In India, banks send transaction alerts via SMS for every debit and credit. These SMS messages are
the only real-time, programmatic source of transaction data available to consumers. Indian banks do
not provide open APIs, webhooks, or any other mechanism for personal finance apps to access
transaction data. SMS reading is the only technically viable method to automatically
track expenses without manual entry.
3.2 How SMS Processing Works
Bank sends SMS → spnd. receives SMS ↓
Is it from a known bank sender? → No →Ignored completely ↓ Yes
Is it an OTP or promotional message? → Yes →Rejected immediately ↓ No
Is it a transaction alert (debit/credit/sent/received)? → No →Discarded ↓ Yes
Extract: amount, merchant, date, account → Save to local encrypted DB ↓ No data is ever transmitted. Zero network calls.
3.3 SMS Filtering — Multi-Layer Protection
spnd. applies a strict, multi-layer filter before processing any SMS:
OTP rejection — 20+ patterns detect and immediately skip all OTP and verification code messages
URL filtering — non-bank URLs are rejected against a curated whitelist of Indian bank domains
Failed transaction rejection — failed, reversed, and declined transactions are filtered out
Currency validation — message must contain an amount in Indian currency format (INR, Rs., etc.)
Transaction type validation — message must contain a debit, credit, sent, or received indicator keyword
Sender validation — sender must be a known Indian bank sender ID (e.g., VM-ICICIB, AD-SBIINB, BZ-AXISBK) or the message must contain an account reference
3.4 What We Process vs. What We Ignore
✓ What We Process
Bank debit alerts (e.g., "Rs 500 debited from A/c XX1234")
Bank credit alerts (e.g., "Rs 10,000 credited to A/c XX5678")
UPI sent/received notifications
Transfer alerts (NEFT, IMPS, RTGS)
Messages from verified Indian bank senders only
✗ What We NEVER Read
OTP / verification codes — detected and skipped immediately
Personal messages from your contacts
Promotional or marketing SMS
Non-banking SMS of any kind
WhatsApp, Telegram, or other app messages
3.5 Data Extracted from Bank SMS
From each qualifying bank SMS, spnd. extracts only the following fields:
Field
Example
Purpose
Transaction amount
Rs 500
Track spending
Merchant / payee name
Swiggy, Amazon
Categorize expense
Transaction date & time
10 Jun 2026, 14:30
Timeline ordering
Account identifier (last 4 digits)
XX1234
Per-account spending view
Transaction type
UPI / NEFT / ATM
Payment method tracking
Debit or Credit
Debited / Credited / Sent / Received
Income vs expense classification
Sender address (DLT code)
VM-ICICIB
Duplicate detection
SMS permission is entirely optional.
You can deny SMS permission during onboarding and use spnd. in manual mode — adding transactions
by hand. SMS reading can also be disabled at any time from within the app (Settings → SMS Import → toggle off)
or from Android system settings (Settings → Apps → spnd. → Permissions → SMS → Deny).
3.6 Background SMS Processing
When granted SMS permission, spnd. uses Android's WorkManager to process incoming bank SMS
in the background. This ensures transactions are captured even when the app is not open.
Background processing follows the exact same filtering rules — only bank transaction SMS are processed
WorkManager runs a periodic check every 15 minutes for any missed SMS
Processing takes less than 1 second per SMS
No persistent background service runs — the app wakes only briefly when needed
You can revoke SMS permission at any time — the app continues to work in manual mode
4. All Permissions Explained
spnd. requests only the minimum permissions required for its features. Here is every permission the app uses and why:
Permission
Purpose
Required?
READ_SMS
Read existing bank transaction SMS from your inbox (historical import on first setup)
Optional — app works without it in manual mode
RECEIVE_SMS
Detect new incoming bank transaction SMS in real-time
Optional — app works without it in manual mode
INTERNET
One-time font download on first launch; opening external links (Play Store, email) when you tap them
No data is sent to developer servers
USE_BIOMETRIC / USE_FINGERPRINT
Fingerprint or face unlock for app lock
Optional — 4-digit PIN is also available
POST_NOTIFICATIONS
Show transaction capture, daily summary, and bill reminder notifications (Android 13+)
Optional — can be disabled in Android settings
RECEIVE_BOOT_COMPLETED
Restart background SMS listener and scheduled tasks after phone reboot
Automatic — ensures no transactions are missed
VIBRATE
Haptic feedback for notifications
Standard Android permission
WAKE_LOCK
Keep device awake briefly during background SMS processing via WorkManager
Background processing support
SCHEDULE_EXACT_ALARM
Schedule the daily 9 PM spend summary notification at a precise time
Automatic — ensures timely notification delivery
What we do NOT request:
spnd. does not request access to your contacts, camera, microphone, location, storage (beyond app-private),
phone call logs, calendar, or any other sensitive permission. We request only what is needed and nothing more.
5. Data Storage & Encryption
5.1 Local-Only Architecture
All your data resides exclusively on your device. There is no backend server, no API, no cloud database,
and no remote storage of any kind under our control. When you uninstall the app, all data is
permanently and irreversibly deleted from your phone.
5.2 Encryption Standards
Data
Encryption Method
Where Stored
Transaction database
AES-256 via SQLCipher
App-private storage on device
Database encryption key
Android Keystore (hardware-backed on supported devices)
Android EncryptedSharedPreferences
App lock PIN
Salted hash, stored in Android's encrypted storage
Android EncryptedSharedPreferences
Local backup file (if used)
AES-256-CBC with PBKDF2-HMAC-SHA256 key derivation (50,000 iterations) from a password you set
Location you choose on your device
Backup encryption key
Random 32-byte key via secure random generator
Android Keystore via FlutterSecureStorage
5.3 What Is Stored in the Database
The encrypted local database contains the following tables:
Transactions — parsed transaction records (amount, merchant, date, category, account, type, raw SMS text)
Merchant rules — your custom categorization rules for merchants
Settings — your app preferences (budget amounts, theme, notification settings)
Account overrides — custom names or labels you assign to your bank accounts
Manual accounts — any accounts you add manually
Insights — locally computed spending insights and summaries
5.4 Security Features
4-digit PIN lock — prevents unauthorized access to the app; PIN is salted and hashed, never stored in plain text
Biometric unlock — fingerprint or face recognition via Android's BiometricPrompt API as an alternative to PIN
Screenshot protection — blocks screenshots and screen recording when enabled using Android's FLAG_SECURE; enabled by default
Root detection — detects rooted devices and warns you that rooted devices may expose financial data to other apps; the app still works normally — it warns, never blocks
HTTPS only — cleartext HTTP traffic is blocked at the Android level (usesCleartextTraffic=false); the limited network calls the app makes all use HTTPS
Auto-lock — the app automatically locks after 60 seconds in the background (configurable)
6. Data Collection Summary
✓ Stored Locally on Your Device
Parsed transaction records (amount, merchant, date, category)
Manually added transactions
Budget settings and amounts
Merchant categorization rules you create
App settings (theme, currency, notifications)
Original SMS text (stored locally for reference and duplicate detection only)
Custom account labels
Locally computed spending insights
✗ NEVER Collected or Transmitted
Your name, age, gender, email, or any personal identity
No crash reporting services (Crashlytics, Sentry, Bugsnag, etc.)
No other apps installed on your device
No external server, API, or service of any kind
Zero third-party tracking SDKs.
spnd. does not integrate any analytics, crash reporting, or tracking SDK. We have verified
this by auditing every dependency in the app. The app contains no code that sends your data anywhere.
8. Local Backup
spnd. lets you save a password-protected backup file to your phone's storage.
This is completely offline and does not require an internet connection.
8.1 How It Works
You tap "Backup" in Settings — this is never automatic
You set a backup password that only you know
The app exports your transaction data and encrypts it using AES-256-CBC with PBKDF2-HMAC-SHA256 key derivation (50,000 iterations)
The encrypted file is saved to a location you choose on your device
8.2 Important Details
Encrypted: The backup file is encrypted with your password — without it, the file cannot be read by anyone
Your control: You choose where to save the file and can delete it at any time
Portable: The backup can be restored on any device where you know the password
No internet: The entire backup and restore process is fully offline
Unrecoverable if forgotten: If you forget the password, the backup cannot be recovered
9. Network Activity
The app performs only the following network activity:
Activity
When
What Happens
Data Sent
Google Fonts download
Once, on first app launch
Downloads the Inter and JetBrains Mono typefaces from Google Fonts for the app's UI. Cached locally — never downloaded again.
Standard HTTP request only. No personal data.
External links
When you tap a link (Play Store, email, Instagram) in the About screen
Opens the link in your default browser or email app via Android's system handler. spnd. itself makes no network request.
No data is sent by the app. The link is opened by the OS.
The app does not phone home, check for updates, or communicate with any server.
10. Notifications & Alerts
All notifications in spnd. are local notifications generated on your device. They are
not push notifications — there is no server sending them. You can disable any or all notification
channels from Android Settings → Apps → spnd. → Notifications.
Notification Type
What It Does
Transaction captured
Confirms when a new bank SMS is successfully parsed and recorded
Daily spend summary
Shows your total spending for the day, delivered at 9 PM
Weekly digest
Summarizes your week's total spending
Budget exceeded
Alerts you when a category budget is overspent
Credit card bill reminder
Shows your CC bill total and minimum due with days remaining
Upcoming bill / autopay
Reminds you about bills or automatic debit payments due in the coming days
Unused subscription
Flags subscriptions with no recent usage
All notification content is computed locally from your on-device data. No spending information
is transmitted to any server to generate these alerts.
11. User Consent Flow
spnd. follows a transparent, step-by-step consent process during onboarding:
SMS Permission Screen — clearly explains why SMS access is needed, with a visible option to skip
Android System Dialog — the standard Android runtime permission dialog is shown; you must actively tap "Allow"
Historical Import Choice — you choose how far back to import SMS (1 month, 3 months, or custom date)
Notification Permission — requested separately on Android 13+ with clear explanation
At no point is any permission enabled silently or without your explicit action.
12. User Controls & Your Rights
You have full control over your data at all times:
Android Settings → Apps → spnd. → Notifications → toggle off individual channels or all
Disable screenshot protection
Settings → Security → Screenshot Protection → toggle off
View any transaction
Tap any transaction in the Transactions tab to see full details including original SMS
Edit any transaction
Tap transaction → Edit merchant name, category, or amount
Delete a transaction
Tap transaction → Delete
Back up your data
Settings → Backup → Local backup
Restore your data
Settings → Backup → Restore from local file
Delete ALL data permanently
Uninstall the app — all local data is immediately and irreversibly deleted. Alternatively, clear app data from Android Settings.
13. Data Retention
Transaction data — retained on your device for as long as the app is installed. Permanently and irreversibly deleted when you uninstall the app or clear app data.
Original SMS text — stored locally alongside parsed transaction data for reference and duplicate detection. Never transmitted. Deleted on uninstall.
Settings & preferences — stored locally in encrypted storage. Deleted on uninstall.
Local backup file — stored at the location you chose until you delete it. Encrypted with your password.
No server-side retention — because there are no servers, there is no data retained anywhere outside your device.
14. Children's Privacy
spnd. is a financial management tool designed for adults. The app is not directed at children
under 18 years of age. We do not knowingly collect any information from anyone, including children.
Since the app stores all data locally and transmits nothing, no data from any user — adult or child —
ever reaches us.
15. Compliance
spnd. is designed in compliance with:
Google Play Developer Policy — including the Restricted Permissions policy for SMS access, with detailed justification for READ_SMS and RECEIVE_SMS usage
Information Technology Act, 2000 (India) — including reasonable security practices for sensitive personal data as prescribed under the IT Rules, 2011
Digital Personal Data Protection Act, 2023 (India) — data minimization (we collect only what is needed), purpose limitation (SMS is used only for expense tracking), and user control (you can disable any permission at any time)
16. Changes to This Policy
If we make material changes to this Privacy Policy, we will update the "Effective" date and version
number at the top and notify users through an in-app notice. The latest version of this policy is
always available within the app (Settings → About → Privacy Policy) and on our GitHub page.
Continued use of the app after changes constitutes acceptance of the revised policy.
17. Contact Us
For questions, concerns, or requests regarding this Privacy Policy or your data: