Local budget tracking and overspending alerts. No cloud. No APIs. Just your transactions and honest answers.
- Parse bank transaction exports (CSV or text)
- Auto-categorize spending (groceries, transport, subscriptions, etc.)
- Track against monthly budgets
- Detect anomalies (spending spikes, subscription creep)
- Generate local HTML reports
Privacy first: Everything runs locally. No network calls. Data stays in ~/.watch_my_money/.
# Install
pip install -e .
# Analyze a CSV export
python -m watch_my_money analyze --csv bank_export.csv --month 2026-01
# Set a budget
python -m watch_my_money set-budget --category groceries --amount 500 --currency CHF
# View budgets
python -m watch_my_money budgetsParse and analyze transactions:
# From CSV file
python -m watch_my_money analyze --csv transactions.csv --month 2026-01
# From stdin
cat transactions.txt | python -m watch_my_money analyze --stdin --default-currency CHF
# Skip interactive prompts
python -m watch_my_money analyze --csv data.csv --no-interactiveSet spending limits:
python -m watch_my_money set-budget --category groceries --amount 500 --currency CHF
python -m watch_my_money set-budget --category eating_out --amount 200 --currency CHFView all budgets:
python -m watch_my_money budgetsExport month data as JSON:
python -m watch_my_money export --month 2026-01 --out january.jsonClear all data:
python -m watch_my_money reset-stateFixed categories for consistent tracking:
rent- Housing paymentsutilities- Phone, internet, electricitysubscriptions- Streaming, SaaS, membershipsgroceries- Supermarkets, food shoppingeating_out- Restaurants, cafes, takeouttransport- Uber, trains, fuel, parkingtravel- Hotels, flights, vacationshopping- Online stores, retailhealth- Pharmacy, gym, doctorsincome- Salary, refundstransfers- Internal account transfersother- Everything else
Works with most bank exports. Auto-detects:
- Delimiters: comma, semicolon, tab
- Date formats: YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY
- Amount formats: single column or debit/credit split
Required columns (any of these names):
- Date:
date,booking_date,posted_date,timestamp - Description:
description,merchant,payee,memo - Amount:
amount,valueORdebit/creditcolumns
For quick manual entry:
2026-01-03 Starbucks -5.40 CHF
2026-01-05 Uber -12.50 CHF
2026-01-15 Salary +4500 CHF
All data stored in ~/.watch_my_money/:
~/.watch_my_money/
├── state.json # Budgets, merchant overrides, history
└── reports/
├── 2026-01.json # Monthly data (machine-readable)
└── 2026-01.html # Interactive report
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=watch_my_moneyMIT