This workflow corresponds to n8n.io template #11075 — 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": "fGgSgXzCe04YeoIk",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Cluster webpage topics from Google Sheets to Google Sheets for AI discovery",
"tags": [],
"nodes": [
{
"id": "c11af817-4a74-4954-aa63-67298decbe04",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2560,
-608
],
"parameters": {
"width": 436,
"height": 464,
"content": "## \ud83e\udde0 Auto-Cluster Topics for AI Discovery\n\n### How it works\nThis workflow scrapes webpage content from a Google Sheet, uses AI to extract entities and keywords, assigns topical clusters and subclusters, then suggests internal linking opportunities. It's built to strengthen topical authority for LLM-based search engines like ChatGPT, Perplexity, and Gemini.\n\n### Setup steps\n1. Connect your Google Sheets OAuth2 credential\n2. Connect your OpenAI API credential (uses GPT-4o-mini)\n3. Add a Google Sheet with a column named **URL**\n4. Replace the document ID and sheet name in \"Fetch URL List\" and \"Update Sheet Row\"\n5. Run manually or let it trigger weekly via the schedule"
},
"typeVersion": 1
},
{
"id": "df98df32-2467-4a04-b91c-39d1f107438d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2560,
-80
],
"parameters": {
"color": 2,
"width": 486,
"height": 338,
"content": "## \ud83d\udce5 Input & Batch Processing\nFetches URLs from Google Sheets and splits them into batches for sequential processing to avoid rate limits."
},
"typeVersion": 1
},
{
"id": "a54710ac-d5b3-42da-9011-a38e1ad010c6",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1936,
-160
],
"parameters": {
"color": 2,
"width": 522,
"height": 240,
"content": "## \ud83c\udf10 HTML Scraping & Extraction\nFetches the raw HTML and extracts all heading tags (H1\u2013H6) to analyze page structure."
},
"typeVersion": 1
},
{
"id": "406b7b71-496c-45d9-971f-090099ec6b2b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
-208
],
"parameters": {
"color": 2,
"width": 610,
"height": 530,
"content": "## \ud83e\udd16 AI-Powered Entity & Keyword Extraction\nUses GPT-4o-mini to analyze headings and extract entities, keywords, topics, and a one-paragraph summary for each page."
},
"typeVersion": 1
},
{
"id": "4dccbe78-cf31-4ab6-8f0a-825d4323b8b0",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-720,
-208
],
"parameters": {
"color": 2,
"width": 438,
"height": 536,
"content": "## \ud83d\udcc2 Cluster & Subcluster Assignment\nGroups pages into high-level clusters and subclusters based on semantic similarity to build topical authority."
},
"typeVersion": 1
},
{
"id": "3b120f52-5a9a-42c4-85ce-05347943e877",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-208
],
"parameters": {
"color": 2,
"width": 646,
"height": 512,
"content": "## \ud83d\udd17 Internal Linking Suggestions\nRecommends 3\u20135 related URLs from your dataset to strengthen cross-linking and boost AI discoverability."
},
"typeVersion": 1
},
{
"id": "e4eba05e-5db6-42f6-9293-99460d8b651c",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-208
],
"parameters": {
"color": 2,
"width": 498,
"height": 408,
"content": "## \ud83d\udcbe Update Google Sheets\nWrites all extracted data, clusters, and link suggestions back to the sheet for easy review and action."
},
"typeVersion": 1
},
{
"id": "54422aac-1b30-42e6-82d2-19b4d19b7bc1",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
320
],
"parameters": {
"color": 3,
"width": 320,
"height": 156,
"content": "## \ud83d\udd10 Credentials & Security\nUse OAuth2 for Google Sheets and API keys for OpenAI. Replace sample document IDs and workspace references before deploying."
},
"typeVersion": 1
},
{
"id": "b4083bc4-48ff-4ed9-b3a1-30ede6841458",
"name": "Fetch URL List from Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-2240,
48
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 393476893,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit#gid=393476893",
"cachedResultName": "URL Data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit?usp=drivesdk",
"cachedResultName": "sample_leads_50"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4
},
{
"id": "1041c270-8eed-4d94-8328-7179c3dcdbc9",
"name": "Split URLs In Batches",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-2016,
48
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "e7d5d25d-c51f-4ec3-926b-3d073cf30fb9",
"name": "Fetch HTML from URL",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1792,
-80
],
"parameters": {
"url": "={{$json[\"URL\"]}}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "97387a78-0418-48d3-9f49-0eee88e26c2e",
"name": "Extract Headings (H1-H6)",
"type": "n8n-nodes-base.html",
"position": [
-1568,
-80
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "h1",
"cssSelector": "h1"
},
{
"key": "h2",
"cssSelector": "h2"
},
{
"key": "h3",
"cssSelector": "h3"
},
{
"key": "h4",
"cssSelector": "h4"
},
{
"key": "h5",
"cssSelector": "h5"
},
{
"key": "h6",
"cssSelector": "h6"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f9b221e7-5d58-49bf-ab37-5bbbd8e5740f",
"name": "Prepare Sheet Update",
"type": "n8n-nodes-base.set",
"position": [
512,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1b2c3d4",
"name": "title",
"type": "string",
"value": "={{ $('Format Extracted Data').item.json.title }}"
},
{
"id": "b2c3d4e5",
"name": "entities",
"type": "string",
"value": "={{ $('Format Extracted Data').item.json.entities }}"
},
{
"id": "c3d4e5f6",
"name": "keywords",
"type": "string",
"value": "={{ $('Format Extracted Data').item.json.keywords }}"
},
{
"id": "d4e5f6g7",
"name": "summary",
"type": "string",
"value": "={{ $('Format Extracted Data').item.json.summary }}"
},
{
"id": "e5f6g7h8",
"name": "cluster",
"type": "string",
"value": "={{ $('Format Cluster Data').item.json.cluster }}"
},
{
"id": "f6g7h8i9",
"name": "subcluster",
"type": "string",
"value": "={{ $('Format Cluster Data').item.json.subcluster }}"
},
{
"id": "g7h8i9j0",
"name": "internal_link_suggestions",
"type": "string",
"value": "={{ $json.output.suggestions }}"
},
{
"id": "h8i9j0k1",
"name": "status",
"type": "string",
"value": "processed"
},
{
"id": "50201a25-4573-4940-82f5-2e8144a398f6",
"name": "URL",
"type": "string",
"value": "={{ $('Split URLs In Batches').item.json.URL }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5838cef3-4266-4ff5-a81b-19464a7fe3fe",
"name": "Update Sheet Row",
"type": "n8n-nodes-base.googleSheets",
"position": [
736,
32
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "h1",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "h1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "h2_list",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "h2_list",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "h3_list",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "h3_list",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "entities",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "entities",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "keywords",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "keywords",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "summary",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "cluster",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "cluster",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "subcluster",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "subcluster",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "internal_link_suggestions",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "internal_link_suggestions",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"URL"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 393476893,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit#gid=393476893",
"cachedResultName": "URL Data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit?usp=drivesdk",
"cachedResultName": "sample_leads_50"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4
},
{
"id": "aeac4ab0-591b-4028-a8d0-80a45a303d04",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1344,
144
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "c95cbb62-6c94-43ec-9cc3-2295f7eca6a2",
"name": "Memory Buffer",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-1216,
144
],
"parameters": {
"sessionKey": "\"GEO Defined\"",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "e0c97008-c85e-487b-afd2-86973f59e57f",
"name": "Structured JSON Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1088,
144
],
"parameters": {
"jsonSchemaExample": "{\n \"title\": \"string\",\n \"entities\": [\"entity1\", \"entity2\"],\n \"keywords\": [\"keyword1\", \"keyword2\"],\n \"topics\": [\"topic1\", \"topic2\"],\n \"summary\": \"one paragraph summary\"\n}"
},
"typeVersion": 1.3
},
{
"id": "419cefdf-c459-4032-95b7-dd5c6e8477b7",
"name": "AI Agent - Extract Entities & Keywords",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1280,
-80
],
"parameters": {
"text": "=Analyze this webpage:\n\nURL: {{$json[\"URL\"]}}\nH1: {{$json[\"h1\"]}}\nH2: {{$json[\"h2_list\"]}}\nH3: {{$json[\"h3_list\"]}}\n\nExtract:\n- title\n- entities\n- keywords\n- topics\n- summary\n\nReturn STRICT JSON only.\n",
"options": {
"systemMessage": "=You are an SEO + LLM-focused content analysis engine.\n\nYour job is to analyze webpage structure and extract semantic signals AI search engines use.\n\nReturn ONLY valid JSON matching this exact format:\n\n{\n \"title\": \"string\",\n \"entities\": [\"entity1\", \"entity2\"],\n \"keywords\": [\"keyword1\", \"keyword2\"],\n \"topics\": [\"topic1\", \"topic2\"],\n \"summary\": \"one paragraph summary\"\n}\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "2743a52b-1796-414f-aeaf-858f31b25721",
"name": "OpenAI Chat Model for Clustering",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-656,
144
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "7405ae78-a231-4ddb-955e-d580cd2cd058",
"name": "Memory Buffer for Clustering",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-528,
144
],
"parameters": {
"sessionKey": "\"GEO Defined\"",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "05fd1330-6c14-4ddc-9c34-510b119e97df",
"name": "Cluster JSON Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-400,
144
],
"parameters": {
"jsonSchemaExample": "{\n \"cluster\": \"string\",\n \"subcluster\": \"string\"\n}"
},
"typeVersion": 1.3
},
{
"id": "ddfcfe0f-7648-4c40-addf-edd409e4cecd",
"name": "AI Agent - Assign Topic Clusters",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-592,
-80
],
"parameters": {
"text": "=Based on:\nEntities: {{$json[\"entities\"]}}\nKeywords: {{$json[\"keywords\"]}}\nTopics: {{$json[\"topics\"]}}\nURL: {{ $('Split URLs In Batches').item.json.URL }}\n\nReturn cluster and subcluster in JSON.\n",
"options": {
"systemMessage": "=You are a topical authority clustering engine.\n\nAssign each page to a high-level cluster and subcluster relevant for LLM search.\n\nReturn JSON ONLY:\n\n{\n \"cluster\": \"string\",\n \"subcluster\": \"string\"\n}\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "e0f5f512-a657-4c53-8562-7d48e018566a",
"name": "Format Extracted Data",
"type": "n8n-nodes-base.set",
"position": [
-880,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c840f40b-b8c5-4385-998a-1428682ff7cf",
"name": "title",
"type": "string",
"value": "={{ $json.output.title }}"
},
{
"id": "d8528cc0-76a0-482a-8036-fafc127f1955",
"name": "entities",
"type": "string",
"value": "={{ $json.output.entities }}"
},
{
"id": "376ed11f-4df7-4ae4-b94b-dc52fe2abe56",
"name": "keywords",
"type": "string",
"value": "={{ $json.output.keywords }}"
},
{
"id": "3e18188e-83e4-4286-be74-a092f7b6f284",
"name": "topics",
"type": "string",
"value": "={{ $json.output.topics }}"
},
{
"id": "e56d81e0-de4c-4353-acc6-34252503e40f",
"name": "summary",
"type": "string",
"value": "={{ $json.output.summary }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a4478e85-6189-4fca-8db1-b69948121353",
"name": "Format Cluster Data",
"type": "n8n-nodes-base.set",
"position": [
-192,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cdd9b343-a93b-4d86-8973-3c5be9fe5696",
"name": "cluster",
"type": "string",
"value": "={{ $json.output.cluster }}"
},
{
"id": "86fdb121-4e82-49ab-b459-0f847cf1b454",
"name": "subcluster",
"type": "string",
"value": "={{ $json.output.subcluster }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "906978b1-863d-45d8-8f47-85baaf1a1966",
"name": "OpenAI Chat Model for Links",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
48,
144
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "a6c6bcbb-e8c4-48a4-9867-bcfd72eb8a8c",
"name": "Memory Buffer for Links",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
176,
144
],
"parameters": {
"sessionKey": "\"GEO Defined\"",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "cb21d273-85ac-4ece-81c0-5bf82c48bd2d",
"name": "Link Suggestions JSON Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
304,
144
],
"parameters": {
"jsonSchemaExample": "{\n \"suggestions\": [\"url1\", \"url2\", \"url3\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "229bd06c-1738-4f5a-82da-f0ef29e27728",
"name": "Weekly Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2480,
48
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
]
}
]
}
},
"typeVersion": 1.2
},
{
"id": "19fc3426-1e05-4a5c-8396-ae435acf9da6",
"name": "AI Agent - Generate Internal Links",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
112,
-80
],
"parameters": {
"text": "=Based on this page:\nURL: {{ $('Split URLs In Batches').item.json.URL }}\nCluster: {{$json[\"cluster\"]}}\nSubcluster: {{$json[\"subcluster\"]}} \nentities:{{ $('Format Extracted Data').item.json.entities }}\n\nGiven these available URLs:\n{{$items(\"Fetch URL List from Google Sheets\").map(i => i.json.URL)}}\n\nReturn 3\u20135 related URLs as suggestions.\n",
"options": {
"systemMessage": "=You are an internal linking strategy engine.\nRecommend URLs from this dataset that should internally link together to strengthen topical authority.\n\nReturn ONLY JSON:\n\n{\n \"suggestions\": [\"url1\", \"url2\", \"url3\"]\n}\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "fbc0b7f5-9eff-4036-99eb-c6eb7cf0820f",
"connections": {
"Memory Buffer": {
"ai_memory": [
[
{
"node": "AI Agent - Extract Entities & Keywords",
"type": "ai_memory",
"index": 0
}
]
]
},
"Update Sheet Row": {
"main": [
[
{
"node": "Split URLs In Batches",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent - Extract Entities & Keywords",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Cluster JSON Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent - Assign Topic Clusters",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Fetch HTML from URL": {
"main": [
[
{
"node": "Extract Headings (H1-H6)",
"type": "main",
"index": 0
}
]
]
},
"Format Cluster Data": {
"main": [
[
{
"node": "AI Agent - Generate Internal Links",
"type": "main",
"index": 0
}
]
]
},
"Prepare Sheet Update": {
"main": [
[
{
"node": "Update Sheet Row",
"type": "main",
"index": 0
}
]
]
},
"Format Extracted Data": {
"main": [
[
{
"node": "AI Agent - Assign Topic Clusters",
"type": "main",
"index": 0
}
]
]
},
"Split URLs In Batches": {
"main": [
[],
[
{
"node": "Fetch HTML from URL",
"type": "main",
"index": 0
}
]
]
},
"Structured JSON Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent - Extract Entities & Keywords",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Memory Buffer for Links": {
"ai_memory": [
[
{
"node": "AI Agent - Generate Internal Links",
"type": "ai_memory",
"index": 0
}
]
]
},
"Weekly Schedule Trigger": {
"main": [
[
{
"node": "Fetch URL List from Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Extract Headings (H1-H6)": {
"main": [
[
{
"node": "AI Agent - Extract Entities & Keywords",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model for Links": {
"ai_languageModel": [
[
{
"node": "AI Agent - Generate Internal Links",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Link Suggestions JSON Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent - Generate Internal Links",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Memory Buffer for Clustering": {
"ai_memory": [
[
{
"node": "AI Agent - Assign Topic Clusters",
"type": "ai_memory",
"index": 0
}
]
]
},
"AI Agent - Assign Topic Clusters": {
"main": [
[
{
"node": "Format Cluster Data",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model for Clustering": {
"ai_languageModel": [
[
{
"node": "AI Agent - Assign Topic Clusters",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Fetch URL List from Google Sheets": {
"main": [
[
{
"node": "Split URLs In Batches",
"type": "main",
"index": 0
}
]
]
},
"AI Agent - Generate Internal Links": {
"main": [
[
{
"node": "Prepare Sheet Update",
"type": "main",
"index": 0
}
]
]
},
"AI Agent - Extract Entities & Keywords": {
"main": [
[
{
"node": "Format Extracted Data",
"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.
googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Streamline AI-focused SEO research by automatically analyzing URLs stored in Google Sheets, extracting semantic signals from each webpage, and generating high-quality topic clusters for AI discovery. 🤖🔍 This automation fetches URLs weekly, scrapes headings (H1–H6), extracts…
Source: https://n8n.io/workflows/11075/ — 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
Top Branch Workflow The Data Scientist: Ingest: Pulls historical sales data from Google Sheets. Math Engine: Runs 7 statistical algorithms (e.g., Seasonal Naive, Linear Trend, Regression). It backtest
⚠️ 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