AutomationFlowsSlack & Telegram › Customer Financial Report Delivery System with Telegram and Google Sheets

Customer Financial Report Delivery System with Telegram and Google Sheets

ByMiad Dadbin @miad-dadbin on n8n.io

How it works

Event trigger★★★★☆ complexity26 nodesTelegram TriggerTelegramGoogle Sheets
Slack & Telegram Trigger: Event Nodes: 26 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → Telegram 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
{
  "nodes": [
    {
      "id": "d0054cc3-5af6-4dec-84ad-ee4096484c74",
      "name": "Aggregate Summary2",
      "type": "n8n-nodes-base.code",
      "position": [
        2560,
        112
      ],
      "parameters": {
        "jsCode": "function toNumber(value) {\n  if (!value || value === \"-\" || value === \"\") return 0;\n\n  let v = String(value).replace(/\\//g, \".\");\n\n  v = v.replace(/,/g, \"\").replace(/\\s/g, \"\");\n\n  const num = parseFloat(v);\n  return isNaN(num) ? 0 : num;\n}\n\nlet totalDebitMali = 0;\nlet totalCreditMali = 0;\nlet totalDebitWeight = 0;\nlet totalCreditWeight = 0;\n\nconst accountName = items[0].json[\"customerName\"] || \"NA\";\n\nfor (const item of items) {\n  totalDebitMali += toNumber(item.json[\"you column name\"]);\n  totalCreditMali += toNumber(item.json[\"you column name\"]);\n}\n\nconst balanceMali = totalDebitMali - totalCreditMali;\n\nreturn [\n  {\n    json: {\n      \"accountName\": accountName,\n      totalDebitMali,\n      totalCreditMali,\n      balanceMali,\n\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "367b28c8-87cd-47ab-93ce-d2568cce674d",
      "name": "Format Details2",
      "type": "n8n-nodes-base.code",
      "position": [
        2784,
        112
      ],
      "parameters": {
        "jsCode": "const item = items[0].json;\n\nconst header = `\ud83d\udccaReport name: ${item[\"Your Custom Message\"]}`;\n\nconst text = `${header}\n\n\ud83d\udcb0Your Custom Name : ${item.totalDebitMali}\n\ud83d\udcb8Your Custom Name: ${item.totalCreditMali}\n\u2696\ufe0fYour Custom Name: ${item.balanceMali}\n\nreturn [{ json: { text } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "48c4a6ac-dbbd-475c-b6cd-108257c264e1",
      "name": "Combine Summary + Details2",
      "type": "n8n-nodes-base.code",
      "position": [
        3008,
        112
      ],
      "parameters": {
        "jsCode": "const detail = $items(\"Format Details2\")[0].json.text;\nconst s = $items(\"Aggregate Summary2\")[0].json;\n\nconst accountName = Your Custom Message [\"Your Custom Message\"] || \"NA\";\n\nconst summary = `\n\ud83d\udc64 Report name:Your Custom Message: ${accountName}\n\n\ud83d\udcb0 \u062c\u0645\u0639 \u0645\u0627\u0644\u06cc:\nYour Custom Name : ${s.totalDebitMali}\nYour Custom Name : ${s.totalCreditMali}\n`;\n\nreturn [{ json: { summary } }];\n\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "df7484b2-b2de-40cd-bdbf-ee959efcc908",
      "name": "Input user2",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -128,
        176
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0faa3a2a-2407-4f71-a03e-57c82dfb6e10",
      "name": "Send Report2",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3232,
        112
      ],
      "parameters": {
        "text": "={{$json[\"summary\"]}}",
        "chatId": "={{$node[\"Input user2\"].json[\"message\"][\"chat\"][\"id\"]}}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e85b3a8f-3cbc-476b-bb5f-3f521bb7c7a2",
      "name": "Check Match2",
      "type": "n8n-nodes-base.code",
      "position": [
        1872,
        96
      ],
      "parameters": {
        "jsCode": "const sheetInput = $json || {};\n\nconst userChatId = String($item(0).$json.chatId || \"\").trim();\n\nconst keys = Object.keys(sheetInput);\nconst keyChat1 = keys.find(k => k.replace(/\\s/g, '').toLowerCase() === 'chatid1') || 'chatid1';\nconst keyChat2 = keys.find(k => k.replace(/\\s/g, '').toLowerCase() === 'chatid2') || 'chatid2';\n\nconst accessChatId1 = String(sheetInput[keyChat1] || \"\").trim();\nconst accessChatId2 = String(sheetInput[keyChat2] || \"\").trim();\n\nlet access = \"denied\";\nconsole.log({ userChatId, accessChatId1, accessChatId2 });\nif (userChatId && (userChatId === accessChatId1 || userChatId === accessChatId2)) {\n  access = \"granted\";\n}\n\nreturn [{\n  json: {\n    access,\n    groupName: sheetInput[\"groups\"] || \"\",\n    customerName: $item(0).$json.customerName || \"\",\n    chatId: userChatId,\n    accessChatId1,\n    accessChatId2,\n    foundKeys: { keyChat1, keyChat2 }\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "7d88a885-dbb9-4cfd-8822-1433f6efa072",
      "name": "Merge4",
      "type": "n8n-nodes-base.merge",
      "position": [
        992,
        240
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "3da68029-f281-43e0-80de-4caa0c27a4b3",
      "name": "Get row(s) in sheet (Access)2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1424,
        96
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json[\"Groups\"] }}",
              "lookupColumn": "=Customers Group"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1067333283,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ/edit#gid=1067333283",
          "cachedResultName": "Access"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ/edit?usp=drivesdk",
          "cachedResultName": "Henza"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "84a544a9-b75f-4a48-bf44-a357d37d46d3",
      "name": "Get row(s) in sheet5",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2336,
        112
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.customerName }}",
              "lookupColumn": "=customerNam"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ/edit?usp=drivesdk",
          "cachedResultName": "Henza"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "fc2fbf1b-ecd3-49ec-bdf4-4e8fe62febf3",
      "name": "Wellcome1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        544,
        96
      ],
      "parameters": {
        "text": "=Your Custom Message",
        "chatId": "={{ $json.chatId }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a7722ab6-22df-4d7a-a118-6ee6bedd516f",
      "name": "If4",
      "type": "n8n-nodes-base.if",
      "position": [
        320,
        176
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "69b37108-c2fc-4884-944e-1fdc5afa6417",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.action.trim() }}",
              "rightValue": "welcome"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f79a32ce-3892-4978-9346-529be649c73e",
      "name": "If5",
      "type": "n8n-nodes-base.if",
      "position": [
        1200,
        96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "6fc1cdd3-e9e9-43fa-aeec-7bc654d32839",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.found }}",
              "rightValue": "=true"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "2f99f000-be5c-453b-84af-91af2f72d79b",
      "name": "Enter Correct name",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1424,
        288
      ],
      "parameters": {
        "text": "=Your custom Message",
        "chatId": "={{ $('Input user2').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f48f5043-5bf0-4ad1-85c5-19159d4c1385",
      "name": "Get row(s) in sheet4",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        544,
        384
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.customerName }}",
              "lookupColumn": "=Customer name"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IyXUau8N_jteJJIslBEXfsljuhjL6Du9MA9LlffbuNU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/18PuJid97iPGtS4PqgEjaYVkUIM5F4A_bloQqwil0KbQ/edit?usp=drivesdk",
          "cachedResultName": "Henza"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "70266fc7-de99-4fdf-b398-0d1525168993",
      "name": "Merge5",
      "type": "n8n-nodes-base.merge",
      "position": [
        1648,
        96
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "f95f85b7-b116-4767-8511-1cce706d1425",
      "name": "If3",
      "type": "n8n-nodes-base.if",
      "position": [
        2112,
        288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9cd2a1c2-a9c8-426c-92c4-4117bf1c0f56",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.access }}",
              "rightValue": "granted"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "0771c3e8-426e-4ca3-820d-9340fee7f57a",
      "name": "No permission",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2336,
        304
      ],
      "parameters": {
        "text": "=Your Custom Message",
        "chatId": "={{ $json.chatId }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "08b78fa2-cb3b-4814-b324-2c01e2f49901",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        48
      ],
      "parameters": {
        "width": 1376,
        "height": 496,
        "content": "\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0a633d7b-3fee-4078-9750-23afc06fb990",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        48
      ],
      "parameters": {
        "color": 3,
        "width": 880,
        "height": 496,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d8dbbfa8-cfb2-44be-bbad-8f77e282a909",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 1312,
        "height": 656,
        "content": "# \ud83e\udd16 STEP 1: USER INPUT & DATA FETCH PROCESS\n\nTelegram Trigger (Input user2)\nStarts the workflow when a user sends a message to the Telegram bot.\n\u2192 Passes message data (text, chat ID, username) to next node.\n\nCode Node    \nReads the user message and detects intent:\n\n/start or hi \u2192 sets action = welcome\n\nEmpty message \u2192 sets action = error\n\nOtherwise \u2192 sets action = searchCustomer and extracts customerName.\n\nIf Node (If4)\nChecks if action = welcome.\n\u2192 Yes \u2192 Sends welcome message.\n\u2192 No \u2192 Continues to Google Sheets search.\n\nGoogle Sheets Node\nLooks up Customer name in the connected sheet.\nReturns customer details if found.\n\nCode Node (Code2)\nAdds a found flag to show whether data exists.\nMerges the result with the chat ID for next step.\n\nMerge Node (Merge4)\nCombines user input and sheet data for further processing in the next workflow step."
      },
      "typeVersion": 1
    },
    {
      "id": "287d415e-ffdc-408a-96d5-06713c352479",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        96,
        176
      ],
      "parameters": {
        "jsCode": "const message = $json.message || {};\nlet text = (message.text || \"\").trim();\n\n\nif ([\"/start\", \"hi\"].includes(text)) {\n  return [{\n    json: {\n      action: \"welcome\",\n      chatId: message.chat?.id,\n      reply: \"Your Custom Message\"\n    }\n  }];\n}\n\nif (!text) {\n  return [{\n    json: {\n      action: \"error\",\n      reply: \"Your Custom Message\"\n    }\n  }];\n}\n\nreturn [{\n  json: {\n    action: \"searchCustomer\",\n    customerName: text,\n    chatId: message.chat?.id,\n    from: message.from?.first_name || \"\",\n    username: message.from?.username || \"\",\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9c97999f-4541-4931-89ca-d3544bf5c240",
      "name": "Code2",
      "type": "n8n-nodes-base.code",
      "position": [
        768,
        384
      ],
      "parameters": {
        "jsCode": "const data = $json;\nconst hasData = Object.keys(data).length > 0;\n\nreturn [{\n  json: {\n    ...data,                \n    found: hasData,         \n    chatId: data.chatId || $input.first().json.chatId\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "5955cbfc-2d71-4ab9-8dd7-94cb8f3bbbd7",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        224
      ],
      "parameters": {
        "color": 4,
        "width": 656,
        "height": 800,
        "content": "# How it works\n\nThis workflow receives messages from Telegram using the Telegram Trigger node.\n\nIt detects the user\u2019s action (/start or customer name) and decides whether to send a welcome message or perform a customer search.\n\nThe system fetches customer and access information from Google Sheets, checks if the user is authorized (based on chat IDs in the \u201cAccess\u201d sheet), and then proceeds accordingly.\n\nIf access is granted, the workflow aggregates financial and weight data, formats a summary report, and sends it back to the same Telegram chat automatically.\n\nIf access is denied or customer data is not found, it sends an appropriate \u201cno permission\u201d or \u201cincorrect name\u201d message to the user.\n\n# Set up steps\n\nConnect your Telegram Bot API credentials in the Input user2, Send Report2, and related Telegram nodes.\n\nConnect your Google Sheets account and update:\n\ndocumentId \u2192 link to your Google Sheet\n\nsheetName \u2192 replace with your actual sheet/tab names (\u201cAccess\u201d, \u201cSheet1\u201d, etc.)\n\nlookupColumn \u2192 update to match column names used in your sheet (e.g., Customer name, Groups).\n\nReplace placeholder text such as Your Custom Message and Your Custom Name with your actual message texts or variable names.\n\nTest by sending a message to your Telegram bot with either /start or a known customer name.\n\nExpected setup time: 10\u201315 minutes depending on how your Google Sheets and Telegram bot are configured.\n\nKeep detailed field mapping or transformation logic (column names, sheet IDs) inside sticky notes within your workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "980f9f33-4b9a-440e-911c-642d81eec87e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 1312,
        "height": 496,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "49a0a734-df6f-42e5-80d3-60d7b80796b6",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        560
      ],
      "parameters": {
        "color": 3,
        "width": 880,
        "height": 416,
        "content": "# \ud83e\udd16 STEP 2: ACCESS VALIDATION PROCESS\n\nIf Node\nChecks if found = true.\n\u2192 Yes: continue to Google Sheets\n\u2192 No: send error message via Telegram\n\nGoogle Sheets Node\nFetches rows from Access Sheet where Customers Group = $json[\"Groups\"].\n\nMerge Node\nCombines data from \u201cIf\u201d and \u201cGoogle Sheets\u201d for validation.\n\nCode Node (Check Match2)\nCompares user chatId with ChatID1 and ChatID2 from sheet.\n\u2192 Returns access: granted or access: denied.\n\nTelegram Node\nSends message \u201cEnter correct name\u201d if no match is found."
      },
      "typeVersion": 1
    },
    {
      "id": "e6658148-61b9-4fff-8820-e71a349329df",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        560
      ],
      "parameters": {
        "width": 1376,
        "height": 592,
        "content": "# \ud83e\udd16 STEP 3: REPORT GENERATION & DELIVERY\n\nIf Node (If3)\nChecks if access = granted.\n\u2192 Yes \u2192 continue to report generation.\n\u2192 No \u2192 send \u201cNo permission\u201d message via Telegram.\n\nGoogle Sheets Node (Get row(s) in sheet5)\nRetrieves customer data from Google Sheets based on customerName.\nProvides raw financial data for calculation.\n\nCode Node (Aggregate Summary2)\nCalculates total debit, total credit, and balance.\nCleans and converts numeric values before summing.\n\u2192 Output: { totalDebitMali, totalCreditMali, balanceMali }\n\nCode Node (Format Details2)\nFormats a detailed text report using emojis and labels.\nExample: \ud83d\udcb0Debit, \ud83d\udcb8Credit, \u2696\ufe0fBalance.\n\nCode Node (Combine Summary + Details2)\nMerges summary and detail sections into one final report text.\n\nTelegram Node (Send Report2)\nSends the final formatted report back to the user in Telegram.\n\nTelegram Node (No Permission)\nIf access was denied, this node sends a warning or rejection message to the user."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If3": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet5",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No permission",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If4": {
      "main": [
        [
          {
            "node": "Wellcome1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get row(s) in sheet4",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If5": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet (Access)2",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge5",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Enter Correct name",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "If4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code2": {
      "main": [
        [
          {
            "node": "Merge4",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge4": {
      "main": [
        [
          {
            "node": "If5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge5": {
      "main": [
        [
          {
            "node": "Check Match2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input user2": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Match2": {
      "main": [
        [
          {
            "node": "If3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Details2": {
      "main": [
        [
          {
            "node": "Combine Summary + Details2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Summary2": {
      "main": [
        [
          {
            "node": "Format Details2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet4": {
      "main": [
        [
          {
            "node": "Code2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet5": {
      "main": [
        [
          {
            "node": "Aggregate Summary2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Summary + Details2": {
      "main": [
        [
          {
            "node": "Send Report2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet (Access)2": {
      "main": [
        [
          {
            "node": "Merge5",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}

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

How it works

Source: https://n8n.io/workflows/10377/ — 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 provides a complete solution for handling Telegram Stars payments, invoicing and refunds using n8n. It automates the process of sending invoices, managing pre-checkout approvals, recordi

HTTP Request, Execute Workflow Trigger, Google Sheets +2
Slack & Telegram

clients kept booking meetings during my prayer times. i'd either miss a prayer or scramble to reschedule. the problem wasn't the clients — it was that my calendar had no blocked windows for salah. i n

Telegram Trigger, HTTP Request, Google Calendar +3
Slack & Telegram

This workflow is a powerful reputation management tool designed to proactively filter customer reviews. It helps you encourage positive reviews on Google while capturing negative feedback privately be

Telegram Trigger, Google Sheets, Telegram
Slack & Telegram

This workflow is designed to automate your e-commerce order processing by instantly syncing new Jotform submissions with your internal systems and immediately notifying the customer on Telegram.

Jot Form Trigger, Telegram, Data Table +3
Slack & Telegram

This template is perfect for freelancers, small business owners, or financial assistants who want to record and approve financial transactions like income and expenses directly from Telegram, without

Telegram Trigger, Telegram, Google Sheets