AutomationFlowsEmail & Gmail › Send Bulk Cold Emails from Google Sheets

Send Bulk Cold Emails from Google Sheets

Original n8n title: Automated Bulk Cold Email Sender Using Gmail, SMTP and Google Sheets

ByGain FLow AI @gain-flow on n8n.io

This workflow automates the process of sending personalized cold email sequences to your prospects. It fetches un-emailed leads from your Google Sheet, validates their email addresses, and then dispatches tailored emails according to a predefined schedule. It updates your CRM…

Cron / scheduled trigger★★★★☆ complexity12 nodesGoogle SheetsGmailEmail Send
Email & Gmail Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ Added:

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

This workflow follows the Emailsend → 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "6afb72ca-c815-4fca-9125-f77d78bc46aa",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -560,
        160
      ],
      "parameters": {
        "options": {},
        "batchSize": "=1"
      },
      "typeVersion": 3
    },
    {
      "id": "c147dbb2-b8fd-4ff5-bd76-7940b1f8ddb2",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        -760,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "630c46c1-bf9a-4634-8ce2-a5bd054d1813",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -380,
        260
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8dc5b028-6f5d-4d76-8852-99180bfb4591",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json['Email Address '] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f6834735-f169-4ba4-86de-9ed5c7221628",
      "name": "Update Records",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        60,
        260
      ],
      "parameters": {
        "columns": {
          "value": {
            "Sent on": "={{ $now }}",
            "Message Id": "={{ $json.id }}",
            "Email Sent ": "Yes",
            "Email Address ": "={{ $('If').first().json['Email Address '] }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Address ",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Address ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sender Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Sender Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Subject",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Body",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Body",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Sent ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Sent ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sent on",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sent on",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Message Id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Message Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email Address "
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk/edit?usp=drivesdk",
          "cachedResultName": "Bulk Sender Template"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "6dd38853-6493-4677-8db2-0df6497aee42",
      "name": "Send Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -140,
        260
      ],
      "parameters": {
        "sendTo": "={{ $json['Email Address '] }}",
        "message": "={{ $json['Email Body'] }}",
        "options": {},
        "subject": "={{ $json['Email Subject'] }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6f4402a7-7519-444f-81a6-fc2600f936cd",
      "name": "Get Emails",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -940,
        360
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "No",
              "lookupColumn": "Email Sent "
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Tq1WP6qf-YHx5odZWHFit1nFvMLSRmxM0-Fkf8mx8zk/edit?usp=drivesdk",
          "cachedResultName": "Bulk Sender Template"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "bdf30635-0665-40cd-bfee-b507c3a67f49",
      "name": "Set Timer",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1120,
        360
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ea3e124e-7a38-4c67-b8a5-e61ec51b3ac6",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        280,
        340
      ],
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "e69107b7-6e00-4854-81cf-17da9b09b5af",
      "name": "connect",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        -1120,
        160
      ],
      "parameters": {
        "text": "={{ $json['Email body'] }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json['Email subject'] }}",
        "toEmail": "={{ $json['Email Address '] }}",
        "fromEmail": "={{ $json['Sender email '] }}",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "960aca19-606e-409b-b187-b1269bfdc907",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1180,
        -40
      ],
      "parameters": {
        "width": 1660,
        "height": 620,
        "content": "# Email Sender"
      },
      "typeVersion": 1
    },
    {
      "id": "85ac89d1-f0b8-4899-98d0-495db2f0018c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1480,
        -40
      ],
      "parameters": {
        "width": 300,
        "height": 620,
        "content": "## 1. Setup Guide\n*  ### Configure the timer node to your desired execution frequency.\n* ### Duplicate the provided [Google Sheet Template](https://docs.google.com/spreadsheets/d/1TjXelyGPg5G8lbPDI9_XOReTzmU1o52z2R3v8dYaoQM/edit?usp=sharing).\n* ### Link the duplicated sheet within both the \"Get Emails\" and \"Update Record\" nodes.\n* ### Select your preferred email sending node and use the \"Limit\" node to manage the volume of emails dispatched.\n\n## 2. Help\n* ### For detailed instructions, please refer to our [Detailed Setup Guide](https://drive.google.com/file/d/1o95RjqpwH_FZc28ajgxJJj5j3u6IyO0w/view?usp=sharing).\n* ### If you require further assistance, contact us via Email at [info.gainflow@gmail.com](mailto:info.gainflow@gmail.com).\n* ### Discover additional practical workflows by clicking [HERE](https://docs.google.com/document/d/1RACo90h-QwKA4hEZSlOQZsyw4iB5-43JM2l0s4lpuoY/edit?usp=sharing)."
      },
      "typeVersion": 1
    },
    {
      "id": "e6679e6b-cb5f-4b31-a05d-87b31dfe018e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1160,
        60
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 260,
        "content": "## Utilize this node for non-Google email services."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Timer": {
      "main": [
        [
          {
            "node": "Get Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Emails": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email": {
      "main": [
        [
          {
            "node": "Update Records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Records": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "If",
            "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 automates the process of sending personalized cold email sequences to your prospects. It fetches un-emailed leads from your Google Sheet, validates their email addresses, and then dispatches tailored emails according to a predefined schedule. It updates your CRM…

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

Automatically extract structured information from emails using AI-powered document analysis. This workflow processes emails from specified domains, classifies them by type, and extracts structured dat

Gmail, HTTP Request, AWS S3 +1
Email & Gmail

This weekly workflow helps you stay on top of SEO visibility losses by automatically detecting when your previously strong keywords fall out of Google’s top 10 results.

N8N Nodes Dataforseo, Google Sheets, Gmail
Email & Gmail

What This Flow Does

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

This n8n workflow sends personalized outreach emails automatically while enforcing strict safety rules such as email validation, spam checks, daily limits, and human-like delays.

Google Drive, Google Sheets, Gmail
Email & Gmail

This n8n template allows you to automatically monitor your company's budget by comparing live Bexio accounting data against targets defined in Google Sheets, sending automated weekly email reports. It

Google Sheets, HTTP Request, Gmail