Expense Tracker Skill
Process expense receipts from any messaging channel using AI. Employees photograph receipts and send them via WhatsApp, Slack, email, or any other channel. The AI extracts the data, categorizes it, enforces spending policies, and accumulates expenses into reports.
Why This Exists
Small companies (under 50 people) typically handle expenses one of three ways:
- Paper chaos — Receipts emailed as photos, manually typed into spreadsheets
- Spreadsheet templates — Employee fills out Excel, someone verifies each receipt
- Expensify/Concur — $8-15/user/month ($100-150/month for a 10-person team)
This skill replaces all three. Employees send receipts from the channel they already use. No app to install, no website to log into, no spreadsheet to fill out.
How It Works
- Employee photographs a receipt and sends it via WhatsApp, Slack, email, Teams, etc.
- Prefix with
@expense-tracker(or it's routed automatically if configured) - The AI extracts: merchant, date, amount, category, payment method
- Spending policies are checked — flags violations but still records the expense
- Employee gets a confirmation with running total
- When ready, employee sends "submit" to generate a formatted expense report
Setup
1. Configure Inbound Messaging
Enable at least one inbound channel. The most common for expense tracking:
WhatsApp (recommended — employees already have it on their phones): - System > Server Settings > Messaging > WhatsApp - Enable WhatsApp Inbound - Set up Meta Cloud API webhook
Email (for companies that prefer email): - System > Server Settings > Email - Enable Email On-Demand - Configure POP3 polling
Slack (for teams already on Slack): - System > Server Settings > Messaging > Slack - Enable Slack Inbound - Configure Events API
Any of the 9 channels works — choose what your team already uses.
2. Create Contact Profiles
For each employee who will submit expenses:
- Users & Privileges > Subscribers
- Set their channel address (WhatsApp number, email, Slack user ID)
- Set Inbound Enabled: Yes
- Set the appropriate Transport code for their channel
3. Configure AI Assistant
- System > Server Settings > AI Assistant
- Use a provider that supports image/document analysis:
- Anthropic (Claude) — recommended, best at receipt extraction
- OpenAI (GPT-4o) — good image analysis
- Ollama — free, if using a vision model
4. Install the Skill
Pre-installed at INTOUCH_HOME/skills/expense-tracker/SKILL.md. If missing:
- UI: System > Skills > Install, paste SKILL.md content
- API:
POST /api/skill/installwith SKILL.md as body - File: Copy
expense-tracker/toINTOUCH_HOME/skills/
Usage
Submit a Receipt
From any channel, send a receipt photo with the skill prefix:
@expense-tracker [attach receipt photo]
Or with a text description if no receipt image:
@expense-tracker Uber ride to airport, $34.50, April 14
The AI responds with:
EXPENSE RECORDED
Merchant: Uber
Date: 2026-04-14
Amount: $34.50 USD
Category: Travel - Transportation
Description: Ride to airport
Payment: Not specified
FLAGS: None
Running total: 3 expenses, $182.45
Check Status
@expense-tracker status
Shows current unsubmitted expenses, count, and running total.
Submit Expense Report
@expense-tracker submit
Generates a formatted expense report with totals by category, flags requiring review, and sends to the approver.
Spending Policy Rules
These are enforced automatically. Edit SKILL.md to change thresholds.
| Rule | Threshold | What Happens |
|---|---|---|
| Single meal | Over $75/person | Flagged for review |
| Daily meals | Over $150/day | Flagged for review |
| Equipment | Over $500 | Flagged — requires pre-approval |
| Any single expense | Over $1,000 | Flagged — requires manager approval |
| Alcohol | Any amount | Flagged — verify company policy |
| Gift cards | Any amount | Flagged — requires justification |
| Personal items | Any | Rejected |
Flagged expenses are still recorded but marked for review in the expense report.
Expense Categories
| Category | Examples |
|---|---|
| Meals & Entertainment | Restaurants, coffee, client dinners |
| Travel - Transportation | Flights, taxis, rideshare, parking |
| Travel - Lodging | Hotels, Airbnb |
| Travel - Mileage | Personal car for business |
| Office Supplies | Paper, pens, desk items |
| Software & Subscriptions | SaaS, licenses |
| Equipment | Hardware, monitors, phones |
| Professional Services | Legal, accounting, consulting |
| Marketing | Ads, events, promotional materials |
| Shipping & Postage | FedEx, UPS, USPS |
| Utilities & Telecom | Phone, internet |
| Training & Education | Courses, books, conferences |
| Other | Anything else |
Customization
Edit SKILL.md to change:
- Spending thresholds — adjust the dollar amounts in the policy rules table
- Categories — add, remove, or rename categories to match your chart of accounts
- Policy rules — add new rules (e.g., "No expenses on weekends without justification")
- Response format — change the confirmation message format
- Approval routing — modify the submit action to route to a specific approver
- Currency — change the default from USD to your local currency
Cost
- Anthropic Claude: ~$0.01-0.03 per receipt (image analysis)
- OpenAI GPT-4o: ~$0.01-0.03 per receipt
- Ollama: Free (requires vision-capable model)
A 10-person company submitting 100 receipts/month: $1-3/month total. Compare to Expensify at $8-15/user/month: $80-150/month.
Limitations
- No persistent storage across conversations — the AI's "running total" relies on conversation context within a session. For persistent expense tracking across days, pair this skill with a SQL database task that stores each extracted receipt.
- Receipt quality matters — blurry or cropped photos may not extract cleanly. The AI will ask for a resend.
- No OCR preprocessing — the AI reads the image directly. Very small text on long receipts may be missed.
- Policy enforcement is advisory — flagged expenses are recorded, not blocked. A human approver makes the final call.