AutomationFlowsSlack & Telegram › Send Google Sheets Data as a Message to a Discord Channel

Send Google Sheets Data as a Message to a Discord Channel

Byn8n Team @n8n-team on n8n.io

This workflow sends a message to a Discord channel when a new row is added or a row is updated in a Google Sheet. The message will send all data rows in the Google Sheet. Discord account and Discord credentials. Google account and Google credentials.

Event trigger★★★★☆ complexity4 nodesGoogle Sheets TriggerDiscord
Slack & Telegram Trigger: Event Nodes: 4 Complexity: ★★★★☆ Added:

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

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": "b3a0fa7c-eb47-4f51-98d7-ac1a8de7b05d",
      "name": "On new or updated row",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        800,
        380
      ],
      "parameters": {
        "options": {
          "columnsToWatch": [
            "Security Code"
          ]
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_AWS_SECRET_KEY_HERE-dis/edit#gid=0",
          "cachedResultName": "Investments"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AWS_SECRET_KEY_HERE-dis",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_AWS_SECRET_KEY_HERE-dis/edit?usp=drivesdk",
          "cachedResultName": "Investments"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "61b96d9b-801c-43e6-b89a-a55245386e4f",
      "name": "Send message",
      "type": "n8n-nodes-base.discord",
      "position": [
        1200,
        380
      ],
      "parameters": {
        "text": "=```\n{{ $json.ascii_table }}\n```",
        "options": {},
        "webhookUri": "https://discord.com/api/webhooks/..."
      },
      "typeVersion": 1
    },
    {
      "id": "2dc9ce88-2079-4419-9f48-2281ac25cb36",
      "name": "Convert to ASCII table",
      "type": "n8n-nodes-base.code",
      "position": [
        1000,
        380
      ],
      "parameters": {
        "jsCode": "/* configure columns to be displayed */\nconst columns_to_display = [\n  \"Security Code\",\n  \"Price\",\n  \"Quantity\",\n]\n\n/* End of configuration section (do not edit code below) */\nconst google_sheets_data = $('On new or updated row').all();\n\n/**\n * Takes a list of objects and returns an ascii table with\n * padding and headers.\n */\nfunction ascii_table(data, columns_to_display) {\n  let table = \"\"\n  \n  // Get the headers\n  let headers = []\n  for (let i = 0; i < columns_to_display.length; i++) {\n    headers.push(columns_to_display[i])\n  }\n\n  // Get the longest string in each column\n  let longest_strings = []\n  for (let i = 0; i < headers.length; i++) {\n    let longest_string = headers[i].length\n    for (let j = 0; j < data.length; j++) {\n      let string_length = data[j].json[headers[i]].length\n      if (string_length > longest_string) {\n        longest_string = string_length\n      }\n    }\n    longest_strings.push(longest_string)\n  }\n\n  // Add the headers to the table\n  for (let i = 0; i < headers.length; i++) {\n    table += headers[i].toString().padEnd(longest_strings[i] + 2, \" \")\n  }\n\n  // Add the data to the table\n  for (let i = 0; i < data.length; i++) {\n    table += \"\\n\"\n    for (let j = 0; j < headers.length; j++) {\n      table += data[i].json[headers[j]].toString().padEnd(longest_strings[j] + 2, \" \")\n    }\n  }\n\n  return table\n}\n\noutput = {\n  ascii_table: ascii_table(google_sheets_data, columns_to_display),\n}\n\nconsole.log(output.ascii_table)\n\nreturn output"
      },
      "typeVersion": 1
    },
    {
      "id": "2db7b37b-22f9-424d-a889-33f8a0db2b01",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        220
      ],
      "parameters": {
        "width": 402,
        "height": 433,
        "content": "## Send Google Sheets data as a message to a Discord channel\nThis workflow sends a message to a Discord channel when a new row is added or a row is updated in a Google Sheet. The message will send all data rows in the Google Sheet.\n\n### How it works\nUsing a code node, we can use the obtained Google Sheet data to create a custom message that will be sent to Discord. The message will be sent to the Discord channel specified in the Discord node.\n\n### Setup\nThis workflow requires that you set up a Discord webhook and have an existing Google Sheet with data. See how to set up a Discord webhook [here](https://docs.n8n.io/integrations/builtin/credentials/discord/#creating-a-webhook-in-discord).\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "On new or updated row": {
      "main": [
        [
          {
            "node": "Convert to ASCII table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to ASCII table": {
      "main": [
        [
          {
            "node": "Send 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 sends a message to a Discord channel when a new row is added or a row is updated in a Google Sheet. The message will send all data rows in the Google Sheet. Discord account and Discord credentials. Google account and Google credentials.

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

A comprehensive n8n automation that monitors Google Sheets for new project entries, automatically creates dedicated Discord channels, and sends formatted member notifications with all essential projec

Google Sheets Trigger, Discord, Google Sheets
Slack & Telegram

Googlesheets Discord. Uses googleSheetsTrigger, discord, stickyNote. Event-driven trigger; 4 nodes.

Google Sheets Trigger, Discord
Slack & Telegram

Unlock low-cost, high-control generative media workflows directly from n8n by integrating with ComfyUI. Ideal for indie creators, AI developers, or small teams seeking scalable media automation—from i

Execute Workflow Trigger, HTTP Request, Read Write File +2
Slack & Telegram

This workflow will backup all of your existed workflows to a single Github repository.

Execute Workflow Trigger, n8n, GitHub +1
Slack & Telegram

This workflow is an AI-powered roto matte generation and first-pass compositing pipeline designed for VFX production. It transforms structured roto requests into multiple high-precision matte passes u

HTTP Request, Slack, Error Trigger +4