{
  "name": "Monitor Google AI Overview visibility",
  "nodes": [
    {
      "parameters": {
        "content": "## Monitor Google AI Overview Visibility\n\n**Who is this for:** SEO professionals who need to track their visibility in Google's AI Overview (formerly SGE) results which appear above traditional search results.\n\n**What this workflow does:**\n1. Runs GAIO (Google AI Overview) scans via Local Falcon\n2. Tracks if your business appears in AI-generated summaries\n3. Monitors position and mention context\n4. Compares GAIO visibility to traditional rankings\n5. Alerts on visibility changes\n\n**How to set up:**\n1. Add your Local Falcon API credentials (get your key at https://www.localfalcon.com/api/credentials)\n2. Configure your location and keywords in Settings\n3. Connect Slack for alerts\n4. Activate the workflow\n\n**Requirements:**\n- Local Falcon account with API access\n- GAIO scanning credits\n- Keywords that trigger AI Overview results\n\n**How to customize:**\n- Track specific AI Overview trigger queries\n- Compare across multiple locations\n- Create historical visibility trending\n- Alert on appearance/disappearance changes",
        "height": 520,
        "width": 460,
        "color": 5
      },
      "id": "sticky-main",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        100,
        -180
      ]
    },
    {
      "parameters": {
        "content": "### What is Google AI Overview?\n\nGoogle AI Overview (GAIO) shows AI-generated summaries at the top of search results for certain queries.\n\nFor local businesses, appearing in GAIO can mean:\n- Prime visibility above the local pack\n- Being recommended by Google's AI\n- Increased click-through potential",
        "height": 200,
        "width": 320
      },
      "id": "sticky-context",
      "name": "Sticky Note Context",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        580,
        -180
      ]
    },
    {
      "parameters": {
        "content": "### Step 1: Schedule\nRuns daily for GAIO monitoring.",
        "height": 100,
        "width": 200
      },
      "id": "sticky-step1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        40,
        660
      ]
    },
    {
      "parameters": {
        "content": "### Step 2: Settings\nConfigure location and keywords.",
        "height": 100,
        "width": 200
      },
      "id": "sticky-step2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        300,
        660
      ]
    },
    {
      "parameters": {
        "content": "### Step 3: Scan GAIO\nChecks AI Overview presence.",
        "height": 100,
        "width": 200
      },
      "id": "sticky-step3",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        560,
        660
      ]
    },
    {
      "parameters": {
        "content": "### Step 4: Analyze\nProcesses visibility results.",
        "height": 100,
        "width": 200
      },
      "id": "sticky-step4",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        820,
        660
      ]
    },
    {
      "parameters": {
        "content": "### Step 5: Alert\nNotifies on GAIO changes.",
        "height": 100,
        "width": 200
      },
      "id": "sticky-step5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1080,
        660
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "days",
              "triggerAtHour": 9
            }
          ]
        }
      },
      "id": "schedule",
      "name": "Every Day 9am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        140,
        440
      ]
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "{\n  \"location\": {\n    \"name\": \"Your Business Name\",\n    \"place_id\": \"YOUR_GOOGLE_PLACE_ID\",\n    \"lat\": \"40.7128\",\n    \"lng\": \"-74.0060\"\n  },\n  \"keywords\": [\n    \"best [service] in [city]\",\n    \"[service] recommendations [city]\",\n    \"top rated [business type] near me\"\n  ],\n  \"slackChannel\": \"#gaio-alerts\"\n}",
        "options": {}
      },
      "id": "settings",
      "name": "GAIO Monitoring Settings",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        440
      ]
    },
    {
      "parameters": {
        "jsCode": "const settings = $input.first().json;\n\nreturn settings.keywords.map(keyword => ({\n  json: {\n    ...settings.location,\n    keyword: keyword,\n    slackChannel: settings.slackChannel\n  }\n}));"
      },
      "id": "prepare",
      "name": "Prepare GAIO Scans",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        660,
        440
      ]
    },
    {
      "parameters": {
        "resource": "scan",
        "operation": "run",
        "platform": "gaio",
        "placeId": "={{ $json.place_id }}",
        "keyword": "={{ $json.keyword }}",
        "lat": "={{ $json.lat }}",
        "lng": "={{ $json.lng }}",
        "gridSize": 3,
        "radius": 1,
        "measurement": "mi"
      },
      "id": "scan-gaio",
      "name": "Scan Google AI Overview",
      "type": "@local-falcon/n8n-nodes-localfalcon.localFalcon",
      "typeVersion": 1,
      "position": [
        920,
        440
      ],
      "credentials": {
        "localFalconApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const results = $input.all();\nconst slackChannel = results[0]?.json.slackChannel || '#gaio-alerts';\n\nlet visible = 0;\nlet notVisible = 0;\nlet message = `:robot_face: *Google AI Overview Daily Report*\\n`;\nmessage += `_${new Date().toLocaleDateString()}_\\n\\n`;\n\nfor (const result of results) {\n  const keyword = result.json.keyword || 'unknown';\n  const avgRank = result.json.avg_rank;\n  \n  if (avgRank && parseFloat(avgRank) <= 10) {\n    visible++;\n    message += `:white_check_mark: *${keyword}*\\n   Visible - Position: ${avgRank}\\n\\n`;\n  } else {\n    notVisible++;\n    message += `:x: *${keyword}*\\n   Not visible in AI Overview\\n\\n`;\n  }\n}\n\nmessage += `---\\n*Summary:* ${visible} visible, ${notVisible} not visible`;\n\nreturn [{\n  json: {\n    slackMessage: message,\n    slackChannel: slackChannel,\n    visibleCount: visible,\n    notVisibleCount: notVisible\n  }\n}];"
      },
      "id": "analyze",
      "name": "Analyze GAIO Results",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1180,
        440
      ]
    }
  ],
  "connections": {
    "Every Day 9am": {
      "main": [
        [
          {
            "node": "GAIO Monitoring Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GAIO Monitoring Settings": {
      "main": [
        [
          {
            "node": "Prepare GAIO Scans",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare GAIO Scans": {
      "main": [
        [
          {
            "node": "Scan Google AI Overview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scan Google AI Overview": {
      "main": [
        [
          {
            "node": "Analyze GAIO Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "meta": {
    "templateCredsSetupCompleted": true
  }
}