{
  "id": "s951UK7G69MAuTHV",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Send personalized emails & mail merge from Google Sheets using only n8n",
  "tags": [],
  "nodes": [
    {
      "id": "8d874f7d-9a9a-479f-a51d-eca7dca507af",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "937434fd-cd26-4c6d-b788-99cead31737e",
      "name": "Read Google Sheets data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        208,
        0
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2d7f4ab3-6626-4b72-9c23-a4d14d838658",
      "name": "Pass on \"Scheduled for send\" to Gmail",
      "type": "n8n-nodes-base.filter",
      "position": [
        432,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "236cac52-bf68-49e6-adbf-86e7c1470c99",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "",
              "rightValue": "Scheduled for send"
            },
            {
              "id": "029830d9-16ca-40b8-a20e-128c770a4828",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "",
              "rightValue": ""
            },
            {
              "id": "b80dfc3d-8039-43b2-8556-38334afa2093",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "",
              "rightValue": ""
            },
            {
              "id": "368c2ab5-9011-4c85-8c84-0319c246844a",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "",
              "rightValue": ""
            },
            {
              "id": "09783ef6-7231-46fb-8eb2-3a4855374387",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "99dfabeb-05a3-4dd9-a8f5-3ae169f312d1",
      "name": "Send an email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        688,
        0
      ],
      "parameters": {
        "options": {},
        "emailType": "text"
      },
      "typeVersion": 2.1
    },
    {
      "id": "0758ae59-6c2c-47a9-ae2a-123efd8d70f4",
      "name": "Combine both datasets",
      "type": "n8n-nodes-base.merge",
      "position": [
        928,
        -16
      ],
      "parameters": {
        "mode": "combine",
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "5d7c72f1-5d22-40b0-badf-213220585959",
      "name": "Pass data from Gmail",
      "type": "n8n-nodes-base.set",
      "position": [
        1136,
        -16
      ],
      "parameters": {
        "include": "selected",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3e7a0b30-eecb-4a59-b49a-2434bb27fbc9",
              "name": "",
              "type": "string",
              "value": ""
            },
            {
              "id": "226aec82-7ad2-4d80-b65f-5b44a6bf0e75",
              "name": "",
              "type": "string",
              "value": ""
            },
            {
              "id": "4f1b496e-ba43-4dbd-8fd0-7271d7d13aff",
              "name": "",
              "type": "string",
              "value": ""
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "28266b4f-55f2-46c0-bbe8-c47af0f62d6a",
      "name": "Update Status email column",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1360,
        -16
      ],
      "parameters": {
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "dc668bea-e4e3-40f4-be8e-274b23a7ed33",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 1456,
        "height": 320,
        "content": "## Mail merge or send email from Google Sheets\nSend personalized emails & mail merge from Google Sheets using only n8n\n\nThe workflow connects Google Sheets with Gmail to let you send emails in either of two ways:\n1. Bulk emails (mail merge): Use data from your sheet to send an email to multiple email addresses, one by one.\n2. Triggered emails: Automatically send an email whenever specific values or conditions in your sheet are met. No need to manually copy, paste, or switch to Gmail, because the process is fully automated.\n\n## How to set it up\n1. Copy [this template](https://docs.google.com/spreadsheets/d/1fWg_GOU0m_2cQpah7foDiz1WqTRKjCbJJCLBGCvJlXc/edit?usp=sharing) into your personal n8n workspace.\n2. Customize the email nodes with your subject line, body text, and variables (e.g., names or links from your sheet).\n3. For a step-by-step walkthrough, check out [this video guide on YouTube](https://www.youtube.com/watch?v=XJQ0W3yWR-0)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "76d6078e-16bf-463c-bef5-5e78033fcaf7",
  "connections": {
    "Send an email": {
      "main": [
        [
          {
            "node": "Combine both datasets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Read Google Sheets data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pass data from Gmail": {
      "main": [
        [
          {
            "node": "Update Status email column",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine both datasets": {
      "main": [
        [
          {
            "node": "Pass data from Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Google Sheets data": {
      "main": [
        [
          {
            "node": "Pass on \"Scheduled for send\" to Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pass on \"Scheduled for send\" to Gmail": {
      "main": [
        [
          {
            "node": "Send an email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Combine both datasets",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}