Skill Details
Back to Skills

/watch-my-money

by andreolf

Analyze bank transactions, categorize spending, track monthly budgets, detect overspending and anomalies. Outputs interactive HTML report.

View on GitHub

watch-my-money

Analyze transactions, categorize spending, track budgets, flag overspending.

Workflow

1. Get Transactions

Ask user for bank/card CSV export OR pasted text.

Common sources:

  • Download CSV from your bank's online portal
  • Export from budgeting apps
  • Copy/paste transactions from statements

Supported formats:

  • Any CSV with date, description, amount columns
  • Pasted text: "2026-01-03 Starbucks -5.40 CHF"

2. Parse & Normalize

Read input, normalize to standard format:

  • Auto-detect delimiter (comma, semicolon, tab)
  • Parse dates (YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY)
  • Normalize amounts (expenses negative, income positive)
  • Extract merchant from description
  • Detect recurring transactions (subscriptions)

3. Categorize Transactions

For each transaction, assign category:

Categories:

  • rent, utilities, subscriptions, groceries, eating_out
  • transport, travel, shopping, health
  • income, transfers, other

Categorization order:

  1. Check saved merchant overrides
  2. Apply deterministic keyword rules (see common-merchants.md)
  3. Pattern matching (subscriptions, utilities)
  4. Heuristic fallback

For ambiguous merchants (batch of 5-10), ask user to confirm. Save overrides for future runs.

4. Check Budgets

Compare spending against user-defined budgets.

Alert thresholds:

  • 80% - approaching limit (yellow)
  • 100% - at limit (red)
  • 120% - over budget (red, urgent)

See budget-templates.md for suggested budgets.

5. Detect Anomalies

Flag unusual spending:

  • Category spike: spend > 1.5x baseline AND delta > 50
  • Subscription growth: subscriptions up > 20%
  • New expensive merchant: first appearance AND spend > 30
  • Potential subscriptions: recurring same-amount charges

Baseline = previous 3 months average (or current month if no history).

6. Generate HTML Report

Create local HTML file with:

  • Month summary (income, expenses, net)
  • Category breakdown with budget status
  • Top merchants
  • Alerts section
  • Recurring transactions detected
  • Privacy toggle (blur amounts/merchants)

Copy template.html and inject data.

7. Save State

Persist to ~/.watch_my_money/:

  • state.json - budgets, merchant overrides, history
  • reports/YYYY-MM.json - machine-readable monthly data
  • reports/YYYY-MM.html - interactive report

CLI Commands

# Analyze CSV
python -m watch_my_money analyze --csv path/to/file.csv --month 2026-01

# Analyze from stdin
cat transactions.txt | python -m watch_my_money analyze --stdin --month 2026-01 --default-currency CHF

# Compare months
python -m watch_my_money compare --months 2026-01 2025-12

# Set budget
python -m watch_my_money set-budget --category groceries --amount 500 --currency CHF

# View budgets
python -m watch_my_money budgets

# Export month data
python -m watch_my_money export --month 2026-01 --out summary.json

# Reset all state
python -m watch_my_money reset-state

Output Structure

Console shows:

  • Month summary with income/expenses/net
  • Category table with spend vs budget
  • Recurring transactions detected
  • Top 5 merchants
  • Alerts as bullet points

Files written:

  • ~/.watch_my_money/state.json
  • ~/.watch_my_money/reports/2026-01.json
  • ~/.watch_my_money/reports/2026-01.html

HTML Report Features

  • Collapsible category sections
  • Budget progress bars
  • Recurring transaction list
  • Month-over-month comparison
  • Privacy toggle (blur sensitive data)
  • Dark mode (respects system preference)
  • Floating action button
  • Screenshot-friendly layout
  • Auto-hide empty sections

Privacy

All data stays local. No network calls. No external APIs. Transaction data is analyzed locally and stored only in ~/.watch_my_money/.