This workflow corresponds to n8n.io template #5945 — 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 →
{
"id": "KfktECZW8CIxE58G",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "5 Weekly Competitor Keyword Research & Report",
"tags": [],
"nodes": [
{
"id": "472a607e-b991-4b4a-920e-9d44b1df7c1e",
"name": "\ud83d\udd52 Run Weekly",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
220,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "6bb1bb2b-0c50-4544-a2d2-0a5f2feff15c",
"name": "\u270f\ufe0f Define Topic or competitor",
"type": "n8n-nodes-base.set",
"position": [
440,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "7b6a112e-356f-4808-a762-7ef95a605fff",
"name": "Topic",
"type": "string",
"value": "AI blogging"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "11572b3e-dc79-447e-a211-3816158d2bb2",
"name": "\ud83e\udd16 AI Agent (Keyword Finder)",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
780,
0
],
"parameters": {
"text": "=Provide me trending keywords for the topic below.\n{{ $json.Topic }}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "07a66e43-de41-428d-b82b-2542a35ca7d3",
"name": "\ud83d\udcac GPT Brain",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
680,
320
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5.5"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "37682954-1b3e-40aa-b2b7-97089c2322e2",
"name": "\ud83d\udd0d MCP Keyword Search",
"type": "n8n-nodes-mcp.mcpClientTool",
"position": [
920,
320
],
"parameters": {
"toolName": "search_engine",
"operation": "executeTool",
"toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', ``, 'json') }}"
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7f570ced-86eb-4058-b1fe-8e15225779bb",
"name": "\ud83d\udcc4 Save to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1340,
0
],
"parameters": {
"columns": {
"value": {
"Topic": "={{ $json.output.topic }}",
"Trending Keyword": "={{ $json.output.description }}"
},
"schema": [
{
"id": "Topic",
"type": "string",
"display": true,
"required": false,
"displayName": "Topic",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Trending Keyword",
"type": "string",
"display": true,
"required": false,
"displayName": "Trending Keyword",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1s-MXdNem9pPMeziIbiPVoOiyZcBG3qIJCsf7xf-z7gc/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1s-MXdNem9pPMeziIbiPVoOiyZcBG3qIJCsf7xf-z7gc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1s-MXdNem9pPMeziIbiPVoOiyZcBG3qIJCsf7xf-z7gc/edit?usp=drivesdk",
"cachedResultName": "Trending Competitor keywords"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "6c326c68-dc7a-49e7-b5bd-517142a05450",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
200,
-640
],
"parameters": {
"color": 2,
"width": 360,
"height": 820,
"content": "### \u2705 **\ud83d\udd39 Section 1: Trigger & Input Setup**\n\n**Nodes:**\n1\ufe0f\u20e3 **Schedule Trigger** \u23f0\n2\ufe0f\u20e3 **Edit Fields** \u270f\ufe0f\n\n**What Happens Here:**\n\n* **\u23f0 Schedule Trigger:** This node automatically starts the workflow at a defined time (e.g., every week on Monday). No manual start needed!\n* **\u270f\ufe0f Edit Fields:** Here, you define the **Topic** you want to research. In your case, you set it to something like **\u201cAI Blogging\u201d** \u2014 but you could change this to *any* topic (e.g., *Digital Marketing*, *Remote Work*, *Crypto*, etc.).\n\n**How a Beginner Can Use This:**\n\n* Just set the day & time in the **Schedule Trigger** (e.g., weekly, daily).\n* In **Edit Fields**, enter your target topic \u2014 this is the seed for the whole keyword research process.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "10e40040-c88d-4340-990e-f13f2e6e3e64",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-1120
],
"parameters": {
"color": 6,
"width": 360,
"height": 1300,
"content": "### \u2705 **\ud83d\udd39 Section 2: AI Agent & Search Tool**\n\n**Nodes:**\n\n* **AI Agent \ud83e\udd16**\n\n * **Sub-nodes:**\n\n * **OpenAI Chat Model \ud83d\udcac**\n * **MCP Search Tool \ud83d\udd0d**\n * **Structured Output Parser \ud83e\udde9**\n\n**What Happens Here:**\n\n* **\ud83e\udd16 AI Agent:** This is the smart brain of your workflow.\n\n * It uses your Topic input to generate a prompt.\n* **\ud83d\udcac OpenAI Chat Model:** This sub-node calls an LLM (like GPT) to craft the perfect search query or interpret results.\n* **\ud83d\udd0d MCP Search Tool:** This searches live data sources for real-time trending keywords related to your Topic.\n* **\ud83e\udde9 Structured Output Parser:** This ensures the AI\u2019s output is converted into *clean JSON* (e.g., `{\"topic\": \"AI Blogging\", \"trending_keywords\": [...]}`) so your next nodes can read it easily.\n\n**How a Beginner Can Use This:**\n\n* You don\u2019t need to write any code \u2014 just make sure the AI prompt returns structured JSON like the example:\n\n ```json\n {\n \"topic\": \"Your Topic\",\n \"trending_keywords\": [\n {\n \"keyword\": \"Example Keyword\",\n \"description\": \"Short description\"\n }\n ]\n }\n ```\n* The **Structured Output Parser** keeps your data clean for Google Sheets.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "3b10ee5d-ee17-4e76-80b8-4aa81a091d59",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
-540
],
"parameters": {
"color": 3,
"width": 360,
"height": 720,
"content": "### \u2705 **\ud83d\udd39 Section 3: Save to Google Sheets**\n\n**Node:**\n\n* **Google Sheets \ud83d\udcc4**\n\n**What Happens Here:**\n\n* This node takes the structured data and appends each keyword + description into your Google Sheet.\n* Every week, your sheet grows with new, fresh trending keywords \u2014 no manual copy-paste needed.\n\n**How a Beginner Can Use This:**\n\n* Connect your Google Sheets account once.\n* Pick the target sheet & columns.\n* The workflow does the rest: every time it runs, new rows are added automatically!\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "43bf1df0-74b0-4a9c-a22b-d11f85d7c9fd",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1560,
-640
],
"parameters": {
"color": 4,
"width": 1300,
"height": 320,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"typeVersion": 1
},
{
"id": "58c0b683-86ed-4b71-b561-bbe9fdfde8f4",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1560,
-300
],
"parameters": {
"color": 4,
"width": 1289,
"height": 2278,
"content": "## \ud83d\ude80 **n8n Workflow: Weekly AI Keyword Research & Report**\n\nThis workflow automatically finds trending AI keywords and logs them into Google Sheets \u2014 fully automated, beginner-friendly, and no code!\n\n---\n\n### \u2705 **\ud83d\udd39 Section 1: Trigger & Input Setup**\n\n**Nodes:**\n1\ufe0f\u20e3 **Schedule Trigger** \u23f0\n2\ufe0f\u20e3 **Edit Fields** \u270f\ufe0f\n\n**What Happens Here:**\n\n* **\u23f0 Schedule Trigger:** This node automatically starts the workflow at a defined time (e.g., every week on Monday). No manual start needed!\n* **\u270f\ufe0f Edit Fields:** Here, you define the **Topic** you want to research. In your case, you set it to something like **\u201cAI Blogging\u201d** \u2014 but you could change this to *any* topic (e.g., *Digital Marketing*, *Remote Work*, *Crypto*, etc.).\n\n**How a Beginner Can Use This:**\n\n* Just set the day & time in the **Schedule Trigger** (e.g., weekly, daily).\n* In **Edit Fields**, enter your target topic \u2014 this is the seed for the whole keyword research process.\n\n---\n\n### \u2705 **\ud83d\udd39 Section 2: AI Agent & Search Tool**\n\n**Nodes:**\n\n* **AI Agent \ud83e\udd16**\n\n * **Sub-nodes:**\n\n * **OpenAI Chat Model \ud83d\udcac**\n * **MCP Search Tool \ud83d\udd0d**\n * **Structured Output Parser \ud83e\udde9**\n\n**What Happens Here:**\n\n* **\ud83e\udd16 AI Agent:** This is the smart brain of your workflow.\n\n * It uses your Topic input to generate a prompt.\n* **\ud83d\udcac OpenAI Chat Model:** This sub-node calls an LLM (like GPT) to craft the perfect search query or interpret results.\n* **\ud83d\udd0d MCP Search Tool:** This searches live data sources for real-time trending keywords related to your Topic.\n* **\ud83e\udde9 Structured Output Parser:** This ensures the AI\u2019s output is converted into *clean JSON* (e.g., `{\"topic\": \"AI Blogging\", \"trending_keywords\": [...]}`) so your next nodes can read it easily.\n\n**How a Beginner Can Use This:**\n\n* You don\u2019t need to write any code \u2014 just make sure the AI prompt returns structured JSON like the example:\n\n ```json\n {\n \"topic\": \"Your Topic\",\n \"trending_keywords\": [\n {\n \"keyword\": \"Example Keyword\",\n \"description\": \"Short description\"\n }\n ]\n }\n ```\n* The **Structured Output Parser** keeps your data clean for Google Sheets.\n\n---\n\n### \u2705 **\ud83d\udd39 Section 3: Save to Google Sheets**\n\n**Node:**\n\n* **Google Sheets \ud83d\udcc4**\n\n**What Happens Here:**\n\n* This node takes the structured data and appends each keyword + description into your Google Sheet.\n* Every week, your sheet grows with new, fresh trending keywords \u2014 no manual copy-paste needed.\n\n**How a Beginner Can Use This:**\n\n* Connect your Google Sheets account once.\n* Pick the target sheet & columns.\n* The workflow does the rest: every time it runs, new rows are added automatically!\n\n---\n\n## \ud83c\udf1f **Why This Workflow is Powerful**\n\n\u2705 **Zero manual work:** You set the Topic once \u2014 the bot does the rest.\n\u2705 **Always fresh data:** Pulls live trends with MCP Search + OpenAI.\n\u2705 **Clean reports:** Your Google Sheet becomes a growing database of keyword ideas.\n\u2705 **Beginner-friendly:** No coding, just drag & drop and simple JSON.\n\n---\n\n## \ud83d\udca1 **Next Steps**\n\n* Want a fancy \ud83d\udcca chart? Connect Google Sheets \u2192 Looker Studio to make dashboards.\n* Want Slack updates? Add a Slack node after Google Sheets to get notified when new keywords arrive.\n* Want multiple topics? Use a Google Sheet or Airtable to loop through multiple Topics automatically!\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "91a50e32-b630-4883-9076-33d39b11bd23",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-540
],
"parameters": {
"color": 7,
"width": 380,
"height": 240,
"content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
},
"typeVersion": 1
},
{
"id": "8e3d2f82-8f9c-43e0-8fbe-afc371695852",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
1060,
320
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "a544d206-3cbf-4fdc-a577-805d83d01cc0",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1040,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5.5"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "9f8a8a3c-a6ee-434d-ace6-8e68df836953",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1200,
540
],
"parameters": {
"jsonSchemaExample": "{\n \"topic\": \"AI Blogging\",\n \"keyword\": \"Artificial Intelligence\",\n \"description\": \"General discussions about AI technologies.\"\n }"
},
"typeVersion": 1.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "1b78c4be-b73a-4b7e-a0b8-8117e2d06fea",
"connections": {
"\ud83d\udcac GPT Brain": {
"ai_languageModel": [
[
{
"node": "\ud83e\udd16 AI Agent (Keyword Finder)",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udd52 Run Weekly": {
"main": [
[
{
"node": "\u270f\ufe0f Define Topic or competitor",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udd0d MCP Keyword Search": {
"ai_tool": [
[
{
"node": "\ud83e\udd16 AI Agent (Keyword Finder)",
"type": "ai_tool",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "\ud83e\udd16 AI Agent (Keyword Finder)",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83e\udd16 AI Agent (Keyword Finder)": {
"main": [
[
{
"node": "\ud83d\udcc4 Save to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"\u270f\ufe0f Define Topic or competitor": {
"main": [
[
{
"node": "\ud83e\udd16 AI Agent (Keyword Finder)",
"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.
googleSheetsOAuth2ApimcpClientApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/5945/ — 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.
Note: This template is for self-hosted n8n instances only
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow automatically monitors competitor pricing across multiple products and services to track market positioning and pricing strategies. It saves you time by eliminating the need to manually
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow automatically analyzes sales territory performance, comparing revenue, win rates, and activity across regions. Remove the guesswork from territory planning and drive balanced growth.