AutomationFlowsSlack & Telegram › Process Receipts with OCR & Categorize Expenses

Process Receipts with OCR & Categorize Expenses

Original n8n title: Verigrade - Receipt Processing & Categorization

VeriGrade - Receipt Processing & Categorization. Uses ocrTextExtraction, httpRequest, googleDrive, slack. Webhook trigger; 7 nodes.

Webhook trigger★★★★☆ complexity7 nodesOcr Text ExtractionHTTP RequestGoogle DriveSlack
Slack & Telegram Trigger: Webhook Nodes: 7 Complexity: ★★★★☆ Added:

This workflow follows the Google Drive → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "VeriGrade - Receipt Processing & Categorization",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "receipt-upload",
        "responseMode": "responseNode"
      },
      "id": "webhook-receipt",
      "name": "Receipt Uploaded",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "operation": "extractText",
        "binaryPropertyName": "data",
        "options": {
          "ocrEngine": "tesseract"
        }
      },
      "id": "ocr-extract",
      "name": "OCR Extract Data",
      "type": "n8n-nodes-base.ocrTextExtraction",
      "typeVersion": 1,
      "position": [
        460,
        300
      ]
    },
    {
      "parameters": {
        "url": "https://backend-lspqvhnjp-robertotos-projects.vercel.app/api/ai/categorize-receipt",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "receiptText",
              "value": "={{ $json.text }}"
            },
            {
              "name": "merchant",
              "value": "={{ $json.body.merchant }}"
            },
            {
              "name": "amount",
              "value": "={{ $json.body.amount }}"
            }
          ]
        }
      },
      "id": "ai-categorize",
      "name": "AI Categorization",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        680,
        300
      ]
    },
    {
      "parameters": {
        "url": "https://backend-lspqvhnjp-robertotos-projects.vercel.app/api/expenses",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "merchant",
              "value": "={{ $json.merchant }}"
            },
            {
              "name": "amount",
              "value": "={{ $json.amount }}"
            },
            {
              "name": "category",
              "value": "={{ $json.category }}"
            },
            {
              "name": "date",
              "value": "={{ $json.date }}"
            },
            {
              "name": "receiptUrl",
              "value": "={{ $('Receipt Uploaded').json.body.receiptUrl }}"
            }
          ]
        }
      },
      "id": "create-expense",
      "name": "Create Expense Record",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        900,
        300
      ]
    },
    {
      "parameters": {
        "resource": "file",
        "operation": "upload",
        "name": "={{ $json.merchant }}_{{ $json.date }}.pdf",
        "binaryData": true,
        "folderId": "={{ $json.categoryFolderId }}"
      },
      "id": "save-receipt",
      "name": "Save to Drive",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        900,
        400
      ]
    },
    {
      "parameters": {
        "content": "\ud83e\uddfe New Receipt Processed\n\nMerchant: {{ $json.merchant }}\nAmount: ${{ $json.amount }}\nCategory: {{ $json.category }}\nDate: {{ $json.date }}\n\n\u2705 Categorized & Filed",
        "channel": "#receipts"
      },
      "id": "notify-team",
      "name": "Notify Team",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.1,
      "position": [
        1120,
        300
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ success: true, category: $json.category, merchant: $json.merchant, amount: $json.amount }) }}"
      },
      "id": "response",
      "name": "Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [
        1340,
        300
      ]
    }
  ],
  "connections": {
    "Receipt Uploaded": {
      "main": [
        [
          {
            "node": "OCR Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OCR Extract Data": {
      "main": [
        [
          {
            "node": "AI Categorization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Categorization": {
      "main": [
        [
          {
            "node": "Create Expense Record",
            "type": "main",
            "index": 0
          },
          {
            "node": "Save to Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Expense Record": {
      "main": [
        [
          {
            "node": "Notify Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Drive": {
      "main": [
        [
          {
            "node": "Notify Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Team": {
      "main": [
        [
          {
            "node": "Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {},
  "versionId": "1",
  "id": "verigrade-receipt-processing"
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

VeriGrade - Receipt Processing & Categorization. Uses ocrTextExtraction, httpRequest, googleDrive, slack. Webhook trigger; 7 nodes.

Source: https://github.com/robertotorres1222-beep/verigrade-bookkeeping-platform/blob/20eaf88ca92b73417b9cc8abe2b8ec17eec5ceaa/n8n-workflows/3-receipt-processing.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This workflow is an AI-assisted clean plate and object removal pipeline built for modern VFX production environments. It transforms a single plate image and removal brief into multiple high-quality cl

HTTP Request, Google Drive, Slack +3
Slack & Telegram

This workflow is an AI-driven FX concept generation pipeline that transforms a single VFX brief into multiple high-quality simulation-ready video concepts. It automates ideation, rendering, storage, a

HTTP Request, Google Drive, Notion +2
Slack & Telegram

Automate end-to-end AI video creation by transforming text scripts into professional avatar videos with natural voiceovers. 🎬🤖 This workflow receives a script via webhook, generates realistic audio us

HTTP Request, Google Drive, Error Trigger +1
Slack & Telegram

App Screenshot Generator - Multi-Device App Store. Uses n8n-nodes-sudomock, httpRequest, compression, googleDrive. Webhook trigger; 15 nodes.

N8N Nodes Sudomock, HTTP Request, Compression +2
Slack & Telegram

HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant

HTTP Request, Slack