This workflow corresponds to n8n.io template #12621 — we link there as the canonical source.
This workflow follows the Google Docs → 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": "eyPvFjW5uNRDYDT1",
"name": "Post-Event Survey Analyzer",
"tags": [],
"nodes": [
{
"id": "926bb1d8-a233-4625-8818-6a73985ca9d9",
"name": "Section 1: Trigger & Configuration",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
1408
],
"parameters": {
"color": 6,
"width": 592,
"height": 636,
"content": "## 1. Trigger & Configuration\n\nTwo trigger options for receiving survey responses:\n- **Webhook:** Instant \u2014 Google Forms sends POST to n8n webhook URL\n- **Sheets Trigger:** Polls the responses spreadsheet for new rows\n\nThe configuration node sets workflow-level variables: event name, Slack channel, Google Doc ID, and spreadsheet ID."
},
"typeVersion": 1
},
{
"id": "1d917b13-595d-4193-9e54-c640f077383c",
"name": "Section 2: Normalize Survey Fields",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
1408
],
"parameters": {
"color": 4,
"width": 348,
"height": 632,
"content": "## 2. Normalize Survey Fields\n\nMaps incoming survey data to a consistent schema for AI processing.\n\n**Required fields:**\n- `rating` \u2014 Numeric rating (1\u201310)\n- `likedMost` \u2014 What attendees enjoyed\n- `improvements` \u2014 Suggested changes\n- `jobRole` \u2014 Attendee job title\n- `companySize` \u2014 Company size category\n\n**Adjust field names in the Normalize Survey Response node to match your form structure.**"
},
"typeVersion": 1
},
{
"id": "8458e476-3bf0-4ede-8f1a-79d2aee6ccd4",
"name": "Reference: AI Prompt Customization",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
2064
],
"parameters": {
"color": 2,
"width": 992,
"height": 692,
"content": "## AI Prompt Customization\n\nCustomize the AI analysis by modifying the Information Extractor nodes:\n\n**Individual Response Analysis:**\n- Sentiment: Positive / Neutral / Negative\n- Key points liked (1\u20132 bullets)\n- Improvement suggestions (1\u20132 bullets)\n- Testimonial quote (optional)\n\n**Aggregate Summary:**\n- Overall sentiment trend\n- Top 5 recurring themes\n- Top 5 action items\n- Executive summary\n\n**Modify the schema in both AI nodes to match your analysis needs.**"
},
"typeVersion": 1
},
{
"id": "05f70e9d-9504-4878-b3c2-ba2dce51748c",
"name": "Section 7: Aggregate All Responses",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
2064
],
"parameters": {
"color": 2,
"width": 604,
"height": 688,
"content": "## 7. Aggregate All Responses\n\nTriggered when aggregation mode is enabled. Fetches all survey responses from Google Sheets, calculates the average rating, and sends the full dataset to GPT-4o for an executive summary with top themes and action items.\n\nResults are posted to Slack and appended to the Google Doc."
},
"typeVersion": 1
},
{
"id": "a8eb1faf-9e7a-4511-96a6-cff09b408f8a",
"name": "Poll Google Sheets for Responses",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-176,
1872
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 241304647,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cawaUvCrWVja0IMWv_Miw07clxfQVAdB_abqseqhko0/edit#gid=241304647",
"cachedResultName": "Process_Mapping_Template"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1cawaUvCrWVja0IMWv_Miw07clxfQVAdB_abqseqhko0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cawaUvCrWVja0IMWv_Miw07clxfQVAdB_abqseqhko0/edit?usp=drivesdk",
"cachedResultName": "Discovery Database"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "60d9c07c-f0ae-4875-9c44-f6068caffcbf",
"name": "Set Workflow Variables",
"type": "n8n-nodes-base.set",
"position": [
-16,
1776
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "eventName",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Event name (e.g., Tech Summit 2024)__>"
},
{
"id": "id-2",
"name": "slackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Slack channel ID for #event-feedback__>"
},
{
"id": "id-3",
"name": "googleDocId",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Google Doc ID for feedback report__>"
},
{
"id": "id-4",
"name": "spreadsheetId",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Google Sheets ID (optional, for aggregation)__>"
},
{
"id": "id-5",
"name": "aggregationMode",
"type": "boolean",
"value": false
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "4ee05737-ac4b-4bda-9951-1df5e2f7a548",
"name": "Normalize Survey Response",
"type": "n8n-nodes-base.set",
"position": [
448,
1760
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "rating",
"type": "number",
"value": "={{ $json.body?.rating || $json.rating || 0 }}"
},
{
"id": "id-2",
"name": "likedMost",
"type": "string",
"value": "={{ $json.body?.likedMost || $json.likedMost || \"\" }}"
},
{
"id": "id-3",
"name": "improvements",
"type": "string",
"value": "={{ $json.body?.improvements || $json.improvements || \"\" }}"
},
{
"id": "id-4",
"name": "jobRole",
"type": "string",
"value": "={{ $json.body?.jobRole || $json.jobRole || \"Not specified\" }}"
},
{
"id": "id-5",
"name": "companySize",
"type": "string",
"value": "={{ $json.body?.companySize || $json.companySize || \"Not specified\" }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "bf62a57d-52c1-4c13-bb8c-6d2b0b51c712",
"name": "GPT-4o-mini for Sentiment",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
784,
1904
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "0007bd24-57a3-4dec-8c2a-b923c1d0a281",
"name": "Append to Google Doc",
"type": "n8n-nodes-base.googleDocs",
"position": [
1712,
1744
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "=\n---\n**Response Date:** {{ new Date().toLocaleDateString() }}\n**Rating:** {{ $json.rating }}/10 | **Sentiment:** {{ $json.sentiment }}\n**Role:** {{ $json.jobRole }} | **Company Size:** {{ $json.companySize }}\n\n**What They Liked:**\n{{ $json.keyPointsLiked.map(point => \"\u2022 \" + point).join(\"\\n\") }}\n\n**Improvements:**\n{{ $json.improvementSuggestions.map(point => \"\u2022 \" + point).join(\"\\n\") }}\n{{ $json.testimonialQuote ? \"\\n**Quote:** _\\\"\" + $json.testimonialQuote + \"\\\"_\" : \"\" }}\n",
"action": "insert"
}
]
},
"operation": "update",
"documentURL": "={{ $('Set Workflow Variables').first().json.googleDocId }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "d827494d-1e7e-44a1-977d-5cf299ca09bf",
"name": "If Single Response Mode",
"type": "n8n-nodes-base.if",
"position": [
144,
1776
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "id-1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.aggregationMode }}",
"rightValue": "false"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "08e8b698-418b-466d-97e9-798f3340ea48",
"name": "Fetch All Responses from Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-160,
2480
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Form Responses 1"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Workflow Variables').first().json.spreadsheetId }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "38792e23-8c93-401f-af9a-106b0b256b92",
"name": "Aggregate Ratings",
"type": "n8n-nodes-base.aggregate",
"position": [
16,
2480
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "da10fc14-5471-466a-ba53-89945bdc6c58",
"name": "Calculate Average Rating",
"type": "n8n-nodes-base.set",
"position": [
192,
2480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "averageRating",
"type": "number",
"value": "={{ $json.rating.reduce((sum, val) => sum + parseFloat(val), 0) / $json.rating.length }}"
},
{
"id": "id-2",
"name": "totalResponses",
"type": "number",
"value": "={{ $json.rating.length }}"
},
{
"id": "id-3",
"name": "allFeedback",
"type": "string",
"value": "={{ JSON.stringify($input.all()) }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "01952f74-d15d-47a8-a837-a4e58758d12b",
"name": "GPT-4o for Aggregation",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
432,
2640
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "22c47e65-9af8-475f-a4fd-f99c237e5883",
"name": "AI Aggregate Summary",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
432,
2480
],
"parameters": {
"text": "=Analyze these {{ $json.totalResponses }} post-event survey responses:\n\nAverage Rating: {{ $json.averageRating.toFixed(2) }}/10\n\nAll Responses:\n{{ $json.allFeedback }}\n\nProvide a comprehensive summary with actionable insights.",
"options": {},
"attributes": {
"attributes": [
{
"name": "overallSentiment",
"required": true,
"description": "Overall sentiment trend across all responses"
},
{
"name": "topThemes",
"required": true,
"description": "Top 5 recurring themes from all feedback"
},
{
"name": "topActions",
"required": true,
"description": "Top 5 actionable items based on improvement suggestions"
},
{
"name": "summary",
"required": true,
"description": "Executive summary of all feedback (2-3 sentences)"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "5ada90fb-1000-4dff-b96f-0736d4fcad77",
"name": "Post Aggregate to Slack",
"type": "n8n-nodes-base.slack",
"position": [
1440,
2480
],
"parameters": {
"text": "=:bar_chart: *Aggregate Survey Analysis* - {{ $('Set Workflow Variables').first().json.eventName }}\n\n*Total Responses:* {{ $json.totalResponses }}\n*Average Rating:* {{ $json.averageRating.toFixed(2) }}/10\n*Overall Sentiment:* {{ $json.overallSentiment }}\n\n*Top 5 Themes:*\n{{ $json.topThemes.map((theme, i) => (i+1) + \". \" + theme).join(\"\\n\") }}\n\n*Top 5 Action Items:*\n{{ $json.topActions.map((action, i) => (i+1) + \". \" + action).join(\"\\n\") }}\n\n*Summary:*\n{{ $json.summary }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Workflow Variables').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "6722b500-ddb2-4f3b-8c85-a50965dcc2f0",
"name": "Append Aggregate to Doc",
"type": "n8n-nodes-base.googleDocs",
"position": [
1712,
2480
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "=\n\n========================================\n**AGGREGATE ANALYSIS** - {{ new Date().toLocaleDateString() }}\n========================================\n\n**Event:** {{ $('Set Workflow Variables').first().json.eventName }}\n**Total Responses:** {{ $json.totalResponses }}\n**Average Rating:** {{ $json.averageRating.toFixed(2) }}/10\n**Overall Sentiment:** {{ $json.overallSentiment }}\n\n**Top 5 Themes:**\n{{ $json.topThemes.map((theme, i) => (i+1) + \". \" + theme).join(\"\\n\") }}\n\n**Top 5 Action Items:**\n{{ $json.topActions.map((action, i) => (i+1) + \". \" + action).join(\"\\n\") }}\n\n**Executive Summary:**\n{{ $json.summary }}\n",
"action": "insert"
}
]
},
"operation": "update",
"documentURL": "={{ $('Set Workflow Variables').first().json.googleDocId }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "6e6c4441-cc88-42a8-b2f0-c8bf9e923315",
"name": "Section 3: AI Sentiment Extraction",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
1408
],
"parameters": {
"color": 2,
"width": 304,
"height": 624,
"content": "## 3. AI Sentiment Extraction\n\nGPT-4o-mini analyzes each individual response and returns structured JSON:\n- **Sentiment:** Positive / Neutral / Negative\n- **Key points liked** (1\u20132 bullets)\n- **Improvement suggestions** (1\u20132 bullets)\n- **Testimonial quote** (optional)"
},
"typeVersion": 1
},
{
"id": "9cf73491-c5f9-4fbf-aca9-61c8f8e9a15c",
"name": "Receive Survey Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-176,
1664
],
"parameters": {
"path": "survey-response",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "5d7ef0f2-be53-4265-bc5a-d22c54b10f20",
"name": "AI Sentiment Analysis",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
784,
1760
],
"parameters": {
"text": "=Analyze this post-event survey response:\n\nRating: {{ $json.rating }}\nWhat they liked: {{ $json.likedMost }}\nSuggested improvements: {{ $json.improvements }}\nJob Role: {{ $json.jobRole }}\nCompany Size: {{ $json.companySize }}\n\nExtract structured insights from this feedback.",
"options": {},
"attributes": {
"attributes": [
{
"name": "sentiment",
"description": "Overall sentiment: Positive, Neutral, or Negative"
},
{
"name": "keyPointsLiked",
"description": "List 1-2 key points the attendee liked"
},
{
"name": "improvementSuggestions",
"description": "List 1-2 improvement suggestions"
},
{
"name": "testimonialQuote",
"description": "A short quote suitable as a testimonial (optional)"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f2d02082-17d7-4f5d-b352-26fe666c80d5",
"name": "Post Feedback to Slack",
"type": "n8n-nodes-base.slack",
"position": [
1440,
1744
],
"parameters": {
"text": "=:star: *New Survey Response* (Rating: {{ $json.rating }}/10)\n\n*Sentiment:* {{ $json.sentiment === \"Positive\" ? \":smile:\" : $json.sentiment === \"Negative\" ? \":disappointed:\" : \":neutral_face:\" }} {{ $json.sentiment }}\n\n*What They Liked:*\n{{ $json.keyPointsLiked.map(point => \"\u2022 \" + point).join(\"\\n\") }}\n\n*Improvements Suggested:*\n{{ $json.improvementSuggestions.map(point => \"\u2022 \" + point).join(\"\\n\") }}\n\n*Role:* {{ $json.jobRole }} | *Company:* {{ $json.companySize }}\n{{ $json.testimonialQuote ? \"\\n_\\\"\" + $json.testimonialQuote + \"\\\"_\" : \"\" }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Workflow Variables').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "ffa0dde1-5e31-4de9-97d5-d98f29fcb9c4",
"name": "If AI Output Exists",
"type": "n8n-nodes-base.if",
"position": [
1136,
1760
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "2750b2de-7a38-41b9-8b2e-b0d3bfacb729",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ !$json.sentiment }}",
"rightValue": "TRUE"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6c9b271f-3fc0-44dc-ab84-c1c6f08804fc",
"name": "Section 4: Validate AI Output",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
1408
],
"parameters": {
"color": 3,
"width": 300,
"height": 616,
"content": "## 4. Validate AI Output\n\nChecks that the AI returned a valid sentiment analysis. If the output is missing or malformed, an error alert is sent to Slack and the response is skipped."
},
"typeVersion": 1
},
{
"id": "121ddd4d-efd5-4538-ad16-2b596d3bd036",
"name": "Send Error Alert to Slack",
"type": "n8n-nodes-base.slack",
"position": [
1136,
1904
],
"parameters": {
"text": "=\u274c AI Analysis Failed\\nRaw: {{ $json }}\\nTimestamp: {{ $now }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Workflow Variables').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "a9336c8c-5f18-4aef-9502-e8cafaaab1b1",
"name": "Section 5: Post Feedback to Slack",
"type": "n8n-nodes-base.stickyNote",
"position": [
1376,
1408
],
"parameters": {
"color": 5,
"height": 1344,
"content": "## 5. Post Feedback to Slack\n\nPosts a formatted digest of each analyzed response to the configured Slack channel with sentiment emoji, key points, and attendee details."
},
"typeVersion": 1
},
{
"id": "57bc995f-7f90-4797-bc71-6a7b0c25234e",
"name": "Section 6: Log to Google Doc",
"type": "n8n-nodes-base.stickyNote",
"position": [
1632,
1408
],
"parameters": {
"color": 4,
"height": 1344,
"content": "## 6. Log to Google Doc\n\nAppends each analyzed response to a running Google Doc report with rating, sentiment, role, liked points, improvements, and testimonial quotes."
},
"typeVersion": 1
},
{
"id": "b40e583f-46dc-43b7-aa60-efe3432ca70d",
"name": "Intro: Post-Event Survey Analyzer",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
1408
],
"parameters": {
"width": 540,
"height": 1340,
"content": "## Post-Event Survey Analyzer\n\n### **What it does:**\nAnalyzes post-event survey responses in real time using AI, posts sentiment digests to Slack, logs insights to Google Docs, and can generate aggregate summaries across all responses.\n\n### **Why it matters:**\nTransforms raw survey data into actionable insights automatically \u2014 so your team sees sentiment trends, key themes, and improvement areas without manually reading every response.\n\n### **How it works:**\n- Step 1: Receives responses via webhook (Google Forms) or Google Sheets polling trigger\n- Step 2: Normalizes survey fields (rating, liked, improvements, role, company size)\n- Step 3: GPT-4o-mini extracts sentiment, key points, improvement suggestions, and testimonial quotes\n- Step 4: Validates AI output; errors are flagged via Slack alert\n- Step 5: Posts individual feedback digest to Slack #event-feedback channel\n- Step 6: Appends formatted response to a running Google Doc report\n- Step 7: (Aggregation mode) Fetches all responses, calculates average rating, GPT-4o generates executive summary with top themes and action items\n\n### **Setup steps:**\n1. Configure **Set Workflow Variables**: event name, Slack channel ID, Google Doc ID, spreadsheet ID\n2. Connect **Google Sheets OAuth2** + **Google Sheets Trigger OAuth2** credentials\n3. Connect **Google Docs OAuth2** credential\n4. Connect **OpenAI API** credential\n5. Connect **Slack OAuth2** credential\n6. Map your survey fields in the **Normalize Survey Response** node\n7. Create custom HubSpot properties if integrating with CRM\n8. Test: Submit a sample survey response and verify the full pipeline"
},
"typeVersion": 1
},
{
"id": "bc664e80-8421-4a70-af7b-efaf537c5a6d",
"name": "Contact: Braia Labs",
"type": "n8n-nodes-base.stickyNote",
"position": [
1904,
1408
],
"parameters": {
"width": 540,
"height": 1344,
"content": "## Was this helpful? Get in touch! \n\n[](https://tally.so/r/EkKGgB)\n\nI really hope this automation helped you. Your feedback is incredibly valuable and helps me create better resources for business and the n8n community.\n\n### **Have Feedback, a Question, or a Project Idea?**\n\nI've streamlined the way we connect. It all starts with one simple form that takes less than 10 seconds. After that, you'll chat with my AI assistant who will gather the key details and pass them directly on to me.\n\n#### **[Start the conversation here](https://tally.so/r/EkKGgB)** \n\n* **Give Feedback:** Share your thoughts on this template\u2014whether you found a typo, encountered an unexpected error, have a suggestion, or just want to say thanks!\n\n* **n8n Consulting:** Have a complex business challenge or need a custom workflow built from scratch? Let's partner on a powerful automation solution tailored to your specific needs.\n\n* **Join your team:** We can work together to get you launched with confidence. \n\n---\n\nHappy Automating!\n[Milo Bravo](https://linkedin.com/in/MiloBravo/) | BRaiA Labs | Automation & BI Systems + AI Integration\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "8cc867c3-1eb0-4c59-9e4a-d5821c2e7cce",
"connections": {
"Aggregate Ratings": {
"main": [
[
{
"node": "Calculate Average Rating",
"type": "main",
"index": 0
}
]
]
},
"If AI Output Exists": {
"main": [
[
{
"node": "Post Feedback to Slack",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Error Alert to Slack",
"type": "main",
"index": 0
}
]
]
},
"AI Aggregate Summary": {
"main": [
[
{
"node": "Post Aggregate to Slack",
"type": "main",
"index": 0
}
]
]
},
"AI Sentiment Analysis": {
"main": [
[
{
"node": "If AI Output Exists",
"type": "main",
"index": 0
}
]
]
},
"GPT-4o for Aggregation": {
"ai_languageModel": [
[
{
"node": "AI Aggregate Summary",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Post Feedback to Slack": {
"main": [
[
{
"node": "Append to Google Doc",
"type": "main",
"index": 0
}
]
]
},
"Receive Survey Webhook": {
"main": [
[
{
"node": "Set Workflow Variables",
"type": "main",
"index": 0
}
]
]
},
"Set Workflow Variables": {
"main": [
[
{
"node": "If Single Response Mode",
"type": "main",
"index": 0
}
]
]
},
"If Single Response Mode": {
"main": [
[
{
"node": "Normalize Survey Response",
"type": "main",
"index": 0
}
],
[
{
"node": "Fetch All Responses from Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Post Aggregate to Slack": {
"main": [
[
{
"node": "Append Aggregate to Doc",
"type": "main",
"index": 0
}
]
]
},
"Calculate Average Rating": {
"main": [
[
{
"node": "AI Aggregate Summary",
"type": "main",
"index": 0
}
]
]
},
"GPT-4o-mini for Sentiment": {
"ai_languageModel": [
[
{
"node": "AI Sentiment Analysis",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Normalize Survey Response": {
"main": [
[
{
"node": "AI Sentiment Analysis",
"type": "main",
"index": 0
}
]
]
},
"Poll Google Sheets for Responses": {
"main": [
[
{
"node": "Set Workflow Variables",
"type": "main",
"index": 0
}
]
]
},
"Fetch All Responses from Google Sheets": {
"main": [
[
{
"node": "Aggregate Ratings",
"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.
googleDocsOAuth2ApigoogleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApiopenAiApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Who is this for? Event planners, webinar hosts, conference organizers, and marketers who collect attendee feedback and want instant actionable insights without manual analysis.
Source: https://n8n.io/workflows/12621/ — 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.
thumnail_new. Uses googleDrive, googleSlides, googleSheetsTrigger, googleDocs. Event-driven trigger; 19 nodes.
Thumnail_workflow. Uses googleDrive, googleSlides, googleSheetsTrigger, googleDocs. Event-driven trigger; 18 nodes.
This workflow takes a Google spreadsheet called 'Setlist_Manager' with 'Artist' and 'SongTitle' entries and get's Lyrics for each song and creates a playlist for that set of songs. Create Spotify Play
This end-to-end AI-powered recruitment automation workflow helps HR and talent acquisition teams automate the complete hiring pipeline—from resume intake and parsing to GPT-4-based evaluation, TA appr
Eliminate 90% of manual work in procurement by automating quote requests, response tracking, price extraction, and supplier follow-ups. This complete automation handles everything from sending persona