Our team kept forgetting to submit expense receipts and it was a mess tracking everything manually.
Built a workflow where people just email their receipt photos and everything gets logged automatically. Expenses over $100 go to Slack for approval, under $100 auto-approve.
What it does
Email receipt photo → extracts merchant, date, items, total → logs to Google Sheets → Slack notification (with approval for >$100)
Takes about 8 seconds per receipt. Way easier than our old process of filling out forms.
Why we built this
Before this, people had to:
-
Take photo of receipt
-
Fill out expense form
-
Email form + receipt to manager
-
Manager manually enters into spreadsheet
Now they just forward the receipt to a Gmail address. Done.
How well it works
Been using it for about 2 months with the team.
Works great on:
-
Phone photos of receipts (~95% accurate)
-
PDF receipts from vendors
-
Even crumpled receipts work surprisingly well
Struggles with:
-
Completely faded receipts (but those are unreadable anyway)
-
Very blurry photos
-
Handwritten amounts are hit or miss
The approval logic helps catch the weird ones - anything over $100 gets reviewed in Slack before approval.
Setup
Pretty straightforward:
-
Set up dedicated Gmail for expense submissions
-
Create Google Sheet with columns: Date, Merchant, Amount, Status, etc.
-
Import workflow, connect credentials
-
Configure Slack channel for notifications
-
Set approval threshold (we use $100)
Takes about 20 minutes.
What you need:
-
Gmail account (free, dedicated for expenses)
-
Google Sheets (free)
-
n8n instance
-
PDF Vector for extraction (free tier = ~30 receipts/month)
-
Slack workspace
Free tier works fine for small teams. If you’re doing 100+ receipts/month, the paid OCR is $25/month.
The approval workflow
This part is helpful for teams:
Under $100: Auto-approves, logs to sheet, sends confirmation to Slack
Over $100: Logs to sheet as “Pending Approval”, sends detailed Slack message with:
-
Merchant and date
-
Full breakdown (subtotal, tax, total)
-
All line items
-
Who submitted it
-
Approve/Reject buttons
Manager approves in Slack, status updates in sheet.
What gets extracted
The AI pulls out:
-
Merchant name
-
Purchase date
-
Individual items with amounts
-
Subtotal, tax, total
-
Category (though we usually fix this manually)
Some receipts don’t have all fields (grocery receipts usually don’t itemize). That’s fine - we just need merchant and total for most tracking.
Real usage
Team of 8 people, processed about 150 receipts so far.
Time saved: Used to take 15-20 min per receipt (form + manual entry). Now takes 30 seconds (just forward the email).
Accuracy: Maybe 5-6 receipts needed manual fixes out of 150. Usually OCR issues with really bad photos.
Approval rate: About 95% of >$100 expenses get approved. The 5% rejections are duplicates or personal expenses submitted by mistake.
Download
Workflow JSON attached:
receipt-expense-tracker.json (8.8 KB)
You’ll need to update:
-
YOUR_SPREADSHEET_IDwith your Google Sheet ID -
YOUR_CHANNEL_IDwith your Slack channel
Customization ideas
Some things you could add:
-
Different approval thresholds per person (managers get higher limits)
-
Category auto-detection based on merchant
-
Monthly spending reports
-
Integration with accounting software
-
Mileage tracking for fuel receipts
If you build any of these, share back!
Limitations
Not trying to oversell this - it’s not perfect:
Some receipts just fail to extract properly (maybe 3-4%) Handwritten amounts are unreliable Categories need manual review (we just fix them in the sheet) Duplicate submissions need manual checking
But it’s way better than our old manual process. Probably saves us 3-4 hours per week across the team.
Questions?
Drop a comment if you hit any issues setting it up.
- List item
