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.
AI Customer Service Automation - Portfolio. Uses googleSheets, httpRequest, agent, memoryBufferWindow. Webhook trigger; 91 nodes.