Workflow: Scheduletrigger Workflow
Integrations: dateTime, gmail, httpRequest, if, merge, noOp, notion, notionTrigger, scheduleTrigger, stickyNote

{"meta": {"instanceId": "workflow-2965a094", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:44.086479", "updatedAt": "2025-09-29T07:07:44.086494", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "0bacf032-53d6-4ba6-ab71-e01625c49cc4", "name": "On schedule", "type": "n8n-nodes-base.scheduleTrigger", "position": [-1960, 160], "parameters": {"rule": {"interval": [{"field": "minutes", "minutesInterval": 1}]}}, "typeVersion": 1.1, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "2e0d9aef-0a60-4506-9c11-c6c2cccb16ea", "name": "Derive last request time", "type": "n8n-nodes-base.dateTime", "position": [-1740, 160], "parameters": {"duration": 1, "timeUnit": "minutes", "magnitude": "={{ $json.timestamp }}", "operation": "subtractFromDate", "outputFieldName": "last_request_time"}, "typeVersion": 2, "notes": "This dateTime node performs automated tasks as part of the workflow."}, {"id": "f726c448-b4c4-4159-8ca5-c94c092127b7", "name": "Get emails from label and last request time", "type": "n8n-nodes-base.gmail", "position": [-1520, 160], "parameters": {"filters": {"labelIds": ["Label_9178764513576607415"]}, "operation": "getAll", "returnAll": true}, "credentials": {"gmailOAuth2": {"id": "{{ $credentials.gmailOAuth2.id }}", "name": "REPLACE ME"}}, "typeVersion": 2, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "9b86331f-d33b-4266-ba34-bc0491a0da24", "name": "Create database page", "type": "n8n-nodes-base.notion", "position": [-620, 60], "parameters": {"title": "={{ $('If database page not found').item.json.Subject }}", "blockUi": {"blockValues": [{"type": "heading_3", "textContent": "Snippet"}, {"textContent": "={{ $('If database page not found').item.json.snippet }}"}, {"text": {"text": [{"text": "See more", "isLink": true, "textLink": "={{ $env.WEBHOOK_URL }}{{ $json.emailAddress }}/#all/{{ $('If database page not found').item.json.id }}", "annotationUi": {}}]}, "richText": true}]}, "options": {"icon": "{{ $env.WEBHOOK_URL }}", "iconType": "file"}, "resource": "databasePage", "databaseId": {"__rl": true, "mode": "list", "value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Gmail"}, "propertiesUi": {"propertyValues": [{"key": "YOUR_CREDENTIAL_HERE", "textContent": "={{ $('If database page not found').item.json.id }}"}, {"key": "YOUR_CREDENTIAL_HERE", "urlValue": "{{ $env.BASE_URL }}"}]}}, "credentials": {"notionApi": {"id": "{{ $credentials.notionApi.id }}", "name": "[UPDATE ME]"}}, "typeVersion": 2, "notes": "This notion node performs automated tasks as part of the workflow."}, {"id": "d7198578-4c83-4f57-8eba-5b5a9b89195c", "name": "Try get database page", "type": "n8n-nodes-base.notion", "position": [-1360, 220], "parameters": {"filters": {"conditions": [{"key": "YOUR_CREDENTIAL_HERE", "condition": "equals", "richTextValue": "={{ $json.id }}"}]}, "options": {}, "resource": "databasePage", "operation": "getAll", "returnAll": true, "databaseId": {"__rl": true, "mode": "list", "value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "My Gmail Tasks"}, "filterType": "manual"}, "credentials": {"notionApi": {"id": "{{ $credentials.notionApi.id }}", "name": "[UPDATE ME]"}}, "typeVersion": 2, "alwaysOutputData": true, "notes": "This notion node performs automated tasks as part of the workflow."}, {"id": "f8188ab9-9a80-4aa9-b773-73cd90b8dbd3", "name": "If checked off", "type": "n8n-nodes-base.if", "position": [-1740, 460], "parameters": {"conditions": {"boolean": [{"value1": "={{ $json.Complete }}", "value2": true}]}}, "typeVersion": 1, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "bfcfeeb1-ad8b-47fb-8a09-b58e7b649a25", "name": "On updated database page", "type": "n8n-nodes-base.notionTrigger", "position": [-1960, 460], "parameters": {"event": "pagedUpdatedInDatabase", "pollTimes": {"item": [{"mode": "everyMinute"}]}, "databaseId": {"__rl": true, "mode": "list", "value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "My Gmail Tasks"}}, "credentials": {"notionApi": {"id": "{{ $credentials.notionApi.id }}", "name": "[UPDATE ME]"}}, "typeVersion": 1, "notes": "This notionTrigger node performs automated tasks as part of the workflow."}, {"id": "dc2c59b8-6e0d-46b3-946a-e48b0461c48f", "name": "Remove label from target email", "type": "n8n-nodes-base.gmail", "position": [-1520, 460], "parameters": {"labelIds": ["Label_9178764513576607415"], "messageId": "={{ $json['Thread ID'] }}", "operation": "removeLabels"}, "credentials": {"gmailOAuth2": {"id": "{{ $credentials.gmailOAuth2.id }}", "name": "REPLACE ME"}}, "typeVersion": 2, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "0f693c2f-ce89-4a2f-a85f-9230b7bcb94d", "name": "Not yet checked off, do nothing", "type": "n8n-nodes-base.noOp", "position": [-1520, 660], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "bf792470-fc0a-45a2-b655-df5c977faa97", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [-1220, 100], "parameters": {"mode": "combine", "options": {}, "joinMode": "enrichInput1", "mergeByFields": {"values": [{"field1": "id", "field2": "property_thread_id"}]}}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "f910c34c-4c3d-481f-8223-a8aae710dbbd", "name": "If found, do nothing", "type": "n8n-nodes-base.noOp", "position": [-840, 260], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "7086cd15-9f2e-40e4-be3b-47d117dde670", "name": "If database page not found", "type": "n8n-nodes-base.if", "position": [-1060, 160], "parameters": {"conditions": {"string": [{"value1": "={{ $json.property_thread_id }}", "operation": "isEmpty"}]}}, "typeVersion": 1, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "86ce380c-0810-4edb-94e4-fb67b0ca422c", "name": "Find my email address", "type": "n8n-nodes-base.httpRequest", "position": [-840, 60], "parameters": {"url": "{{ $env.API_BASE_URL }}", "options": {}, "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"gmailOAuth2": {"id": "{{ $credentials.gmailOAuth2.id }}", "name": "REPLACE ME"}}, "typeVersion": 4.1, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "f576f785-49e4-4ed2-b83e-400b001b6c3a", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-2540, 100], "parameters": {"width": 501.0810810810809, "height": 545.405405405404, "content": "## Send labeled email to a Notion database\nThis workflow sends the contents of an email to a Notion database. The email must be labeled with a specific label for the workflow to trigger. The email subject will be the title of the Notion page, and a snippet of the email body will be the content of the Notion page. The email link will be added to the Notion page as a property.\n\n### How it works\nOn scheduled intervals, find all emails with a specific label. For each email, check if the email already exists in the Notion database. If it does not exist, create a new page in the Notion database, otherwise do nothing. When the task in the Notion database is checked off, the label will be removed from the email.\n\n### Setup\nThis workflow requires that you set up a Notion database or use an existing one with at least the following fields:\n- Title (title)\n- Thread ID (text)\n- Email thread (URL)\n\n\nAdditionally, create a label that will be used to trigger the workflow in Gmail. In this workflow, the label is called \"Notion\"."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "connections": {"86ce380c-0810-4edb-94e4-fb67b0ca422c": {"main": [[{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-d64902d2", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-56392d27", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-6a9a52b2", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-92462b74", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-973766a5", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-e152dd53", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-f5ebb6b5", "type": "main", "index": 0}], [{"node": "error-handler-86ce380c-0810-4edb-94e4-fb67b0ca422c-e3e0adb1", "type": "main", "index": 0}]]}}, "name": "Scheduletrigger 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: Scheduletrigger Workflow. This workflow integrates 11 different services: notionTrigger, stickyNote, httpRequest, scheduleTrigger, merge. It contains 16 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Scheduletrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}