Drop a receipt in Drive, get it categorized and logged in 10 seconds — free n8n template

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:

expense-report-processor.json

Full workflow collection:

khanhduyvt0101/workflows


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 > 500 and 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


PDF Vector n8n integration

Full workflow collection

Questions? Drop a comment.

1 Like

nice setup, and the fallback merchant rules are a practical touch. one thing i’d add is a simple hash of filename plus amount+date to catch duplicates before they hit the sheet — without it, a reupload creates silent double entries. also curious if the pdf vector accuracy holds up on hand-written paper receipts versus printed ones — the 90% on itemized looks solid but hand-written is usually where things break down.

2 Likes