Prompt: How would you build: Ai Overview Analyzer?

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 5
- Node Types: @n8n/n8n-nodes-langchain.agent, @n8n/n8n-nodes-langchain.memoryBufferWindow, @n8n/n8n-nodes-langchain.lmChatOpenAi, @n8n/n8n-nodes-langchain.toolWorkflow, @n8n/n8n-nodes-langchain.chatTrigger

**Logic Flow**:
1. **Trigger**: @n8n/n8n-nodes-langchain.chatTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "AI Overview Analyzer",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.3,
      "position": [
        0,
        0
      ],
      "id": "72ac6c8d-a373-4d71-849a-75ed6716b9b1",
      "name": "When chat message received",
      "webhookId": "715bcc67-a6b6-4334-8141-83c123f35917"
    },
    {
      "parameters": {
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        304,
        240
      ],
      "id": "f16346fd-e166-4d5e-973e-0db4412d20e6",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1",
          "mode": "list",
          "cachedResultName": "gpt-4.1"
        },
        "options": {
          "temperature": 0
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        144,
        240
      ],
      "id": "7887d008-b881-4387-91cb-cd824bbd553f",
      "name": "GPT-4.1",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "description": "Call this tool to get the AI Overview from Google.",
        "workflowId": {
          "__rl": true,
          "value": "4ViOjawp2E5PbJsu",
          "mode": "list",
          "cachedResultName": "Analyze AI Overview"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "gl": "={{ $fromAI('country') }}",
            "q": "={{ $fromAI('query') }}",
            "location": "={{ $fromAI('location') }}",
            "hl": "={{ $fromAI('host_language') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "gl",
              "displayName": "gl",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "q",
              "displayName": "q",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "location",
              "displayName": "location",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "hl",
              "displayName": "hl",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        464,
        240
      ],
      "id": "38bb6138-e3c9-4850-aa4b-bc5b5d28f2ed",
      "name": "Analyze AI Overview"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "=You are an elite SEO Analyst Agent. Your purpose is to deconstruct Google's AI Overviews with surgical precision, providing clients with a decisive competitive advantage. You don't just report data; you interpret it to reveal the underlying logic of the SERP and build winning content strategies.\n\n**1. YOUR PRIMARY TOOL: `Analyze AI Overview`**\n\nYou have one tool: `Analyze AI Overview`.\n\n*   **Function:** It extracts and analyzes the AI Overview for a given search query, country, and language.\n*   **Parameters:**\n    *   `query` (string, required): The search term to analyze.\n    *   `gl` (string, required): The country code (**two-letter ISO 3166-1 alpha-2**).\n    *   `hl` (string, required): The language code (**two-letter ISO 3166-1 alpha-2**).\n    *   `location` (string, optional): A specific geographic location.\n\n*   **CRITICAL RULE:** You must translate user requests like \"Germany\" or \"the UK\" into the correct two-letter codes for `gl` and `hl` (e.g., Germany -> `gl: 'de'`, `hl: 'de'`). This is a core responsibility.\n\n**2. THE DATA YOU WILL RECEIVE**\n\nAfter calling the tool, you will receive a JSON object. Your analysis depends on a deep understanding of each key:\n\n*   `aiOverview` (object):\n    *   **What it is:** The raw, cleaned AI-generated result from Google. This is your **ground truth**.\n    *   **What it means:** This object reveals the *narrative, tone, and language* that Google has determined best answers the user's query. It provides the context for everything else. Use its text to pull direct quotes and understand the *relationship* between different topics.\n\n*   `categories` (array of strings):\n    *   **What it is:** The main thematic sections Google used to structure its answer.\n    *   **What it means:** This is Google's explicit blueprint for the ideal article structure. These are your `<h2>` tags. They reveal the critical sub-intents you must satisfy.\n\n*   `mentionedEntities` (array of strings):\n    *   **What it is:** A list of all key products, brands, concepts, or people that Google featured.\n    *   **What it means:** These are the non-negotiable topics for your content. Comprehensive coverage of these entities is essential for demonstrating topical breadth.\n\n*   `dominantSources` (array of objects):\n    *   **What it is:** A sorted list of the websites Google cited most frequently.\n    *   **What it means:** This is your direct measure of **topical authority**. These are your primary competitors. Analyze their article `titles` to decode the winning content format (e.g., \"Top 10...\", \"Ultimate Guide...\", \"X vs Y...\").\n\n**3. YOUR GOAL AND WORKFLOW**\n\nYour goal is to deliver a strategic SEO consultation in a clear, structured report.\n\n1.  **Acknowledge and Invoke:** Confirm the user's request, correctly identify the `query` and country, and immediately call the `Analyze AI Overview` tool with the correct ISO codes.\n2.  **Receive and Synthesize:** Once you receive the data, perform a deep analysis.\n3.  **Construct Your Report:** Present your findings to the user in a structured report with the following sections. **You must integrate insights from the `aiOverview` object throughout your analysis.**\n\n    *   **Executive Summary & User Intent:**\n        *   Begin with a concise, one-sentence summary of the AI Overview's main point.\n        *   Examine the initial paragraphs in `aiOverview.text_blocks`—Google often provides a direct thesis statement here.\n        *   Use the `categories` array to explain the different facets and sub-intents of the query (e.g., \"Google sees this query as having three parts: understanding the types, knowing the benefits, and comparing the top options.\").\n\n    *   **Content Blueprint: How to Rank:**\n        *   Provide a recommended structure for an article. Advise the user to use the `categories` as their main headings (`<h2>`s).\n        *   Instruct them to create sections for each of the `mentionedEntities`.\n        *   **Crucially, advise them to use the snippets and paragraphs within the `aiOverview` object to understand the specific angles, features, and keywords Google has chosen to highlight for each entity.** This is the guide for *what to write* in each section.\n\n    *   **Competitive Landscape & Authority:**\n        *   Identify the top 3-5 `dominantSources`. Explain *why* they are authoritative (high citation count).\n        *   Analyze their article titles to reveal the proven content format. State clearly: \"The winning format for this query is a comprehensive listicle that includes the current year.\"\n\n    *   **Actionable SEO Strategy:**\n        *   Provide a final, powerful summary. The goal is not just to create a blog post, but to create a resource that is a better, more comprehensive version of the AI Overview itself.\n        *   **Example:** \"To rank for this query, your content must mirror the narrative and structure of the AI Overview. Create a comprehensive guide using the identified categories as your roadmap. Cover all mentioned entities in detail, using the language and angles Google has already prioritized. By doing this, you position your content as an authoritative resource that directly satisfies the search intent, similar to top-cited sources like [Source 1] and [Source 2].\""
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        208,
        0
      ],
      "id": "070d5d59-e2c9-4577-9391-2107be8d9abd",
      "name": "AI Overview Analyzer"
    }
  ],
  "pinData": {},
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Overview Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Overview Analyzer",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4.1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Overview Analyzer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Analyze AI Overview": {
      "ai_tool": [
        [
          {
            "node": "AI Overview Analyzer",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a2ce017e-2921-486a-a414-6a4bb0614743",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "3BRvyoqRuX4QYWWV",
  "tags": []
}
```


Prompt: How would you build: Analyze Ai Overview?

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 10
- Node Types: n8n-nodes-base.set, n8n-nodes-base.executeWorkflowTrigger, n8n-nodes-base.if, n8n-nodes-base.httpRequest, n8n-nodes-base.code, n8n-nodes-base.merge

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Analyze AI Overview",
  "nodes": [
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "gl"
            },
            {
              "name": "q"
            },
            {
              "name": "location"
            },
            {
              "name": "hl"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -624,
        320
      ],
      "id": "1fadcfb7-077e-43f2-810c-27be1c0f6575",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "url": "https://serpapi.com/search",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "serpApi",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "gl",
              "value": "={{ $json.gl }}"
            },
            {
              "name": "q",
              "value": "={{ $json.q }}"
            },
            {
              "name": "location",
              "value": "={{ $json.location }}"
            },
            {
              "name": "hl",
              "value": "={{ $json.hl }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -400,
        320
      ],
      "id": "a66d8866-4e88-4216-8de2-d78bda030c61",
      "name": "GET SERP Results",
      "retryOnFail": true,
      "waitBetweenTries": 5000,
      "credentials": {
        "serpApi": {
          "id": "ip84lDL75JMRWLKs",
          "name": "SerpAPI Account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d8cbb599-3ec7-446b-be55-9f48e21b4d11",
              "name": "=serpapi_link",
              "value": "={{ $json.ai_overview.serpapi_link }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -176,
        224
      ],
      "id": "57e716b3-86a8-4099-857c-9cdc62d1fbb6",
      "name": "Extract AI Overview Link"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "15ccf2c6-185c-4166-9efb-b899eab4944e",
              "leftValue": "={{ $json.serpapi_link }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        48,
        224
      ],
      "id": "eb887e5d-9c54-4177-b7c2-c1edf0a5a33a",
      "name": "Is Extra Request Required"
    },
    {
      "parameters": {
        "url": "={{ $json.serpapi_link }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "serpApi",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        272,
        176
      ],
      "id": "cc6d4f00-748f-4e53-ac7e-55b838f8511c",
      "name": "GET AI Overview",
      "credentials": {
        "serpApi": {
          "id": "ip84lDL75JMRWLKs",
          "name": "SerpAPI Account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "6dc1587a-9266-43ac-8b0f-c31ce0a1dd2f",
              "name": "ai_overview",
              "value": "={{ $json.ai_overview }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        496,
        176
      ],
      "id": "2fa31f44-37ed-44df-a515-ef058b6c8094",
      "name": "Get AI Overview Content"
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineAll",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        688,
        320
      ],
      "id": "4834b8ff-94ee-4e9a-b000-776204e00194",
      "name": "Merge Results"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "8d52f2cf-85e3-4c78-aa61-e3a05db8b718",
              "name": "ai_overview",
              "value": "={{ $json.ai_overview }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        320
      ],
      "id": "a74e565d-e3da-48b7-9279-8f23a7fde281",
      "name": "Get AI Overview"
    },
    {
      "parameters": {
        "jsCode": "const inputData = items[0].json;\n\n// 1. Top-Level Validation: Check for errors or missing overview data first.\nif (inputData?.ai_overview?.error || !inputData?.ai_overview?.text_blocks) {\n  return [{\n    json: {\n      categories: [],\n      mentionedEntities: [],\n      dominantSources: [],\n      aiOverview: inputData.ai_overview || {}, // Return the object even if it just contains an error\n      parsingError: inputData?.ai_overview?.error || \"No text_blocks found in the AI Overview.\"\n    }\n  }];\n}\n\nconst aiOverview = inputData.ai_overview;\nconst allReferences = aiOverview.references || [];\n\n// 2. Initialize Data Containers\nconst categories = new Set();\nconst mentionedEntities = new Set();\nconst referenceCounts = {};\n\n// --- Recursive Parsing Engine ---\n\n/**\n * Recursively processes an array of text_blocks to extract data.\n * This function can call itself to handle deeply nested structures.\n * @param {Array} blocks - An array of text_block objects.\n */\nfunction parseTextBlocks(blocks) {\n  if (!blocks || !Array.isArray(blocks)) {\n    return;\n  }\n\n  for (let i = 0; i < blocks.length; i++) {\n    const block = blocks[i];\n    if (!block) continue;\n\n    // A. Aggregate all reference indexes found at any level\n    if (block.reference_indexes) {\n      block.reference_indexes.forEach(index => {\n        referenceCounts[index] = (referenceCounts[index] || 0) + 1;\n      });\n    }\n\n    // B. Process Blocks by Type\n    switch (block.type) {\n      case 'heading':\n        if (block.snippet) categories.add(block.snippet.trim());\n        break;\n\n      case 'expandable':\n        if (block.title) categories.add(block.title.trim());\n        parseTextBlocks(block.text_blocks);\n        break;\n\n      case 'paragraph':\n        const nextBlock = blocks[i + 1];\n        if (nextBlock && ['list', 'table', 'comparison'].includes(nextBlock.type)) {\n          if (block.snippet) categories.add(block.snippet.trim());\n        }\n        break;\n\n      case 'list':\n        if (block.list) {\n          block.list.forEach(item => {\n            let entityName = '';\n            if (item.title) {\n              entityName = item.title.replace(':', '').trim();\n            } else if (item.snippet) {\n              entityName = item.snippet.split(/[:.]/)[0].trim();\n            }\n            if (entityName) mentionedEntities.add(entityName);\n\n            if (item.reference_indexes) {\n              item.reference_indexes.forEach(index => {\n                referenceCounts[index] = (referenceCounts[index] || 0) + 1;\n              });\n            }\n            \n            if (item.text_blocks) {\n              parseTextBlocks(item.text_blocks);\n            }\n          });\n        }\n        break;\n\n      case 'comparison':\n        if (block.product_labels) {\n          block.product_labels.forEach(label => mentionedEntities.add(label.trim()));\n        }\n        break;\n        \n      case 'table':\n        if (block.table?.rows?.length > 0) {\n            const firstHeader = block.table.headers?.[0];\n            if (firstHeader) {\n                for (const row of block.table.rows) {\n                    if (row[firstHeader]) {\n                        mentionedEntities.add(row[firstHeader].trim());\n                    }\n                }\n            }\n        }\n        break;\n    }\n  }\n}\n\n// 3. Initial Call to the Recursive Parser\nparseTextBlocks(aiOverview.text_blocks);\n\n// 4. Process and Sort Source Authority\nconst dominantSources = Object.entries(referenceCounts)\n  .map(([index, citations]) => {\n    const refDetails = allReferences.find(ref => ref.index == index);\n    return {\n      source: refDetails?.source || 'Unknown',\n      title: refDetails?.title || 'Unknown',\n      link: refDetails?.link || 'Unknown',\n      citations: citations,\n      index: parseInt(index)\n    };\n  })\n  .sort((a, b) => b.citations - a.citations);\n\n// --- NEW: Clean and Prepare the Original AI Overview ---\n// Create a deep copy to avoid modifying the original input object.\nconst cleanedOverview = JSON.parse(JSON.stringify(aiOverview));\n\n// Remove token-consuming fields that are not needed by the agent for its analysis.\ndelete cleanedOverview.page_token;\ndelete cleanedOverview.serpapi_link;\n\n// 5. Assemble and Return the Final, Comprehensive Data Object\nconst preparedData = {\n  categories: Array.from(categories),\n  mentionedEntities: Array.from(mentionedEntities),\n  dominantSources: dominantSources,\n  aiOverview: cleanedOverview // The cleaned, original overview is now included.\n};\n\nreturn [{\n  json: preparedData\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1056,
        320
      ],
      "id": "86f97f90-7e95-4f50-a1a9-9aa0b2517f9e",
      "name": "Analyze AI Overview",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "3637b044-e944-49d1-a983-d2103c499100",
              "name": "message",
              "value": "={{ $json.error }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1264,
        416
      ],
      "id": "f8aa096d-2ee4-4588-994d-d87bef412bc3",
      "name": "Return Error Message"
    }
  ],
  "pinData": {},
  "connections": {
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "GET SERP Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET SERP Results": {
      "main": [
        [
          {
            "node": "Extract AI Overview Link",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Extract AI Overview Link": {
      "main": [
        [
          {
            "node": "Is Extra Request Required",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Extra Request Required": {
      "main": [
        [
          {
            "node": "GET AI Overview",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET AI Overview": {
      "main": [
        [
          {
            "node": "Get AI Overview Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get AI Overview Content": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Results": {
      "main": [
        [
          {
            "node": "Get AI Overview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get AI Overview": {
      "main": [
        [
          {
            "node": "Analyze AI Overview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze AI Overview": {
      "main": [
        [],
        [
          {
            "node": "Return Error Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0e1cf286-be3b-4818-aee8-93589437147b",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "4ViOjawp2E5PbJsu",
  "tags": []
}
```


Prompt: Create an n8n automation that handles general automation

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 6
- Node Types: @n8n/n8n-nodes-langchain.agent, @n8n/n8n-nodes-langchain.memoryBufferWindow, @n8n/n8n-nodes-langchain.lmChatOpenAi, @n8n/n8n-nodes-langchain.toolWorkflow, @n8n/n8n-nodes-langchain.chatTrigger

**Logic Flow**:
1. **Trigger**: @n8n/n8n-nodes-langchain.chatTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "AI Overview Optimizer",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.3,
      "position": [
        0,
        0
      ],
      "id": "5bd86f24-dc44-422b-af64-9d48f2e75b97",
      "name": "When chat message received",
      "webhookId": "0ee028e9-419a-413a-a3f5-43ad95498ffa"
    },
    {
      "parameters": {
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        192,
        240
      ],
      "id": "8224aa60-4aaf-4157-9367-4b9bfd7bc5d4",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1",
          "mode": "list",
          "cachedResultName": "gpt-4.1"
        },
        "options": {
          "temperature": 0
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        32,
        240
      ],
      "id": "a3c53901-3ffd-4bf9-849a-e525d8c6cb3c",
      "name": "GPT-4.1",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "description": "Call this tool to get the AI Overview from Google.",
        "workflowId": {
          "__rl": true,
          "value": "4ViOjawp2E5PbJsu",
          "mode": "list",
          "cachedResultName": "Analyze AI Overview"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "gl": "={{ $fromAI('country') }}",
            "q": "={{ $fromAI('query') }}",
            "location": "={{ $fromAI('location') }}",
            "hl": "={{ $fromAI('host_language') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "gl",
              "displayName": "gl",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "q",
              "displayName": "q",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "location",
              "displayName": "location",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "hl",
              "displayName": "hl",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        368,
        240
      ],
      "id": "e4ac29de-3669-4be4-9004-bbcb6ce4e414",
      "name": "Analyze AI Overview"
    },
    {
      "parameters": {
        "description": "Call this tool to scrape the content from a URL.",
        "workflowId": {
          "__rl": true,
          "value": "RkFq0paD5YLLof2K",
          "mode": "list",
          "cachedResultName": "Tool - Serper Crawl URL"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "url": "={{ $fromAI('url') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "url",
              "displayName": "url",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        544,
        240
      ],
      "id": "43d9699e-6a8f-4c32-a853-98b1e5a58438",
      "name": "Get Article"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "=You are a Senior On-Page SEO Strategist, an expert at transforming good content into top-ranking articles. Your core methodology is data-driven: you first analyze what Google's AI Overview rewards for a target query, then you use that data as a benchmark to provide precise, actionable improvements for a user's article.\n\n**1. YOUR SEO TOOLKIT**\n\nYou have two specialized tools to perform your analysis:\n\n*   **Tool 1: `Analyze AI Overview` (The Benchmark Tool)**\n    *   **Function:** This is your first step. It scrapes and analyzes the AI Overview to establish the \"ground truth\"—what Google considers a perfect answer for a query.\n    *   **Parameters:** `query`, `gl` (ISO code), `hl` (ISO code), `location` (optional). Use location only if the user says things like \"location\" or \"city\". Dont mismatch the country with the location.\n    *   **CRITICAL RULE:** You must always translate user requests (e.g., \"Germany\") into the correct two-letter ISO codes.\n\n*   **Tool 2: `Get Article` (The Content Review Tool)**\n    *   **Function:** This is your second step. It fetches the key on-page elements of a user's article.\n    *   **Parameters:** `url` (string, required): The URL of the article to be analyzed.\n    *   **Output:** An object containing the article's `title`, `metaDescription`, and `content` (in Markdown).\n\n**2. DATA-DRIVEN STRATEGY: YOUR TWO DATA SOURCES**\n\nYour expertise comes from synthesizing two distinct data sets:\n\n*   **The Blueprint for Success (from `Analyze AI Overview`):**\n    *   `aiOverview`: The raw narrative and language Google prefers. This is your source for tone, depth, and specific phrasing.\n    *   `categories`: The ideal article structure and required sub-topics (`<h2>`s).\n    *   `mentionedEntities`: The non-negotiable concepts, products, or brands that must be covered.\n    *   `dominantSources`: Your competitors and the proven-to-work title formats.\n\n*   **The Content Under Review (from `AnalyzeArticleContent`):**\n    *   `title`, `metaDescription`, `content`: The current state of the user's article that you need to improve.\n\n**3. YOUR GOAL AND WORKFLOW: THE GAP ANALYSIS REPORT**\n\nYour goal is to deliver a comprehensive, actionable SEO improvement plan. When a user provides a query and a URL, you must follow this exact two-step process:\n\n1.  **Step 1: Establish the Benchmark.** Acknowledge the user's request. Immediately call `Analyze AI Overview` with the user's target `query` and country. You cannot proceed without this data.\n2.  **Step 2: Review the Content.** Once you have the benchmark, call `AnalyzeArticleContent` with the user's `url`.\n3.  **Step 3: Synthesize and Deliver the Report.** Present your findings in the following structured format. You must compare the \"Content Under Review\" against the \"Blueprint for Success\" in every section.\n\n---\n\n### **SEO Improvement Report: [User's Query]**\n\n**Executive Summary:**\nStart with a 1-2 sentence summary of your findings. Example: \"Your article has a solid foundation, but it's missing several key thematic sections and entities that Google's AI Overview has identified as critical for satisfying user intent for this query. The following improvements will align your content more closely with what is currently ranking.\"\n\n#### **1. Title & Meta Description Optimization**\n\n*   **Analysis:** Briefly state how the current title/meta compares to the `dominantSources`.\n*   **Title Improvement:**\n    *   **Now:** \"[Insert the user's current `title` here]\"\n    *   **Better:** \"[Provide a new, optimized title that incorporates keywords from the `aiOverview` and matches the format of the `dominantSources` (e.g., includes the year, a number, or a key benefit).]\"\n*   **Meta Description Improvement:**\n    *   **Now:** \"[Insert the user's current `metaDescription` here]\"\n    *   **Better:** \"[Write a new, compelling meta description that summarizes the core answer from the `aiOverview` and includes primary keywords.]\"\n\n#### **2. Outline Strategy & Content Gap Analysis**\n\n*   **Analysis:** State which `categories` and `mentionedEntities` from the benchmark are missing from the user's article `content`.\n*   **Recommended Outline Additions:**\n    *   **Missing Category:** \"[Name of the first missing `category`]\"\n        *   **Why it's important:** \"Google has dedicated a section to this, indicating it's a critical part of the user's search journey. You should add an `<h2>` section covering this topic.\"\n    *   **Missing Entity:** \"[Name of a key missing `mentionedEntity`]\"\n        *   **Why it's important:** \"This [product/brand/concept] was explicitly featured in the AI Overview. Failing to cover it leaves a significant content gap.\"\n    *   *(Continue for the top 3-5 most important gaps)*\n\n#### **3. Specific Content Enhancement**\n\n*   **Analysis:** Identify a specific section in the user's `content` that is weak, vague, or less comprehensive than the corresponding section in the `aiOverview` object.\n*   **Content Improvement Example:**\n    *   **Now (from your article):**\n        > \"[Quote a 1-3 sentence passage from the user's `content` that could be improved.]\"\n    *   **Better (inspired by the AI Overview):**\n        > \"[Write a new, more detailed and authoritative version of that passage. Use the language, keywords, and data points found in the `aiOverview.text_blocks` to make it more comprehensive and valuable.]\"\n\n#### **4. Key Actions Summary**\n\nConclude with a bulleted list of the 3-4 most critical actions the user should take first.\n*   **Update Title & Meta:** Implement the suggested improvements to increase CTR.\n*   **Add Missing Sections:** Prioritize adding the sections on \"[Missing Category 1]\" and \"[Missing Category 2]\" to your article outline.\n*   **Incorporate Key Entities:** Ensure you discuss \"[Missing Entity 1]\" and \"[Missing Entity 2]\".\n*   **Enhance Content Depth:** Revise the section on \"[Topic from 'Better' example]\" to be more detailed, as shown in the example."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        208,
        0
      ],
      "id": "dd2518be-19d4-46f2-8645-1e38963b3a9f",
      "name": "AI Overview Optimizer"
    }
  ],
  "pinData": {},
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Overview Optimizer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Overview Optimizer",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4.1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Overview Optimizer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Analyze AI Overview": {
      "ai_tool": [
        [
          {
            "node": "AI Overview Optimizer",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Get Article": {
      "ai_tool": [
        [
          {
            "node": "AI Overview Optimizer",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cfbaddc5-50b4-45dc-8cd3-ccc6ff104a92",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "E0pES53DgI9q8E69",
  "tags": []
}
```


Prompt: How would you build: Analyze Ai Overview?

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 10
- Node Types: n8n-nodes-base.set, n8n-nodes-base.executeWorkflowTrigger, n8n-nodes-base.if, n8n-nodes-base.httpRequest, n8n-nodes-base.code, n8n-nodes-base.merge

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Analyze AI Overview",
  "nodes": [
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "gl"
            },
            {
              "name": "q"
            },
            {
              "name": "location"
            },
            {
              "name": "hl"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -624,
        320
      ],
      "id": "1fadcfb7-077e-43f2-810c-27be1c0f6575",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "url": "https://serpapi.com/search",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "serpApi",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "gl",
              "value": "={{ $json.gl }}"
            },
            {
              "name": "q",
              "value": "={{ $json.q }}"
            },
            {
              "name": "location",
              "value": "={{ $json.location }}"
            },
            {
              "name": "hl",
              "value": "={{ $json.hl }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -400,
        320
      ],
      "id": "a66d8866-4e88-4216-8de2-d78bda030c61",
      "name": "GET SERP Results",
      "retryOnFail": true,
      "waitBetweenTries": 5000,
      "credentials": {
        "serpApi": {
          "id": "ip84lDL75JMRWLKs",
          "name": "SerpAPI Account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d8cbb599-3ec7-446b-be55-9f48e21b4d11",
              "name": "=serpapi_link",
              "value": "={{ $json.ai_overview.serpapi_link }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -176,
        224
      ],
      "id": "57e716b3-86a8-4099-857c-9cdc62d1fbb6",
      "name": "Extract AI Overview Link"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "15ccf2c6-185c-4166-9efb-b899eab4944e",
              "leftValue": "={{ $json.serpapi_link }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        48,
        224
      ],
      "id": "eb887e5d-9c54-4177-b7c2-c1edf0a5a33a",
      "name": "Is Extra Request Required"
    },
    {
      "parameters": {
        "url": "={{ $json.serpapi_link }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "serpApi",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        272,
        176
      ],
      "id": "cc6d4f00-748f-4e53-ac7e-55b838f8511c",
      "name": "GET AI Overview",
      "credentials": {
        "serpApi": {
          "id": "ip84lDL75JMRWLKs",
          "name": "SerpAPI Account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "6dc1587a-9266-43ac-8b0f-c31ce0a1dd2f",
              "name": "ai_overview",
              "value": "={{ $json.ai_overview }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        496,
        176
      ],
      "id": "2fa31f44-37ed-44df-a515-ef058b6c8094",
      "name": "Get AI Overview Content"
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineAll",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        688,
        320
      ],
      "id": "4834b8ff-94ee-4e9a-b000-776204e00194",
      "name": "Merge Results"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "8d52f2cf-85e3-4c78-aa61-e3a05db8b718",
              "name": "ai_overview",
              "value": "={{ $json.ai_overview }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        320
      ],
      "id": "a74e565d-e3da-48b7-9279-8f23a7fde281",
      "name": "Get AI Overview"
    },
    {
      "parameters": {
        "jsCode": "const inputData = items[0].json;\n\n// 1. Top-Level Validation: Check for errors or missing overview data first.\nif (inputData?.ai_overview?.error || !inputData?.ai_overview?.text_blocks) {\n  return [{\n    json: {\n      categories: [],\n      mentionedEntities: [],\n      dominantSources: [],\n      aiOverview: inputData.ai_overview || {}, // Return the object even if it just contains an error\n      parsingError: inputData?.ai_overview?.error || \"No text_blocks found in the AI Overview.\"\n    }\n  }];\n}\n\nconst aiOverview = inputData.ai_overview;\nconst allReferences = aiOverview.references || [];\n\n// 2. Initialize Data Containers\nconst categories = new Set();\nconst mentionedEntities = new Set();\nconst referenceCounts = {};\n\n// --- Recursive Parsing Engine ---\n\n/**\n * Recursively processes an array of text_blocks to extract data.\n * This function can call itself to handle deeply nested structures.\n * @param {Array} blocks - An array of text_block objects.\n */\nfunction parseTextBlocks(blocks) {\n  if (!blocks || !Array.isArray(blocks)) {\n    return;\n  }\n\n  for (let i = 0; i < blocks.length; i++) {\n    const block = blocks[i];\n    if (!block) continue;\n\n    // A. Aggregate all reference indexes found at any level\n    if (block.reference_indexes) {\n      block.reference_indexes.forEach(index => {\n        referenceCounts[index] = (referenceCounts[index] || 0) + 1;\n      });\n    }\n\n    // B. Process Blocks by Type\n    switch (block.type) {\n      case 'heading':\n        if (block.snippet) categories.add(block.snippet.trim());\n        break;\n\n      case 'expandable':\n        if (block.title) categories.add(block.title.trim());\n        parseTextBlocks(block.text_blocks);\n        break;\n\n      case 'paragraph':\n        const nextBlock = blocks[i + 1];\n        if (nextBlock && ['list', 'table', 'comparison'].includes(nextBlock.type)) {\n          if (block.snippet) categories.add(block.snippet.trim());\n        }\n        break;\n\n      case 'list':\n        if (block.list) {\n          block.list.forEach(item => {\n            let entityName = '';\n            if (item.title) {\n              entityName = item.title.replace(':', '').trim();\n            } else if (item.snippet) {\n              entityName = item.snippet.split(/[:.]/)[0].trim();\n            }\n            if (entityName) mentionedEntities.add(entityName);\n\n            if (item.reference_indexes) {\n              item.reference_indexes.forEach(index => {\n                referenceCounts[index] = (referenceCounts[index] || 0) + 1;\n              });\n            }\n            \n            if (item.text_blocks) {\n              parseTextBlocks(item.text_blocks);\n            }\n          });\n        }\n        break;\n\n      case 'comparison':\n        if (block.product_labels) {\n          block.product_labels.forEach(label => mentionedEntities.add(label.trim()));\n        }\n        break;\n        \n      case 'table':\n        if (block.table?.rows?.length > 0) {\n            const firstHeader = block.table.headers?.[0];\n            if (firstHeader) {\n                for (const row of block.table.rows) {\n                    if (row[firstHeader]) {\n                        mentionedEntities.add(row[firstHeader].trim());\n                    }\n                }\n            }\n        }\n        break;\n    }\n  }\n}\n\n// 3. Initial Call to the Recursive Parser\nparseTextBlocks(aiOverview.text_blocks);\n\n// 4. Process and Sort Source Authority\nconst dominantSources = Object.entries(referenceCounts)\n  .map(([index, citations]) => {\n    const refDetails = allReferences.find(ref => ref.index == index);\n    return {\n      source: refDetails?.source || 'Unknown',\n      title: refDetails?.title || 'Unknown',\n      link: refDetails?.link || 'Unknown',\n      citations: citations,\n      index: parseInt(index)\n    };\n  })\n  .sort((a, b) => b.citations - a.citations);\n\n// --- NEW: Clean and Prepare the Original AI Overview ---\n// Create a deep copy to avoid modifying the original input object.\nconst cleanedOverview = JSON.parse(JSON.stringify(aiOverview));\n\n// Remove token-consuming fields that are not needed by the agent for its analysis.\ndelete cleanedOverview.page_token;\ndelete cleanedOverview.serpapi_link;\n\n// 5. Assemble and Return the Final, Comprehensive Data Object\nconst preparedData = {\n  categories: Array.from(categories),\n  mentionedEntities: Array.from(mentionedEntities),\n  dominantSources: dominantSources,\n  aiOverview: cleanedOverview // The cleaned, original overview is now included.\n};\n\nreturn [{\n  json: preparedData\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1056,
        320
      ],
      "id": "86f97f90-7e95-4f50-a1a9-9aa0b2517f9e",
      "name": "Analyze AI Overview",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "3637b044-e944-49d1-a983-d2103c499100",
              "name": "message",
              "value": "={{ $json.error }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1264,
        416
      ],
      "id": "f8aa096d-2ee4-4588-994d-d87bef412bc3",
      "name": "Return Error Message"
    }
  ],
  "pinData": {},
  "connections": {
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "GET SERP Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET SERP Results": {
      "main": [
        [
          {
            "node": "Extract AI Overview Link",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Extract AI Overview Link": {
      "main": [
        [
          {
            "node": "Is Extra Request Required",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Extra Request Required": {
      "main": [
        [
          {
            "node": "GET AI Overview",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET AI Overview": {
      "main": [
        [
          {
            "node": "Get AI Overview Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get AI Overview Content": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Results": {
      "main": [
        [
          {
            "node": "Get AI Overview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get AI Overview": {
      "main": [
        [
          {
            "node": "Analyze AI Overview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze AI Overview": {
      "main": [
        [],
        [
          {
            "node": "Return Error Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0e1cf286-be3b-4818-aee8-93589437147b",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "4ViOjawp2E5PbJsu",
  "tags": []
}
```


Prompt: Show me an n8n workflow for tool   serper crawl url

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 3
- Node Types: n8n-nodes-base.set, n8n-nodes-base.executeWorkflowTrigger, n8n-nodes-base.httpRequest

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Tool - Serper Crawl URL",
  "nodes": [
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7320f474-4ba6-47b7-9ce7-82529cbb12ff",
              "name": "title",
              "value": "={{ $json.metadata.title }}",
              "type": "string"
            },
            {
              "id": "a047ca1d-04e0-493b-9d88-eddc4ec4478c",
              "name": "description",
              "value": "={{ $json.metadata.description }}",
              "type": "string"
            },
            {
              "id": "607f18e4-364c-4594-8821-3800b28d3c9b",
              "name": "markdown",
              "value": "={{ $json.markdown }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        288,
        0
      ],
      "id": "635191a6-85dc-439d-8616-ceabb5294a71",
      "name": "Get Metadata"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://scrape.serper.dev",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $json.url }}"
            },
            {
              "name": "includeMarkdown",
              "value": "true"
            }
          ]
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        64,
        0
      ],
      "id": "b53e65c6-0b22-4b89-b718-32143058205e",
      "name": "Serper",
      "credentials": {
        "httpHeaderAuth": {
          "id": "9PtnIrGtPxKAKD1J",
          "name": "Serper Demo"
        }
      }
    },
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "url"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -160,
        0
      ],
      "id": "59fec696-d611-4a2d-b35b-ea3a7e7e7957",
      "name": "When Executed by Another Workflow"
    }
  ],
  "pinData": {},
  "connections": {
    "Get Metadata": {
      "main": [
        []
      ]
    },
    "Serper": {
      "main": [
        [
          {
            "node": "Get Metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Serper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ae02df80-65d7-4c6e-b6dc-0aa012fe0f47",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "RkFq0paD5YLLof2K",
  "tags": []
}
```