AutomationFlowsAI & RAG › Flag Duplicate and Risky Ap Invoices with Gmail, Openai and Supabase

Flag Duplicate and Risky Ap Invoices with Gmail, Openai and Supabase

ByKumar SmartFlow Craft @smartflowautomate on n8n.io

Monitors your AP inbox for incoming invoices, extracts structured data with AI, runs duplicate and vendor history checks against Supabase, then scores each invoice for fraud risk — routing suspicious ones to Slack and your AP team before any payment is processed. 📬 Gmail Trigger…

Event trigger★★★★☆ complexityAI-powered28 nodesGmail TriggerAgentOpenAI ChatOutput Parser StructuredSupabaseSlackGmail
AI & RAG Trigger: Event Nodes: 28 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #14146 — we link there as the canonical source.

This workflow follows the Agent → Gmail 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "0ae5c983-ad78-4eb6-8f0e-dfbac8737338",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        26176,
        7232
      ],
      "parameters": {
        "color": 7,
        "width": 700,
        "height": 356,
        "content": "## AP Invoice Fraud Detection\nVersion 1.0.0 \u2014 Finance\n\nProcesses incoming invoices from Gmail, extracts structured data with AI, checks Supabase for duplicate invoice numbers, validates vendor payment history, runs a risk assessment, and routes high-risk invoices to a Slack alert before logging all decisions.\n\nFlow: Gmail Trigger => Extract Invoice Data (AI Agent) => Check Duplicates (Supabase) => Count Duplicates (Code) => Check Vendor History (Supabase) => Merge All Context (Code) => Assess Fraud Risk (AI Agent) => High Risk? (IF) => Alert Slack + Log => Log to Supabase"
      },
      "typeVersion": 1
    },
    {
      "id": "01b77a2c-55b4-41da-964c-e1947d447530",
      "name": "Prerequisites",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        26880,
        7248
      ],
      "parameters": {
        "color": 5,
        "width": 420,
        "height": 344,
        "content": "## Prerequisites\n- Gmail account receiving invoices (Gmail OAuth2 credential)\n- OpenAI API key (GPT-4o)\n- Supabase project with two tables:\n  - invoices: invoice_number, vendor_name, amount, status, created_at\n  - vendors: vendor_name, total_invoices, avg_amount, last_invoice_date, flagged\n- Slack workspace and channel for fraud alerts (Slack OAuth2 or Bot Token)\n- Gmail for sending hold notifications (reuse same credential)"
      },
      "typeVersion": 1
    },
    {
      "id": "4688febd-754b-45f3-ba5a-8e71073b0719",
      "name": "Setup Required",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        27312,
        7248
      ],
      "parameters": {
        "color": 3,
        "width": 420,
        "height": 344,
        "content": "## Setup Required\n1. Gmail Trigger \u2014 connect Gmail OAuth2 credential\n2. Extract Invoice Data \u2014 connect OpenAI credential\n3. Check Duplicates + Check Vendor History \u2014 connect Supabase API credential, update table names\n4. Assess Fraud Risk \u2014 connect OpenAI credential\n5. Alert Slack \u2014 connect Slack credential, update #invoice-alerts channel name\n6. Send Hold Notice \u2014 connect Gmail OAuth2 credential, update your AP manager email\n7. Log Invoice + Log Fraud Flag \u2014 connect Supabase API credential"
      },
      "typeVersion": 1
    },
    {
      "id": "966be176-d977-4cb1-ae2b-43a70082f232",
      "name": "How It Works",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        26192,
        7600
      ],
      "parameters": {
        "color": 4,
        "width": 500,
        "height": 520,
        "content": "## How It Works\n1. Gmail Trigger detects new invoice emails (attach PDF or include invoice details in body)\n2. AI Agent extracts: invoice number, vendor, amount, invoice date, due date, line items\n3. Supabase checked for duplicate invoice numbers \u2014 Count Duplicates Code node prevents item multiplication\n4. Supabase checked for vendor payment history \u2014 Merge All Context Code node consolidates everything\n5. Second AI Agent scores fraud risk (low/medium/high/critical) with reasoning\n6. IF risk >= high: post Slack alert + send hold notice to AP team via email\n7. Invoice logged to Supabase invoices table regardless of risk outcome"
      },
      "typeVersion": 1
    },
    {
      "id": "6327f8eb-6f67-4d01-ab54-46a95fc9110d",
      "name": "Gmail \u2014 Invoice Inbox",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        26448,
        8016
      ],
      "parameters": {
        "filters": {
          "includeSpamTrash": false
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7310c22e-85cd-408d-ab0c-c9bb78448ec9",
      "name": "Extract note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        26704,
        7888
      ],
      "parameters": {
        "width": 238,
        "height": 80,
        "content": "AI extracts structured invoice data from email subject, body, and attachments"
      },
      "typeVersion": 1
    },
    {
      "id": "b25edce2-2aa5-42a0-9d37-bcc68978cba2",
      "name": "Extract Invoice Data",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        26704,
        8016
      ],
      "parameters": {
        "text": "=Extract all invoice data from this email.\n\nFrom: {{ $json.from }}\nSubject: {{ $json.subject }}\nBody: {{ $json.text || $json.snippet }}\n\nExtract the invoice number, vendor/supplier name, total amount (as a number), currency, invoice date, due date, and a list of line items if visible. If any field is not present, use null.",
        "options": {
          "systemMessage": "You are an accounts payable assistant. Extract structured invoice data precisely from email content. Invoice numbers typically follow patterns like INV-12345, 2024-001, or similar. Amounts should be numeric only (no currency symbols). Dates should be ISO 8601 format (YYYY-MM-DD). If the email does not appear to be an invoice, set is_invoice to false.",
          "returnIntermediateSteps": false
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.8
    },
    {
      "id": "d6d79de4-0bec-4773-913e-56e0729d0b9d",
      "name": "OpenAI \u2014 Extract",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        26592,
        8208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o"
        },
        "options": {
          "temperature": 0
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ead44960-92f3-469c-96fb-37fbff3ed761",
      "name": "Invoice Data Schema",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        26896,
        8208
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\"type\":\"object\",\"properties\":{\"invoice_number\":{\"type\":\"string\"},\"vendor_name\":{\"type\":\"string\"},\"amount\":{\"type\":\"number\"},\"currency\":{\"type\":\"string\"},\"invoice_date\":{\"type\":\"string\"},\"due_date\":{\"type\":\"string\"},\"line_items\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"is_invoice\":{\"type\":\"boolean\"}},\"required\":[\"invoice_number\",\"vendor_name\",\"amount\",\"currency\",\"is_invoice\"]}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d121a56a-10dc-4717-9fcd-bce791f9f6c8",
      "name": "Duplicates note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        26976,
        7888
      ],
      "parameters": {
        "width": 228,
        "height": 80,
        "content": "Queries invoices table for existing records with same invoice number"
      },
      "typeVersion": 1
    },
    {
      "id": "6cfe2bca-abc4-487b-afa4-a703a4872c51",
      "name": "Check Duplicates",
      "type": "n8n-nodes-base.supabase",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        27024,
        8016
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "invoice_number",
              "keyValue": "={{ $json.output.invoice_number }}",
              "condition": "eq"
            }
          ]
        },
        "tableId": "invoices",
        "operation": "getAll",
        "returnAll": true
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    },
    {
      "id": "29b2c5f3-d98d-4591-a0e4-0f160a7bed70",
      "name": "Count Dup note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        27232,
        7888
      ],
      "parameters": {
        "width": 255,
        "height": 96,
        "content": "Consolidates duplicate rows into a single item, counts matches"
      },
      "typeVersion": 1
    },
    {
      "id": "28c6a089-8fa9-4f07-9fc8-ddff34d2464d",
      "name": "Count Duplicates",
      "type": "n8n-nodes-base.code",
      "position": [
        27264,
        8000
      ],
      "parameters": {
        "jsCode": "const dupRows = $input.all();\nconst invoice = $('Extract Invoice Data').first().json.output || {};\nreturn [{ json: {\n  ...invoice,\n  duplicate_count: dupRows.filter(r => !r.json.error).length\n}}];"
      },
      "typeVersion": 2
    },
    {
      "id": "6f4b34db-9590-4e01-bf44-1ae1974f24ed",
      "name": "Vendor note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        27504,
        7840
      ],
      "parameters": {
        "width": 260,
        "height": 60,
        "content": "Queries vendor history to detect unusual amounts or flagged suppliers"
      },
      "typeVersion": 1
    },
    {
      "id": "ff913bf0-34d6-421f-a56b-154d50a1a2f4",
      "name": "Check Vendor History",
      "type": "n8n-nodes-base.supabase",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        27488,
        8000
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "vendor_name",
              "keyValue": "={{ $json.vendor_name }}",
              "condition": "eq"
            }
          ]
        },
        "tableId": "vendors",
        "operation": "getAll",
        "returnAll": true
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    },
    {
      "id": "aea77465-e803-45f8-bdf4-342b9aeb5040",
      "name": "Merge Context note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        27776,
        7888
      ],
      "parameters": {
        "width": 238,
        "height": 80,
        "content": "Merges invoice data, duplicate count, and vendor history into one item for risk assessment"
      },
      "typeVersion": 1
    },
    {
      "id": "574222db-ff63-48e2-b976-5671565b6084",
      "name": "Merge All Context",
      "type": "n8n-nodes-base.code",
      "position": [
        27808,
        7984
      ],
      "parameters": {
        "jsCode": "const vendorRows = $input.all();\nconst invoiceCtx = $('Count Duplicates').first().json;\nconst vendors = vendorRows.filter(r => !r.json.error).map(r => r.json);\nconst vendor = vendors[0] || null;\nreturn [{ json: {\n  ...invoiceCtx,\n  vendor_known: !!vendor,\n  vendor_avg_amount: vendor ? vendor.avg_amount : null,\n  vendor_flagged: vendor ? (vendor.flagged || false) : false,\n  vendor_total_invoices: vendor ? vendor.total_invoices : 0,\n  vendor_last_invoice_date: vendor ? vendor.last_invoice_date : null,\n  amount_deviation_pct: vendor && vendor.avg_amount > 0\n    ? Math.round(((invoiceCtx.amount - vendor.avg_amount) / vendor.avg_amount) * 100)\n    : null\n}}];"
      },
      "typeVersion": 2
    },
    {
      "id": "df6a0c96-f5e7-4d88-921c-e7a2c1ccb8fc",
      "name": "Risk note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        28032,
        7872
      ],
      "parameters": {
        "width": 254,
        "height": 80,
        "content": "AI Agent scores fraud risk using duplicate count, vendor history, and amount deviation"
      },
      "typeVersion": 1
    },
    {
      "id": "0732a5a9-3f99-45f8-be98-98a153e49537",
      "name": "Assess Fraud Risk",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        28000,
        7984
      ],
      "parameters": {
        "text": "=Assess the fraud risk for this invoice.\n\nInvoice Number: {{ $json.invoice_number }}\nVendor: {{ $json.vendor_name }}\nAmount: {{ $json.amount }} {{ $json.currency }}\nInvoice Date: {{ $json.invoice_date }}\nDue Date: {{ $json.due_date }}\n\nDuplicate Invoice Count (same number already in system): {{ $json.duplicate_count }}\nVendor Known in System: {{ $json.vendor_known }}\nVendor Previously Flagged: {{ $json.vendor_flagged }}\nVendor Average Invoice Amount: {{ $json.vendor_avg_amount }}\nAmount Deviation from Vendor Average: {{ $json.amount_deviation_pct }}%\nVendor Total Historical Invoices: {{ $json.vendor_total_invoices }}\n\nEvaluate the risk of fraud or payment error and provide a risk score and recommended action.",
        "options": {
          "systemMessage": "You are an accounts payable fraud detection specialist. Evaluate invoices for: duplicate submissions, amounts significantly above vendor average (>50% deviation = high risk, >100% = critical), unknown vendors, previously flagged vendors, or suspicious timing patterns. Risk levels: low = approve automatically, medium = flag for review, high = hold pending approval, critical = block and escalate immediately. Always provide clear reasoning.",
          "returnIntermediateSteps": false
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.8
    },
    {
      "id": "46f49aa4-9f06-4f05-9124-dbc59982bd32",
      "name": "OpenAI \u2014 Risk",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        27776,
        8224
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o"
        },
        "options": {
          "temperature": 0
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4a9e9a7d-cde5-459d-945c-fb7715e3996d",
      "name": "Fraud Risk Schema",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        28240,
        8256
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\"type\":\"object\",\"properties\":{\"risk_level\":{\"type\":\"string\",\"enum\":[\"low\",\"medium\",\"high\",\"critical\"]},\"risk_score\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":100},\"fraud_indicators\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"reasoning\":{\"type\":\"string\"},\"recommended_action\":{\"type\":\"string\"},\"requires_hold\":{\"type\":\"boolean\"}},\"required\":[\"risk_level\",\"risk_score\",\"fraud_indicators\",\"reasoning\",\"recommended_action\",\"requires_hold\"]}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d4f636eb-510b-4bc2-8b25-2a6686932d95",
      "name": "High Risk note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        28304,
        7856
      ],
      "parameters": {
        "width": 244,
        "height": 80,
        "content": "Routes to Slack alert path if risk requires hold, otherwise logs directly"
      },
      "typeVersion": 1
    },
    {
      "id": "c5def029-6c26-4e86-95d1-c450028478ea",
      "name": "High Risk?",
      "type": "n8n-nodes-base.if",
      "position": [
        28336,
        7984
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cond-risk",
              "operator": {
                "type": "boolean",
                "operation": "equal"
              },
              "leftValue": "={{ $json.output.requires_hold }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "8384f3aa-f4ff-4c7f-931c-be290d9c6e8d",
      "name": "Slack note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        28560,
        7776
      ],
      "parameters": {
        "width": 207,
        "height": 80,
        "content": "Posts fraud alert to #invoice-alerts Slack channel with full details"
      },
      "typeVersion": 1
    },
    {
      "id": "fcae28cd-d96f-436f-849a-c37bd5fbc992",
      "name": "Alert Slack",
      "type": "n8n-nodes-base.slack",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        28592,
        7936
      ],
      "parameters": {
        "text": "=*FRAUD ALERT \u2014 {{ $('Merge All Context').first().json.risk_level.toUpperCase() }} RISK*\n\n*Invoice:* {{ $('Merge All Context').first().json.invoice_number }}\n*Vendor:* {{ $('Merge All Context').first().json.vendor_name }}\n*Amount:* {{ $('Merge All Context').first().json.amount }} {{ $('Merge All Context').first().json.currency }}\n*Risk Score:* {{ $json.output.risk_score }}/100\n\n*Fraud Indicators:*\n{{ $json.output.fraud_indicators.join('\\n') }}\n\n*Reasoning:* {{ $json.output.reasoning }}\n\n*Recommended Action:* {{ $json.output.recommended_action }}",
        "otherOptions": {}
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 2000
    },
    {
      "id": "eb9876b9-9d8e-4b33-970a-44f4127c5ccc",
      "name": "Send Hold Notice",
      "type": "n8n-nodes-base.gmail",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        28832,
        7856
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=<h2>Invoice Flagged for Review</h2><p>The following invoice has been placed on hold pending your approval.</p><table border='1' cellpadding='6' style='border-collapse:collapse'><tr><td><b>Invoice Number</b></td><td>{{ $('Merge All Context').first().json.invoice_number }}</td></tr><tr><td><b>Vendor</b></td><td>{{ $('Merge All Context').first().json.vendor_name }}</td></tr><tr><td><b>Amount</b></td><td>{{ $('Merge All Context').first().json.amount }} {{ $('Merge All Context').first().json.currency }}</td></tr><tr><td><b>Risk Level</b></td><td>{{ $('Assess Fraud Risk').first().json.output.risk_level.toUpperCase() }}</td></tr><tr><td><b>Risk Score</b></td><td>{{ $('Assess Fraud Risk').first().json.output.risk_score }}/100</td></tr></table><p><b>Fraud Indicators:</b><br>{{ $('Assess Fraud Risk').first().json.output.fraud_indicators.join('<br>') }}</p><p><b>Reasoning:</b> {{ $('Assess Fraud Risk').first().json.output.reasoning }}</p><p><b>Recommended Action:</b> {{ $('Assess Fraud Risk').first().json.output.recommended_action }}</p>",
        "options": {},
        "subject": "=Invoice Hold \u2014 {{ $('Merge All Context').first().json.invoice_number }} from {{ $('Merge All Context').first().json.vendor_name }} ({{ $('Merge All Context').first().json.risk_level.toUpperCase() }} RISK)"
      },
      "retryOnFail": true,
      "typeVersion": 2.1,
      "waitBetweenTries": 2000
    },
    {
      "id": "e71db94f-fd18-4672-a665-f46ee1ca26d5",
      "name": "Log Invoice note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        29056,
        8000
      ],
      "parameters": {
        "width": 255,
        "height": 60,
        "content": "Logs every processed invoice to Supabase for record keeping"
      },
      "typeVersion": 1
    },
    {
      "id": "d056425b-4ac9-472c-b719-43a48f620c00",
      "name": "Log Invoice to Supabase",
      "type": "n8n-nodes-base.supabase",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        29120,
        8112
      ],
      "parameters": {
        "operation": "insert"
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    }
  ],
  "connections": {
    "High Risk?": {
      "main": [
        [
          {
            "node": "Alert Slack",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Invoice to Supabase",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Slack": {
      "main": [
        [
          {
            "node": "Send Hold Notice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI \u2014 Risk": {
      "ai_languageModel": [
        [
          {
            "node": "Assess Fraud Risk",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Duplicates": {
      "main": [
        [
          {
            "node": "Count Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count Duplicates": {
      "main": [
        [
          {
            "node": "Check Vendor History",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Hold Notice": {
      "main": [
        [
          {
            "node": "Log Invoice to Supabase",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assess Fraud Risk": {
      "main": [
        [
          {
            "node": "High Risk?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fraud Risk Schema": {
      "ai_outputParser": [
        [
          {
            "node": "Assess Fraud Risk",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge All Context": {
      "main": [
        [
          {
            "node": "Assess Fraud Risk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI \u2014 Extract": {
      "ai_languageModel": [
        [
          {
            "node": "Extract Invoice Data",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Invoice Data Schema": {
      "ai_outputParser": [
        [
          {
            "node": "Extract Invoice Data",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Check Vendor History": {
      "main": [
        [
          {
            "node": "Merge All Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Invoice Data": {
      "main": [
        [
          {
            "node": "Check Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail \u2014 Invoice Inbox": {
      "main": [
        [
          {
            "node": "Extract Invoice Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Monitors your AP inbox for incoming invoices, extracts structured data with AI, runs duplicate and vendor history checks against Supabase, then scores each invoice for fraud risk — routing suspicious ones to Slack and your AP team before any payment is processed. 📬 Gmail Trigger…

Source: https://n8n.io/workflows/14146/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Streamline customer support with a real-time, AI-powered answer engine that detects incoming support emails, classifies intent, identifies the customer’s GEO region, and generates a tailored reply rea

Slack, Gmail Trigger, OpenAI Chat +5
AI & RAG

This workflow captures incoming leads from Gmail, validates and stores them in Supabase, then uses AI to score and classify each lead. Based on the classification, leads are automatically routed to th

Supabase, Groq Chat, Slack +4
AI & RAG

Gmail users report spending significant time manually sorting email, so this tool helps alleviate that burden. Gmail Trigger monitors unread emails every 2 minutes Once an email arrives, the content i

OpenAI Chat, Output Parser Structured, Agent +4
AI & RAG

[](https://youtu.be/nC2mSry3xFo)

Gmail Trigger, OpenAI Chat, Output Parser Structured +6
AI & RAG

Streamline your HR recruitment process with this intelligent automation that reads candidate emails and resumes, analyzes them using GPT-4, and automatically shortlists or rejects applicants based on

Gmail, Gmail Trigger, HTTP Request +7