Track expenses from receipts and transaction screenshots. Parse images, extract transaction details, and log to monthly Excel spreadsheets.
Track personal expenses from photos of receipts, transaction screenshots, and bank statements.
Directory: /Users/von/von_ai_agents/Von/Finance/
Files:
YYYY-MM_Expenses.xlsx — One spreadsheet per month (e.g., 2026-04_Expenses.xlsx)log_expense.py — Helper script for appending transactions (ALWAYS USE THIS)NEVER create or overwrite expense files directly with openpyxl.
Always use the helper script which handles:
python /Users/von/von_ai_agents/Von/Finance/log_expense.py \
--date 2026-04-11 \
--merchant "HK Cafe" \
--amount 1010 \
--category "Food/Dining"
When Von sends a photo of a receipt, transaction screenshot, or mentions logging an expense.
Use vision_analyze to extract transaction details:
Question: "Extract all transaction details from this image. Look for: date, merchant/vendor name, total amount, currency, payment method, and individual items if visible. Format as JSON."
Apply categories based on merchant/item keywords:
| Category | Keywords/Patterns |
|---|---|
| Food/Dining | Restaurant names, cafe, bakery, fast food, "meal", "dining", GADC |
| Groceries | Supermarket, grocery, market, convenience store |
| Transportation | Gas station, Shell, Petron, Grab, taxi, parking, toll |
Important Merchant Mappings:
Many Philippine merchants appear as abbreviations on receipts. Map these correctly:
| Receipt Name | Actual Merchant | Category |
|---|---|---|
| GADC | McDonald's (Golden Arches Development Corp) | Food/Dining |
| JOLLIBEE | Jollibee | Food/Dining |
| MCDO | McDonald's | Food/Dining |
| KFC | KFC | Food/Dining |
| CBTL | The Coffee Bean & Tea Leaf | Food/Dining |
| GINGERSNAP | Ginger's Snap | Food/Dining |
| TGIF | TGI Friday's | Food/Dining |
| SHAKEYS | Shakey's | Food/Dining |
| CONTIS | Conti's | Food/Dining |
| ABALONE | Abalone restaurant | Food/Dining |
| SAVORY | Savory | Food/Dining |
| OCTAGON | Octagon (school/office supplies) | Shopping |
| MINISO | Miniso | Shopping |
| KKV | KKV (variety store) | Shopping |
| WATSONS | Watsons | Health |
| MERCURYDRU | Mercury Drug | Health |
| 7-ELEVEN | 7-Eleven | Groceries |
| SM STORE | SM Store | Shopping |
| UNIQLO | Uniqlo | Shopping |
| ZARA | Zara | Shopping |
| MANGO | Mango | Shopping |
| KCC MALL | KCC Mall de Zamboanga | Groceries |
| AYALA SHELL | Shell gas station | Transportation |
| PNBS | Philippine National Bank (transaction) | Transfers |
Philippine Mall Categorization:
When parsing receipts, cross-reference these abbreviations to ensure accurate categorization.
File naming: {YYYY-MM}_Expenses.xlsx
Example: 2026-04_Expenses.xlsx
Sheets:
Transactions — All expense entriesSummary — Monthly totals by categoryDaily — Daily spending breakdown| Column | Description | Format |
|---|---|---|
| Date | Transaction date | YYYY-MM-DD |
| Time | Transaction time (if available) | HH:MM |
| Merchant | Store/vendor name | Text |
| Description | Full description or items | Text |
| Category | Expense category | Text |
| Amount | Transaction amount | Number |
| Currency | PHP, USD, etc. | Text |
| Payment | Cash, Card, GCash, Bank | Text |
| Type | Income/Expense | Text |
| Notes | Additional details | Text |
ALWAYS use the helper script - never create or modify Excel files directly:
python /Users/von/von_ai_agents/Von/Finance/log_expense.py \
--date 2026-04-11 \
--merchant "Coffee Bean" \
--amount 350 \
--category "Food/Dining" \
--description "Cafe latte, pastry" \
--payment "Card" \
--notes "Meeting with client"
For today's date, use --today instead of --date:
python /Users/von/von_ai_agents/Von/Finance/log_expense.py \
--today \
--merchant "Seven-Eleven" \
--amount 150 \
--category "Groceries"
The script automatically:
When Von sends an image:
Extract with vision_analyze:
Auto-categorize based on merchant names and items
Confirm with Von if category is unclear:
"Got it — ₱350 at Coffee Bean on April 1. Category: Food/Dining. Correct?"
Append to monthly file
Confirm saved:
✅ Logged: ₱350.00 — Coffee Bean (Food/Dining)
📁 April 2026 total: ₱12,450.00
When Von asks for expense summary:
def get_monthly_summary(filepath):
wb = openpyxl.load_workbook(filepath)
ws = wb["Summary"]
# Return category totals
return {
"Food/Dining": 4500.00,
"Transportation": 3200.00,
"Shopping": 8500.00,
# ...
"Total Expenses": 35000.00,
"Total Income": 50000.00,
"Net": 15000.00
}
When Von asks to see expenses for a specific date or period:
Single day:
python3 -c "
from openpyxl import load_workbook
wb = load_workbook('/Users/von/von_ai_agents/Von/Finance/YYYY-MM_Expenses.xlsx')
ws = wb['Transactions']
target_date = 'YYYY-MM-DD'
total = 0
items = []
for row in ws.iter_rows(min_row=2, values_only=True):
if row[0] and str(row[0]).startswith(target_date):
items.append({
'merchant': row[2],
'amount': row[5] if row[5] else 0,
'category': row[4] if row[4] else '',
})
total += row[5] if row[5] else 0
if items:
for item in items:
print(f\"- {item['merchant']}: {item['amount']:,.2f} ({item['category']})\")
print(f'Total: {total:,.2f} PHP')
"
Column indices (0-based):
After logging expense:
✅ Logged: ₱{amount} — {merchant} ({category})
📅 {date}
📁 {month} total: ₱{monthly_total}
If clarification needed:
📋 Parsed: ₱{amount} at {merchant}
❓ Category unclear — is this Food, Shopping, or something else?
/Users/von/von_ai_agents/Von/Finance/2026-04_Expenses.xlsx/Users/von/von_ai_agents/Von/Finance/2026-03_Expenses.xlsx