This workflow corresponds to n8n.io template #7403 — we link there as the canonical source.
This workflow follows the Agent → 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "0ad754e7-e05a-4935-a792-f3178248099a",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1024,
160
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "7f83e0b2-5561-480f-b3c6-9bba76158752",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-832,
128
],
"parameters": {
"jsonSchemaExample": "{\n\t\"description\": \"description\"\n}"
},
"typeVersion": 1.3
},
{
"id": "d88108ee-e1a0-43d2-948a-37bd706a33b5",
"name": "Update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-672,
-336
],
"parameters": {
"columns": {
"value": {
"topic": "={{ $('Row added - Google Sheet').item.json.topic }}",
"description": "={{ $json.output.description }}"
},
"schema": [
{
"id": "topic",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "topic",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"topic"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit#gid=0",
"cachedResultName": "data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit?usp=drivesdk",
"cachedResultName": "Sheets Triggers"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "bfa0fde3-6ddb-4e69-a1d5-b6d86ef89672",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-656,
-32
],
"parameters": {
"columns": {
"value": {
"Update": "={{ $('Row added - Google Sheet').item.json.topic }} was added"
},
"schema": [
{
"id": "Update",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Update",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"topic"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 196803262,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit#gid=196803262",
"cachedResultName": "actions"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit?usp=drivesdk",
"cachedResultName": "Sheets Triggers"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "ae9c19db-71eb-4b38-adba-ca5d7468bdc2",
"name": "Sticky Note16",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2432,
-656
],
"parameters": {
"width": 2016,
"content": "## \ud83d\udcec Need Help or Want to Customize This?\n\ud83d\udce7 [robert@ynteractive.com](mailto:robert@ynteractive.com) \n\ud83d\udd17 [LinkedIn](https://www.linkedin.com/in/robert-breen-29429625/)"
},
"typeVersion": 1
},
{
"id": "6196c4fc-679c-4b5e-bbcc-685917d4fa5a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2432,
-480
],
"parameters": {
"color": 5,
"width": 904,
"height": 860,
"content": "### Step 1: Set Up Your Google Sheets\n\n**Option 1: Use Our Pre-Made Template (Recommended)**\n1. Copy our template: [AI Description Generator Template](https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit?usp=sharing)\n2. Click \"File\" \u2192 \"Make a copy\" to create your own version\n3. Rename it as desired (e.g., \"My AI Content Generator\")\n4. Note your new sheet's URL - you'll need this for the workflow\n\n**Option 2: Create From Scratch**\n1. Go to [Google Sheets](https://sheets.google.com/)\n2. Create a new spreadsheet\n3. **Set up the main \"data\" tab:**\n - Rename \"Sheet1\" to \"data\"\n - Set up column headers in row 1:\n - A1: `topic`\n - B1: `description`\n4. **Create an \"actions\" tab:**\n - Add a new sheet and name it \"actions\"\n - Set up column headers:\n - A1: `Update`\n5. Copy your sheet's URL\n\n### Step 2: Configure Google API Access\n\n1. **Enable Google Sheets API**\n - Go to [Google Cloud Console](https://console.cloud.google.com/)\n - Create a new project or select existing one\n - Enable \"Google Sheets API\"\n - Enable \"Google Drive API\"\n\n"
},
"typeVersion": 1
},
{
"id": "ab630ed2-52a0-42ac-9e3d-3d9826ceb7e4",
"name": "Row added - Google Sheet",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-1376,
96
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit#gid=0",
"cachedResultName": "data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d8O_Iwg5UtDjHM22zWHMegORatYzaQUYmzrcYnG5OSs/edit?usp=drivesdk",
"cachedResultName": "Sheets Triggers"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5b4d1f11-89c8-4b38-89f1-2e353eaa9b40",
"name": "Description Writer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-992,
-112
],
"parameters": {
"text": "={{ $json.topic }}",
"options": {
"systemMessage": "write a description of the topic. \n\noutput like this. \n\n{\n\t\"description\": \"description\"\n}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "8150251e-63e2-43a0-8952-85b86c796df0",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1504,
-480
],
"parameters": {
"color": 4,
"width": 1096,
"height": 860,
"content": "\n### Step 4: Import and Configure the N8N Workflow\n\n1. **Import the Workflow**\n - Copy the workflow JSON from the template\n - In your N8N instance, go to Workflows \u2192 Import from JSON\n - Paste the JSON and import\n\n2. **Configure OpenAI Credentials**\n - Click on the \"OpenAI Chat Model\" node\n - Set up credentials using your OpenAI API key\n - Test the connection to ensure it works\n\n3. **Configure Google Sheets Integration**\n \n **For the Trigger Node:**\n - Click on \"Row added - Google Sheet\" node\n - Set up Google Sheets Trigger OAuth2 credentials\n - Select your spreadsheet from the dropdown\n - Choose the \"data\" sheet\n - Set polling to \"Every Minute\" (already configured)\n\n"
},
"typeVersion": 1
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Description Writer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Description Writer": {
"main": [
[
{
"node": "Update row in sheet",
"type": "main",
"index": 0
},
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Row added - Google Sheet": {
"main": [
[
{
"node": "Description Writer",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Description Writer",
"type": "ai_outputParser",
"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.
googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n workflow template automatically monitors your Google Sheets for new entries and uses AI to generate detailed descriptions for each topic. Perfect for content creators, researchers, project managers, or anyone who needs automatic content generation based on simple topic…
Source: https://n8n.io/workflows/7403/ — 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.
AI-Powered Keyword Cannibalization Detection Workflow
It’s a fully structured workflow for anyone who needs to analyze Instagram profiles at scale, with AI, and keep everything tracked and organized — no manual effort, no copy-paste, and total control ov
Consultants, agencies, freelancers, and project managers who want to ensure proposals, emails, and tasks are followed up on time.
Checking Instagram Profiles with AI Agent. Uses airtop, outputParserAutofixing, lmChatOpenAi, outputParserStructured. Event-driven trigger; 24 nodes.
Logistics teams spend hours manually validating shipment data, checking compliance, generating freight documents, and emailing stakeholders. Errors in HSN codes, weights, or carrier details can lead t