{
  "name": "Automate GEO Website Audits with Google Sheets and GEO Search Leads",
  "nodes": [
    {
      "parameters": {
        "content": "## Automate GEO Website Audits with Google Sheets and GEO Search Leads\n\n### How it works\n\nThis workflow manually runs a GEO website audit pipeline from Google Sheets. It reads pending URLs, loops through them one at a time, checks whether each row should be scanned, runs a free Lite GEO scan, and writes either the score/details or a failed status back to the sheet before waiting and continuing to the next item.\n\n### Setup steps\n\n- Connect Google Sheets credentials and configure the spreadsheet/range used by the “Get pending URLs” node.\n- Ensure the sheet contains the columns expected by the workflow, such as URL, processing status, score, and details/error fields.\n- Configure the GEO Search Leads credentials or account access for the “Lite GEO Scan - FREE” node.\n- Map the update nodes to the correct row identifier and output columns so scan results and failure statuses are written back to the same row.\n\n### Customization\n\nAdjust the Google Sheets filters for what counts as a pending URL, change the If condition for scan eligibility, or modify the wait duration to control scan pacing and API usage.",
        "height": 784,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -608,
        -240
      ],
      "id": "1b41f268-3afd-4a36-b22e-8aebd724e96e",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Start and fetch URLs\n\nManually starts the workflow and retrieves the pending website URLs from Google Sheets for processing.",
        "height": 320,
        "width": 432,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -48,
        96
      ],
      "id": "a33e0411-ba5c-491f-beb8-808cac95c28d",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Batch and scan decision\n\nIterates through the fetched rows and applies a condition to decide whether each item should be sent to the GEO scan or skipped back into the loop.",
        "height": 544,
        "width": 672,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        448,
        -112
      ],
      "id": "87c31bf5-af4f-4a63-a36e-24b9679d418b",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Update sheet and throttle\n\nWrites successful scan scores and details or failed statuses back to Google Sheets, then waits five seconds before returning control to the batch loop.",
        "height": 544,
        "width": 448,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1168,
        -240
      ],
      "id": "fadd92fc-2f55-4dce-9518-1ee7c9cf8efb",
      "name": "Sticky Note3"
    },
    {
      "parameters": {},
      "id": "f02e6855-9dda-40d2-b65a-f06084494628",
      "name": "Manual Workflow Start",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        16,
        256
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "url": "={{ $json['Website URL'] }}"
      },
      "id": "47ac4191-55ff-46bf-bf0f-81d673a1444e",
      "name": "Perform GEO Scan",
      "type": "n8n-nodes-geosearchleads.geoSearchLeads",
      "position": [
        976,
        16
      ],
      "typeVersion": 1,
      "credentials": {
        "geoSearchLeadsOAuth2Api": {
          "id": "4rwzDvoEPhQgBMC2",
          "name": "GEO Search Leads account"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "id": "7e279082-93eb-4d6d-91ef-b418661eddfd",
      "name": "Read Pending URLs from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        256,
        256
      ],
      "typeVersion": 4.7
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "a9b741a5-2d28-4760-8147-7f08dfe01c0a",
      "name": "Loop Over Each URL",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        496,
        256
      ],
      "typeVersion": 3
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 4
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "29a5477a-0cbb-4d39-8f2d-148723f92c81",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "Pending"
            }
          ]
        },
        "options": {}
      },
      "id": "2bd21612-7ebb-42da-a3f1-ce13b3b551eb",
      "name": "Check URL Status",
      "type": "n8n-nodes-base.if",
      "position": [
        752,
        96
      ],
      "typeVersion": 2.4
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "id": "a6a423a7-410c-4a24-8a3f-6fd892817865",
      "name": "Update URL Audit Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1216,
        -64
      ],
      "typeVersion": 4.7
    },
    {
      "parameters": {},
      "id": "4750ee00-200b-4351-b4ae-9ac48c8027e6",
      "name": "Wait for GEO Scan Completion",
      "type": "n8n-nodes-base.wait",
      "position": [
        1472,
        96
      ],
      "webhookId": "b5b47a1d-d757-4d5d-a095-5851dc0b282c",
      "typeVersion": 1.1
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "id": "16011c82-08c8-4d20-879a-e37931729b99",
      "name": "Log Failed URL Audit in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1216,
        144
      ],
      "typeVersion": 4.7
    }
  ],
  "pinData": {},
  "connections": {
    "Check URL Status": {
      "main": [
        [
          {
            "node": "Perform GEO Scan",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Each URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for GEO Scan Completion": {
      "main": [
        [
          {
            "node": "Loop Over Each URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Each URL": {
      "main": [
        [],
        [
          {
            "node": "Check URL Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Pending URLs from Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Each URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Perform GEO Scan": {
      "main": [
        [
          {
            "node": "Update URL Audit Results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Failed URL Audit in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Failed URL Audit in Sheets": {
      "main": [
        [
          {
            "node": "Wait for GEO Scan Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update URL Audit Results": {
      "main": [
        [
          {
            "node": "Wait for GEO Scan Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Workflow Start": {
      "main": [
        [
          {
            "node": "Read Pending URLs from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "76c69dc4-4064-4ad4-8246-968a0bd916be",
  "meta": {
    "instanceId": "865e07dbb546e283acab3c1ea6325e2a231b95e9b7539142ad7c5ff1db576a32"
  },
  "nodeGroups": [],
  "id": "H6gPJXFeeY7xnM2F",
  "tags": []
}