This workflow corresponds to n8n.io template #8797 — we link there as the canonical source.
This workflow follows the Chat Trigger → Gmail 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "96056900-7870-4d4e-91a6-2f64177c7109",
"name": "MINDANAO",
"type": "n8n-nodes-base.googleSheets",
"position": [
-144,
240
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1968569642,
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit#gid=1968569642",
"cachedResultName": "Mindanao"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1dNEKLvwSBgUvMJd1ekxz-R5_RN3ewlJTCOIHW4-bhIQ",
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit?usp=drivesdk",
"cachedResultName": "PH HOSPITALs"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "e78171fa-2463-478c-a9f4-03eebbda963d",
"name": "VISAYAS FILES",
"type": "n8n-nodes-base.googleSheets",
"position": [
-144,
48
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.hospital }}",
"lookupColumn": "Hospital Name"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 822141156,
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit#gid=822141156",
"cachedResultName": "Visayas"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1dNEKLvwSBgUvMJd1ekxz-R5_RN3ewlJTCOIHW4-bhIQ",
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit?usp=drivesdk",
"cachedResultName": "PH HOSPITALs"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "d9705318-8318-46f9-bff3-2bdb2f0ca121",
"name": "LUZON FILES",
"type": "n8n-nodes-base.googleSheets",
"position": [
-144,
-144
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.hospital }}",
"lookupColumn": "Hospital Name"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 678847961,
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit#gid=678847961",
"cachedResultName": "Luzon"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1dNEKLvwSBgUvMJd1ekxz-R5_RN3ewlJTCOIHW4-bhIQ",
"cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-R5_RN3ewlJTCOIHW4-bhIQ/edit?usp=drivesdk",
"cachedResultName": "PH HOSPITALs"
}
},
"typeVersion": 4.7
},
{
"id": "b19960c1-5e4b-4a81-adc3-be75854ef747",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-1040,
216
],
"parameters": {
"options": {}
},
"typeVersion": 1.3
},
{
"id": "3821c377-95eb-42ca-8d97-e6c4d7379016",
"name": "Hospital Parser",
"type": "n8n-nodes-base.code",
"position": [
-816,
216
],
"parameters": {
"jsCode": "const rawText = $input.first().json.chatInput;\nconst lines = rawText.split('\\n').filter(line => line.trim() !== '');\nconst region = lines[0] || 'Unknown';\nconst hospitals = lines.slice(1);\n\n// Return one item per hospital\nreturn hospitals.map(h => ({\n json: {\n region: region,\n hospital: h\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "f13b30e3-2df2-4dc9-86b3-e0bd7012ecc9",
"name": "Batch Sender",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-592,
216
],
"parameters": {
"options": {
"reset": false
}
},
"typeVersion": 3
},
{
"id": "d3c1de1b-d9e8-467a-ab7a-e8f2478b6c9a",
"name": "Region Switcher",
"type": "n8n-nodes-base.switch",
"position": [
-368,
32
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "89b82ead-f3b3-49dc-bdd8-f4099fdb59cf",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.region }}",
"rightValue": "=LUZON"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3930e266-a3c8-4c92-82f2-93d4cf6e840c",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.region }}",
"rightValue": "=VISAYAS"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8048a6d6-54c1-4fe9-80e6-c56cd5392c53",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.region }}",
"rightValue": "=MINDANAO"
}
]
}
}
]
},
"options": {
"ignoreCase": true,
"allMatchingOutputs": false
}
},
"typeVersion": 3.2
},
{
"id": "2119f413-e8cb-40a6-af1f-fddfd0b56700",
"name": "Send Gmail Message",
"type": "n8n-nodes-base.gmail",
"position": [
80,
136
],
"parameters": {
"sendTo": "={{ $json['Main Email'] }}",
"message": "=<p>Dear {{ $json[\"Hospital Name\"] }},</p>\n\n<p>My name is {{ $json[\"Your Name\"] }}, a {{ $json[\"Your Credentials\"] }}.</p>\n\n<p>During a recent hospital admission, I personally experienced the challenges of paper-based real-time billing\u2014waiting for updated estimates, relying on manual printouts, and facing delays when clarity was needed most. This inspired me to build a working demo system tailored for hospitals like {{ $json[\"Sample Hospitals\"] }}.</p>\n\n<p><b>Here\u2019s a quick overview of what I built:</b></p>\n\n<p>\ud83d\udcf9 Video 1: {{ $json[\"Video Link 1\"] }}</p>\n<p>\ud83d\udcf9 Video 2: {{ $json[\"Video Link 2\"] }}</p>\n<p>\ud83d\udcf9 Video 3: {{ $json[\"Video Link 3\"] }}</p>\n\n<p>\u2705 Patients can receive secure login credentials by email and check their real-time running bill anytime.<br>\n\u2705 The hospital can save costs by reducing paper use while improving transparency.<br>\n\u2705 Admin staff can manage patients and services from a centralized panel.</p>\n\n<p>Would you be available this week for a quick discussion?</p>\n\n<p>--<br>\nBest regards,<br>\n{{ $json[\"Your Name\"] }}<br>\n{{ $json[\"Your Contact\"] }}</p>\n",
"options": {},
"subject": "=Letter of Intent: {{ $json['Hospital Name'] }}"
},
"typeVersion": 2.1
},
{
"id": "e93525d1-ab66-47f7-ab98-77594a58b622",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1416,
-368
],
"parameters": {
"width": 1728,
"height": 768,
"content": "### **For the MAIN YELLOW Sticky Note (Place at the top of your workflow):**\n**Hospital Outreach Automation**\nThis workflow automates personalized email outreach to hospitals. \nSend a chat message where the first line is the region (LUZON, VISAYAS, MINDANAO) and each following line is a hospital name. \nThe workflow will look up each hospital's email from a Google Sheet and send a personalized message via Gmail."
},
"typeVersion": 1
},
{
"id": "6545ccf7-b4a2-4f59-829a-d637479776ff",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1392,
-176
],
"parameters": {
"color": 4,
"width": 464,
"height": 304,
"content": "**SETUP REQUIRED:**\n1. **Set up credentials** for Google Sheets and Gmail.\n2. **Replace the Google Sheet ID** in the 'Set Configuration' node with your own. Use our template structure.\n3. **Customize the email template** in the 'Send Gmail Message' node to match your message.\n\n**How to use:**\n1. Activate the workflow.\n2. Send a chat input in the following format:\n `LUZON`\n `St. Luke's Medical Center`\n `Makati Medical Center`\n `Philippine General Hospital`\n\n---"
},
"typeVersion": 1
},
{
"id": "8652c245-c942-436a-b037-051efecba80a",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
-176
],
"parameters": {
"color": 4,
"width": 352,
"height": 80,
"content": "Youtube Tutorial: https://www.youtube.com/embed/5u9W-Iegq6k"
},
"typeVersion": 1
}
],
"connections": {
"MINDANAO": {
"main": [
[
{
"node": "Send Gmail Message",
"type": "main",
"index": 0
}
]
]
},
"LUZON FILES": {
"main": [
[
{
"node": "Send Gmail Message",
"type": "main",
"index": 0
}
]
]
},
"Batch Sender": {
"main": [
[],
[
{
"node": "Region Switcher",
"type": "main",
"index": 0
}
]
]
},
"VISAYAS FILES": {
"main": [
[
{
"node": "Send Gmail Message",
"type": "main",
"index": 0
}
]
]
},
"Hospital Parser": {
"main": [
[
{
"node": "Batch Sender",
"type": "main",
"index": 0
}
]
]
},
"Region Switcher": {
"main": [
[
{
"node": "LUZON FILES",
"type": "main",
"index": 0
}
],
[
{
"node": "VISAYAS FILES",
"type": "main",
"index": 0
}
],
[
{
"node": "MINDANAO",
"type": "main",
"index": 0
}
]
]
},
"Send Gmail Message": {
"main": [
[
{
"node": "Batch Sender",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Hospital Parser",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates personalized email outreach to a list of hospitals. It uses a chat-based interface to accept a region and a list of hospital names, looks up their specific contact details from a structured Google Sheet, and sends a tailored email via Gmail.
Source: https://n8n.io/workflows/8797/ — 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.
"I used to spend hours every week just copy-pasting product descriptions to find the right tariff codes for our international shipments. It was tedious and prone to errors." - Accounting specialist.
📄 Documentation: Notion Guide
This workflow is a powerful, two-phase system designed to automate the entire passive candidate sourcing and engagement cycle.
Every weekday morning, the workflow reads your prospect list from Google Sheets and cross-checks it against a send log — anyone already emailed is automatically skipped Each new contact is assigned on
How It Works Starts with a Manual Trigger Reads lead list from Google Sheet Filter rows where email wasn’t sent Generate personalized email body (AI) Generate email subject line (AI) Merge AI outputs