{
  "id": "MlBBHoKjaZzrdtXC",
  "name": "AEO Assistant",
  "tags": [],
  "nodes": [
    {
      "id": "d3df5e88-452b-4a51-b288-6df4bd7ecdb5",
      "name": "Google search",
      "type": "n8n-nodes-serpapi.serpApi",
      "position": [
        384,
        0
      ],
      "parameters": {
        "q": "={{ $json.Keyword }}",
        "requestOptions": {},
        "additionalFields": {}
      },
      "credentials": {},
      "typeVersion": 1
    },
    {
      "id": "d3a61fff-649d-4a36-a788-94b062bd24cb",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        768,
        0
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "organic_results"
      },
      "typeVersion": 1
    },
    {
      "id": "8c8f93a4-3e78-4746-b058-cec82023ec72",
      "name": "Message a model",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1088,
        0
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-3-flash-preview",
          "cachedResultName": "models/gemini-3-flash-preview"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "model",
              "content": "You are an AEO Specialist. For the given question, provide a 40-50 word answer that is factual and direct. Format as a Speakable Schema snippet."
            },
            {
              "content": "={{ $json.title }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "ed11af40-685c-4264-8018-81e98321accb",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1520,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Timestamp": "={{ $('On form submission').item.json.submittedAt }}",
            "Seed Keyword": "={{ $('On form submission').item.json.Keyword }}",
            "PAA Questions": "={{ $('Split Out').item.json.title }}",
            "AI-Generated Answer": "={{ $json.content.parts[0].text }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Seed Keyword",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Seed Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "PAA Questions",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "PAA Questions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI-Generated Answer",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "AI-Generated Answer",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1voXy3YB36G1bpkcOvgQic5LGm1Wf2CUOppSrAquP67c/edit#gid=0",
          "cachedResultName": "Client 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1voXy3YB36G1bpkcOvgQic5LGm1Wf2CUOppSrAquP67c",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1voXy3YB36G1bpkcOvgQic5LGm1Wf2CUOppSrAquP67c/edit?usp=drivesdk",
          "cachedResultName": "AEO Master Log"
        }
      },
      "executeOnce": false,
      "typeVersion": 4.7,
      "alwaysOutputData": false
    },
    {
      "id": "b2f6c173-5b4b-455e-adb6-5eb68ff34c89",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -448
      ],
      "parameters": {
        "width": 608,
        "height": 960,
        "content": "# Generate AEO snippets for Google PAA results using SerpApi and AI\n\n## How it works\n- The workflow initiates via a **Form Submission** with a target keyword.\n- It uses the **SerpApi node** to scrape real-time Google Search results, specifically targeting the **related_questions (PAA)** array.\n- An **Item Lists node** cleans the data to ensure only high-relevance questions are processed.\n- The questions are sent to a **Gemini node** with a specialized prompt to draft a 40-50 word answer optimized for \"Speakable\" Schema and featured snippet logic.\n- The finalised Q&A pairs are then appended to a **Google Sheet**, creating a ready-to-publish content gap report for the agency's editorial team.\n\n## How to use\n- Replace the keyword placeholder in the HTTP/SerpApi node with your client\u2019s target search term.\n- Connect your Notion or Google Sheets account to the final destination node to house the results.\n- Adjust the Schedule Trigger frequency based on how often you perform keyword research for your clients.\n\n## Requirements\n- **SerpApi Account:** To programmatically access Google\u2019s \"People Also Ask\" data.\n- **AI Credentials:** An API key for Gemini or OpenAI to generate the response text.\n- **Destination App:** A Notion workspace, Google Sheet, or Airtable base to store the output.\n\n## Customisation\n- **Competitor Tracking:** Modify the SerpApi parameters to include a specific domain to see what questions your competitors are currently ranking for.\n- **Schema Generation:** Add a second AI node to automatically wrap the answers in JSON-LD Question and AcceptedAnswer schema code for immediate dev-handoff.\n- **Multi-lingual AEO:** Add a translation node before the final output to localise answer snippets for international SEO campaigns.\n- **Slack Notification:** Add a Slack node at the end to notify the account manager to review the new optimisation opportunities.\n- **Client Organisation:** create a new tab for each client to organise "
      },
      "typeVersion": 1
    },
    {
      "id": "001a90ae-e88a-441e-ae3b-5772675f186d",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "options": {},
        "formTitle": "AEO assistant",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Keyword"
            }
          ]
        }
      },
      "typeVersion": 2.5
    },
    {
      "id": "a688248f-3a96-4a30-b17f-53e697133339",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 288,
        "content": "## 1. Get the seed keyword/s"
      },
      "typeVersion": 1
    },
    {
      "id": "a218e19a-f474-4df8-b244-feb6f06af17d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 288,
        "content": "## 2. Scrape Google Search results"
      },
      "typeVersion": 1
    },
    {
      "id": "0042ca8a-f882-4b4c-ac42-fe15595bc70f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 336,
        "height": 288,
        "content": "## 3. Process relevant results"
      },
      "typeVersion": 1
    },
    {
      "id": "48ffca30-ed13-444d-a9dc-2d128b109751",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 336,
        "height": 288,
        "content": "## 4. Get an optimised snippet"
      },
      "typeVersion": 1
    },
    {
      "id": "5b16c3da-d961-4200-b425-b89d2878bffe",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 288,
        "content": "## 5. Add to your AEO master log"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "80ad9815-0293-4d0a-ab9b-a4a721acef84",
  "connections": {
    "Split Out": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google search": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Google search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}