Expense reporting is one of those tasks that’s too small to complain about but big enough to actually be annoying. Upload the receipt, open the spreadsheet, type the merchant, pick a category, enter the amount, paste the Drive link. Multiply by 20 receipts at the end of the month and it’s an hour of mindless data entry.
Built a workflow that handles the whole thing automatically — extraction, AI categorization, approval routing — the moment a receipt PDF lands in Drive.
What it does
Receipt dropped in Google Drive Expenses folder → extracts all expense data → AI categorizes it → applies fallback merchant rules → logs to expense sheet with receipt link → routes over $500 to Slack approval, under $500 gets logged confirmation
About 10 seconds per receipt.
What gets extracted
-
Expense date
-
Merchant name
-
Amount and currency
-
Tax amount
-
Payment method
-
Description
-
Line items (for itemized receipts)
-
AI-assigned category
AI categorization with fallback rules
PDF Vector extracts the category directly when it’s clear from the receipt. The Code node then applies fallback rules for common merchants that might get miscategorized:
-
Uber, Lyft, airlines, hotels → Travel
-
Restaurants, cafes, DoorDash → Meals
-
Amazon, Staples, office stores → Office Supplies
-
Software, SaaS, subscription services → Software
Full category list: Travel, Meals, Office Supplies, Software, Equipment, Marketing, Professional Services, Utilities, Other.
You can add your own merchant rules in the Process & Categorize Code node — just extend the if/else block with your vendors.
Approval routing
Expenses over $500 → Slack approval request with receipt link
Expenses under $500 → Slack confirmation (logged automatically)
The $500 threshold is a single value in the Code node — change it to whatever your policy requires.
What lands in Slack
Over $500:
🚨 Expense Approval Required
Merchant: Delta Airlines
Amount: $847
Category: Travel
Date: March 14, 2025
View Receipt
Under $500:
✅ Expense Logged
Merchant: Starbucks
Amount: $24.50
Category: Meals
What lands in Google Sheets
Each row: Date, Merchant, Category, Amount, Currency, Tax, Payment Method, Description, Requires Approval (Yes/No), Receipt Link, Processed Date
The Receipt Link column links directly back to the Drive file — no hunting for the original PDF.
Setup
You’ll need:
-
Google Drive (an “Expenses” folder where receipts get dropped)
-
Google Sheets (free)
-
n8n instance (self-hosted — uses PDF Vector community node)
-
PDF Vector account (free tier: 100 credits/month)
-
Slack (for approval routing)
About 10 minutes to configure — one of the simpler setups in this series.
Download
Workflow JSON:
Full workflow collection:
Setup Guide
Step 1: Get your PDF Vector API key
Sign up at pdfvector.com — free plan works for testing.
Step 2: Create your Drive folder and Sheet
Create a folder called “Expenses” — copy the folder ID from the URL.
Sheet headers:
Date | Merchant | Category | Amount | Currency | Tax | Payment Method | Description | Requires Approval | Receipt Link | Processed Date
Step 3: Import and configure
Download JSON → n8n → Import from File.
Google Drive Trigger:
- Connect Google Drive (OAuth2), paste folder ID
PDF Vector - Extract Expense:
- Add credential (Bearer Token), paste API key
Log Expense:
- Connect Google Sheets, paste Sheet ID
Request Approval + Confirm Logged:
- Connect Slack, select your expense notification channel
Change the approval threshold:
- In Process & Categorize Code node, find
expense.amount > 500and change 500 to your threshold
Accuracy
Tested on restaurant receipts, airline PDFs, hotel folios, SaaS subscription invoices, and photographed paper receipts.
-
Merchant name and amount: ~97%
-
Date: ~95%
-
Tax amount: ~91% — present when itemized on the receipt
-
Payment method: ~88% — varies by receipt format
-
AI category assignment: ~89% — strong on clear merchant types; the fallback rules catch the rest
-
Line items on itemized receipts: ~90%
Works on both digital PDFs and photographed paper receipts — PDF Vector handles both.
Cost
3-4 credits per receipt. Free tier covers ~25-30 receipts per month — fine for an individual, enough for a small team’s monthly batch.
Customizing it
Add more merchant rules:
In the Process & Categorize Code node, extend the merchant matching block. Example — add your specific vendors like your regular catering supplier or preferred hotel chain.
Per-employee folders:
Change the Drive Trigger to watch a parent folder and use subfolder names as employee identifiers. Route each subfolder’s expenses to a separate Sheets tab.
Multi-currency support:
The currency field is already extracted. Add a conversion step using an HTTP Request to a rates API if you need everything normalized to one currency.
Connect to accounting software:
After logging to Sheets, add an HTTP Request node to create an expense record in QuickBooks, Xero, or FreshBooks via their APIs.
Limitations
-
Requires self-hosted n8n (PDF Vector is a community node)
-
Approval routing is amount-based only — doesn’t factor in category or employee
-
No duplicate detection — the same receipt uploaded twice creates two rows
-
Paper receipts with poor image quality reduce extraction accuracy
Questions? Drop a comment.
