This workflow corresponds to n8n.io template #10327 — we link there as the canonical source.
This workflow follows the Agent → 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 →
{
"id": "HpfD2OfzgRMPn3Jf",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Post-Service Review Collector",
"tags": [],
"nodes": [
{
"id": "5ad55032-d22a-4bf5-8107-0de7a4b18d57",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-576,
-96
],
"parameters": {},
"typeVersion": 1
},
{
"id": "d3590ccb-048d-45a7-b3df-fb0d73c58206",
"name": "Validate Deal Fetch Success",
"type": "n8n-nodes-base.if",
"position": [
48,
-96
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e2adb005-2b3c-4d1e-8445-442df1fe925a",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "f7322a5c-5d60-491d-8bf2-f9c86cdf6a08",
"name": "Log Errors in Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
368,
480
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "error_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "error_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "error",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "error",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"error_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1338537721,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=1338537721",
"cachedResultName": "error log sheet"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
"cachedResultName": "Interviewer Brief Pack "
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "9ba98d72-ea5f-48f3-a68b-51e888202b77",
"name": "Fetch All Won Deals from HighLevel",
"type": "n8n-nodes-base.highLevel",
"position": [
-224,
-96
],
"parameters": {
"filters": {
"status": "won"
},
"resource": "opportunity",
"operation": "getAll",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "f1c517f9-a54d-4691-ac3f-e7815fe4378b",
"name": "Generate Personalized Review Request Email (AI)",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
448,
-112
],
"parameters": {
"text": "=Generate an HTML-formatted review-request email for a client who has just completed a project with our agency. \nUse the following deal data to personalize the message:\n{{JSON.stringify($json)}}\n\nThe email should:\n1. Address the client by name. \n2. Thank them for working with our agency. \n3. Politely ask for their feedback and a quick public review. \n4. Include two call-to-action buttons:\n - One leading to the Google Review page: https://share.google/W3i4ulISiqRONADvO \n - Another leading to the internal Google Form: https://docs.google.com/forms/d/e/1FAIpQLScot2dbxFrx7jS8oTbQa3HZy9SSUtuB0iYch5U83UNNEwB9_g/viewform?usp=publish-editor \n5. End with a warm closing line from the Techdome team. \nKeep the tone professional, grateful, and concise. \nReturn only the HTML email body\u2014no markdown or explanations.\n",
"options": {
"systemMessage": "=You are an AI email writer for a client-success automation system. \nYour task is to generate short, professional, visually clear HTML emails for clients after their project or service is completed. \nThe tone should be friendly and appreciative, encouraging them to share feedback and public reviews. \nAlways include clickable buttons styled with simple inline CSS (rounded corners, Techdome blue #1263ff). \nDo not use markdown, return only HTML output.\n"
},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "643e6cad-4045-45f6-833b-1571769bc48e",
"name": "Configure GPT-4o Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"position": [
448,
80
],
"parameters": {
"model": "gpt-4o",
"options": {}
},
"credentials": {
"azureOpenAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5f536653-7ba9-449e-a79c-31fefe83c811",
"name": "Send Review Request Email to Client",
"type": "n8n-nodes-base.gmail",
"position": [
848,
-112
],
"parameters": {
"sendTo": "=newscctv22@gmail.com",
"message": "={{ $json.output }}",
"options": {},
"subject": "=Thank You for Working with Techdome .\n"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "2c27e2a5-0daa-40a3-9a89-306166bb2e3f",
"name": "Retrieve Email Thread for Response",
"type": "n8n-nodes-base.gmail",
"position": [
1312,
-112
],
"parameters": {
"options": {},
"resource": "thread",
"threadId": "={{ $json.threadId }}",
"operation": "get"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "c33cb722-a2ef-400e-b593-4322e9b7a946",
"name": "Configure GPT-4o Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"position": [
1568,
128
],
"parameters": {
"model": "gpt-4o",
"options": {}
},
"credentials": {
"azureOpenAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c9a7bf45-e0ba-4cb5-9374-a05098b89981",
"name": " Wait for 24 Hours Before Next Action",
"type": "n8n-nodes-base.wait",
"position": [
1088,
-112
],
"parameters": {
"amount": 24
},
"typeVersion": 1
},
{
"id": "4cfc001b-aa03-4a81-b7f4-e3d7ae01ad68",
"name": "Summarize Client Feedback (AI)",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1568,
-112
],
"parameters": {
"text": "=You are an AI assistant that summarizes client feedback threads for internal Slack updates.\n\nGiven the following Gmail thread JSON:\n{{JSON.stringify($json)}}\n\nCreate a short Slack message in this format:\n\n---\n\ud83c\udf89 *New Client Review Received!*\n\n*Client:* {{ $('Fetch All Won Deals from HighLevel').item.json.name }}\n*Feedback:* {{ $json.messages[1].snippet }}\n*Sentiment:* {{positive/neutral/negative}} \n\n\n---\n\nKeep it concise, human-readable, and formatted for Slack (use Markdown formatting). Do not include HTML or JSON \u2014 return plain text formatted for Slack.\n",
"options": {
"systemMessage": "=You are a client-success AI summarizer. \nYour goal is to turn raw Gmail thread data (including \u201cThank you\u201d replies) into short, clean, Slack-ready summaries. \nFocus on identifying who replied (client name), what they said, and the tone (positive/neutral/negative).\n"
},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "544bd495-5eb1-49e5-9a5f-b0d1a2ddf709",
"name": " Announce Review Summary in Slack",
"type": "n8n-nodes-base.slack",
"position": [
1952,
-112
],
"parameters": {
"text": "={{ $json.output }}",
"user": {
"__rl": true,
"mode": "list",
"value": "U09HMPVD466",
"cachedResultName": "newscctv22"
},
"select": "user",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "12cf47f3-4f3a-4146-a898-e15971639c97",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
-912
],
"parameters": {
"width": 608,
"height": 576,
"content": "## How it works\nThis workflow automates the client-review process after a deal is marked as \u201cWon\u201d in HighLevel CRM. \nIt starts manually or on trigger, retrieves the latest won deals, validates them, and uses Azure OpenAI GPT-4o to create a personalized HTML review-request email. \nThe email thanks the client, includes links to leave a Google Review and fill an internal feedback form, and sends it automatically through Gmail. \nAfter 24 hours, the workflow checks the client\u2019s reply thread, summarizes the feedback tone using GPT-4o, and posts a concise Slack update for the internal team. \nAny API or data errors are recorded in Google Sheets for transparency and debugging.\n\n## Setup steps\n1. Connect these credentials:\n - HighLevel API \n - Azure OpenAI (GPT-4o) \n - Gmail \n - Slack \n - Google Sheets \n2. Replace Sheet IDs and Slack user/channel references. \n3. Update email subject, sender, and review links if needed. \n4. Optionally schedule automatic triggers instead of manual runs. \n5. Test once with a dummy \u201cWon\u201d deal to verify end-to-end flow.\n"
},
"typeVersion": 1
},
{
"id": "3524ab6d-22b6-4abd-abfa-33073738457a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-304
],
"parameters": {
"color": 7,
"width": 624,
"height": 416,
"content": "## Deal Fetch & Validation\nFetches all deals with \u201cWon\u201d status from HighLevel and checks for valid data before proceeding. \nPrevents empty or incomplete deal entries from triggering the AI email generator.\n"
},
"typeVersion": 1
},
{
"id": "28f81e01-fbc4-4e12-aa3d-e343df9ef37e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
-288
],
"parameters": {
"color": 7,
"width": 368,
"height": 512,
"content": "## AI-Powered Email Generation\nUses GPT-4o to craft a personalized, HTML review-request email. \nIncludes thank-you text, brand-styled buttons for Google Reviews and internal feedback, and a warm closing line.\n"
},
"typeVersion": 1
},
{
"id": "d3be7c5b-de2b-4b78-9adc-9ab36c1cde69",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
-336
],
"parameters": {
"color": 7,
"height": 544,
"content": "## Email Delivery\nSends the GPT-generated review-request email through Gmail to the client\u2019s registered address. \nTracks the sent message for later thread retrieval and analysis.\n"
},
"typeVersion": 1
},
{
"id": "6976f94f-eade-4846-8723-5a2eba0e71ac",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
-320
],
"parameters": {
"color": 7,
"width": 432,
"height": 496,
"content": "## Waiting & Feedback Retrieval\nPauses for 24 hours to give clients time to reply, then fetches the full Gmail thread. \nEnsures the latest feedback message is available for sentiment analysis.\n"
},
"typeVersion": 1
},
{
"id": "31e6f968-061d-4796-863f-9f5617a64f2d",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
-352
],
"parameters": {
"color": 7,
"width": 368,
"height": 640,
"content": "## AI Feedback Summarization\nGPT-4o analyzes the client\u2019s response and creates a short Slack-formatted summary. \nCaptures client name, key feedback, and overall sentiment (Positive/Neutral/Negative).\n"
},
"typeVersion": 1
},
{
"id": "0b0535cf-0afc-44bd-ac14-17ae2f83dd82",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
-352
],
"parameters": {
"color": 7,
"height": 464,
"content": "## Slack Announcement\nPosts the summarized client feedback in a Slack channel. \nNotifies the team in real time and helps track post-service satisfaction trends.\n"
},
"typeVersion": 1
},
{
"id": "4d6af1bd-b453-42ac-a491-eb8266b74ba4",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
304
],
"parameters": {
"color": 7,
"height": 416,
"content": "## Error Logging\nAppends any workflow or API issues to a shared Google Sheet. \nMaintains an audit trail for error resolution and workflow reliability checks.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "a5d94f82-72ae-4824-9d7d-751ff361544f",
"connections": {
"Configure GPT-4o Model": {
"ai_languageModel": [
[
{
"node": "Generate Personalized Review Request Email (AI)",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Configure GPT-4o Model1": {
"ai_languageModel": [
[
{
"node": "Summarize Client Feedback (AI)",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Validate Deal Fetch Success": {
"main": [
[
{
"node": "Generate Personalized Review Request Email (AI)",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Errors in Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Summarize Client Feedback (AI)": {
"main": [
[
{
"node": " Announce Review Summary in Slack",
"type": "main",
"index": 0
}
]
]
},
"Fetch All Won Deals from HighLevel": {
"main": [
[
{
"node": "Validate Deal Fetch Success",
"type": "main",
"index": 0
}
]
]
},
"Retrieve Email Thread for Response": {
"main": [
[
{
"node": "Summarize Client Feedback (AI)",
"type": "main",
"index": 0
}
]
]
},
"Send Review Request Email to Client": {
"main": [
[
{
"node": " Wait for 24 Hours Before Next Action",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Fetch All Won Deals from HighLevel",
"type": "main",
"index": 0
}
]
]
},
" Wait for 24 Hours Before Next Action": {
"main": [
[
{
"node": "Retrieve Email Thread for Response",
"type": "main",
"index": 0
}
]
]
},
"Generate Personalized Review Request Email (AI)": {
"main": [
[
{
"node": "Send Review Request Email to Client",
"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.
azureOpenAiApigmailOAuth2googleSheetsOAuth2ApihighLevelOAuth2ApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automation streamlines client review collection and sentiment summarization for Techdome using HighLevel CRM, Azure OpenAI GPT-4o, Gmail, Slack, and Google Sheets. It starts by pulling recently won deals from HighLevel, then generates and sends AI-written HTML review…
Source: https://n8n.io/workflows/10327/ — 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.
This workflow automates end-to-end validation, assessment, and reporting of n8n workflow JSON templates using Google Drive, Azure OpenAI GPT-4o, Gmail, and Slack. It retrieves workflows from a Drive f
Automatically capture customer onboarding help requests from Typeform, log them in Google Sheets, validate email addresses, and send a professional HTML welcome email via Gmail. Ensures smooth onboard
Automate your weekly social media analytics with this end-to-end AI reporting workflow. 📊🤖 This system collects real-time Twitter (X) and Facebook metrics, merges and validates data, formats it with J
This workflow automates a complete CRM → Sheets → AI → Email reporting pipeline for HighLevel opportunities. It fetches fresh opportunity data from HighLevel, validates and normalizes every record, sy
This workflow automates sales performance tracking and motivational updates by integrating HighLevel CRM, Notion, GPT-4o, and Slack. It pulls all deals from HighLevel, cleans and summarizes sales data