AutomationFlowsSlack & Telegram › Get Discord Members by Role to Google Sheets

Get Discord Members by Role to Google Sheets

Original n8n title: Get All Members of a Discord Server with a Specific Role

Get All Members Of A Discord Server With A Specific Role. Uses manualTrigger, googleSheets, noOp, discord. Event-driven trigger; 16 nodes.

Event trigger★★★★☆ complexity16 nodesGoogle SheetsDiscord
Slack & Telegram Trigger: Event Nodes: 16 Complexity: ★★★★☆ Added:

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": "3abfbefa-0a41-4dd2-a79b-99aa02447a6f",
      "name": "When clicking \"Test workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        380,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5233daa6-9b3f-4048-8187-b78decac0bbd",
      "name": "Delete ID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1900,
        380
      ],
      "parameters": {
        "operation": "delete",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Last Member"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "d3be48cd-9652-43ea-9bbf-d9d3a6c972ae",
      "name": "SaveID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2040,
        380
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $('Merge').last().json.user.id }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ]
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a8cb3b10-1143-4467-936c-36ea29c3489a",
      "name": "Get ID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        920,
        240
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Last Member"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "82bdeec7-5ff5-4ed5-8c57-f3007bd7f81e",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1520,
        240
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "19247435-e0b0-4eac-8807-cb9e4ac532ab",
      "name": "Check if we have more members left",
      "type": "n8n-nodes-base.if",
      "position": [
        1740,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "11bd5681-d979-40a8-ba0c-8c697532cf0d",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $input.all().length }}",
              "rightValue": 100
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9845c82b-942e-4265-be8c-c4b1a9199b1e",
      "name": "We're done",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2040,
        160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86bf2fe1-22b3-4563-a4b7-b3603f96cada",
      "name": "Check if we have an ID",
      "type": "n8n-nodes-base.if",
      "position": [
        1100,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8cabfe61-be13-462f-a8ce-99ba5304fa10",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.ID }}",
              "rightValue": ""
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "96324abb-2464-418a-850f-c6f8d3ce209f",
      "name": "Filter to only include members with role",
      "type": "n8n-nodes-base.filter",
      "position": [
        1740,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cac0aeae-ff45-4717-b11e-4e19995649fe",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.roles.filter(role => role === $('Setup: Edit this to get started').first().json['Role ID']).length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bc012053-c619-479b-8bcb-9325c209d999",
      "name": "Get First 100 Members",
      "type": "n8n-nodes-base.discord",
      "position": [
        1300,
        260
      ],
      "parameters": {
        "guildId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"
        },
        "options": {
          "simplify": true
        },
        "resource": "member"
      },
      "credentials": {
        "discordBotApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "7214e807-5a51-438d-9db8-32821307f4ea",
      "name": "Get next 100 Members after last ID",
      "type": "n8n-nodes-base.discord",
      "position": [
        1300,
        80
      ],
      "parameters": {
        "after": "={{ $('Get ID').first().json.ID }}",
        "guildId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"
        },
        "options": {
          "simplify": true
        },
        "resource": "member"
      },
      "credentials": {
        "discordBotApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "158d3e7a-cc8c-4ab3-b59f-5a2251c79613",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        517,
        -60.44028103044491
      ],
      "parameters": {
        "color": 5,
        "width": 350.3145253526498,
        "height": 491.3512880562059,
        "content": "## Setup\n1. Add your Google Sheets and Discord credentials.\n2. Create a Google Sheets document that contains `ID` as a column. We're using this to remember which member we received last.\n3. Edit the fields in the setup node `Setup: Edit this to get started`. *You can read up on how to get the Discord IDs via [this link](https://www.pythondiscord.com/pages/guides/pydis-guides/contributing/obtaining-discord-ids/).*\n4. Link to your Discord server in the Discord nodes\n5. Activate the workflow\n6. Call the production webhook URL in your browser"
      },
      "typeVersion": 1
    },
    {
      "id": "11926dbb-a5e0-48f9-8453-7dc21ecf6717",
      "name": "Setup: Edit this to get started",
      "type": "n8n-nodes-base.set",
      "position": [
        640,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7c8cce4f-1330-425a-baff-4c40320f2335",
              "name": "Role ID",
              "type": "string",
              "value": "<Enter your roleID here>"
            },
            {
              "id": "8533b358-d8e6-4eba-9159-f6bdd2e0df65",
              "name": "Google Sheets URL",
              "type": "string",
              "value": "<Enter your Sheets URL here>"
            },
            {
              "id": "bb87e6f5-def9-4625-818a-ce6ff7b44ed7",
              "name": "Discord ID",
              "type": "string",
              "value": "<Enter your server/guild ID here>"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "334377fc-ddb8-4c0d-9ddc-f6949b98578c",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "disabled": true,
      "position": [
        380,
        420
      ],
      "parameters": {
        "path": "discord-template",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 1.1
    },
    {
      "id": "8fac2863-a046-4ce7-8391-72486141ea98",
      "name": "Send Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1960,
        -80
      ],
      "parameters": {
        "options": {},
        "respondWith": "allIncomingItems"
      },
      "typeVersion": 1
    },
    {
      "id": "10677a2d-9bcb-4b51-8cab-a49c7f16a8d7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1900,
        -180
      ],
      "parameters": {
        "color": 7,
        "height": 265.6674473067916,
        "content": "You can replace this node according to your use case. In my case, I've send a DM to all users"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Check if we have more members left",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter to only include members with role",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get ID": {
      "main": [
        [
          {
            "node": "Check if we have an ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SaveID": {
      "main": [
        [
          {
            "node": "Get ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Setup: Edit this to get started",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete ID": {
      "main": [
        [
          {
            "node": "SaveID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get First 100 Members": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check if we have an ID": {
      "main": [
        [
          {
            "node": "Get next 100 Members after last ID",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get First 100 Members",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Test workflow\"": {
      "main": [
        [
          {
            "node": "Setup: Edit this to get started",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Setup: Edit this to get started": {
      "main": [
        [
          {
            "node": "Get ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if we have more members left": {
      "main": [
        [
          {
            "node": "We're done",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Delete ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get next 100 Members after last ID": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter to only include members with role": {
      "main": [
        [
          {
            "node": "Send Response",
            "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

How this works

Efficiently retrieve and manage a complete list of all members in your Discord server who hold a specific role, saving hours of manual scrolling through large communities. Ideal for server administrators, community managers, or analysts needing targeted user data for moderation, engagement campaigns, or reporting without sifting through irrelevant members. The workflow leverages Discord's API to fetch members incrementally and integrates with Google Sheets to store and update the results seamlessly, with the key step being a loop that checks for additional members until the full list is compiled.

Use this workflow when your Discord server exceeds a few hundred members and you require role-specific lists for tasks like targeted announcements or compliance checks, especially if you're already using Google Sheets for data organisation. Avoid it for small servers where Discord's built-in search suffices, or if real-time updates are needed beyond periodic runs. Common variations include exporting to other tools like email for notifications or filtering further by join date within the sheet.

About this workflow

Get All Members Of A Discord Server With A Specific Role. Uses manualTrigger, googleSheets, noOp, discord. Event-driven trigger; 16 nodes.

Source: https://github.com/Zie619/n8n-workflows — 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 retrieves all members of a Discord server or guild who have a specific role.

Google Sheets, Discord
Slack & Telegram

批量建立加密薪資單. Uses httpRequest, googleDrive, googleSheets, discord. Event-driven trigger; 14 nodes.

HTTP Request, Google Drive, Google Sheets +1
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

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

Deal-Finder. Uses executeWorkflowTrigger, googleSheets, perplexity, httpRequest. Event-driven trigger; 49 nodes.

Execute Workflow Trigger, Google Sheets, Perplexity +2