AutomationFlowsEmail & Gmail › Send One-time Email Alerts for Urgent Tasks with Google Sheets and Gmail

Send One-time Email Alerts for Urgent Tasks with Google Sheets and Gmail

ByYassin Zehar @yassinzehar on n8n.io

This workflow sends a personalized email when a task in a Google Sheet is marked as Urgent, but only once per task.

Event trigger★★★★☆ complexity9 nodesGoogle Sheets TriggerGoogle SheetsGmail
Email & Gmail Trigger: Event Nodes: 9 Complexity: ★★★★☆ Added:

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

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
{
  "id": "HWh5vnYnX9penlWW",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Send One-Time Email Alerts for Urgent Tasks with Google Sheets and Gmail",
  "tags": [
    {
      "id": "7zEwLFClveXBEcdb",
      "name": "google sheet",
      "createdAt": "2025-08-18T07:16:22.756Z",
      "updatedAt": "2025-08-18T07:16:22.756Z"
    },
    {
      "id": "eAzNESqLUWwWMrE9",
      "name": "gmail",
      "createdAt": "2025-08-18T07:16:22.709Z",
      "updatedAt": "2025-08-18T07:16:22.709Z"
    }
  ],
  "nodes": [
    {
      "id": "3df564ee-8eb5-42f6-876f-331fe9dc7994",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        -608
      ],
      "parameters": {
        "color": 3,
        "width": 304,
        "height": 176,
        "content": "## Required\n\n\u2022 Google sheets credential\n\u2022 Gmail credential"
      },
      "typeVersion": 1
    },
    {
      "id": "39c453ac-1335-4dac-a61b-e8f9753b3f80",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -608
      ],
      "parameters": {
        "width": 560,
        "height": 800,
        "content": "## 1) Trigger, Filter & Row Info\n\nTrigger:\n- Google Sheets Trigger (on change in \"Priority\" column)\n\nFiltering:\n- IF node filters on:\n- Priority = \"Urgent\"\n- Notified is empty\n- row_number exists\n\nBest Practice:\n- Always check __row exists if you plan to update the sheet\n- Prevents sending multiple alerts by using a \"Notified\" status\n- Ensures full automation & reliability"
      },
      "typeVersion": 1
    },
    {
      "id": "5959b1f3-b7d5-4e32-b5ae-031eb81a89d3",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -608
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 800,
        "content": "## 2) Send Email\n\nEmail Node:\n- Personalized message with:\n- Task name\n- Owner\n- Deadline\n- Status\n- Action required\n\n\nBest Practice:\n- Use line breaks (\\n) for formatting in email body.\n- Personalize subject and content to improve clarity and responsiveness.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "39c9bcce-68db-4c16-ba91-532f0d453a11",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        -608
      ],
      "parameters": {
        "color": 4,
        "width": 304,
        "height": 800,
        "content": "## 3) Update Google Sheet\n\nUpdate Row Node:\n\n- Use: row_number = {{ $json.row_number }}\n- Set \"Notified\" to \"Yes\" or timestamp\n\nBest Practice:\n- Update a value to track that the email was sent\n- Avoids sending duplicates next time the sheet is updated\n- Makes your system state-aware"
      },
      "typeVersion": 1
    },
    {
      "id": "66e98b88-3ec6-4209-a857-3abf6f457631",
      "name": "Trigger when Urgent status",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        208,
        0
      ],
      "parameters": {
        "options": {
          "columnsToWatch": [
            "Priority"
          ]
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit?usp=drivesdk",
          "cachedResultName": "Reporting"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a4c3475f-63d3-49a0-b37f-34ba65c46c46",
      "name": "Get the row number",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        416,
        0
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit?usp=drivesdk",
          "cachedResultName": "Reporting"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "aef49d06-bd28-4073-a69c-a4ab005919e6",
      "name": "Condition to send the email",
      "type": "n8n-nodes-base.if",
      "position": [
        624,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bd3dbdbd-84b2-4a29-bc65-a0475de280bf",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{$json[\"Priority\"]}}",
              "rightValue": "Urgent"
            },
            {
              "id": "f3335fe7-b942-4489-b9d0-1df7e44ed103",
              "operator": {
                "type": "number",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.row_number }}",
              "rightValue": ""
            },
            {
              "id": "ffc346a2-3d88-47af-8215-b4c2f0e8e42e",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json.Notified }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "23712547-0846-477d-b318-c6ef38f3decf",
      "name": "Email alert",
      "type": "n8n-nodes-base.gmail",
      "position": [
        832,
        -144
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=Hi,<br><br>\nA task has been marked as <b>Urgent</b> in the project tracking sheet.<br><br>\n\ud83d\udccc <b>Task:</b> {{$json[\"Task\"]}}<br>\n\ud83d\udc64 <b>Owner:</b> {{$json[\"Owner\"]}}<br>\n\ud83d\udcc5 <b>Deadline:</b> {{$json[\"Deadline\"]}}<br>\n\ud83d\udccb <b>Status:</b> {{$json[\"Status\"]}}<br>\n\ud83e\udded <b>Next Step:</b> {{$json[\"Next step\"]}}<br><br>\nPlease review this task as soon as possible.<br><br>\n\u2014<br>",
        "options": {},
        "subject": "A critical task has been flagged in the project sheet"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c950b5b0-50e5-426d-8b3e-c84eb53d46a6",
      "name": "Update row avoiding spam",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1040,
        -144
      ],
      "parameters": {
        "columns": {
          "value": {
            "Notified": "Yes",
            "row_number": "={{ $('Get the row number').item.json.row_number }}"
          },
          "schema": [
            {
              "id": "Task",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Task",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Owner",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Owner",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Deadline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Deadline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Next step",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Next step",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Priority",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Priority",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notified",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Notified",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "threadId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "threadId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "labelIds",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "labelIds",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a4_uY_GzzCkLRdF2yy9mT0TQj5bXsrxOBEWnGO68M9U/edit?usp=drivesdk",
          "cachedResultName": "Reporting"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "76e92de7-a1b6-4147-9087-de7b18d2467c",
  "connections": {
    "Email alert": {
      "main": [
        [
          {
            "node": "Update row avoiding spam",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get the row number": {
      "main": [
        [
          {
            "node": "Condition to send the email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger when Urgent status": {
      "main": [
        [
          {
            "node": "Get the row number",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Condition to send the email": {
      "main": [
        [
          {
            "node": "Email alert",
            "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 sends a personalized email when a task in a Google Sheet is marked as Urgent, but only once per task.

Source: https://n8n.io/workflows/9324/ — 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 processes new orders added to Google Sheets. Small orders are approved instantly; large orders trigger an HTML email with one-click Approve / Reject links — each handled by an independen

Google Sheets Trigger, Google Sheets, Gmail +1
Email & Gmail

General use cases include: Property managers who manage multiple buildings or units. Building owners looking to centralize tenant repair communication. Automation builders who want to learn multi-trig

Google Sheets, Google Drive, Gmail +1
Email & Gmail

FlujoDeReservasUpdated. Uses googleSheetsTrigger, googleSheets, googleCalendar, gmail. Event-driven trigger; 27 nodes.

Google Sheets Trigger, Google Sheets, Google Calendar +1
Email & Gmail

This workflow automates the full offer letter lifecycle, from generation to final candidate response tracking. When a new row with a Pending status is added to Google Sheets, it creates a personalized

Google Sheets Trigger, Google Drive, Google Docs +2
Email & Gmail

Hiring teams often struggle with document follow-ups, offer letter generation, and stakeholder communication. Manual checks, email back-and-forth, and missing files slow down hiring and create chaos d

Google Sheets Trigger, HTTP Request, Slack +3