{ "id": "9w5vu5VmXxpdBLWi", "meta": { "instanceId": "workflow-df71aefa", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:45.340736", "updatedAt": "2025-09-29T07:07:45.340754", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "Send Daily Birthday Reminders from Google Contacts to Slack", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "e4de5385-6b00-4245-b06e-3003703a348a", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [ 80, 140 ], "parameters": { "rule": { "interval": [ { "triggerAtHour": 8 } ] } }, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow." }, { "id": "df65de90-d931-450e-bed1-bf8b4f79a090", "name": "Google Contacts", "type": "n8n-nodes-base.googleContacts", "notes": "Get the contact details\n", "position": [ 300, 140 ], "parameters": { "fields": [ "emailAddresses", "birthdays", "names", "nicknames" ], "options": {}, "operation": "getAll", "returnAll": true }, "notesInFlow": true, "typeVersion": 1 }, { "id": "6e3dfeea-b22d-4156-a9a9-a8d5bb610848", "name": "If Node", "type": "n8n-nodes-base.if", "position": [ 800, 180 ], "parameters": { "options": {}, "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "eff6fe23-651d-474d-8d77-3734e1ac4c13", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.today }}", "rightValue": "={{ $('Google Contacts').item.json.birthdays }}" } ] } }, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow." }, { "id": "32bd420e-11ab-4e82-a732-ed155f36094b", "name": "Slack", "type": "n8n-nodes-base.slack", "notes": "Reminds to the birthday message", "position": [ 1020, 60 ], "webhookId": "b5fda056-5b45-49ee-8e09-cd4bc7a2a881", "parameters": { "text": "Todays Birthday of your friend", "select": "channel", "blocksUi": "=Today is {{$json[\"first_name\"]}} {{$json[\"last_name\"]}}'s birthday! 🎉", "channelId": { "__rl": true, "mode": "url", "value": "", "__regex": "{{ $env.WEBHOOK_URL }}[a-zA-Z0-9]{2,})" }, "messageType": "block", "otherOptions": {}, "authentication": "{{ $credentials.oAuth2 }}" }, "credentials": { "slackOAuth2Api": { "id": "", "name": "" } }, "notesInFlow": true, "typeVersion": 2.3 }, { "id": "caa5a301-ff68-4d61-801f-ac8c95edded3", "name": "Filter Contact ", "type": "n8n-nodes-base.filter", "position": [ 560, 140 ], "parameters": { "options": {}, "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "edb146b2-f338-4563-a991-d38613d1d5aa", "operator": { "type": "string", "operation": "notEmpty", "singleValue": true }, "leftValue": "={{ $('Google Contacts').item.json.birthdays }}", "rightValue": "" } ] } }, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow." }, { "id": "4a156b56-ab25-4d29-aa1b-8cf00e4114c9", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 0, 0 ], "parameters": { "width": 1220, "height": 320, "content": "Send Daily Birthday Reminders from Google Contacts to Slack" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "b1b04e75-e674-4389-a5ad-ebdcdfedca78", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ 0, 360 ], "parameters": { "width": 1220, "height": 100, "content": "This workflow automates the process of retrieving your Google Contacts, filtering out the ones with birthdays on the current day, and sending a reminder to a designated Slack channel. By scheduling it to run daily at a specific time, the workflow ensures that you never miss a birthday reminder. Whether for team celebrations, personal reminders, or simply keeping track of important dates, this workflow can be easily customized to notify you or your team about upcoming birthdays directly in Slack." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "error-74393069", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "22eaeed6-6d9e-430b-8a1d-3848257cf3b2", "connections": { "df65de90-d931-450e-bed1-bf8b4f79a090": { "main": [ [ { "node": "error-handler-df65de90-d931-450e-bed1-bf8b4f79a090-c72979e5", "type": "main", "index": 0 } ] ] }, "32bd420e-11ab-4e82-a732-ed155f36094b": { "main": [ [ { "node": "error-handler-32bd420e-11ab-4e82-a732-ed155f36094b-72a547ed", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: Send Daily Birthday Reminders from Google Contacts to Slack. This workflow integrates 7 different services: filter, stickyNote, scheduleTrigger, stopAndError, slack. It contains 9 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Send Daily Birthday Reminders from Google Contacts to Slack. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }