This workflow corresponds to n8n.io template #8880 — 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 →
{
"id": "7XxAeZxBDoMqMdJ6",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Join Whatsapp group",
"tags": [
{
"id": "tYlHCDj5nDVo6yjD",
"name": "Template Share",
"createdAt": "2025-09-23T17:47:07.970Z",
"updatedAt": "2025-09-23T17:47:07.970Z"
}
],
"nodes": [
{
"id": "def019f5-d10a-4373-b8e2-fe84bb82a873",
"name": "Fetch groups",
"type": "n8n-nodes-evolution-api-en.evolutionApi",
"onError": "continueRegularOutput",
"position": [
16,
-304
],
"parameters": {
"resource": "groups-api",
"operation": "fetch-groups",
"inviteCode": "={{ $('Loop Over Items').item.json['Invitation Code'] }}"
},
"credentials": {
"evolutionApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b1005876-001d-44cc-95cd-b4eb0328bd49",
"name": "Lire invitation code",
"type": "n8n-nodes-base.googleSheets",
"position": [
-768,
-160
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR ID"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "4f52e94f-a672-4702-9e49-fda7dd50d253",
"name": "50 premiers non trait\u00e9s",
"type": "n8n-nodes-base.code",
"position": [
-640,
-160
],
"parameters": {
"jsCode": "// On garde uniquement les 50 premiers non trait\u00e9s\nreturn items.slice(0, 50);\n"
},
"typeVersion": 2
},
{
"id": "cdabb85a-8981-45e3-be6a-e9d711a1ca8e",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-416,
-160
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "119dc1d0-db13-48d9-a8f8-ffb7cdaa80e1",
"name": "Mapper donn\u00e9es",
"type": "n8n-nodes-base.set",
"position": [
-112,
-144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c9d9f171-9a36-4c09-ab1d-8f46541fca9b",
"name": "row_number",
"type": "number",
"value": "={{ $json.row_number }}"
},
{
"id": "7d96792d-1194-4e39-8927-2d3c69fb9ac8",
"name": "Invitation Code",
"type": "string",
"value": "={{ $json['Invitation Code'] }}"
},
{
"id": "98309fc1-14a6-42ff-89e5-e5ee58a16fe6",
"name": "Groupe id",
"type": "string",
"value": "={{ $json['Groupe id'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "868afb8e-b076-4aad-953c-11546168f8e2",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
336,
-128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b8c8ab5e-768f-4bd6-bbe4-c85a668bfe50",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.data.size }}",
"rightValue": 50
}
]
}
},
"typeVersion": 2.2
},
{
"id": "9af29f3c-9265-4af2-a72e-f10e108aa48c",
"name": "Join group",
"type": "n8n-nodes-evolution-api-en.evolutionApi",
"onError": "continueRegularOutput",
"position": [
480,
-304
],
"parameters": {
"resource": "groups-api",
"operation": "join-group",
"inviteCode": "={{ $('Mapper donn\u00e9es').item.json['Invitation Code'] }}"
},
"credentials": {
"evolutionApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a762732a-f91a-4f28-b719-2b155decc87e",
"name": "Mis a jour statut",
"type": "n8n-nodes-base.googleSheets",
"position": [
672,
-304
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "42e601c4-a267-48af-8fe2-a1f9b12e89ac",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
960,
-80
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "e6014958-7158-4432-b34e-81ee48468132",
"name": "Remplir liste",
"type": "n8n-nodes-base.googleSheets",
"position": [
816,
-160
],
"parameters": {
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "46b0ef58-48bd-4bd2-bc29-c35159313495",
"name": "Mis a jour statut1",
"type": "n8n-nodes-base.googleSheets",
"position": [
640,
-48
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "url",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "68a69e70-c8eb-4a38-acab-9f58fba69547",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-912,
-160
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 6,
"triggerAtMinute": 8
},
{
"triggerAtHour": 12,
"triggerAtMinute": 13
},
{
"triggerAtHour": 20,
"triggerAtMinute": 17
}
]
}
},
"typeVersion": 1.2
},
{
"id": "1beeb731-1941-44e3-bcef-a2e774857686",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
176,
-144
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "ab8c62fe-89bf-4989-8357-c54a13d0af96",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-432
],
"parameters": {
"width": 448,
"height": 480,
"content": "Schedule Trigger\n\u23f0 \u201cRuns automatically at the frequency you set (e.g., daily, hourly).\u201d\n\nLire invitation code (Google Sheets)\n\ud83d\udcc4 \u201cReads invitation codes from the Google Sheet.\u201d\n\n50 premiers non trait\u00e9s\n\ud83d\udd0e \u201cFilters to only process the first 50 unused invitation codes.\u201d"
},
"typeVersion": 1
},
{
"id": "e7e1654a-81b9-4ccd-9358-ea4c4bf71b83",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-432
],
"parameters": {
"height": 192,
"content": "Fetch groups\n\ud83d\udd17 \u201cValidates the invitation code and fetches group details.\u201d"
},
"typeVersion": 1
},
{
"id": "c50e76f0-b4c6-448c-8ff4-9864bfebe171",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
-480
],
"parameters": {
"width": 672,
"height": 608,
"content": "\u2753 \u201cTry to join the WhatsApp group. If successful, update the sheet and add to the joined list. If failed, mark the code as failed.\u201d\n\n\ud83d\udcca \u201cLog results back into Google Sheets and use a short wait to avoid hitting limits before processing the next code.\u201d"
},
"typeVersion": 1
},
{
"id": "d6e5e557-7793-4164-9fed-fa11a22340a0",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1472,
-640
],
"parameters": {
"color": 6,
"width": 464,
"height": 944,
"content": "Auto-join WhatsApp groups from Google Sheets invitation codes\n\nThis workflow helps you automatically join groups, update statuses, and track results without manual work.\n\n\n\nHow it works / What it does\n\nThe workflow connects Google Sheets with WhatsApp through an automation sequence:\n\nReads the list of invitation codes from a Google Sheet.\n\nProcesses the first 50 unused codes per run.\n\nValidates group links via a Fetch groups node.\n\nAttempts to join each group using the Join group node.\n\nUpdates the sheet with the join status (success or failure).\n\nLogs successful joins in a tracking list for easy follow-up.\n\nThis ensures a fully automated way to manage WhatsApp group invitations while keeping your data organized in Google Sheets.\n\nHow to set up\n\nPrepare a Google Sheet with invitation codes and a status column.\n\nConfigure the Google Sheets node with read and write access.\n\nSet up your fetch-groups and join-group credentials.\n\nAdjust the Schedule Trigger to define how often the workflow should run.\n\nTest with a few sample codes before scaling.\n\nRequirements\n\nn8n (self-hosted or cloud).\n\nGoogle Sheets API credentials.\n\nWhatsApp integration (via [Evolution API] or another community node \u2014 self-hosted only)."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "eb8ddacc-5409-4e8a-ade5-ca7116baaf0a",
"connections": {
"If": {
"main": [
[
{
"node": "Join group",
"type": "main",
"index": 0
}
],
[
{
"node": "Mis a jour statut1",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Join group": {
"main": [
[
{
"node": "Mis a jour statut",
"type": "main",
"index": 0
}
]
]
},
"Fetch groups": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Remplir liste": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Mapper donn\u00e9es",
"type": "main",
"index": 0
}
]
]
},
"Mapper donn\u00e9es": {
"main": [
[
{
"node": "Fetch groups",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Lire invitation code",
"type": "main",
"index": 0
}
]
]
},
"Mis a jour statut": {
"main": [
[
{
"node": "Remplir liste",
"type": "main",
"index": 0
}
]
]
},
"Mis a jour statut1": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Lire invitation code": {
"main": [
[
{
"node": "50 premiers non trait\u00e9s",
"type": "main",
"index": 0
}
]
]
},
"50 premiers non trait\u00e9s": {
"main": [
[
{
"node": "Loop Over Items",
"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.
evolutionApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is ideal for community managers, event organizers, and businesses that regularly manage multiple WhatsApp groups. If you have a growing list of invitation codes stored in Google Sheets, this automation helps you automatically join groups, update statuses, and track…
Source: https://n8n.io/workflows/8880/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
n8n Community Topic Tracker by Keyword. Uses googleSheets, scheduleTrigger, stickyNote, splitOut. Scheduled trigger; 10 nodes.
This template is designed for community managers, developers, and enthusiasts who want to monitor and capture discussions on the n8n community forum by specific keywords. By tracking new topics that m
🚀 Lightning-fast setup - Deploy in under 5 minutes 💡 Zero AI costs - Uses simple math instead of expensive LLM calls 🛡️ 99% spam blocking - Mathematical CAPTCHAs stop bots instantly ⚡ Ultra-efficient
This workflow automatically monitors Facebook Page comments, analyzes them using AI for intent, toxicity & spam, stores moderation results in a database and sends a clear summary report to Slack and T
⚠️ Heads up: this is satire. The "Hell Yeah!" workflow is a parody of "automate your whole life with AI agents" grindset content. The API endpoints are fictional and the function nodes are illustrativ