AutomationFlowsData & Sheets › Extract and Analyze Google AI Overviews with LLM for SEO Recommendations

Extract and Analyze Google AI Overviews with LLM for SEO Recommendations

ByRoman Rozenberger @romek on n8n.io

• Extract AI Overviews from Google Search - Receives data from browser extension via webhook • Convert HTML to Markdown - Automatically processes and cleans AI Overview content • Store in Google Sheets - Archives all extracted AI Overviews with metadata and sources • Generate…

Webhook trigger★★★★☆ complexityAI-powered21 nodesGoogle SheetsHTTP RequestOpenRouter ChatChain Llm
Data & Sheets Trigger: Webhook Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4822 — we link there as the canonical source.

This workflow follows the Chainllm → 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
{
  "id": "LCD5jIxtbjApUGd6",
  "name": "Extract and Analyze Google AI Overviews with LLM for SEO Recommendations",
  "tags": [],
  "nodes": [
    {
      "id": "d54405a8-ce00-4f39-bcea-fae97338a27f",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -120,
        20
      ],
      "parameters": {
        "path": "ai-overview-extractor-template-123456789",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2
    },
    {
      "id": "2853ad27-91c9-405a-b696-b077823a1021",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -100,
        740
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "9dfbb1ee-6979-49bd-8963-f1b7f339feb5",
      "name": "Save AI Overview to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Send all data to Sheets",
      "position": [
        620,
        20
      ],
      "parameters": {
        "columns": {
          "value": {
            "key": "={{ $json.searchQuery }} {{ $json.extractedAt }}",
            "task": "create guidelines",
            "sources": "={{ \"\" || $json.sources.map(item => `* ${item.title} - ${item.url.extractDomain()} - ${item.url}`).join('\\n') }}",
            "markdown": "={{ $json.markdown }}",
            "extractedAt": "={{ $json.extractedAt }}",
            "searchQuery": "={{ $json.searchQuery }}"
          },
          "schema": [
            {
              "id": "extractedAt",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "extractedAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "searchQuery",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "searchQuery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sources",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "sources",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "markdown",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "markdown",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "myURL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "myURL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "task",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "task",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "guidelines",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "guidelines",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "key",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "key",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "key"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "cellFormat": "RAW"
        },
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "b2453757-c908-4747-8029-2d24e5690be4",
      "name": "myURL Exists",
      "type": "n8n-nodes-base.filter",
      "notes": "Only records with myURL",
      "position": [
        560,
        840
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "feb9922a-de0c-41d8-93d7-1f92ee7398b2",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.myURL }}",
              "rightValue": ""
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "f48fc7a2-c6ac-4426-9986-e987e5dc9a23",
      "name": "Extract Page Title and H1",
      "type": "n8n-nodes-base.html",
      "notes": "Extract meta title and h1",
      "position": [
        1440,
        800
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "title",
              "cssSelector": "title"
            },
            {
              "key": "h1",
              "cssSelector": "h1"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "d250bdc4-0b58-41f4-afa2-ba82f67d67d6",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "notes": "merge variables by position",
      "position": [
        1660,
        700
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "67d57eb8-2edc-4592-a9e2-0a5c0bade571",
      "name": "Fetch Page Content",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Fetch site",
      "position": [
        1220,
        700
      ],
      "parameters": {
        "url": "={{ $json.myURL }}",
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "8d816cf1-dae5-4a47-9117-ed13dc9a4590",
      "name": "Process URLs in Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        780,
        840
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "d8db7f48-21e3-4f7b-a48a-6931cf397601",
      "name": "Get Current URL Data",
      "type": "n8n-nodes-base.set",
      "notes": "Single item data from loop",
      "position": [
        1000,
        700
      ],
      "parameters": {
        "options": {},
        "includeOtherFields": true
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "c82ae7fe-8369-461c-8661-ebd51371138b",
      "name": "Save SEO Guidelines to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "send guidelines to sheets",
      "position": [
        2260,
        700
      ],
      "parameters": {
        "columns": {
          "value": {
            "task": "guidelines created",
            "guidelines": "={{ $json.text }}",
            "row_number": "={{ $('Get Current URL Data').item.json.row_number }}"
          },
          "schema": [
            {
              "id": "extractedAt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "extractedAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "searchQuery",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "searchQuery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sources",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sources",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "markdown",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "markdown",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "myURL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "myURL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "task",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "task",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "guidelines",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "guidelines",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "key",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "key",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "ecd9fbfa-328f-4507-a662-0c0d6e6f620e",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -100,
        940
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "90c30cd2-9b88-48e0-8846-065340014f29",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        2480,
        840
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "e0516ed5-69cd-4543-8816-aa70579aef2a",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "notes": "Limit to 10 items",
      "position": [
        340,
        840
      ],
      "parameters": {
        "maxItems": 10
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "30c3e6fb-044b-4d8c-8da2-5e67d95f397b",
      "name": "Get URLs to Analyze",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Get rows with task : \"create guidelines\" and without guidelines",
      "position": [
        140,
        800
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "create guidelines",
              "lookupColumn": "task"
            },
            {
              "lookupColumn": "guidelines"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE-HPvXfdgVeXowr8a7kU4uHk/edit?gid=0#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "2253258b-846f-445d-baa8-7cb754a32738",
      "name": "Gemini 2.5 Pro Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "notes": "You can change model or node",
      "position": [
        1880,
        920
      ],
      "parameters": {
        "model": "google/gemini-2.5-pro-preview",
        "options": {
          "responseFormat": "text"
        }
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "5eeb0cd6-7fd9-4fd0-9053-08607bdc824c",
      "name": "Convert AI Overview to Markdown",
      "type": "n8n-nodes-base.markdown",
      "notes": "convert HTML to Markdown",
      "position": [
        320,
        20
      ],
      "parameters": {
        "html": "={{ $json.htmlContent }}",
        "options": {},
        "destinationKey": "markdown"
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "85e2d470-f80a-44db-8166-31b2883a310b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -200,
        -100
      ],
      "parameters": {
        "width": 1060,
        "height": 320,
        "content": "## Get data\nThis flow get data from webhook and stores it into Google Sheets. After you get data in sheets you need paste your site url in myURL and wait for guidelines."
      },
      "typeVersion": 1
    },
    {
      "id": "cc15d895-9211-4480-8593-97c5e7f84697",
      "name": "Generate SEO Recommendations",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "notes": "Create Ai Overviews based guidelines ",
      "position": [
        1880,
        700
      ],
      "parameters": {
        "text": "=# KEYWORD:\n{{ $('Get Current URL Data').item.json.searchQuery }}\n\n# PAGE CONTENT:\n{{ $json.data }}\n\n# AI OVERVIEW CONTENT:\n{{ $('Get Current URL Data').item.json.markdown }}\n\n# Task\nDescribe exactly what I need to change in my page content, and specify where to add or modify things. Provide clear, actionable instructions so I can implement the changes quickly.\n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=Your name is Alice, you are a helpful assistant.\n\nThe user will provide you with:\n- KEYWORD\n- PAGE CONTENT\n- AI OVERVIEWS (Google's Overview)\n\nAlice is an expert on AI Overviews (AI Overview) results and adapting content to meet AI Overviews (AI Overview) requirements.\n\nAlice's task is to prepare the content that should be placed on the page. This content should be what is missing from the PAGE CONTENT but is present in the AI OVERVIEWS.\n\nAlice responds directly in Markdown format and provides only the answer with the information about what should be included, starting directly with the content.\n\nWhen suggesting changes or additions:\n- Focus on identifying missing information or areas for improvement in the PAGE CONTENT based on AI OVERVIEWS.\n- Provide concise, actionable instructions. For example:\n    - \"Consider adding a brief mention of [specific topic from AI Overview] in the section discussing [relevant part of PAGE CONTENT].\"\n    - \"The AI Overview highlights [key fact/detail]. You could integrate this into the paragraph starting with '...' by adding a sentence like: '[brief example sentence incorporating the fact/detail]'.\"\n    - \"To cover [new tool/concept from AI Overview], consider creating a new subsection under [existing heading] titled '[suggested subsection title]'. This subsection should briefly outline its [key feature 1] and [key feature 2].\"\n- Instead of providing fully drafted new sections or long paragraphs, suggest the key points, topics, or specific short phrases/sentences to incorporate.\n- If existing text needs modification, clearly state what needs to change and provide a concise suggestion. For example:\n  \"In the sentence: `The old sentence was like this.`, consider rephrasing to: `The new, improved sentence could be like this.` to better reflect [reason based on AI Overview].\"\n- The goal is to guide the user to make targeted updates quickly, not to rewrite large portions of their content for them. Emphasize specific, small changes.\n\nAlice does not use ``` code blocks when starting the response.\n\n<writing_guidelines>\n- Alice write regular hyphens (-) instead of en dashes (\u2013) or em dashes (\u2014) .\n- Alice begins with the most crucial and relevant information that directly addresses the problem.\n- Alice is specific and create useful text. Alice provides specific, useful, and actionable information without superfluous content.\n- Clarity and precision: be certain and specific. Cut the fluff. Bold important terms, definitions, and their entire explanations. For example: **No contact: This refers to completely cutting off communication with an ex-partner as a crucial step in the emotional healing process.**\n- Inclusive language: include diverse perspectives and inclusive language.\n- No summarization: do not include summarization or recapitulation.\n- Readability: ensure the text is highly readable, using short sentences, simple words, and clear, concise language.\n- Grammar and style: avoid grammatical and stylistic errors. Ensure proper punctuation and sentence structure.\n- MARKDOWN formatting: ensure all tags are properly used and closed. Do not use class or id attributes.\n- Consistency: maintain consistency in terminology and style throughout the content.\n- Expertise: demonstrate expertise and authority in the subject matter. Use reliable sources and evidence to support statements.\n- Engagement: write in an engaging manner to keep the reader interested. Use storytelling, analogies, and examples where appropriate.\n- Avoid creating subheadings\n- To create inline code, wrap with backticks ` .\n- To create a code block, either indent each line by 4 spaces, or place 3 backticks ``` on a line above and below the code block.\n</writing_guidelines>\n\n<language>\n- Use concise, clear wording.\n- Start questions with \"what,\" \"how,\" and \"should\" (but avoid overusing \"How to\").\n- Incorporate action verbs (e.g., improves, increases, prevents).\n- Focus on benefits, risks, and factual information.\n- Use specific terms related to the topic.\n- Avoid generic terms like \"Introduction\", \"Overview\", \"Complete\", \"Ultimate\", \"Definitive\".\n- Use phrases like \"What is it?\" or \"What is\u2026\" instead of writing \"Definition\".\n- Don't use phrases like \"everything you need to know\" or \"a deep dive into\".\n- Skip words like \"essential\", \"crucial\", \"vital\".\n- Omit \"In Today's World\" or \"Modern Approach to\".\n- Avoid buzzwords/jargon unless necessary.\n- Don't start with \"understanding\" or \"exploring\".\n- Exclude filler words like \"really\", \"actually\", \"basically\".\n- Limit use of gerunds (e.g., \"understanding\", \"implementing\", \"analyzing\").\n- Don't use capital letter after \":\" sign.\n- Use the spelling, case and grammar rules for the **PAGE CONTENT** language.\n- Cover various aspects of a topic (benefits, risks, types, comparisons).\n- Include relevant numerical data.\n- Address common questions and misconceptions.\n- Provide practical advice and recommendations.\n- Don't use \"conclusion\" or \"summary\" .\n</language>\n\n<seo_nlp_optimization>\nEnsure the content aligns with SEO best practices and NLP techniques to enhance readability and search engine visibility. Highlight the most relevant information at the beginning of each section.\n</seo_nlp_optimization>\n\nStart directly with the information that needs to be added to be featured in AI Overviews. Nothing more, nothing less."
            },
            {
              "type": "AIMessagePromptTemplate",
              "message": "=CONTENT TO ADD:\n"
            }
          ]
        },
        "promptType": "define"
      },
      "notesInFlow": true,
      "typeVersion": 1.7
    },
    {
      "id": "7443adb0-440c-4223-8362-55641f0afa21",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -200,
        480
      ],
      "parameters": {
        "width": 2920,
        "height": 680,
        "content": "## Guidelines flow\nThis flow generates guidelines and stores it in Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "5607f7b6-c6b2-4325-95ae-1d749959946b",
      "name": "Extract Webhook Data",
      "type": "n8n-nodes-base.set",
      "notes": "get only necessary data from webhook",
      "position": [
        100,
        20
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "c5ac7498-8037-4daf-8964-c41a9e2c0ddd",
              "name": "htmlContent",
              "type": "string",
              "value": "={{ $json.body.aiOverview.htmlContent }}"
            },
            {
              "id": "96170e13-fed1-4f4d-a993-c1487d254b2c",
              "name": "sources",
              "type": "array",
              "value": "={{ $json.body.sources }}"
            },
            {
              "id": "79f421d4-3da7-4817-9f38-e26c49b8bd47",
              "name": "extractedAt",
              "type": "string",
              "value": "={{ $json.body.metadata.extractedAt.toDateTime()}}"
            },
            {
              "id": "d7129419-db99-40e7-96d2-7893f9474182",
              "name": "searchQuery",
              "type": "string",
              "value": "={{ $json.body.searchQuery }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "93567700-0a9e-4a19-934e-ee6d98eb9ba6",
      "name": "Convert Page Content to Markdown",
      "type": "n8n-nodes-base.markdown",
      "notes": "convert html to markdown",
      "position": [
        1440,
        600
      ],
      "parameters": {
        "html": "={{ $json.data }}",
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9893a353-6861-4b33-8cad-51398078889b",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Process URLs in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "myURL Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Generate SEO Recommendations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Extract Webhook Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "myURL Exists": {
      "main": [
        [
          {
            "node": "Process URLs in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get URLs to Analyze",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Page Content": {
      "main": [
        [
          {
            "node": "Convert Page Content to Markdown",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract Page Title and H1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get URLs to Analyze": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Webhook Data": {
      "main": [
        [
          {
            "node": "Convert AI Overview to Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini 2.5 Pro Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate SEO Recommendations",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get Current URL Data": {
      "main": [
        [
          {
            "node": "Fetch Page Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process URLs in Batches": {
      "main": [
        [],
        [
          {
            "node": "Get Current URL Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Page Title and H1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Generate SEO Recommendations": {
      "main": [
        [
          {
            "node": "Save SEO Guidelines to Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save SEO Guidelines to Sheets": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert AI Overview to Markdown": {
      "main": [
        [
          {
            "node": "Save AI Overview to Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Page Content to Markdown": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Get URLs to Analyze",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

• Extract AI Overviews from Google Search - Receives data from browser extension via webhook • Convert HTML to Markdown - Automatically processes and cleans AI Overview content • Store in Google Sheets - Archives all extracted AI Overviews with metadata and sources • Generate…

Source: https://n8n.io/workflows/4822/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

The workflow loads a list of test cases from a Google Sheet (previous results stored from an LLM) For each test case, we execute a call to an LLM judge in parallel (using HTTP Request + Webhook nodes)

Output Parser Structured, Google Sheets, HTTP Request +2
Data & Sheets

Lead Generating Web Scraper & CRM Automation. Uses httpRequest, airtable, googleSheets, gmail. Scheduled trigger; 38 nodes.

HTTP Request, Airtable, Google Sheets +4
Data & Sheets

This workflow demonstrates a simple way to run evals on a set of test cases stored in a Google Sheet.

Google Sheets, Output Parser Structured, Chain Llm +3
Data & Sheets

Splitout Code. Uses lmChatOpenRouter, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 11 nodes.

OpenRouter Chat, Output Parser Structured, HTTP Request +2
Data & Sheets

This workflow automates web scraping of Amazon search result pages by retrieving raw HTML, cleaning it to retain only the relevant product elements, and then using an LLM to extract structured product

OpenRouter Chat, Output Parser Structured, HTTP Request +2