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:
- Open your adGPT Studio Console, click the “Manifest (JSON)” tab, and paste the code below. Click “Sync to Canvas.”
- Click the Google Workspace, Search Console, and Slack nodes. Select your own account credentials.
- Type your website’s sitemap URL into the “SEO Sitemap Audit” node.
- 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"
}
]
}
You must log in or register to comment.

