AutomationFlowsAI & RAG › Generate AI Descriptions for New Google Sheets Entries with Gpt-4.1-mini

Generate AI Descriptions for New Google Sheets Entries with Gpt-4.1-mini

ByRobert Breen @rbreen on n8n.io

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…

Event trigger★★★☆☆ complexityAI-powered9 nodesOpenAI ChatOutput Parser StructuredGoogle SheetsGoogle Sheets TriggerAgent
AI & RAG Trigger: Event Nodes: 9 Complexity: ★★★☆☆ AI nodes: yes Added:

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 →

Download .json
{
  "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.

Pro

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 →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

AI-Powered Keyword Cannibalization Detection Workflow

Agent, OpenAI Chat, Output Parser Structured +3
AI & RAG

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

Airtop, Output Parser Autofixing, OpenAI Chat +4
AI & RAG

Consultants, agencies, freelancers, and project managers who want to ensure proposals, emails, and tasks are followed up on time.

Google Sheets Trigger, Agent, OpenAI Chat +6
AI & RAG

Checking Instagram Profiles with AI Agent. Uses airtop, outputParserAutofixing, lmChatOpenAi, outputParserStructured. Event-driven trigger; 24 nodes.

Airtop, Output Parser Autofixing, OpenAI Chat +4
AI & RAG

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

Google Sheets Trigger, OpenAI Chat, Output Parser Structured +6