{
  "name": "Content Freshness Checker",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [{ "field": "days", "daysInterval": 7 }]
        }
      },
      "id": "2b3c4d5e-0001-4000-8000-000000000001",
      "name": "Weekly Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [240, 300]
    },
    {
      "parameters": {
        "documentId": "REPLACE_WITH_YOUR_SHEET_ID",
        "sheetName": "Published Posts"
      },
      "id": "2b3c4d5e-0002-4000-8000-000000000002",
      "name": "Read Post List",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4,
      "position": [460, 300]
    },
    {
      "parameters": {
        "batchSize": 1,
        "options": {}
      },
      "id": "2b3c4d5e-0003-4000-8000-000000000003",
      "name": "Split Into Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [680, 300]
    },
    {
      "parameters": {
        "url": "={{$json.url}}",
        "options": {
          "response": { "response": { "fullResponse": true } }
        }
      },
      "id": "2b3c4d5e-0004-4000-8000-000000000004",
      "name": "Fetch Page",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [900, 220]
    },
    {
      "parameters": {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ (Date.now() - new Date($json.last_modified_header || $json.published_at).getTime()) / (1000*60*60*24) }}",
              "rightValue": 180,
              "operator": { "type": "number", "operation": "gt" }
            }
          ]
        }
      },
      "id": "2b3c4d5e-0005-4000-8000-000000000005",
      "name": "Older Than 180 Days?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [1120, 220]
    },
    {
      "parameters": {
        "fromEmail": "alerts@yourdomain.com",
        "toEmail": "REPLACE_WITH_YOUR_EMAIL",
        "subject": "={{ \"Stale content flagged: \" + $json.title }}",
        "text": "={{ $json.url + \" hasn't been refreshed in over 180 days. Consider updating stats, screenshots, or dates before it drags down freshness signals.\" }}"
      },
      "id": "2b3c4d5e-0006-4000-8000-000000000006",
      "name": "Send Stale Content Alert",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [1340, 220]
    }
  ],
  "connections": {
    "Weekly Trigger": {
      "main": [[{ "node": "Read Post List", "type": "main", "index": 0 }]]
    },
    "Read Post List": {
      "main": [[{ "node": "Split Into Batches", "type": "main", "index": 0 }]]
    },
    "Split Into Batches": {
      "main": [[{ "node": "Fetch Page", "type": "main", "index": 0 }]]
    },
    "Fetch Page": {
      "main": [[{ "node": "Older Than 180 Days?", "type": "main", "index": 0 }]]
    },
    "Older Than 180 Days?": {
      "main": [[{ "node": "Send Stale Content Alert", "type": "main", "index": 0 }]]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateSource": "insighttech.blog/library",
    "notes": "Pairs with the freshness-signal check in the AEO/AI-Visibility Checker (see /tools) — this workflow automates catching the stale pages that check would flag one-by-one."
  },
  "id": "content-freshness-checker",
  "tags": ["automation-workflows", "aeo-geo"]
}
