This workflow corresponds to n8n.io template #4371 — 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 →
{
"nodes": [
{
"id": "4c54dad7-e5f3-4099-8f27-49413deabb39",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
2320,
820
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "d8919ec6-05a0-462e-a5f9-26102b5b04e2",
"name": "Copywriter AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2980,
740
],
"parameters": {
"text": "=You are an expert-level SEO content strategist and copywriter with years of experience writing high-performing blog posts.\n\nYour task is to:\n\n1. Improve the provided topic title by generating a better, SEO-optimized blog post title that is more attractive and ranks well on search engines.\n\n2. Write a complete blog post based on the improved title. The post must:\n- Be between 800\u20131200 words\n- Use a clear, conversational, and engaging tone\n- Be SEO-friendly with natural keyword integration\n- Start with a hooking introduction that introduces the topic smoothly\n- Use headings and subheadings (H1 for the title, H2 for main sections, H3 for supporting points)\n- Use bullet points or numbered lists where helpful\n- Have a strong conclusion that summarizes the key points and includes a call-to-action or final insight\n- Ensure smooth flow and concise, informative paragraphs\n\n3. Output the result as a JSON object with this format:\n\n```json\n{\n \"title\": \"Improved SEO-Optimized Title\",\n \"content\": \"Full blog post content in markdown format\"\n}\n```\n\nHere is the topic you should improve and write about:\n{{ $json.Topic }}\n\nGenerate the improved title and the full blog post now.\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "c76bb5b7-404d-46d2-984f-2648f7dbc555",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2960,
1040
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "75f8816c-515a-4805-945e-2f4aaf6b18d7",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
3160,
1040
],
"parameters": {
"sessionKey": "={{ $('Get Topic from Google Sheets').item.json.Topic }}",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "0cf69760-6cfe-488a-a7f3-aedb917d6838",
"name": "Copywriter Revision Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3480,
1200
],
"parameters": {
"text": "=You are an expert-level copywriter with strong SEO knowledge and a clear, engaging writing style. Your task is to revise an existing blog post based on the given topic and user feedback.\n\nHere are your responsibilities:\n- Carefully apply all of the user's feedback to improve the blog post.\n- Preserve the good parts of the original content, but rewrite or adjust areas based on the feedback.\n- Keep the tone friendly, professional, and easy to read.\n- Organize the blog post with clear headings and subheadings.\n- Use bullet points or numbered lists when it makes the content clearer.\n- Ensure a strong hook in the introduction and a solid conclusion with a call-to-action or takeaway.\n- Aim for a length between 800\u20131200 words unless the feedback suggests otherwise.\n\nHere is the topic title:\n{{ $('Get Topic from Google Sheets').item.json.Topic }}\n\nHere is the user's feedback:\n{{ $('Send Content for Approval').item.json.data['Content Feedback'] }}\n\nHere is the original content:\n{{ $('Copywriter AI Agent').item.json.output }}\n\nNow, rewrite the blog post using this input, fully incorporating the feedback.\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "b2ced856-381a-42cc-8935-3408c43648d8",
"name": "Set Data",
"type": "n8n-nodes-base.set",
"position": [
3420,
740
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c4dbce1a-8b34-46b7-a740-b49339233e68",
"name": "Topic Title",
"type": "string",
"value": "={{ $json.output.title }}"
},
{
"id": "4924b496-db60-4618-bab7-a9d5e689c8eb",
"name": "Content",
"type": "string",
"value": "={{ $json.output.content }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "cd76fdf2-eab5-4bf6-921b-d956ab8b3282",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
3260,
1220
],
"parameters": {
"jsonSchemaExample": "{\n \"title\": \"Improved SEO-Optimized Title\",\n \"content\": \"Full blog post content in markdown format\"\n}"
},
"typeVersion": 1.2
},
{
"id": "b1e3c062-ce7a-4dc2-8566-2613e3b955de",
"name": "Add Generated Content to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
4360,
740
],
"parameters": {
"columns": {
"value": {
"Title": "={{ $('Set Data').item.json['Topic Title'] }}",
"Content": "={{ $('Set Data').item.json.Content }}",
"Generation Date": "={{ $now }}"
},
"schema": [
{
"id": "Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generation Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Generation Date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1579104486,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit#gid=1579104486",
"cachedResultName": "Generated Content"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit?usp=drivesdk",
"cachedResultName": "Content Topics"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "3c8f388f-cb03-4c3a-b39c-3e5d21151241",
"name": "Update Topic Status on Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
4020,
740
],
"parameters": {
"columns": {
"value": {
"Status": "Completed",
"row_number": "={{ $('Get Topic from Google Sheets').item.json.row_number }}"
},
"schema": [
{
"id": "Topic",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Topic",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Output",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Output",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"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/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit#gid=0",
"cachedResultName": "Topic List"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit?usp=drivesdk",
"cachedResultName": "Content Topics"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "f320e2c5-e5ef-4b44-9458-7295d337daa3",
"name": "Get Topic from Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
2660,
820
],
"parameters": {
"options": {
"returnFirstMatch": true
},
"filtersUI": {
"values": [
{
"lookupValue": "Pending",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit#gid=0",
"cachedResultName": "Topic List"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CyELzPxCDHAXJVu-p2_QRiGRGYwjPtJpeGwWXvlWjLw/edit?usp=drivesdk",
"cachedResultName": "Content Topics"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "35654a6d-8b77-449a-a560-8db2f5fdb451",
"name": "Send Content for Approval",
"type": "n8n-nodes-base.gmail",
"position": [
3580,
740
],
"parameters": {
"sendTo": "user@example.com",
"message": "=Generated Title:\n{{ $json['Topic Title'] }}\n\nGenerated Content:\n{{ $json.Content }}",
"options": {},
"subject": "Approval Required for Blog Content",
"operation": "sendAndWait",
"formFields": {
"values": [
{
"fieldType": "dropdown",
"fieldLabel": "Approve Content?",
"fieldOptions": {
"values": [
{
"option": "Yes"
},
{
"option": "No"
},
{
"option": "Cancel"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Content Feedback"
}
]
},
"responseType": "customForm"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "08141d98-6b12-47ce-9881-b4bbd41d8ae7",
"name": "Approval Result",
"type": "n8n-nodes-base.switch",
"position": [
3720,
740
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Yes",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "317039f4-754e-4cb0-a674-eb8d26c9ed27",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Approve Content?'] }}",
"rightValue": "Yes"
}
]
},
"renameOutput": true
},
{
"outputKey": "No",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "caace3ea-4ca0-40de-84fb-5a8fd809a0eb",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Approve Content?'] }}",
"rightValue": "No"
}
]
},
"renameOutput": true
},
{
"outputKey": "Cancel",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f93e5649-6a21-49a9-9993-85f1323139b0",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Approve Content?'] }}",
"rightValue": "Cancel"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "915e835b-fd66-4222-baf4-8e9be0a163c2",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2220,
640
],
"parameters": {
"color": 4,
"width": 320,
"height": 360,
"content": "\ud83d\udd52 WORKFLOW STARTER\nThis triggers the content generation process automatically.\n\nSetup Required:\n\u2022 Set your preferred trigger interval."
},
"typeVersion": 1
},
{
"id": "e20d85ab-23f9-4634-a2ad-3bfe00271aec",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2560,
520
],
"parameters": {
"color": 4,
"width": 320,
"height": 480,
"content": "\ud83d\udcca TOPIC RETRIEVAL\nFetches the first \"Pending\" topic from your topic list.\n\nSetup Required:\n\u2022 Connect your Google account\n\u2022 Update Sheet ID in node settings\n\u2022 Ensure \"Topic List\" sheet exists with columns:\n - Topic (A), Status (B)\n\nOutput: Topic title + row number for tracking"
},
"typeVersion": 1
},
{
"id": "96aac741-474f-4f65-8b1c-224a08f8b8a6",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1940,
520
],
"parameters": {
"color": 4,
"width": 260,
"height": 480,
"content": "## SETUP REQUIRED\n**Author:** [Billy Christi](https://n8n.io/creators/billy/)\n\n**Copy the Google Sheet template here**:\n\ud83d\udc49 [Automate Blog Content Creation \u2013 Google Sheet Template](https://docs.google.com/spreadsheets/d/1ZZ2RoMYS1DZEhM7hEDUbSCAUlcZrZ15pnGRHuus3fVk/edit?usp=sharing)\n\nGoogle Sheets Structure:\nSheet 1: \"Topic List\"\n\u2022 Column A: Topic\n\u2022 Column B: Status (\"Pending\", \"Completed\")\n\nSheet 2: \"Generated Content\"\n\u2022 Column A: Title\n\u2022 Column B: Content\n\u2022 Column C: Generation Date\n\nRequired Credentials:\n\u2022 OpenAI API Key\n\u2022 Google Sheets Credential\n\u2022 Gmail Credential"
},
"typeVersion": 1
},
{
"id": "751f9f12-f2ac-449a-ad0c-0f8eab0e0b7e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2900,
520
],
"parameters": {
"color": 4,
"width": 460,
"height": 800,
"content": "\ud83e\udd16 CONTENT CREATION\nAI writes SEO-optimized blog posts (800-1200 words).\n\nSetup Required:\n\u2022 Add OpenAI API key in credentials\n\u2022 Uses structured prompts for consistency\n\nOutput: JSON with title + content ready for review"
},
"typeVersion": 1
},
{
"id": "840daac8-e2c1-433c-b91c-743aae5b687a",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
3400,
520
],
"parameters": {
"color": 4,
"width": 440,
"height": 440,
"content": "\ud83d\udce7 HUMAN REVIEW\nThis step sends the generated content via email for approval.\n\n\u2705 Update the To Email Field in the Gmail node with your own email address.\n\n\u26a0\ufe0f Note: The workflow will pause here until a response is received."
},
"typeVersion": 1
},
{
"id": "b0a49973-7671-4797-bcfd-e559a59db8d5",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
3400,
980
],
"parameters": {
"color": 4,
"width": 440,
"height": 420,
"content": "\u270f\ufe0f CONTENT REVISION\nAI improves content based on human feedback.\n\nTriggered when: Approval = \"No\"\nUses: Original topic + feedback + original content\nSame AI model as initial generation\n\nOutput: Revised content incorporating feedback"
},
"typeVersion": 1
},
{
"id": "6b2da55a-38f2-4f61-8189-73c7173fccb4",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3920,
500
],
"parameters": {
"color": 4,
"width": 300,
"height": 480,
"content": "\u2705 TOPIC STATUS UPDATE\nUpdates topic status to \"Completed\" in tracking sheet.\n\nPurpose:\n\u2022 Prevents duplicate processing\n\u2022 Tracks workflow progress\n\u2022 Uses row number from initial fetch\n\nColumn Updated: Status (B) \u2192 \"Completed\"\n"
},
"typeVersion": 1
},
{
"id": "41dd015e-3c3c-422e-be34-c1353ee2dd6a",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
4260,
500
],
"parameters": {
"color": 4,
"width": 300,
"height": 480,
"content": "\ud83d\udcbe ADD GENERATED CONTENT\nSaves approved content to \"Generated Content\" sheet.\n\nSetup Required:\n\u2022 Ensure \"Generated Content\" sheet exists\n\u2022 Columns: Title (A), Content (B), Date (C)\n\nPurpose: Permanent storage for published content\n"
},
"typeVersion": 1
},
{
"id": "8bee3e14-12d0-449a-881e-d420fff3b751",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1940,
1020
],
"parameters": {
"color": 5,
"width": 420,
"height": 420,
"content": "## \ud83d\ude80 Automate Blog Content Creation with OpenAI, Google Sheets & Email Approval Workflow\n\nWhat This Template Does:\n- Automatically generates SEO-optimized blog posts\n- Uses AI (GPT-4) to write 800-1200 word articles\n- Includes human approval process for quality control\n- Manages topics via Google Sheets\n- Handles revisions based on feedback\n\nPerfect For:\n- Content marketers scaling blog production\n- Agencies managing multiple clients\n- Bloggers wanting consistent publishing\n- SEO professionals creating optimized content"
},
"typeVersion": 1
},
{
"id": "d160369b-ec57-486e-9715-c39df12e5866",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2380,
1020
],
"parameters": {
"color": 5,
"width": 500,
"height": 420,
"content": "## \ud83d\udccb WORKFLOW PROCESS OVERVIEW\n\nStep 1: \ud83d\udcc5 Schedule automatically starts process\nStep 2: \ud83d\udcca Fetch pending topic from Google Sheets\nStep 3: \ud83e\udd16 AI generates complete blog post\nStep 4: \ud83d\udce7 Send content to you for approval\nStep 5: \u2705 You approve, request changes, or cancel\nStep 6: \u270f\ufe0f AI revises content if changes requested\nStep 7: \ud83d\udcbe Save final content & mark topic complete\n"
},
"typeVersion": 1
},
{
"id": "35c3e968-ca3c-4c24-b468-af34e302ae14",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
4600,
360
],
"parameters": {
"color": 4,
"width": 380,
"height": 760,
"content": "# \ud83d\udc4b Hi, I\u2019m Billy\n\nI help businesses build **n8n workflows** & **AI automation projects**. \nNeed help with n8n or AI Automation projects? \nContact me and let\u2019s build your automation together.\n\n\ud83d\udce9 **Email:** billychartanto@gmail.com \n\ud83e\udd1d **n8n Creator:** [n8n.io/creators/billy](https://n8n.io/creators/billy/)\n\ud83c\udf10 **My n8n Projects:** [billychristi.com/n8n](https://www.billychristi.com/n8n) \n\n\n\n---\n\ud83d\udca1 Feel free to get in touch if you\u2019d like help on your next automation project or if you have any feedback or thoughts to share.\n"
},
"typeVersion": 1
}
],
"connections": {
"Set Data": {
"main": [
[
{
"node": "Send Content for Approval",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "Copywriter AI Agent",
"type": "ai_memory",
"index": 0
},
{
"node": "Copywriter Revision Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Approval Result": {
"main": [
[
{
"node": "Update Topic Status on Google Sheets",
"type": "main",
"index": 0
}
],
[
{
"node": "Copywriter Revision Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Topic Status on Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Topic from Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Copywriter AI Agent",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Copywriter Revision Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Copywriter AI Agent": {
"main": [
[
{
"node": "Set Data",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Copywriter AI Agent",
"type": "ai_outputParser",
"index": 0
},
{
"node": "Copywriter Revision Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Copywriter Revision Agent": {
"main": [
[
{
"node": "Set Data",
"type": "main",
"index": 0
}
]
]
},
"Send Content for Approval": {
"main": [
[
{
"node": "Approval Result",
"type": "main",
"index": 0
}
]
]
},
"Get Topic from Google Sheets": {
"main": [
[
{
"node": "Copywriter AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Update Topic Status on Google Sheets": {
"main": [
[
{
"node": "Add Generated Content to Google Sheets",
"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.
gmailOAuth2googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is perfect for: Digital marketers who need to scale SEO-optimized content production Bloggers and content creators who want to maintain consistent publishing schedules Small business owners who need regular blog content but lack writing resources
Source: https://n8n.io/workflows/4371/ — 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 was born out of a very real problem.
This n8n workflow automates the daily monitoring of trends across X (Twitter), newsletters, and websites. It runs on a schedule, fetches data from configured sources in Google Sheets, processes it usi
⚠️ DISCLAIMER: This workflow uses the AnySite LinkedIn community node, which is only available on self-hosted n8n instances. It will not work on n8n.cloud.
This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
Enhance your support, onboarding, and internal knowledge workflows with an intelligent RAG-powered chatbot that responds using live data stored in Google Sheets. 🤖📚 Built for teams that rely on struct