Workflow: SSL Expiry Alert
Integrations: gmail, googleSheets, httpRequest, if, scheduleTrigger, stickyNote

{"id": "Qj1307oyBx1hZJy5", "meta": {"instanceId": "workflow-214b51ae", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.088088", "updatedAt": "2025-09-29T07:07:52.088098", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "SSL Expiry Alert", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "260b66a2-0841-4dc7-9666-acbc9317fd91", "name": "URLs to Monitor", "type": "n8n-nodes-base.googleSheets", "position": [1120, -120], "parameters": {"columns": {"value": {"URL": "{{ $env.BASE_URL }}", "KnownExpiryDate": "={{ $json.result.valid_till }}"}, "schema": [{"id": "Website ", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website ", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "URL", "type": "string", "display": true, "removed": false, "required": false, "displayName": "URL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "KnownExpiryDate", "type": "string", "display": true, "required": false, "displayName": "KnownExpiryDate", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["URL"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "URLs to Check"}, "documentId": {"__rl": true, "mode": "url", "value": "{{ $env.WEBHOOK_URL }}"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "I7vwmkFVGPrI7Os1", "name": "Vishal - Google Sheets"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "a2922f1b-9d29-4b66-9560-44207f3e14d2", "name": "Weekly Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [160, 140], "parameters": {"rule": {"interval": [{"field": "weeks", "triggerAtDay": [1], "triggerAtHour": 8}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "005564e9-5ecb-4ee9-aca0-69a660656b09", "name": "Fetch URLs", "type": "n8n-nodes-base.googleSheets", "position": [420, 140], "parameters": {"options": {}, "sheetName": {"__rl": true, "mode": "url", "value": "{{ $env.WEBHOOK_URL }}"}, "documentId": {"__rl": true, "mode": "url", "value": "{{ $env.WEBHOOK_URL }}"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "I7vwmkFVGPrI7Os1", "name": "Vishal - Google Sheets"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "943c561c-ca89-461c-a6fb-c3011baaf81a", "name": "Check SSL", "type": "n8n-nodes-base.httpRequest", "position": [680, 140], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "911fa691-decf-4572-a46e-d8644d3b2a35", "name": "Expiry Alert", "type": "n8n-nodes-base.if", "position": [1120, 220], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "ee6e2ce8-569a-4f1f-91b5-2c55f605a16b", "operator": {"type": "number", "operation": "lte"}, "leftValue": "={{ $json.result.days_left }}", "rightValue": 7}]}}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "8b59ebbb-0a87-40c2-be79-cc38431ebdbd", "name": "Send Alert Email", "type": "n8n-nodes-base.gmail", "position": [1440, 240], "webhookId": "cd6b6b20-e619-4526-aa69-64754e3d9035", "parameters": {"sendTo": "phanineeraj@quantana.com", "message": "=SSL Expiry - {{ $json.result.days_left }} Days Left - {{ $json.result.host }}", "options": {"appendAttribution": false}, "subject": "=SSL Expiry - {{ $json.result.days_left }} Days Left - {{ $json.result.host }}", "emailType": "text"}, "credentials": {"gmailOAuth2": {"id": "brYm5tKb5se1DyUw", "name": "Sabila Gmail"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "32eebd68-f0e6-467c-bf65-f2d513a60666", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [100, 0], "parameters": {"height": 329.860465116279, "content": "Triggers the workflow once a week."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3c0ed796-94a4-488c-9cb7-e3d46db63815", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [360, 0], "parameters": {"height": 327.0154373927959, "content": "Pulls the list of URLs to monitor from the Google Sheet. Ensure you clone the Google Sheet worksheet and update this node with its URL."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "fdb2077c-7d6a-4255-b499-e90513a0de1d", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [620, 0], "parameters": {"height": 323.89365351629556, "content": "Uses SSL-Checker.io to verify the SSL certificate of each URL. Fetches details like the host, validity period, and days remaining until expiry."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "5cc1644b-6abc-4299-8a25-9507b09d863f", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1060, -260], "parameters": {"height": 344.1852487135509, "content": "Updates the Google Sheet with SSL details, including the expiry date and certificate status."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "1001a69e-8efc-4a8b-a97b-a1bc021ada35", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [1060, 140], "parameters": {"height": 344.1852487135509, "content": "Checks if any SSL certificate is set to expire in 7 days or less."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "ad9e359e-3d95-4e8c-97b0-d06475bb8883", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [1360, 140], "parameters": {"height": 344.1852487135509, "content": "Sends an email alert if an SSL certificate is nearing expiry, including the host and days remaining."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"timezone": "UTC", "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "executionOrder": "v1", "saveManualExecutions": true, "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "f60d6e6e-dace-497a-b58b-113993ec36e5", "connections": {"943c561c-ca89-461c-a6fb-c3011baaf81a": {"main": [[{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-f793dec6", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-633cadae", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-a6cc07e7", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-b44b5d2f", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-b462a0c1", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-7f90de1c", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-1fe8b59b", "type": "main", "index": 0}], [{"node": "error-handler-943c561c-ca89-461c-a6fb-c3011baaf81a-769d825e", "type": "main", "index": 0}]]}, "260b66a2-0841-4dc7-9666-acbc9317fd91": {"main": [[{"node": "error-handler-260b66a2-0841-4dc7-9666-acbc9317fd91-7e3af903", "type": "main", "index": 0}]]}, "005564e9-5ecb-4ee9-aca0-69a660656b09": {"main": [[{"node": "error-handler-005564e9-5ecb-4ee9-aca0-69a660656b09-d3c36c71", "type": "main", "index": 0}]]}}, "description": "Automated workflow: SSL Expiry Alert. This workflow integrates 7 different services: stickyNote, httpRequest, scheduleTrigger, stopAndError, gmail. It contains 16 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: SSL Expiry Alert. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}