Expense Categorization
by @samledger67-dotcom
Extract and categorize expenses from receipts or statements, map to GL codes, check compliance with policies, and flag anomalies for review.
clawhub install expense-categorizationπ About This Skill
name: expense-categorization description: Receipt OCR, GL code mapping, policy compliance checking, and anomaly detection for business expenses. Use when you need to: (1) extract data from receipt images or PDFs via OCR, (2) map expenses to chart of accounts or GL codes, (3) check receipts against expense policies (per diem limits, category restrictions, required fields), (4) detect anomalies like duplicates, out-of-policy amounts, missing receipts, or unusual vendors, (5) batch-process expense reports for approval routing, (6) categorize credit card transactions into accounting categories. Works with QBO chart of accounts, generic GL structures, or custom category lists. NOT for: tax filing or PTIN-backed services, payroll processing, or real-time bank feed categorization without human review.
Expense Categorization
Receipt OCR, GL mapping, policy compliance, and anomaly detection for business expenses.
Workflow
1. Receipt Extraction (OCR)
Use tesseract (local) or Vision API for image receipts; pdfplumber for PDF receipts.
Key fields to extract:
# Tesseract OCR on receipt image
tesseract receipt.jpg stdout --psm 4 | python3 scripts/parse_receipt.pyOr use Claude vision directly for complex layouts
For complex or handwritten receipts β use vision model with prompt in references/ocr-prompt.md.
2. GL Code Mapping
Map extracted expense category to chart of accounts. See references/gl-mapping.md for:
Matching logic: 1. Exact vendor name match (known vendor list) 2. MCC code match (credit card transactions) 3. Keyword match on description/line items 4. Fallback: prompt user to select category
3. Policy Compliance Check
Apply policy rules before approval routing. See references/policy-rules.md for standard rules.
Core checks:
4. Anomaly Detection
Flag for human review:
5. Output Format
{
"receipt_id": "REC-20260315-001",
"vendor": "Delta Air Lines",
"date": "2026-03-15",
"amount": 487.50,
"currency": "USD",
"gl_code": "6200",
"category": "Travel - Air",
"policy_status": "approved",
"flags": [],
"confidence": 0.94,
"requires_review": false,
"notes": "Business purpose required for reimbursement"
}
Batch Processing
For expense report batches:
# Process folder of receipts
import glob
receipts = glob.glob("receipts/*.{jpg,png,pdf}")
results = [categorize(r) for r in receipts]Summary stats
flagged = [r for r in results if r["requires_review"]]
total = sum(r["amount"] for r in results)
by_category = group_by(results, "category")
Output batch summary as CSV or feed directly to QBO via qbo-automation skill.
Common Patterns
Credit card statement import: 1. Parse CSV/OFX from bank 2. Match known vendors β auto-categorize 3. Unknown vendors β ML classification or prompt 4. Export mapped transactions to QBO
Expense report approval routing:
Mileage reimbursement:
references/irs-rates.md)