Finance Skill
by @safaiyeh
Parse and store transactions from bank statements, enable querying and adding personal finance data in JSON format within a local workspace.
clawhub install finance-skillπ About This Skill
Finance Skill
Personal finance memory layer. Parse statements, store transactions, query spending.
Data Location
~/.openclaw/workspace/finance/transactions.json~/.openclaw/workspace/finance/statements/*Storage convention: OpenClaw workspace (~/.openclaw/workspace/) is the standard location for persistent user data. This matches where session-memory and other hooks store agent data. Credentials/config would go in ~/.config/finance/ if needed.*
Tools
1. Parse Statement
When user shares a statement (image or PDF):β οΈ IMPORTANT: Telegram/channel previews truncate PDFs! Always extract with pypdf first to get ALL pages:
python3 -c "
import pypdf
reader = pypdf.PdfReader('/path/to/statement.pdf')
for i, page in enumerate(reader.pages):
print(f'=== PAGE {i+1} ===')
print(page.extract_text())
"
Then parse the full text output:
1. Extract transactions from ALL pages
2. Return JSON array: [{date, merchant, amount, category}, ...]
3. Run scripts/add-transactions.sh to append to store
4. Verify total matches statement (sum of expenses should equal "Total purchases")
Extraction format:
Each transaction: {"date": "YYYY-MM-DD", "merchant": "name", "amount": -XX.XX, "category": "food|transport|shopping|bills|entertainment|health|travel|other"}
Negative = expense, positive = income/refund.
Categories:
2. Query Transactions
User asks about spending β read transactions.json β filter/aggregate β answerExample queries:
3. Add Manual Transaction
User says "I spent $X at Y" β append to transactions.jsonFile Format
{
"transactions": [
{
"id": "uuid",
"date": "2026-02-01",
"merchant": "Whole Foods",
"amount": -87.32,
"category": "food",
"source": "statement-2026-01.pdf",
"added": "2026-02-09T19:48:00Z"
}
],
"accounts": [
{
"id": "uuid",
"name": "Coinbase Card",
"type": "credit",
"lastUpdated": "2026-02-09T19:48:00Z"
}
]
}
Usage Flow
1. User: *shares statement image* 2. Agent: extracts transactions via vision, confirms count 3. Agent: runs add script to store 4. User: "how much did I spend on food?" 5. Agent: reads store, filters, answers
Dependencies
jq β for JSON transaction storage and querying (apt install jq / brew install jq)pypdf β for full PDF text extraction (pip3 install pypdf)Lessons Learned
Future: Plaid Integration
finance_connect tool for Plaid OAuth flow