{
  "name": "Monitor SSL certificate expiry with Google Sheets and SMTP email alerts",
  "nodes": [
    {
      "id": "361b9ff6-c10c-4621-bfa1-c587b868f8f0",
      "name": "Sticky Note - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4352,
        464
      ],
      "parameters": {
        "width": 380,
        "height": 924,
        "content": "## 🔒 Monitor SSL certificate expiry\n\n**Who is this for?**\nDevOps engineers, sysadmins, and website owners who need to track SSL certificate expiration across multiple domains.\n\n**What it does:**\nAutom"
      }
    },
    {
      "id": "cb4d8533-f211-4a33-84fa-843c52debd65",
      "name": "Sticky Note - Data Input",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3952,
        576
      ],
      "parameters": {
        "width": 480,
        "height": 180,
        "content": "### 📥 Data Input\nFetch domains from Google Sheets and prepare for scanning"
      }
    },
    {
      "id": "4147c3e1-0bbe-4365-82a0-a6e541ef1e97",
      "name": "Sticky Note - SSL Check",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3456,
        576
      ],
      "parameters": {
        "width": 760,
        "height": 180,
        "content": "### 🔍 SSL Check & Processing\nVerify certificates via OpenSSL and parse expiry results"
      }
    },
    {
      "id": "e2dcbb57-8fb9-4719-a84a-a3789ab860bd",
      "name": "Sticky Note - Output",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2608,
        368
      ],
      "parameters": {
        "width": 520,
        "height": 480,
        "content": "### 📤 Output\nUpdate sheet and send alerts"
      }
    },
    {
      "id": "364c658e-ba92-4300-9e98-efa17ff34e1c",
      "name": "Schedule Trigger (Every 3 Days at 10AM)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3936,
        704
      ]
    },
    {
      "id": "b8f9b5d8-d105-4043-9706-0c6236261c71",
      "name": "Read Domain List from Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -3712,
        704
      ]
    },
    {
      "id": "cce4b9aa-3c4e-4926-ab1a-1694634935e8",
      "name": "Prepare Domain List and Set Threshold",
      "type": "n8n-nodes-base.code",
      "position": [
        -3488,
        704
      ]
    },
    {
      "id": "eeeb9ed2-b595-45d7-a63f-a36c22138699",
      "name": "Split Into Individual Domains",
      "type": "n8n-nodes-base.code",
      "position": [
        -3264,
        704
      ]
    },
    {
      "id": "23ba0707-a152-4e6a-b97d-03a66ead3ec6",
      "name": "Check SSL Certificate via OpenSSL",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        -3040,
        704
      ]
    },
    {
      "id": "f2bae858-855c-4b50-a56c-5d09ce880487",
      "name": "Parse SSL Results and Identify Expiring Certs",
      "type": "n8n-nodes-base.code",
      "position": [
        -2816,
        704
      ]
    },
    {
      "id": "53df4d58-7990-426f-bd0c-77f58a67dfb9",
      "name": "Split Results for Sheet Update",
      "type": "n8n-nodes-base.code",
      "position": [
        -2592,
        512
      ]
    },
    {
      "id": "eec4d0c6-b341-4fae-a404-475a989883d9",
      "name": "Update Google Sheet with Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -2368,
        512
      ]
    },
    {
      "id": "2333e0e3-9886-4076-89e7-f1ae5013ac83",
      "name": "Has Expiring Certificates",
      "type": "n8n-nodes-base.if",
      "position": [
        -2592,
        800
      ]
    },
    {
      "id": "e6a6ba4a-edc6-4d09-8ccf-781bd9e8b439",
      "name": "Build HTML Email Alert",
      "type": "n8n-nodes-base.code",
      "position": [
        -2368,
        704
      ]
    },
    {
      "id": "b9b99ed3-03fd-4c2f-9c1c-5adaaa5712d3",
      "name": "Send Alert Email via SMTP",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        -2144,
        704
      ]
    },
    {
      "id": "faef2e13-e729-48ab-a721-6dedc39761f3",
      "name": "No Alerts Needed (All Certs OK)",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -2368,
        896
      ]
    }
  ],
  "connections": {
    "Build HTML Email Alert": {
      "main": [
        [
          {
            "node": "Send Alert Email via SMTP",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Expiring Certificates": {
      "main": [
        [
          {
            "node": "Build HTML Email Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Alerts Needed (All Certs OK)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Into Individual Domains": {
      "main": [
        [
          {
            "node": "Check SSL Certificate via OpenSSL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Results for Sheet Update": {
      "main": [
        [
          {
            "node": "Update Google Sheet with Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check SSL Certificate via OpenSSL": {
      "main": [
        [
          {
            "node": "Parse SSL Results and Identify Expiring Certs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Domain List from Google Sheets": {
      "main": [
        [
          {
            "node": "Prepare Domain List and Set Threshold",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Domain List and Set Threshold": {
      "main": [
        [
          {
            "node": "Split Into Individual Domains",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger (Every 3 Days at 10AM)": {
      "main": [
        [
          {
            "node": "Read Domain List from Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse SSL Results and Identify Expiring Certs": {
      "main": [
        [
          {
            "node": "Has Expiring Certificates",
            "type": "main",
            "index": 0
          },
          {
            "node": "Split Results for Sheet Update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}