AutomationFlowsEmail & Gmail › Bulk-email-sender (google Sheets)

Bulk-email-sender (google Sheets)

bulk-email-sender. Uses googleSheets, gmail. Webhook trigger; 22 nodes.

Webhook trigger★★★★☆ complexity22 nodesGoogle SheetsGmail
Email & Gmail Trigger: Webhook Nodes: 22 Complexity: ★★★★☆ Added:

This workflow follows the Gmail → Google Sheets 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
{
  "active": true,
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Get Date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Date": {
      "main": [
        [
          {
            "node": "Save Campaign",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Campaign": {
      "main": [
        [
          {
            "node": "Get Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Replace Variables and Generate Signatured Body",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Emails": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Replace Variables and Generate Signatured Body": {
      "main": [
        [
          {
            "node": "Include CC and BCC Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Include CC and BCC Emails": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update row in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Audience Size": {
      "main": [
        [
          {
            "node": "Get Emails - Audience",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Emails - Audience": {
      "main": [
        [
          {
            "node": "Count Rows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count Rows": {
      "main": [
        [
          {
            "node": "Respond to Webhook1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "Respond to Webhook2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Sent Campaigns": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Sent Campaigns - Hook": {
      "main": [
        [
          {
            "node": "Get Sent Campaigns",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "createdAt": "2025-11-03T07:11:11.083Z",
  "id": "ws89f3JWZFNuaZo6",
  "isArchived": false,
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "bulk-email-sender",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "start-campaign",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -976,
        48
      ],
      "id": "4ba2e004-486b-425f-9b48-a285438255ac",
      "name": "Webhook"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "{\n  \"isCampaignStarted\": true\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.4,
      "position": [
        -320,
        -224
      ],
      "id": "b6b378f8-3e60-419d-80ed-8e4e0c286cbf",
      "name": "Respond to Webhook"
    },
    {
      "parameters": {
        "jsCode": "// Function Item\nconst now = new Date();\n\nconst formatter = new Intl.DateTimeFormat('tr-TR', {\n  timeZone: 'Europe/Istanbul',\n  day: '2-digit',\n  month: '2-digit',\n  year: 'numeric',\n});\n\nconst formatted = formatter.format(now);\n\nreturn {\n  date: formatted,\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -768,
        48
      ],
      "id": "1678f08b-0278-478b-af1c-2b9424d30a18",
      "name": "Get Date"
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 451757871,
          "mode": "list",
          "cachedResultName": "sent-campaigns",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=451757871"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "campaign_id": "={{ $('Webhook').item.json.body.campaign_id }}",
            "email_subject": "={{ $('Webhook').item.json.body.email_subject }}",
            "email_body": "={{ $('Webhook').item.json.body.email_body }}",
            "email_signature": "={{ $('Webhook').item.json.body.email_signature }}",
            "CC": "={{ $('Webhook').item.json.body.CC }}",
            "BCC": "={{ $('Webhook').item.json.body.BCC }}",
            "total_sent": "0",
            "date_started": "={{ $json.date }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "campaign_id",
              "displayName": "campaign_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "email_subject",
              "displayName": "email_subject",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "email_body",
              "displayName": "email_body",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "email_signature",
              "displayName": "email_signature",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "CC",
              "displayName": "CC",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "BCC",
              "displayName": "BCC",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "total_audience",
              "displayName": "total_audience",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "total_sent",
              "displayName": "total_sent",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "date_started",
              "displayName": "date_started",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -336,
        48
      ],
      "id": "a78fcd9f-0de7-4d33-8580-bd1ec788faaa",
      "name": "Save Campaign",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        176,
        48
      ],
      "id": "ab4d2e2a-ddbe-41a3-aead-b00c4215d26d",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "main",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=0"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -128,
        48
      ],
      "id": "47aad9ec-9051-40e9-89ee-ddadcb6aadbd",
      "name": "Get Emails",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sendTo": "={{ $('Loop Over Items').item.json['Email Address '] }}",
        "subject": "={{ $('Webhook').item.json.body.email_subject }}",
        "message": "={{ $('Replace Variables and Generate Signatured Body').item.json.fullBody }}",
        "options": {
          "appendAttribution": false,
          "bccList": "={{ $json.BCC }}",
          "ccList": "={{ $json.CC }}"
        }
      },
      "id": "3341fa46-11ef-4aac-9d7e-5662e23cf959",
      "name": "Send Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        912,
        64
      ],
      "typeVersion": 2.1,
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// De\u011ferleri bir \u00f6nceki node'dan al (\u00f6rnek node ad\u0131: \"Get Data\")\nconst name = $input.first().json.Name || \"\";\n\n// Mail g\u00f6vdesi (\u00f6rnek)\nlet mailBody = $('Webhook').first().json.body.email_body ;\n\n// \u0130mza (\u00f6rnek)\nlet signature = $('Webhook').first().json.body.email_signature;\n\n// De\u011fi\u015fkenleri mailBody'de de\u011fi\u015ftir\nmailBody = mailBody\n  .replace(/{{name}}/g, name);\n\n// G\u00f6vde ve imzay\u0131 alt alta birle\u015ftir\nconst fullBody = `${mailBody}\\n\\n${signature}`;\n\nreturn [\n  {\n    json: {\n      name,\n      fullBody\n    }\n  }\n];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        448,
        64
      ],
      "id": "b9e9032f-a88e-4422-a5b8-3a10728746f7",
      "name": "Replace Variables and Generate Signatured Body"
    },
    {
      "parameters": {
        "jsCode": "// \"Get Settings\" node'undan al\nconst CC_raw  = $('Webhook').first().json.body.CC;\nconst BCC_raw = $('Webhook').first().json.body.BCC;\n\nfunction toCommaString(input) {\n  let arr = [];\n\n  // 1) Dizi ise direkt kullan\n  if (Array.isArray(input)) {\n    arr = input;\n  } else if (typeof input === 'string') {\n    const s = input.trim();\n\n    // 2) Stringle\u015ftirilmi\u015f JSON dizi mi? => parse et\n    if ((s.startsWith('[') && s.endsWith(']')) || (s.startsWith('[\"') && s.endsWith('\"]'))) {\n      try {\n        const parsed = JSON.parse(s);\n        if (Array.isArray(parsed)) arr = parsed;\n        else arr = [s];\n      } catch {\n        // JSON parse ba\u015far\u0131s\u0131zsa CSV gibi b\u00f6l\n        arr = s.split(/[,\\s;]+/);\n      }\n    } else {\n      // 3) Normal CSV / bo\u015fluk / ; ile b\u00f6l\n      arr = s.split(/[,\\s;]+/);\n    }\n  } else if (input == null) {\n    arr = [];\n  } else {\n    arr = [String(input)];\n  }\n\n  // 4) Her bir girdiden email'i \u00e7\u0131kar (Name <mail@host> format\u0131n\u0131 da destekler)\n  const emails = arr\n    .map(v => String(v).trim())\n    .map(v => {\n      // <mail@host> varsa i\u00e7ini al\n      const mAngle = v.match(/<([^>]+)>/);\n      if (mAngle) return mAngle[1].trim();\n      return v.replace(/^\"+|\"+$/g, ''); // \u00e7evredeki \u00e7ift t\u0131rnaklar\u0131 temizle\n    })\n    // basit e-posta regex do\u011frulamas\u0131\n    .map(v => {\n      const m = v.match(/([A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,})/i);\n      return m ? m[1] : '';\n    })\n    .filter(Boolean);\n\n  // 5) Tekrars\u0131zla\u015ft\u0131r + virg\u00fcl ile ve BO\u015eLUKSUZ birle\u015ftir\n  const unique = Array.from(new Set(emails));\n  return unique.join(',');\n}\n\nconst CC  = toCommaString(CC_raw);\nconst BCC = toCommaString(BCC_raw);\n\nreturn [{ json: { CC, BCC } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        688,
        64
      ],
      "id": "0cacb08f-c049-4cd4-9566-0a9dc16bf240",
      "name": "Include CC and BCC Emails"
    },
    {
      "parameters": {
        "amount": 3
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1120,
        64
      ],
      "id": "d89a0871-b601-47af-8d2c-b54b8511e4f9",
      "name": "Wait"
    },
    {
      "parameters": {
        "jsCode": "// Function\nconst n =  $input.first().json.total_sent || 0; // \u00f6rn: 5\nconst inc = Number(n) + 1;\n\nreturn [\n  {\n    json: {\n      number: inc,\n    },\n  },\n];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1536,
        64
      ],
      "id": "c60d5863-9fae-412e-b810-69c2d3ccaad5",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 451757871,
          "mode": "list",
          "cachedResultName": "sent-campaigns",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=451757871"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "campaign_id": "={{ $('Webhook').item.json.body.campaign_id }}",
            "total_sent": "={{ $json.number }}"
          },
          "matchingColumns": [
            "campaign_id"
          ],
          "schema": [
            {
              "id": "campaign_id",
              "displayName": "campaign_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "email_subject",
              "displayName": "email_subject",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "email_body",
              "displayName": "email_body",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "email_signature",
              "displayName": "email_signature",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "CC",
              "displayName": "CC",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "BCC",
              "displayName": "BCC",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "total_audience",
              "displayName": "total_audience",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "total_sent",
              "displayName": "total_sent",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "date_started",
              "displayName": "date_started",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1744,
        64
      ],
      "id": "ff9d9a09-1abf-4526-8348-c7913fa18bfb",
      "name": "Update row in sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 451757871,
          "mode": "list",
          "cachedResultName": "sent-campaigns",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=451757871"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "campaign_id",
              "lookupValue": "={{ $('Save Campaign').item.json.campaign_id }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1328,
        64
      ],
      "id": "6df5c02d-c0a2-4de8-abab-0de332db551e",
      "name": "Get row(s) in sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"mailCount\": {{ $json.rowCount }}\n} ",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.4,
      "position": [
        -336,
        352
      ],
      "id": "8d08551f-79a2-4d0b-9095-693bd9b4b683",
      "name": "Respond to Webhook1"
    },
    {
      "parameters": {
        "path": "campaign-preview",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -992,
        352
      ],
      "id": "24ac5717-1c5f-4d3e-9ceb-7c594cdb43c7",
      "name": "Audience Size"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "main",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=0"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -752,
        352
      ],
      "id": "bf5ceba2-c814-4546-aa9d-a0b59e47b316",
      "name": "Get Emails - Audience",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Function node\nconst rowCount = items.length; // Google Sheets'ten gelen sat\u0131r adedi\nreturn [\n  { json: { rowCount } },\n];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -544,
        352
      ],
      "id": "8ce825cc-b222-4d71-89ad-ef11079ff48a",
      "name": "Count Rows"
    },
    {
      "parameters": {
        "amount": 1
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        -560,
        48
      ],
      "id": "fd4a978f-ce97-442a-9009-be45268a2ffe",
      "name": "Wait1"
    },
    {
      "parameters": {
        "maxItems": 100
      },
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        -592,
        592
      ],
      "id": "bec174ea-ff6c-42e6-a197-f6a43f412ced",
      "name": "Limit"
    },
    {
      "parameters": {
        "respondWith": "allIncomingItems",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.4,
      "position": [
        -384,
        592
      ],
      "id": "c2fbb289-7a4d-4fe4-a4ff-4c92c1c690e5",
      "name": "Respond to Webhook2"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg",
          "mode": "list",
          "cachedResultName": "bulk-email",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 451757871,
          "mode": "list",
          "cachedResultName": "sent-campaigns",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14vaFJk4IuqMNP4KCQTepGrYbsNuYV5xkqLOu__52Jdg/edit#gid=451757871"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -800,
        592
      ],
      "id": "3edb373a-54d6-45b4-8f45-983246aa6c05",
      "name": "Get Sent Campaigns",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "path": "sent-campaigns",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -1008,
        592
      ],
      "id": "1c61f426-3bae-403a-8ca1-a9bbe4d88d91",
      "name": "Get Sent Campaigns - Hook"
    }
  ],
  "origin": "n8n",
  "repo": {
    "owner": "octaworksofficial",
    "name": "n8n"
  },
  "settings": {
    "executionOrder": "v1"
  },
  "shared": [
    {
      "createdAt": "2025-11-03T07:11:11.087Z",
      "updatedAt": "2025-11-03T07:11:11.087Z",
      "role": "workflow:owner",
      "workflowId": "ws89f3JWZFNuaZo6",
      "projectId": "1jTilK588wM2KuJy"
    }
  ],
  "staticData": null,
  "tags": [],
  "triggerCount": 3,
  "updatedAt": "2025-11-03T14:14:36.000Z",
  "versionId": "3d316fea-0111-472f-9b26-0ae69284f866"
}

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

bulk-email-sender. Uses googleSheets, gmail. Webhook trigger; 22 nodes.

Source: https://github.com/octaworksofficial/n8n/blob/20a248338297da94c67a12b0db3035f88d91a82f/ws89f3JWZFNuaZo6.json — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Automate WhatsApp communication for recruitment agencies with an interactive, structured customer experience. This workflow handles pricing inquiries, request submissions, tracking, complaints, and hu

HTTP Request, Google Sheets, Gmail +1
Email & Gmail

Code. Uses googleSheets, gmail, supabase, stickyNote. Webhook trigger; 51 nodes.

Google Sheets, Gmail, Supabase +1
Email & Gmail

This template turns Podium's conversation inbox into a full sales CRM with a custom funnel, AI message classification, automated drip follow-ups, daily admin reports, and a live Kanban dashboard. Six

HTTP Request, Google Sheets, Gmail
Email & Gmail

Ticketing Backend automates registration, QR-ticket generation, email delivery, and check-in validation using Google Sheets, Gmail, and a webhook scanner — reducing manual ticket prep from ~3 hours to

Google Sheets, HTTP Request, Gmail
Email & Gmail

&gt; n8n + Gmail + Google Sheets + Typeform

Gmail, Google Sheets