Automated personal finance tracker that syncs transactions from your banks and provides a clean, self-hosted web interface.
Self-Contained & Privacy Focused: Runs in a single Docker container. Your data stays on your machine. Bank credentials are encrypted.
- 🔄 Automated Sync: Fetches transactions daily (supports thousands of US/Canadian banks).
- 🔒 Secure Storage: Credentials are encrypted locally. No usage of third-party cloud DBs.
- 🧠 Smart Categorization:
- Rules Engine: Create powerful regex-based rules to auto-categorize transactions.
- Direction Aware: Apply rules specifically to income, expenses, or both.
- Preview Mode: Test your rules against existing transactions before saving.
- 🌗 Dark Mode: Beautiful, responsive UI with automatic or manual dark theme.
- 📊 Dashboards: Real-time spending stats, income vs. expense tracking, and category breakdowns.
- 🐳 One-Click Deploy: Runs completely within Docker.
- Docker & Docker Compose installed on your machine.
- A SimpleFIN Setup Token (Get one for ~$15/year at bridge.simplefin.org).
-
Clone the repository:
git clone https://github.com/widapro/wfin.git cd wfin -
Start the Application:
docker-compose up -d
-
Access the Web UI: Open http://localhost:80 in your browser.
- Go to the Settings page (click the ⚙️ gear icon).
- Enter your SimpleFIN Setup Token.
- Click Connect. The system will verify the token and store a secure access URL.
- Go back to the Dashboard and click Sync Now.
The proprietary rules engine allows you to keep your ledger clean:
- Navigate to Settings > Categorization Rules.
- Click Create New Rule.
- Pattern (Regex): Enter a keyword or regex (e.g.,
Uber.*Eatsor justStarbucks). - Category: Choose a target category.
- Preview: See which past transactions match your rule immediately.
- Apply: Save and apply to historic/future transactions.
On the main dashboard:
- Filter by Bank (if you have multiple connected).
- Filter by Account (Credit, Checking, Savings).
- Sort by any column (Date, Amount, Category).
- "Excluded" transactions (like credit card payments/transfers) are dimmed and excluded from monthly totals.
- Backend: Python (FastAPI) + SQLAlchemy.
- Frontend: Vanilla JS + CSS (No heavy framework build steps).
- Database: SQLite (persisted in
./data/). - Scheduler: APScheduler (runs sync jobs).
The application is stateless except for the ./data/ directory, which is mounted as a volume.
- Encryption: Your SimpleFIN access URL (which acts as a key) is encrypted using
cryptography(Fernet) before being saved to the SQLite database. - Local Data: All transaction data resides in standard SQLite files on your host machine.
- Isolation: The container makes outbound requests ONLY to
bridge.simplefin.orgto fetch data.
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.