Workflow: develop a modular n8n workflow that supports Datetime Schedule Create Webhook
Integrations: dateTime, httpRequest, if, itemLists, merge, notion, scheduleTrigger

{"meta": {"instanceId": "a2434c94d549548a685cca39cc4614698e94f527bcea84eefa363f1037ae14cd"}, "nodes": [{"id": "713d2864-efd0-4938-871e-1d37a7c58b67", "name": "On schedule", "type": "n8n-nodes-base.scheduleTrigger", "position": [1280, 840], "parameters": {"rule": {"interval": [{"field": "minutes"}]}}, "typeVersion": 1.1}, {"id": "0cedfde1-6ae1-485c-bd2c-b6114f6e4deb", "name": "Try get database page", "type": "n8n-nodes-base.notion", "position": [2160, 900], "parameters": {"filters": {"conditions": [{"key": "Event ID|rich_text", "condition": "equals", "richTextValue": "={{ $json.id }}"}]}, "options": {}, "resource": "databasePage", "operation": "getAll", "returnAll": true, "databaseId": {"__rl": true, "mode": "list", "value": "6318457d-052d-4107-9c5b-8041f530fa03", "cachedResultUrl": "https://www.notion.so/6318457d052d41079c5b8041f530fa03", "cachedResultName": "Outlook Calendar"}, "filterType": "manual"}, "credentials": {"notionApi": {"id": "18", "name": "[UPDATE ME]"}}, "typeVersion": 2, "alwaysOutputData": true}, {"id": "92ebdd55-0950-471c-aa44-2fed31b17870", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [2380, 780], "parameters": {"mode": "combine", "options": {}, "joinMode": "enrichInput1", "mergeByFields": {"values": [{"field1": "id", "field2": "property_event_id"}]}}, "typeVersion": 2.1}, {"id": "d38e4228-b3ab-443f-bfac-ffd0bc10fd08", "name": "If database page not found", "type": "n8n-nodes-base.if", "position": [2600, 840], "parameters": {"conditions": {"string": [{"value1": "={{ $json.property_event_id }}", "operation": "isEmpty"}]}}, "typeVersion": 1}, {"id": "6ef0f18c-51fe-42e7-9e42-fd6ca8564e6e", "name": "Create database page", "type": "n8n-nodes-base.notion", "position": [2820, 740], "parameters": {"title": "={{ $json.subject }}", "options": {"icon": "https://avatars.githubusercontent.com/u/45487711?s=280&v=4", "iconType": "file"}, "resource": "databasePage", "databaseId": {"__rl": true, "mode": "list", "value": "6318457d-052d-4107-9c5b-8041f530fa03", "cachedResultUrl": "https://www.notion.so/6318457d052d41079c5b8041f530fa03", "cachedResultName": "Outlook Calendar"}, "propertiesUi": {"propertyValues": [{"key": "Date|date", "range": true, "dateEnd": "={{ $json.end.dateTime }}", "timezone": "={{ $json.start.timeZone }}", "dateStart": "={{ $json.start.dateTime }}"}, {"key": "Event ID|rich_text", "textContent": "={{ $json.id }}"}, {"key": "Link|url", "urlValue": "={{ $json.webLink }}"}]}}, "credentials": {"notionApi": {"id": "18", "name": "[UPDATE ME]"}}, "typeVersion": 2}, {"id": "2d324002-348b-4f23-bffe-57f685a8a761", "name": "Update database page", "type": "n8n-nodes-base.notion", "position": [2820, 940], "parameters": {"pageId": {"__rl": true, "mode": "id", "value": "={{ $json.id }}"}, "resource": "databasePage", "operation": "update", "propertiesUi": {"propertyValues": [{"key": "Date|date", "range": true, "dateEnd": "={{ $json.end.dateTime }}", "timezone": "={{ $json.start.timeZone }}", "dateStart": "={{ $json.start.dateTime }}"}, {"key": "Link|url", "urlValue": "={{ $json.webLink }}"}, {"key": "Name|title", "title": "={{ $json.subject }}"}]}}, "credentials": {"notionApi": {"id": "18", "name": "[UPDATE ME]"}}, "typeVersion": 2}, {"id": "ee4792c4-d71c-4fd3-a8a3-babae5ff3479", "name": "X days into the future", "type": "n8n-nodes-base.dateTime", "position": [1500, 840], "parameters": {"duration": 365, "magnitude": "={{ $json.timestamp }}", "operation": "addToDate", "outputFieldName": "Future date"}, "typeVersion": 2}, {"id": "00b53a21-97c7-4293-a5eb-8321afddd4bc", "name": "Split out items", "type": "n8n-nodes-base.itemLists", "position": [1940, 840], "parameters": {"options": {}, "fieldToSplitOut": "value"}, "typeVersion": 2.2}, {"id": "a7541bb9-0c0d-48b5-a39e-57e5681330da", "name": "Get Outlook Calendar events", "type": "n8n-nodes-base.httpRequest", "position": [1720, 840], "parameters": {"url": "https://graph.microsoft.com/v1.0/me/calendarview", "options": {}, "sendQuery": true, "authentication": "genericCredentialType", "genericAuthType": "oAuth2Api", "queryParameters": {"parameters": [{"name": "startdatetime", "value": "={{ new Date($('On schedule').item.json.timestamp).toISOString() }}"}, {"name": "enddatetime", "value": "={{ new Date($json['Future date']).toISOString() }}"}]}}, "credentials": {"oAuth2Api": {"id": "dxBfWhTrnERPMHGs", "name": "REPLACE ME"}}, "typeVersion": 4.1}], "connections": {"Merge": {"main": [[{"node": "If database page not found", "type": "main", "index": 0}]]}, "On schedule": {"main": [[{"node": "X days into the future", "type": "main", "index": 0}]]}, "Split out items": {"main": [[{"node": "Merge", "type": "main", "index": 0}, {"node": "Try get database page", "type": "main", "index": 0}]]}, "Try get database page": {"main": [[{"node": "Merge", "type": "main", "index": 1}]]}, "X days into the future": {"main": [[{"node": "Get Outlook Calendar events", "type": "main", "index": 0}]]}, "If database page not found": {"main": [[{"node": "Create database page", "type": "main", "index": 0}], [{"node": "Update database page", "type": "main", "index": 0}]]}, "Get Outlook Calendar events": {"main": [[{"node": "Split out items", "type": "main", "index": 0}]]}}}