A self-hosted personal expense tracking system that automatically captures transaction data from SMS and UPI app notifications on Android.
- Backend (FastAPI + SQLite) - Core API and transaction processing
- Frontend (React) - Web dashboard for viewing and managing transactions
- Android App - Captures SMS and notifications, sends to backend
- Google Sheets Integration - Mirror transactions for quick viewing
- 🔄 Automatic transaction capture from SMS and UPI notifications
- 📊 Full-featured web dashboard
- 🏦 Multi-bank/UPI app support (Kotak, UCO, GPay, Navi, etc.)
- 🔍 Smart parsing and deduplication
- 🏷️ Merchant and category management
- 📝 Transaction editing and categorization
- 📈 Analytics and reporting
- 🔄 Google Sheets sync
OwnSpend/
├── backend/ # FastAPI backend
│ ├── main.py # Main API endpoints
│ ├── models.py # Database models
│ ├── parser.py # SMS/notification parser
│ ├── database.py # Database configuration
│ ├── schemas.py # Pydantic schemas
│ ├── setup.py # Initial setup script
│ └── test_ingestion.py # Testing script
├── frontend/ # React web dashboard (TODO)
├── android/ # Android app (TODO)
├── docs/ # Documentation
│ ├── QUICKSTART.md # Getting started guide
│ ├── ARCHITECTURE.md # System architecture
│ └── PROGRESS.md # Development roadmap
└── README.md
- Quick Start Guide - Get up and running
- Google Sheets Setup - Mirror transactions to Google Sheets
- Architecture - System design and data flow
- Progress Tracker - Development roadmap and status
- Python 3.10+
- Virtual environment (recommended)
- Navigate to backend directory:
cd backend- Install dependencies:
pip install -r requirements.txt- Create
.envfile:
cp .env.example .env
# Edit .env with your configuration- Run the server:
cd backend
uvicorn main:app --reload --host 0.0.0.0 --port 8000The API will be available at http://localhost:8000
API documentation: http://localhost:8000/docs
- users - User accounts
- devices - Registered Android devices
- accounts - Bank/wallet accounts
- raw_events - Raw SMS/notification data
- transactions - Parsed canonical transactions
- merchants - Normalized merchant records
- categories - Transaction categories
- rules - Auto-categorization rules
GET /- API infoGET /health- Health check
POST /api/events/ingest- Receive raw events from Android (requires device API key)
GET /api/transactions- List transactions with filtersGET /api/accounts- List accountsGET /api/merchants- List merchantsGET /api/categories- List categories
GET /api/raw-events- View raw events (for debugging parsing)
Currently supports parsing for:
- Kotak Bank SMS
- UCO Bank SMS/UPI notifications
- Google Pay notifications
Parser can be extended in backend/parser.py to support additional banks/UPI apps.
- Database schema
- Basic API structure
- Event ingestion endpoint
- Transaction parser (Kotak, UCO, GPay)
- Deduplication logic
- Rules engine for auto-categorization
- Google Sheets webhook integration
- Merchant management API
- Category management API
- Transaction editing API
- Reparse/rebuild utilities
- SMS listener
- Notification listener
- Local queue and sync
- Settings and configuration
- Authentication
- Transaction list/filters
- Merchant management UI
- Category management UI
- Charts and analytics
- Export functionality
- Budgets
- Alerts
- Multi-device support
- Data export/import
- Device authentication via API keys
- HTTPS for all communications
- SQLite database encryption (optional)
- Regular backups recommended
The following files contain sensitive data and are excluded via .gitignore:
ownspend.db- Contains all your financial transactions and API keys.env- Contains configuration secrets- Always verify these aren't staged before committing!
This is a personal project, but contributions and suggestions are welcome!
MIT License - Use freely for personal or commercial purposes.
- Quick Start Guide - Detailed setup instructions
- Architecture Documentation - System design
- Development Progress - Roadmap and status
Built by ARKA with assistance from ChatGPT
Based on the comprehensive roadmap in spend_tracker_system_roadmap.pdf