The Objective: Every Monday morning, this workflow reads your website sitemap. It creates a blank Google Sheet. Then, it checks every single URL. It looks for broken links (HTTP 400+) and pages Google dropped from the search index.

If it finds a broken or de-indexed page, it logs it in the sheet. Finally, it sends an audit summary to your Slack team.

The Math: De-indexed pages cost you money. When Google drops a high-converting product page from the search results, your organic revenue stops. Most marketing teams wait weeks for a manual SEO audit to catch the leak. By then, the cash is gone.

This system audits your entire site weekly. It alerts your team the moment a page breaks. You stop the bleeding.

Customization Steps:

  1. Open your adGPT Studio Console, click the “Manifest (JSON)” tab, and paste the code below. Click “Sync to Canvas.”
  2. Click the Google Workspace, Search Console, and Slack nodes. Select your own account credentials.
  3. Type your website’s sitemap URL into the “SEO Sitemap Audit” node.
  4. Run a shadow test to watch the loop build your spreadsheet.

The JSON Manifest:

{
  "nodes": [
    {
      "id": "node_trigger",
      "type": "TRIGGER",
      "x": 100,
      "y": 100,
      "data": {
        "cron_expression": "0 9 * * 1",
        "mode": "RECURRING_CRON",
        "service": "trigger.schedule"
      }
    },
    {
      "id": "node_sitemap",
      "type": "ACTION",
      "x": 400,
      "y": 100,
      "data": {
        "service": "action.web.sitemap_parser",
        "sitemap_url": "{{config.sitemap_url}}"
      }
    },
    {
      "id": "node_create_sheet",
      "type": "ACTION",
      "x": 700,
      "y": 100,
      "data": {
        "credential": "{{config.google_workspace_credential}}",
        "service": "action.sheets.create_spreadsheet",
        "title": "SEO Anomaly Audit - {{node_trigger.timestamp}}"
      }
    },
    {
      "id": "node_write_headers",
      "type": "ACTION",
      "x": 1000,
      "y": 100,
      "data": {
        "credential": "{{config.google_workspace_credential}}",
        "range": "Sheet1",
        "service": "action.sheets.append_row",
        "spreadsheet_id": "{{node_create_sheet.id}}",
        "values": "[\"Scanned URL\", \"HTTP Status\", \"GSC Index Verdict\"]"
      }
    },
    {
      "id": "node_loop",
      "type": "LOGIC",
      "x": 100,
      "y": 300,
      "data": {
        "height": 450,
        "input_array": "{{node_sitemap.urls}}",
        "label": "URL AUDIT LOOP",
        "service": "logic.loop_container",
        "width": 1200
      }
    },
    {
      "id": "node_link_check",
      "type": "ACTION",
      "x": 150,
      "y": 400,
      "data": {
        "service": "action.web.broken_link_check",
        "url": "{{node_loop.item.url}}"
      }
    },
    {
      "id": "node_gsc_inspect",
      "type": "ACTION",
      "x": 450,
      "y": 400,
      "data": {
        "inspection_url": "{{node_loop.item.url}}",
        "service": "action.gsc.inspect_url",
        "site_url": "{{config.search_console_site_url}}"
      }
    },
    {
      "id": "node_fast_router",
      "type": "LOGIC",
      "x": 750,
      "y": 400,
      "data": {
        "condition": "{{node_link_check.status_code}} >= 400 or \"{{node_gsc_inspect.full_inspection_result.indexStatusResult.verdict}}\" != \"PASS\"",
        "service": "logic.router"
      }
    },
    {
      "id": "node_sheet_append",
      "type": "ACTION",
      "x": 1000,
      "y": 400,
      "data": {
        "credential": "{{config.google_workspace_credential}}",
        "range": "Sheet1",
        "service": "action.sheets.append_row",
        "spreadsheet_id": "{{node_create_sheet.id}}",
        "values": "[\"{{node_loop.item.url}}\", \"{{node_link_check.status_code}}\", \"{{node_gsc_inspect.full_inspection_result.indexStatusResult.verdict}}\"]"
      }
    },
    {
      "id": "node_slack_summary",
      "type": "ACTION",
      "x": 100,
      "y": 800,
      "data": {
        "channel_id": "{{config.slack_channels_channel_id}}",
        "credential": "{{config.slack_credential}}",
        "message": "🚨 *Weekly Technical SEO Audit Complete* 🚨\n\nThe adGPT system finished auditing the sitemap against live HTTP statuses and the Google Search Console Index.\n\n🔍 *URLs Scanned:* {{node_sitemap.count}}\n⚠️ *Status:* Anomalies (Broken links or Un-indexed pages) logged.\n\n📊 *View Full Audit Report:* \n{{node_create_sheet.url}}",
        "service": "action.slack.send_message"
      }
    },
    {
      "id": "node_visual_note",
      "type": "VISUAL",
      "x": 100,
      "y": -150,
      "data": {
        "height": 220,
        "service": "visual.note",
        "text": "📌 HOW THIS WORKS:\n\n1. Triggers every Monday.\n2. Grabs the sitemap & makes a blank Google Sheet.\n3. The yellow Loop Box checks every URL one-by-one.\n4. The Router ONLY saves broken/un-indexed pages to the Sheet.\n5. Sends 1 summary Slack message when finished!",
        "width": 250
      }
    }
  ],
  "edges": [
    {
      "id": "e_trigger",
      "source": "node_trigger",
      "target": "node_sitemap",
      "sourceHandle": "0"
    },
    {
      "id": "e_sitemap",
      "source": "node_sitemap",
      "target": "node_create_sheet",
      "sourceHandle": "0"
    },
    {
      "id": "e_create",
      "source": "node_create_sheet",
      "target": "node_write_headers",
      "sourceHandle": "0"
    },
    {
      "id": "e_headers",
      "source": "node_write_headers",
      "target": "node_loop",
      "sourceHandle": "0"
    },
    {
      "id": "e_link",
      "source": "node_link_check",
      "target": "node_gsc_inspect",
      "sourceHandle": "0"
    },
    {
      "id": "e_inspect",
      "source": "node_gsc_inspect",
      "target": "node_fast_router",
      "sourceHandle": "0"
    },
    {
      "id": "e_router_true",
      "source": "node_fast_router",
      "target": "node_sheet_append",
      "sourceHandle": "true"
    },
    {
      "id": "e_summary",
      "source": "node_loop",
      "target": "node_slack_summary",
      "sourceHandle": "0"
    }
  ]
}