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 →
{
"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.
gmailOAuth2googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2Api
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
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
FlujoDeReservasUpdated. Uses googleSheetsTrigger, googleSheets, googleCalendar, gmail. Event-driven trigger; 27 nodes.
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
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