Workflow: Filter Workflow
Integrations: cron, filter, notion, set, slack, stickyNote, stopAndError, switch

{"meta": {"instanceId": "workflow-034ddb63", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:44.829397", "updatedAt": "2025-09-29T07:07:44.829407", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "d2e53ca7-07e1-499b-8f29-9a2a1de10824", "name": "Filter incomplete tasks only", "type": "n8n-nodes-base.filter", "position": [220, 380], "parameters": {"conditions": {"string": [{"value1": "={{ $json.Status }}", "value2": "Done", "operation": "notEqual"}]}}, "typeVersion": 1, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "2ff58ec6-58a3-4bf0-adba-d2d0ae87944e", "name": "Get All Slack Users (Darryn)", "type": "n8n-nodes-base.slack", "position": [440, 380], "parameters": {"resource": "user", "operation": "getAll", "authentication": "{{ $credentials.oAuth2 }}"}, "credentials": {"slackOAuth2Api": {"id": "xkCA23zAF89RcovP", "name": "Slack Account (OAuth)  (darryn@optimus01.co.za)"}}, "executeOnce": false, "typeVersion": 1, "notes": "This slack node performs automated tasks as part of the workflow."}, {"id": "ff9a6853-b254-4a4f-aa8d-89546e78de0b", "name": "Get To Dos from Tasks Database", "type": "n8n-nodes-base.notion", "position": [20, 380], "parameters": {"options": {}, "resource": "databasePage", "operation": "getAll", "databaseId": {"__rl": true, "mode": "list", "value": "1197be57-c54f-815f-8d3b-fdbbb741b19c", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Tasks "}}, "credentials": {"notionApi": {"id": "n1DsMuDcWjPxXlfD", "name": "Notion Account (darryn@optimus01.co.za)"}}, "typeVersion": 1, "notes": "This notion node performs automated tasks as part of the workflow."}, {"id": "c9856834-1a6b-4e2e-bb77-9b3c74c34ccf", "name": "Schedule Mon - Friday @ 09:00am", "type": "n8n-nodes-base.cron", "position": [-600, 380], "parameters": {"triggerTimes": {"item": [{"mode": "custom", "cronExpression": "0 9 * * 1,2,3,4,5"}]}}, "typeVersion": 1, "notes": "This cron node performs automated tasks as part of the workflow."}, {"id": "41e67948-1d4a-4654-8817-dbcf61eb061d", "name": "Set Notion User Emails", "type": "n8n-nodes-base.set", "position": [-380, 380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "94663427-c288-446a-96df-ddfc3fe332f0", "name": "User 1 Notion Email", "type": "string", "value": "darryn@optimus01.co.za"}, {"id": "bed7739d-640a-43cc-9fb5-4472844ccc09", "name": "User 2 Notion Email", "type": "string", "value": "cassie@optimus01.com"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "3a59b653-dd65-4443-b2d0-44cce3e780dd", "name": "Set Slack User Full Name", "type": "n8n-nodes-base.set", "position": [-180, 380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "94663427-c288-446a-96df-ddfc3fe332f0", "name": "User 1 Slack Full Name", "type": "string", "value": "Darryn Balanco"}, {"id": "bed7739d-640a-43cc-9fb5-4472844ccc09", "name": "User 2 Slack Full Name", "type": "string", "value": "Cassandra Balanco"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "340af945-5e22-408f-86de-b4e4160ec751", "name": "Send a Direct Message to User 1", "type": "n8n-nodes-base.slack", "position": [1200, 260], "parameters": {"text": "# TO DO", "channel": "={{ $json.id }}", "attachments": [{"title": "=\u2611\ufe0f  {{ $('Filter incomplete tasks only').item.json.Task }} (Due: {{ $('Filter incomplete tasks only').item.json.Due.start }})"}], "otherOptions": {"mrkdwn": true}, "authentication": "{{ $credentials.oAuth2 }}"}, "credentials": {"slackOAuth2Api": {"id": "xkCA23zAF89RcovP", "name": "Slack Account (OAuth)  (darryn@optimus01.co.za)"}}, "typeVersion": 1, "notes": "This slack node performs automated tasks as part of the workflow."}, {"id": "df9bc0b5-7a34-407d-a412-dd4022943e41", "name": "Send a Direct Message to User 2", "type": "n8n-nodes-base.slack", "position": [1200, 500], "parameters": {"text": "# TO DO", "channel": "={{ $json.id }}", "attachments": [{"title": "=\u2611\ufe0f  {{ $('Filter incomplete tasks only').item.json.Task }} (Due: {{ $('Filter incomplete tasks only').item.json.Due.start }})"}], "otherOptions": {"mrkdwn": true}, "authentication": "{{ $credentials.oAuth2 }}"}, "credentials": {"slackOAuth2Api": {"id": "xkCA23zAF89RcovP", "name": "Slack Account (OAuth)  (darryn@optimus01.co.za)"}}, "typeVersion": 1, "notes": "This slack node performs automated tasks as part of the workflow."}, {"id": "f6ab26d3-27d9-4b06-886d-64bbaf5d4f92", "name": "Switch for Notion Users Emails", "type": "n8n-nodes-base.switch", "position": [720, 380], "parameters": {"rules": {"values": [{"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"operator": {"type": "string", "operation": "contains"}, "leftValue": "={{ $('Filter incomplete tasks only').item.json['Notion User'].toString() }}", "rightValue": "={{ $('Set Notion User Emails').item.json['User 1 Notion Email'] }}"}]}, "renameOutput": true}, {"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "d0bf512b-15e4-4dd6-b468-50cec25c3e2c", "operator": {"type": "string", "operation": "contains"}, "leftValue": "={{ $('Filter incomplete tasks only').item.json['Notion User'].toString() }}", "rightValue": "={{ $('Set Notion User Emails').item.json['User 2 Notion Email'] }}"}]}, "renameOutput": true}]}, "options": {}}, "typeVersion": 3.2, "notes": "This switch node performs automated tasks as part of the workflow."}, {"id": "4492bc68-e8ef-4417-b3d2-d7fb9418db17", "name": "Filter Slack User 1 Full Name", "type": "n8n-nodes-base.filter", "position": [980, 260], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "6aafbbd7-065c-4253-b905-07c7df9210c1", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.profile.real_name }}", "rightValue": "={{ $('Set Slack User Full Name').item.json['User 1 Slack Full Name'] }}"}]}}, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "159b3436-9141-4769-a495-14e9fdd37f1d", "name": "Filter Slack User 2 Full Name", "type": "n8n-nodes-base.filter", "position": [980, 500], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "6aafbbd7-065c-4253-b905-07c7df9210c1", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.profile.real_name }}", "rightValue": "={{ $('Set Slack User Full Name').item.json['User 2 Slack Full Name'] }}"}]}}, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "5b863aea-a4d5-486e-82a9-a4f2b713f8f8", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-670.7551894447033, 180], "parameters": {"color": 7, "width": 232.28640473083397, "height": 395.93315440190497, "content": "## Schedule Mon - Friday @ 09:00am\nTriggers the workflow every weekday at 9:00 AM. This ensures that the reminders are sent at the start of the day.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "420236d0-5139-4faf-9b2e-dca35b15a6b9", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [-424.62240527764834, 180], "parameters": {"color": 7, "width": 377.1025213664834, "height": 397.4539493179217, "content": "## Set Notion User Emails and Slack User Full Name\nStores the email addresses of Notion users, and full names of the Slack users to be matched later in the workflow."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "751c8fb7-0b38-4a83-bf55-82be400f59a7", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [-33.06639208352749, 180], "parameters": {"width": 400.70229197070614, "height": 397.31352154531925, "content": "## Get To Dos from Tasks Database and Filter incomplete tasks only\nRetrieves all tasks from the specified Notion database and filters out tasks that are marked as \"Done,\" ensuring that only incomplete tasks are processed."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "4e352442-ce25-4e36-b334-c6b1e0896d06", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [384.62240527764834, 180], "parameters": {"color": 3, "width": 240.32164378964495, "height": 398.1826056622561, "content": "## Get All Slack Users\nFetches all users from Slack to enable proper identification of who should receive the reminders.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "5dde41f6-b66f-4abb-8bc6-9226b06e9331", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [640, 180], "parameters": {"width": 267.7344316658903, "height": 398.29835161802384, "content": "## Switch for Notion Users Emails\nDetermines which user (User 1 or User 2) is assigned the task in Notion by comparing email addresses, routing the workflow accordingly.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3babdb0f-29d7-4ff7-9174-3ae0b5a4979d", "name": "Sticky Note9", "type": "n8n-nodes-base.stickyNote", "position": [920, 83.27096255097126], "parameters": {"color": 3, "width": 455.87875185735516, "height": 592.983420807127, "content": "## Filter Slack User and Send a Direct Message to User\nFilters Slack users to identify User 1 based on their full name and sends a direct Slack message to User with the details of their incomplete tasks.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "43e36d12-b477-49fa-aed0-e28304310894", "name": "Sticky Note11", "type": "n8n-nodes-base.stickyNote", "position": [-1140, 260], "parameters": {"color": 6, "width": 396.6384066163515, "height": 282.5799404564392, "content": "### Get More Templates Like This \ud83d\udc47\n[![Video Thumbnail]({{ $env.WEBHOOK_URL }}]({{ $env.WEBHOOK_URL }}\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "6eefe33e-0dc9-4ee8-8ad4-f61078e74227", "name": "Sticky Note14", "type": "n8n-nodes-base.stickyNote", "position": [-1520, 620], "parameters": {"width": 777.0408639013781, "height": 216.76250654583106, "content": "## Setup\n1. **`Connect Notion`**: You will need to connect your Notion account and specify the database containing tasks.\n2. **`Connect Slack`**: Authenticate with Slack using OAuth to allow the workflow to send messages on your behalf.\n3. **`Notion user Email Address mapping`**: Ensure that the Notion users\u2019 email addresses are correctly mapped to their corresponding Notion user profiles.\n4. **`Slack user Full Name mapping`**: Ensure that the Slack users\u2019 full names are correctly mapped to their corresponding Slack user profiles.\n5. **`Adjust schedule`**: If needed, modify the schedule node to run at a different time or frequency.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "8a91c90e-a9b6-4948-beb4-773e8c9f91f7", "name": "Sticky Note15", "type": "n8n-nodes-base.stickyNote", "position": [-1520, 860], "parameters": {"color": 7, "width": 777.0408639013781, "height": 179.2285042683488, "content": "## How to customize this workflow\n- **`Change the Notion Tasks database`**: You can adjust the workflow to pull tasks from a different Notion database by modifying the \"Get To Dos from Tasks Database\" node.\n- **`Add more users`**: The workflow currently supports two users, but you can expand it to support more by adding additional logic in the \"Switch for Notion Users Emails\" node.\n- **`Modify the message format`**: The Slack message content can be customized further to include more task details or change the message format.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9e03e28e-f4ce-4c75-85ab-e7ffe0f1bfd7", "name": "Sticky Note10", "type": "n8n-nodes-base.stickyNote", "position": [-1520, 220], "parameters": {"color": 7, "width": 366.75796434038665, "height": 379.6332969008185, "content": "## What this workflow does\n1. **`Triggers every weekday at 9:00 AM`**: The workflow runs at 9:00 AM, Monday through Friday.\n2. **`Fetches tasks from Notion`**: It retrieves tasks from a Notion database.\n3. **`Filters incomplete tasks`**: The workflow filters tasks that are not marked as \"Done.\"\n4. **`Fetches Slack users`**: It retrieves all Slack users to ensure that the reminders are sent to the correct user.\n5. **`Matches tasks to the correct user`**: It checks the Notion task assignee and matches it with the appropriate Slack user.\n6. **`Sends Slack reminders`**: Sends a Slack direct message to each user with their incomplete tasks and due dates."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "eb0942b9-d18f-46a2-bea0-23eb07bb1d85", "name": "Sticky Note12", "type": "n8n-nodes-base.stickyNote", "position": [-1535, 58], "parameters": {"color": 7, "width": 809.515353297114, "height": 999.58820121335, "content": "## Automated Notion Task Reminders via Slack\nBuilt for the [Let's Automate It Community]({{ $env.WEBHOOK_URL }} by [Optimus Agency]({{ $env.WEBHOOK_URL }}\n\nThis workflow automates sending task reminders from a Notion database to Slack users. By running every weekday morning, it ensures that users receive timely reminders of their incomplete tasks, helping them stay organized and efficient."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f4334588-60dd-456a-839f-6e5610ce18b8", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-400, 32.55329198368918], "parameters": {"color": 4, "width": 314.0627775112129, "height": 133.34123489274947, "content": "# EDIT THE FIELDS HERE \ud83d\udc47"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "50bd2206-7b97-454e-9b21-be6e8af7eb7d", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [-671.0639503804273, 33.191851141281106], "parameters": {"color": 7, "width": 231.9017050322621, "height": 132.26101263924207, "content": "## \ud83d\udca1 Tip\n[Crontab Guru]({{ $env.WEBHOOK_URL }} is a simple and intuitive web-based tool that helps users create, edit, and understand cron schedules. "}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-5758dba9", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "pinData": {}, "connections": {"2ff58ec6-58a3-4bf0-adba-d2d0ae87944e": {"main": [[{"node": "error-handler-2ff58ec6-58a3-4bf0-adba-d2d0ae87944e-020c0d0a", "type": "main", "index": 0}]]}, "340af945-5e22-408f-86de-b4e4160ec751": {"main": [[{"node": "error-handler-340af945-5e22-408f-86de-b4e4160ec751-130b0dd0", "type": "main", "index": 0}]]}, "df9bc0b5-7a34-407d-a412-dd4022943e41": {"main": [[{"node": "error-handler-df9bc0b5-7a34-407d-a412-dd4022943e41-e05c12c8", "type": "main", "index": 0}]]}}, "name": "Filter Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "description": "Automated workflow: Filter Workflow. This workflow integrates 8 different services: filter, stickyNote, switch, set, stopAndError. It contains 27 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Filter Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}