AutomationFlowsAI & RAG › Score Call Quality and Send Coaching Emails with Gemini, Openai, and Gmail

Score Call Quality and Send Coaching Emails with Gemini, Openai, and Gmail

ByAbdullah Al Shishani @arais415 on n8n.io

This workflow helps contact centers and support teams automatically evaluate call quality and send coaching feedback without manual review. It uses AI to transcribe calls, score performance, detect risks, and generate clear feedback for agents.

Event trigger★★★★☆ complexityAI-powered15 nodesGoogle Drive TriggerGoogle DriveMemory Buffer WindowOutput Parser StructuredGmailOpenAI ChatGoogle GeminiAgent
AI & RAG Trigger: Event Nodes: 15 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chainllm 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
{
  "id": "U72Fa88mCpBQBtEQ",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automate call quality scoring and coaching with Gemini, OpenAI, and Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "8417be14-dc5f-400d-9729-2b593b95c8de",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -112,
        -32
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {
          "fileType": "all"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "url",
          "value": "https://drive.google.com/drive/folders/1FfTNxyRZ4S4Ae_XVfDW50S4uHVB5e-FZ"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e55eee52-727a-410d-b4ed-4ade965a64c7",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        80,
        -32
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "738a55bc-6feb-494c-bccc-4cbc621a145d",
      "name": "Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        608,
        176
      ],
      "parameters": {
        "sessionKey": "={{ $('Transcribe').item.json.content.parts[0].text }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 20
      },
      "typeVersion": 1.3
    },
    {
      "id": "735c13af-37ea-4ea9-a75d-ef4dc3802cd8",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        752,
        176
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"call_id\": { \"type\": \"string\" },\n    \"language\": { \"type\": \"string\" },\n    \"overall_score\": { \"type\": \"integer\" },\n    \"verdict\": { \"type\": \"string\", \"enum\": [\"pass\", \"fail\"] },\n\n    \"sections\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"name\": { \"type\": \"string\" },\n          \"score\": { \"type\": \"integer\" },\n          \"status\": { \"type\": \"string\", \"enum\": [\"pass\", \"fail\", \"na\"] },\n          \"note\": { \"type\": \"string\" }\n        }\n      }\n    },\n\n    \"sentiment\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"customer\": { \"type\": \"string\", \"enum\": [\"very_negative\", \"negative\", \"neutral\", \"positive\", \"very_positive\"] },\n        \"agent\": { \"type\": \"string\", \"enum\": [\"very_negative\", \"negative\", \"neutral\", \"positive\", \"very_positive\"] }\n      }\n    },\n\n    \"dynamics\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"aht_sec\": { \"type\": [\"integer\", \"string\"] },\n        \"target_aht_sec\": { \"type\": [\"integer\", \"string\"] },\n        \"interruptions_agent\": { \"type\": \"integer\" },\n        \"interruptions_customer\": { \"type\": \"integer\" },\n        \"holds\": { \"type\": \"integer\" },\n        \"transfers\": { \"type\": \"integer\" }\n      }\n    },\n\n    \"risk_flags\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"pii_present\": { \"type\": \"boolean\" },\n        \"consent_missing\": { \"type\": \"boolean\" },\n        \"disclosure_missing\": { \"type\": \"boolean\" },\n        \"policy_violation\": { \"type\": \"boolean\" },\n        \"misinformation_risk\": { \"type\": \"boolean\" },\n        \"vulnerable_customer\": { \"type\": \"boolean\" }\n      }\n    },\n\n    \"root_cause\": { \"type\": \"string\" },\n    \"tags\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n\n    \"coaching\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"priority\": { \"type\": \"string\", \"enum\": [\"high\", \"medium\", \"low\"] },\n          \"behavior\": { \"type\": \"string\" },\n          \"tip\": { \"type\": \"string\" }\n        }\n      }\n    },\n\n    \"next_actions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"action\": { \"type\": \"string\" },\n          \"owner\": { \"type\": \"string\" },\n          \"due_in_hours\": { \"type\": \"integer\" }\n        }\n      }\n    },\n\n    \"evidence\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"section\": { \"type\": \"string\" },\n          \"quote\": { \"type\": \"string\" },\n          \"time\": { \"type\": [\"integer\", \"string\"] }\n        }\n      }\n    }\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "88cd6737-751d-4057-8362-d00cb6afbc11",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1280,
        -32
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "={{ $json.output.email_body }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.output.email_subject }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "79166111-64de-4e8b-8625-45b337634510",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1184,
        144
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"scorecard_summary\": \"HTML or Markdown formatted table with call and section scores\",\n  \"email_subject\": \"string\",\n  \"email_body\": \"string (formatted in plain text or HTML)\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "1bff9d5f-347b-4bda-813c-f5a1e6037f36",
      "name": "GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        480,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "70625872-ef07-48c5-bfdd-22c175e9b12f",
      "name": "Transcribe",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        256,
        -32
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "audio",
        "inputType": "binary"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fc85fbae-8d48-4673-8e0d-8c54e22b46fe",
      "name": "AI Quality Analyst",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        560,
        -32
      ],
      "parameters": {
        "text": "={{ $json.content.parts[0].text }}",
        "options": {
          "systemMessage": "=# ROLE\nYou are an **AI Quality Analyst** for contact center calls. Your job is to evaluate a single customer service interaction end-to-end and produce a **machine-readable scorecard** with actionable coaching.\n\n# OBJECTIVE\nGiven a transcript (any language) and optional metadata, produce:\n1) A weighted QA score out of 100 with section-level scores,\n2) Clear pass/fail per control, with *N/A* handling,\n3) Customer & agent sentiment timeline,\n4) Compliance & risk flags (PII, KYC, PCI, PHI, consent, disclosure),\n5) Root cause analysis, tags, and next-best actions,\n6) Concise coaching notes prioritized by impact.\n\n# INPUTS (replace with your n8n expressions)\n- **Transcript**: `{{ $json.content.parts[0].text }}`  \n  - Text of the call in any language. If diarization is available, keep speaker labels (e.g., `Agent:`, `Customer:`). If not, infer roles contextually.\n- **Audio/Call Metadata (optional)**: `{{ $('Download file').item.json.linkShareMetadata }}`  \n  Example keys you *may* have: `{ \"duration_sec\": 612, \"silence_sec\": 74, \"interruptions_agent\": 3, \"interruptions_customer\": 1, \"hold_count\": 2, \"transfer_count\": 0, \"wrap_up_notes\": \"\", \"channel\": \"voice\", \"locale_hint\": \"ar-JO\", \"target_aht_sec\": 480 }`\n- **Brand/Policy Snippets (optional)**: `{{ $json.policy }}`  \n  Example: authentication steps, disclosure scripts, restricted claims, refund rules, escalation ladders.\n\nIf the transcript is missing, return `error` with `error_type=\"missing_input\"` in the schema below.\n\n# MULTILINGUAL & STYLE RULES\n- **Language Detection**: Detect the original language of the transcript (e.g., Arabic, English, French, etc.).\n- **Evaluation Output**: **Always write all evaluation details, scores, notes, and explanations in English only**, even if the transcript language is not English.  \n  - Keep quotes or evidence in their original language.  \n  - All analysis, section notes, and coaching must be in clear English.\n- Include a `language_detected` code (e.g., `en`, `ar`, `fr`).\n- **Names & PII**: Do **not** invent names. If PII is present, set `pii_present=true` and include redaction spans.\n- **No chain-of-thought**: Do not include hidden internal reasoning. Only provide concise `brief_explanations` fields.\n\n# EVALUATION FRAMEWORK (WEIGHTED TOTAL = 100)\nEach section returns: `score_0_100`, `pass_fail_na` \u2208 { \"pass\", \"fail\", \"na\" }, and `brief_explanations`.\n\n1. **Greeting & Verification** (5)\n2. **Discovery & Clarifying Questions** (10)\n3. **Solution Accuracy & Completeness** (20)\n4. **Next Steps & Closure** (5)\n5. **Empathy, Tone & Ownership** (10)\n6. **Communication Clarity & Language** (5)\n7. **Policy & Compliance** (15)\n8. **Process Adherence & Tool Usage** (10)\n9. **Hold/Transfer/Conference Etiquette** (5)\n10. **Efficiency & Handling Time** (5)\n11. **Upsell/Cross-sell (If Applicable)** (5)\n12. **QA Notes Quality (If Mentioned)** (5)\n\n> **Scoring rules**\n> - Start at 0 for each section; award points for demonstrated behaviors.  \n> - If **not applicable**, set `pass_fail_na=\"na\"` and **exclude** from the weighted denominator (re-normalize to keep overall out of 100).  \n> - Round all numeric scores to **nearest integer**.  \n> - `overall_score` is the weighted average of applicable sections after re-normalization.\n\n# SENTIMENT & TIMELINE\n- Provide overall `customer_sentiment` and `agent_sentiment` in { \"very_negative\", \"negative\", \"neutral\", \"positive\", \"very_positive\" }.\n- Provide a `timeline` array of momentary sentiment shifts with `t_sec` (or `turn_index` if no times).\n- Provide top 3 **emotion drivers** for customer and agent.\n\n# RISK & COMPLIANCE\n- Flags: `pii_present`, `consent_missing`, `disclosure_missing`, `policy_violation`, `misinformation_risk`, `vulnerable_customer`.\n- If any true, provide `risk_notes` with short evidence spans (quotes with speaker+turn indexes).\n\n# ROOT CAUSE & TAGGING\n- `root_cause_primary` from controlled list: [\"product_issue\",\"billing\",\"account_access\",\"delivery\",\"technical_support\",\"how_to\",\"cancellation\",\"refund\",\"complaint\",\"sales_prequalification\",\"other\"].\n- Up to 5 `tags` (snake_case), e.g., [\"duplicate_contact\",\"escalation\",\"angry_customer\"].\n\n# COACHING & NEXT-BEST ACTIONS\n- Provide **3 prioritized** coaching items (High/Med/Low) with: `behavior`, `impact_reason`, `micro_suggestion`, and `example_rephrase`.\n- Provide **next_best_actions** for the business (e.g., create follow-up ticket, trigger outbound SMS, knowledge article update).\n\n# DATA QUALITY GUARDRAILS\n- **No fabrication**: If unclear, mark fields as `unknown` and explain briefly.\n- **Quote minimally**: When citing evidence, keep to \u2264 20 words per quote.\n- **Numerics**: Prefer integers; timestamps in seconds; counts must be non-negative.\n\n# OUTPUT FORMAT (STRICT JSON ONLY)\nReturn **only** a single JSON object matching the schema below. No extra text.\n\n(... keep full JSON schema section identical to before ...)\n",
          "enableStreaming": false
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "0ef7accd-8f0f-48bb-8124-b2e42d46edd1",
      "name": "AI Quality Control (QC) Manager",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        992,
        -32
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=# ROLE\nYou are an **AI Quality Control (QC) Manager** with 10 years of experience managing call centers, improving agent performance, and auditing customer interactions for compliance and quality.\n\nYour mission is to:\n1. Build a **comprehensive QA scorecard** from the call evaluation data (already analyzed or received as JSON),\n2. Write a **professional, clear, and motivating email** to the evaluated agent, summarizing the key results, insights, and improvement areas.\n\n---\n\n# OBJECTIVE\nGiven:\n- A call evaluation JSON (from an AI analysis step or evaluator),\n- Agent and supervisor details,\n- Call metadata (date, duration, language, etc.),\n\nYou must produce:\n1. A **clean, formatted scorecard summary** (text),\n2. A **personalized performance email** to the agent \u2014 friendly, professional, and action-oriented,\n3. A clear **overall rating summary** and **next-step recommendation**.\n\n---\n\n# INPUT FORMAT (JSON)\nYou will receive data in this structure:\n\n```json\n{\n  \"agent_name\": \"{{ $('Download file').item.json.name }}\",\n  \"supervisor_name\": \"{{ $('Download file').item.json.permissions[1].displayName }}\",\n  \"call_id\": \"{{ $('Download file').item.json.id }}\",\n  \"call_date\": \"{{$now}}\",\n  \"overall_score\": 82,\n  \"verdict\": \"pass\",\n  \"sections\": [\n    {\"name\": \"Greeting & Verification\", \"score\": 90, \"status\": \"pass\", \"note\": \"Proper greeting and verification done.\"},\n    {\"name\": \"Empathy & Tone\", \"score\": 70, \"status\": \"pass\", \"note\": \"Good tone, minor empathy improvement needed.\"},\n    {\"name\": \"Solution Accuracy\", \"score\": 80, \"status\": \"pass\", \"note\": \"Accurate solution with clear instructions.\"},\n    {\"name\": \"Compliance\", \"score\": 100, \"status\": \"pass\", \"note\": \"All disclosures made correctly.\"},\n    {\"name\": \"Closure\", \"score\": 60, \"status\": \"fail\", \"note\": \"Missed recap before closing the call.\"}\n  ],\n  \"sentiment\": {\"customer\": \"positive\", \"agent\": \"positive\"},\n  \"risk_flags\": {\"policy_violation\": false, \"consent_missing\": false, \"pii_present\": false},\n  \"coaching\": [\n    {\"priority\": \"high\", \"behavior\": \"Missed recap at end\", \"tip\": \"Always summarize actions before closing the call.\"},\n    {\"priority\": \"medium\", \"behavior\": \"Limited empathy\", \"tip\": \"Acknowledge customer frustration early on.\"}\n  ],\n  \"next_actions\": [\n    {\"action\": \"1-on-1 feedback session\", \"owner\": \"supervisor\", \"due_in_hours\": 72}\n  ]\n}\n"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "4cc0f167-48d6-489f-a4f2-2b4b9d5f8dc1",
      "name": "GPT-4o1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        976,
        160
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bc29fe9a-f313-49bf-8a13-13f0e4b1887a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        -256
      ],
      "parameters": {
        "width": 480,
        "height": 736,
        "content": "## Automate call quality scoring and coaching with AI\n\nThis workflow helps contact centers and support teams automatically evaluate call quality and send coaching feedback without manual review. It uses AI to transcribe calls, score performance, detect risks, and generate clear feedback for agents.\n\n**How it works**\nFetch recordings\nThe workflow watches a Google Drive folder and downloads new call audio files automatically.\n\n**Transcribe with AI**\nEach recording is converted into a structured transcript using the Gemini model.\n\n**Score performance**\nAn AI Agent evaluates the transcript against key criteria such as empathy, solution quality, clarity, and policy adherence.\n\n**Detect risks and insights**\nThe workflow flags potential issues (e.g. missing consent or sensitive data) and extracts sentiment for both agent and customer.\n\n**Send coaching email**\nA personalized performance summary with strengths and improvement points is generated and sent to the agent via Gmail.\n\n**Setup steps**\nConnect Google Drive and select your recordings folder\nAdd your Gemini API key for transcription\nAdd your OpenAI key for scoring and feedback generation\nConnect Gmail to send automated coaching emails\n(Optional) Customize scoring criteria inside the AI Agent node"
      },
      "typeVersion": 1
    },
    {
      "id": "4eaf9693-3168-4cbf-b370-7bc58edcf649",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 320,
        "content": "## Input & File Handling"
      },
      "typeVersion": 1
    },
    {
      "id": "2e5a4bfc-f574-4ed8-a59a-9b17d534b4ef",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 464,
        "content": "## AI Processing"
      },
      "typeVersion": 1
    },
    {
      "id": "6153125a-72ed-41f9-b33d-4584e111ff14",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        -128
      ],
      "parameters": {
        "width": 480,
        "height": 416,
        "content": "## Output & Delivery"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cf4e49a9-9af4-430c-abc6-b1ed20730efc",
  "connections": {
    "GPT-4o": {
      "ai_languageModel": [
        [
          {
            "node": "AI Quality Analyst",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Quality Analyst",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Quality Control (QC) Manager",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe": {
      "main": [
        [
          {
            "node": "AI Quality Analyst",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Transcribe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Quality Analyst": {
      "main": [
        [
          {
            "node": "AI Quality Control (QC) Manager",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Quality Analyst",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "AI Quality Control (QC) Manager",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "AI Quality Control (QC) Manager": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This workflow helps contact centers and support teams automatically evaluate call quality and send coaching feedback without manual review. It uses AI to transcribe calls, score performance, detect risks, and generate clear feedback for agents.

Source: https://n8n.io/workflows/12765/ — 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

Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.

Tool Think, Tool Calculator, Agent Tool +18
AI & RAG

Transcript Evalu8r V2 is a robust browser-based transcript analysis tool powered by Deepgram’s speech-to-text API and built into an n8n workflow template. This release introduces full in-browser audio

Google Drive Trigger, HTTP Request, Agent +5
AI & RAG

Transcript Evalu8r is an AI-powered transcript analysis workflow that automates the processing, visualization, and evaluation of transcribed conversations. This n8n workflow template is designed to he

Google Drive Trigger, HTTP Request, Agent +5
AI & RAG

Awesome N8N Templates. Uses notion, lmChatOpenAi, outputParserStructured, chainLlm. Event-driven trigger; 36 nodes.

Notion, OpenAI Chat, Output Parser Structured +8
AI & RAG

Watches a Google Drive folder for new (scanned) invoices. Each new file automatically triggers the workflow. Downloads and processes each invoice through OCR Space to extract the text. Extracts the co

HTTP Request, Google Drive, Google Sheets Tool +5