{
  "id": "SAR8bH9kVKARWSj4",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Leads Follow-Up - Auto Draft Generator Published",
  "tags": [],
  "nodes": [
    {
      "id": "47fff186-eb26-4526-96f7-9c726fd303d3",
      "name": "Read Leads Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        912,
        608
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/YOUR_SHEET_ID",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/YOUR_SHEET_ID",
          "cachedResultName": "Leads FollowUp"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e0671f98-f565-4152-ab57-4b12fb445a6c",
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        2896,
        224
      ],
      "parameters": {
        "text": "=You are a sales assistant. Read the following meeting transcript and write a personalized follow-up email based ONLY on the details below. Do not invent or assume any information not provided.\n\nLead details:\n- Name: {{ $json.lead_name }}\n- Company: {{ $json.lead_company }}\n- Sales Rep: {{ $json.lead_sales_rep }}\n\nMeeting Transcript:\n{{ $json.transcript_text }}\n\nRules:\n- Read the transcript carefully\n- Extract the main topic discussed\n- Extract the pain point mentioned\n- Extract any agreed next steps\n- Write a follow-up email of max 6 sentences\n- Reference specific details from the transcript\n- Do NOT use placeholders like [brackets]\n- Return ONLY the email body, no subject line",
        "batching": {},
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "ed70593b-c282-4435-8b55-60bdf84329a4",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        2960,
        432
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c47d58e7-c124-454c-814f-704a0f4abbb2",
      "name": "Gmail - Create Draft",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3200,
        224
      ],
      "parameters": {
        "message": "={{ $json.text }}",
        "options": {
          "sendTo": "={{ $('Read Leads Sheet').item.json.Email }}"
        },
        "subject": "=Following up - {{ $('Transcript Data From Files').item.json.lead_company }}",
        "resource": "draft"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f4a33e12-b6a7-4b98-b1d6-15a4a3e2cf04",
      "name": "HTTP - Download File from Google Drive",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        1808,
        320
      ],
      "parameters": {
        "url": "={{ 'https://drive.google.com/uc?export=download&id=' + $json['Meeting Transcript'].split('/d/')[1].split('/')[0] }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "dbd12111-2d7b-4054-8fb2-b102e1c72e6f",
      "name": "Daily 9AM Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        688,
        608
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * 1-5"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "29ad290e-7839-418e-9bd2-9356dbc70ee5",
      "name": "Filter - Active Leads Only",
      "type": "n8n-nodes-base.if",
      "position": [
        1136,
        608
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "7ade6b43-3e44-4e65-bb78-8279301a438c",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json['Current status'] }}",
              "rightValue": "New"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "939b3f2d-12b2-4823-b00d-6fcd5507c812",
      "name": "Filter - 5+ Days No Contact",
      "type": "n8n-nodes-base.filter",
      "position": [
        1360,
        592
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json['Last Contact'] && !isNaN(new Date($json['Last Contact'])) ? Math.floor((new Date() - new Date($json['Last Contact'])) / (1000 * 60 * 60 * 24)) : -1 }}",
              "rightValue": 5
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "88377bcc-0ea1-4cab-abcc-35c5cfd98bc0",
      "name": "Check - Transcript Exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        1568,
        592
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "has-transcript",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json['Meeting Transcript'] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5a603849-fdc7-4850-8300-80eeff988c50",
      "name": "Alert - Missing Transcript",
      "type": "n8n-nodes-base.slack",
      "position": [
        1920,
        880
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f *Missing Transcript!*\n\n*Lead:* {{ $json['Name'] }}\n*Company:* {{ $json['Company'] }}\n*Sales Rep:* {{ $json['Sales Rep'] }}\n*Last Contact:* {{ $json['Last Contact Date'] }}\n\nPlease upload the meeting transcript to Google Drive and update the sheet!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "followups-reminders"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4e9578bd-5e68-4e62-9e3f-5702ca54fa60",
      "name": "Alert - Download Failed",
      "type": "n8n-nodes-base.slack",
      "position": [
        2192,
        880
      ],
      "parameters": {
        "text": "=\u274c *Download Error!*\n\n*Lead:* {{ $('Check - Transcript Exists?').item.json['Name'] }}\n*Company:* {{ $('Check - Transcript Exists?').item.json['Company'] }}\n*Sales Rep:* {{ $('Check - Transcript Exists?').item.json['Sales Rep'] }}\n\nFailed to download transcript from Google Drive.\nPlease check the link and permissions!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "followups-reminders"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "7f36f193-a4a9-4781-9bb5-0d62f031602a",
      "name": "Alert - Unsupported File Type",
      "type": "n8n-nodes-base.slack",
      "position": [
        2464,
        880
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f *Unsupported File Type!* \u26a0\ufe0f\n\n*Lead:* {{ $('Check - Transcript Exists?').item.json['Name'] }}\n*Company:* {{ $('Check - Transcript Exists?').item.json['Company'] }}\n*Sales Rep:* {{ $('Check - Transcript Exists?').item.json['Sales Rep'] }}\n*File:* {{ $binary.data.fileName }}\n*Type:* {{ $binary.data.fileExtension }}\n\n\nFile format *{{ $binary.data.fileExtension }}* is not supported. Please upload the transcript as PDF, TXT, or MP3 only!\n\n",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "failing-followups"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2a936d7a-6c29-447f-9415-64ca95569ebf",
      "name": "Notify - Draft Ready",
      "type": "n8n-nodes-base.slack",
      "position": [
        3696,
        224
      ],
      "parameters": {
        "text": "=\u2705 *Follow-Up Draft Ready!*\n\n*Lead:*{{ $('Transcript Data From Files').item.json.lead_name }}\n*Company:* {{ $('Transcript Data From Files').item.json.lead_company }}\n*Sales Rep:* {{ $('Transcript Data From Files').item.json.lead_sales_rep }}\n*Last Contact:* {{ $('Transcript Data From Files').item.json.lead_last_contact }}\n\n\u2709\ufe0f Gmail draft is ready \u2014 please review and send!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "followups-reminders"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "df5df853-a0fb-46e7-999a-8788352fc539",
      "name": "Extract Text: txt",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        2416,
        160
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "binaryPropertyName": "=data"
      },
      "typeVersion": 1
    },
    {
      "id": "3b2d3d23-0fb6-4be0-ad5f-a8b2f00e923c",
      "name": "Extract Text: Pdf",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        2416,
        304
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "e948726f-ff38-4b9e-be13-9a6e2d983a31",
      "name": "Update FollowUp Status with Dates",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3488,
        224
      ],
      "parameters": {
        "columns": {
          "value": {
            "row_number": "={{ $('Transcript Data From Files').item.json.lead_row }}",
            "Current status": "Draft Created",
            "FollowUp Draft Creation date": "=Draft Created @ {{ new Date().toLocaleString('en-GB') }}"
          },
          "schema": [
            {
              "id": "Current status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Current status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Contact",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Last Contact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Meeting Transcript",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Meeting Transcript",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sales Rep",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Sales Rep",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FollowUp Draft Creation date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "FollowUp Draft Creation date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c6d08836-7312-4735-b77d-75b118f83046",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3408,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 528,
        "content": "## 4. Deduplication\nAfter draft is created, status updates to **Draft Created** so this lead won't trigger again tomorrow.\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "db720a8e-8bd6-44e6-8ef6-8cd343d49f1e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1808,
        672
      ],
      "parameters": {
        "color": 7,
        "width": 884,
        "height": 400,
        "content": "## Error Handling\nNotify teams on slack for\n- **Missing transcript**\n- **Download failed**\n- **Unsupported file type**"
      },
      "typeVersion": 1
    },
    {
      "id": "13ec7869-9af8-4371-8df7-27e4bdacbaaf",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 1104,
        "height": 400,
        "content": "## 1. Read & Filter Leads\n\nRuns every weekday at 9AM. Reads all leads from Google Sheet and filter rows by:\n- **Status** = New  \u2013\u2013  **Skips:** Draft Created, Sent, Closed\n- **No contact** for 5+ days\n- **Transcript link** exists\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bfa097d5-5ec9-4266-b823-c041df77c4b4",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 624,
        "height": 960,
        "content": "## LEADS FOLLOW-UP WORKFLOW\n\nThis workflow automatically identifies leads that require follow-up and generates personalized emails using AI, saved as drafts for human review. The team is notified on Slack when a draft is ready.\n\n- Runs every weekday morning\n- Finds leads with no contact for 5+ days\n- Downloads their meeting transcript\n- Generates a personalized email with AI\n- Saves it as a Gmail Draft\n\n**Who is it for?**\nSales teams who need to follow up regularly with specific leads.\n\n---\n\n### Setup Steps\n- [ ] Replace YOUR_SHEET_ID with your Google Sheet ID \n- [ ] Update the Google Sheet column names in the filter nodes to match your sheet\n- [ ] Set up Google Gemini credentials for AI processing nodes\n- [ ] Set up Slack credentials and update channel IDs in all alert nodes\n- [ ] Connect your Gmail account to the Gmail nodes\n\n### Customization\n- You can extend supported file types to include voice notes (MP3) via Gemini transcription\n- This workflow can be adapted for any follow-up use case: feedback collection, deadline reminders, onboarding check-ins, etc.\n\n---\n\n## Required Google Sheet Columns\n\n| Column | Description |\n|---|---|\n| Current status | Lead status: New, Draft Created, Sent, Closed |\n| Last Contact | Date of last contact with the lead |\n| Name | Lead's full name |\n| Company | Lead's company name |\n| Email | Lead's email address |\n| Meeting Transcript |    Google Drive link to the meeting doc |\n| Sales Rep | Name of the sales rep handling this lead |\n| FollowUp Draft Creation date | Auto-filled by workflow when draft is created |"
      },
      "typeVersion": 1
    },
    {
      "id": "36dc61d2-3db2-45fd-80c6-438df8066e8a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 1044,
        "height": 544,
        "content": "## 2. Download, Route & Extract Meetings Docs\nDownloads the meeting transcript from Google Drive and routes it by file type.\n\n**Supported formats:**\n- TXT \n- PDF \n\n**If unsupported format \u2192** Slack alert sent to team"
      },
      "typeVersion": 1
    },
    {
      "id": "e7da4805-ffb2-460d-8666-a817842f14be",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2848,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 592,
        "content": "## 3. AI Email Generation\n\nUses Google Gemini to write a personalized follow-up email based on the transcript.\nSaves the output as a **Gmail Draft** \u2014 not sent automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "79865dc7-69fb-4aa8-ae64-b41e2980b81d",
      "name": "Transcript Data From Files",
      "type": "n8n-nodes-base.code",
      "position": [
        2640,
        224
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "let transcriptText = '';\n\nif ($json.text) {\n  transcriptText = $json.text;\n} else if ($json.data && typeof $json.data === 'string') {\n  transcriptText = $json.data;\n} else if ($binary?.data?.data) {\n  const buffer = Buffer.from($binary.data.data, 'base64');\n  transcriptText = buffer.toString('utf-8').replace(/\\0/g, '').trim();\n}\n\nconst lead = $('Check - Supported File Type').item.json;\n\nreturn {\n  lead_row: lead['row_number'],\n  transcript_text: transcriptText,\n  lead_name: lead['Name'],\n  lead_email: lead['Email'],\n  lead_company: lead['Company'],\n  lead_sales_rep: lead['Sales Rep'],\n  lead_last_contact: lead['Last Contact'],  \n};"
      },
      "typeVersion": 2
    },
    {
      "id": "459558c9-84af-480e-a34a-9cafe07f6982",
      "name": "Check - Supported File Type",
      "type": "n8n-nodes-base.if",
      "position": [
        2000,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "a992bcb5-8506-4e2c-a6c9-df8d7a1566cf",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $binary.data.fileExtension }}",
              "rightValue": "txt"
            },
            {
              "id": "ac99ac4f-9092-45fe-b242-874fccc2f4f8",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $binary.data.fileExtension }}",
              "rightValue": "pdf"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "a4dbac67-de7e-46b6-b37f-791a412c4966",
      "name": "Route - Is TXT?",
      "type": "n8n-nodes-base.if",
      "position": [
        2208,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2470c363-afe3-4733-baf3-f134fbce6fa3",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $binary.data.fileExtension }}",
              "rightValue": "txt"
            }
          ]
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "7c8acf75-b5be-41f2-ba6d-9edca1adb638",
  "connections": {
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Gmail - Create Draft",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route - Is TXT?": {
      "main": [
        [
          {
            "node": "Extract Text: txt",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract Text: Pdf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Leads Sheet": {
      "main": [
        [
          {
            "node": "Filter - Active Leads Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily 9AM Trigger": {
      "main": [
        [
          {
            "node": "Read Leads Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Text: Pdf": {
      "main": [
        [
          {
            "node": "Transcript Data From Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Text: txt": {
      "main": [
        [
          {
            "node": "Transcript Data From Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail - Create Draft": {
      "main": [
        [
          {
            "node": "Update FollowUp Status with Dates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check - Transcript Exists?": {
      "main": [
        [
          {
            "node": "HTTP - Download File from Google Drive",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Alert - Missing Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter - Active Leads Only": {
      "main": [
        [
          {
            "node": "Filter - 5+ Days No Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcript Data From Files": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check - Supported File Type": {
      "main": [
        [
          {
            "node": "Route - Is TXT?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Alert - Unsupported File Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter - 5+ Days No Contact": {
      "main": [
        [
          {
            "node": "Check - Transcript Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update FollowUp Status with Dates": {
      "main": [
        [
          {
            "node": "Notify - Draft Ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP - Download File from Google Drive": {
      "main": [
        [
          {
            "node": "Check - Supported File Type",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Alert - Download Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}