Target keywords: n8n receipt automation, automate expense reimbursement workflow, n8n HTTP node API
Platform: dev.to (primary) + n8n Community Discord #showcase + Hashnode (cross-post)
Word count target: 1,200–1,500 words
Meta title (60 chars): Automate Expense Reimbursement with n8n + Receipt API
Meta description (155 chars): Build an n8n workflow that parses receipt images, extracts structured data, and routes them for approval — no code required. Step-by-step tutorial.
The API powering this workflow — try it before you build:
👉 ilovesreceipt.com
Upload any receipt and see the structured JSON output in seconds.
What We're Building
An n8n workflow that:
- Triggers when a receipt image is submitted (email attachment, Google Drive upload, or webhook)
- Parses the receipt using the Receipt Parser API → returns structured JSON
- Routes based on amount: auto-approves small expenses, flags large ones for manager review
- Logs every expense to a Google Sheet
- Notifies the submitter via Slack or email with the parsed details
No code required. Pure n8n nodes.
Prerequisites
- n8n instance (cloud or self-hosted — n8n.io)
- Receipt Parser API key from ilovesreceipt.com (free tier: 500 calls/month)
- Google account (for Sheets logging)
- Optional: Slack workspace for notifications
Workflow Overview
[Trigger] → [HTTP Request: Parse Receipt] → [IF: Amount > $50?]
├── YES → [Slack: Flag for Review]
└── NO → [Google Sheets: Log Expense]
↓
[Gmail/Slack: Notify Submitter]
Step 1: Set Up the Trigger
Choose your entry point based on how employees submit receipts:
Option A — Webhook (most flexible):
Add a Webhook node. Set method to POST. This lets you trigger the workflow from any tool (form, mobile app, Zapier) that can send a webhook.
Option B — Gmail (receipts by email):
Add a Gmail Trigger node. Filter by subject containing "receipt" or "reimbursement". The workflow fires each time a matching email arrives with an attachment.
Option C — Google Drive:
Add a Google Drive Trigger node. Watch a specific folder (e.g., /Receipts/Pending). Fires when any new file is uploaded.
For this tutorial we'll use the Webhook option since it's the most reusable.
Step 2: Read the File
No conversion needed. The Receipt Parser API accepts the raw file directly as multipart/form-data — no base64 encoding required.
If your trigger provides a URL (e.g. a Google Drive file URL), add an HTTP Request node set to GET to download the binary first. If your trigger provides a binary attachment directly (e.g. Gmail attachment), pipe it straight into Step 3.
Step 3: Call the Receipt Parser API
Add an HTTP Request node with these settings:
| Field | Value |
|---|---|
| Method | POST |
| URL | https://web-production-58295.up.railway.app/api/parse |
| Authentication | Header Auth |
| Header name | Authorization |
| Header value | Bearer {{ $credentials.receiptParserKey }} |
| Body Content Type | Form Data (multipart) |
| Body field name | file |
| Body field value | (binary data from previous node) |
Tip: Store your API key in n8n Credentials as a Generic Credential with Authorization → Bearer YOUR_KEY. This keeps it secure and reusable across workflows. Get your free key at ilovesreceipt.com — 500 calls/month, no credit card required.
After this node runs, you'll have the full parsed JSON available in subsequent nodes as $json.data.merchant.name, $json.data.total, etc.
Step 4: Add Routing Logic (IF Node)
Add an IF node to route based on the expense amount:
Condition:
{{ $json.data.total }} > 50
- True branch → flag for manager review (high expense)
- False branch → auto-approve and log
You can layer additional conditions:
- Category-based routing (meals vs. travel vs. supplies)
- Merchant allowlist/blocklist
- Employee-specific thresholds
Step 5: Log to Google Sheets
On the False (auto-approved) branch, add a Google Sheets node:
- Operation:
Append Row - Spreadsheet: your expense log sheet
- Sheet:
Expenses
Map these columns:
| Column | Value |
|---|---|
| Date | {{ $json.data.date }} |
| Merchant | {{ $json.data.merchant.name }} |
| Total | {{ $json.data.total }} |
| Tax | {{ $json.data.tax }} |
| Tip | {{ $json.data.tip }} |
| Payment | {{ $json.data.payment_method }} |
| Status | Auto-Approved |
| Submitted | {{ $now }} |
Step 6: Flag for Manager Review (Slack)
On the True (high expense) branch, add a Slack node:
- Operation: Send Message
- Channel:
#expense-approvals - Message:
🧾 *Expense Approval Required*
*Merchant:* {{ $json.data.merchant.name }}
*Amount:* ${{ $json.data.total }}
*Date:* {{ $json.data.date }}
*Payment:* {{ $json.data.payment_method }}
React ✅ to approve or ❌ to reject.
Step 7: Notify the Submitter
On both branches, add a Gmail or Slack node to confirm receipt:
Hi there — your expense was received and parsed successfully.
Merchant: {{ $json.data.merchant.name }}
Date: {{ $json.data.date }}
Total: ${{ $json.data.total }}
{{ $json.data.total > 50 ? "Your expense has been flagged for manager review." : "Your expense has been auto-approved and logged." }}
The Complete Workflow (JSON Import)
You can import this workflow directly into n8n. Copy the JSON below and use File → Import from JSON in n8n:
Download workflow JSON ← (link to GitHub gist with the workflow JSON)
Testing the Workflow
- Open the workflow in n8n
- Click Execute Workflow with test mode on
- Send a POST request to your webhook URL with a receipt image:
curl -X POST https://your-n8n-instance.com/webhook/receipt-parse \
-F "data=@receipt.jpg"
- Check your Google Sheet for the logged row and Slack for any approval notifications.
Going Further
- Multi-currency support: The API detects currency — add a conversion step using an exchange rate API
- PDF invoices: The API handles PDFs too — great for contractor invoices submitted via email attachment
- Airtable instead of Sheets: Swap the Google Sheets node for an Airtable node for richer filtering
- Approval loop: Use n8n's Wait node to pause the workflow until a Slack reaction is received
Try the API First
Before building the workflow, see what the parsed JSON looks like for your receipt types:
👉 Live Demo — no signup required
Ready to start building? Get your free API key at ilovesreceipt.com — 500 calls/month, no credit card required.
Built this workflow or have a question about a specific node? Share it in the comments — I'll help debug.





















