{
  "nodes": [
    {
      "id": "9c2f922e-2f23-417f-9e26-f2f91d719728",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        912,
        16
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "daysInterval": 7
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "ea56ce13-5b66-439c-8241-3c8eecb06eb8",
      "name": "Get all previous executions",
      "type": "n8n-nodes-base.n8n",
      "position": [
        1824,
        112
      ],
      "parameters": {
        "filters": {},
        "options": {},
        "resource": "execution",
        "returnAll": true,
        "requestOptions": {}
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "22cefb90-bce7-402d-a996-6489bda7c136",
      "name": "Get all Workflows",
      "type": "n8n-nodes-base.n8n",
      "position": [
        1424,
        -160
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "b6395b45-7c15-4ab4-9dc4-905ddf04d54b",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2496,
        0
      ],
      "parameters": {
        "mode": "combine",
        "options": {
          "clashHandling": {
            "values": {
              "resolveClash": "preferLast"
            }
          }
        },
        "advanced": true,
        "joinMode": "enrichInput2",
        "mergeByFields": {
          "values": [
            {
              "field1": "workflowId",
              "field2": "workflowId"
            }
          ]
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "8e131881-f7ab-46cf-9ebc-f006a819d66d",
      "name": "Edit Field ID to workflowId",
      "type": "n8n-nodes-base.set",
      "position": [
        2160,
        -160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "474e54af-e79e-4d58-8c11-dbd920f0511c",
              "name": "workflowId",
              "type": "string",
              "value": "={{ $json.id }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "12a17b24-b3c7-4d40-8a03-3b84c932521b",
      "name": "Filter executions last week",
      "type": "n8n-nodes-base.filter",
      "position": [
        2896,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "31745f1d-793a-4674-80ab-77afede449d6",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              },
              "leftValue": "={{ $json.startedAt }}",
              "rightValue": "={{ DateTime.now().minus({ days: 7 }) }}"
            }
          ]
        }
      },
      "typeVersion": 2,
      "alwaysOutputData": false
    },
    {
      "id": "2e18c677-62ae-4228-9aeb-ba665f8d05c8",
      "name": "Prepare html report",
      "type": "n8n-nodes-base.code",
      "position": [
        3376,
        0
      ],
      "parameters": {
        "jsCode": "// Calculate the date range (7 days ago to now)\nconst now = new Date();\nconst sevenDaysAgo = new Date(now.getTime() - (7 * 24 * 60 * 60 * 1000));\n\n// Group executions by workflow\nconst workflowStats = {};\n\nfor (const item of $input.all()) {\n  const workflowId = item.json.workflowId;\n  const workflowName = item.json.name;\n  const status = item.json.status;\n  const startedAt = new Date(item.json.startedAt);\n  const stoppedAt = item.json.stoppedAt ? new Date(item.json.stoppedAt) : null;\n  \n  // Calculate runtime in seconds\n  let runtime = 0;\n  if (stoppedAt) {\n    runtime = (stoppedAt - startedAt) / 1000; // Convert to seconds\n  }\n  \n  // Initialize workflow stats if not exists\n  if (!workflowStats[workflowId]) {\n    workflowStats[workflowId] = {\n      name: workflowName,\n      id: workflowId,\n      error: { count: 0, totalRuntime: 0 },\n      success: { count: 0, totalRuntime: 0 },\n      waiting: { count: 0, totalRuntime: 0 }\n    };\n  }\n  \n  // Update counts and runtime based on status\n  if (status === 'error') {\n    workflowStats[workflowId].error.count++;\n    workflowStats[workflowId].error.totalRuntime += runtime;\n  } else if (status === 'success') {\n    workflowStats[workflowId].success.count++;\n    workflowStats[workflowId].success.totalRuntime += runtime;\n  } else if (status === 'waiting') {\n    workflowStats[workflowId].waiting.count++;\n    workflowStats[workflowId].waiting.totalRuntime += runtime;\n  }\n}\n\n// Helper function to format date (without time)\nfunction formatDate(date) {\n  const options = { \n    year: 'numeric', \n    month: 'long', \n    day: 'numeric'\n  };\n  return date.toLocaleDateString('en-US', options);\n}\n\n// Helper function to format runtime\nfunction formatRuntime(seconds) {\n  if (seconds < 60) {\n    return `${seconds.toFixed(2)}s`;\n  } else if (seconds < 3600) {\n    const minutes = Math.floor(seconds / 60);\n    const remainingSeconds = (seconds % 60).toFixed(0);\n    return `${minutes}m ${remainingSeconds}s`;\n  } else {\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    return `${hours}h ${minutes}m`;\n  }\n}\n\n// Format date range for header and subject (7 days ago to now)\nconst fromDate = formatDate(sevenDaysAgo);\nconst toDate = formatDate(now);\nconst dateRangeText = `${fromDate} - ${toDate}`;\nconst subject = `n8n Execution Report ${fromDate} - ${toDate}`;\n\n// Build HTML report\nlet html = `\n<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body {\n      font-family: Arial, sans-serif;\n      margin: 20px;\n      background-color: #f5f5f5;\n    }\n    .header {\n      background-color: white;\n      padding: 20px;\n      margin-bottom: 20px;\n      border-radius: 8px;\n      box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }\n    h1 {\n      color: #333;\n      margin: 0 0 10px 0;\n    }\n    .date-range {\n      color: #666;\n      font-size: 1.1em;\n      margin: 10px 0;\n    }\n    .summary {\n      display: flex;\n      gap: 20px;\n      margin-top: 15px;\n    }\n    .summary-item {\n      padding: 10px 15px;\n      border-radius: 4px;\n      font-weight: bold;\n    }\n    .summary-error {\n      background-color: #ffebee;\n      color: #c62828;\n    }\n    .summary-success {\n      background-color: #e8f5e9;\n      color: #2e7d32;\n    }\n    .summary-waiting {\n      background-color: #fff3e0;\n      color: #ef6c00;\n    }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      background-color: white;\n      box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n      border-radius: 8px;\n      overflow: hidden;\n    }\n    th {\n      background-color: #4CAF50;\n      color: white;\n      padding: 12px;\n      text-align: left;\n      font-weight: bold;\n    }\n    td {\n      padding: 10px 12px;\n      border-bottom: 1px solid #ddd;\n    }\n    tr:hover {\n      background-color: #f5f5f5;\n    }\n    .workflow-name {\n      font-weight: bold;\n      color: #333;\n    }\n    .workflow-id {\n      color: #666;\n      font-size: 0.9em;\n      display: block;\n      margin-top: 4px;\n    }\n    .status-cell {\n      text-align: center;\n    }\n    .status-badge {\n      display: inline-block;\n      padding: 4px 8px;\n      border-radius: 4px;\n      font-size: 0.85em;\n      font-weight: bold;\n      margin-bottom: 4px;\n    }\n    .error { background-color: #ffebee; color: #c62828; }\n    .success { background-color: #e8f5e9; color: #2e7d32; }\n    .waiting { background-color: #fff3e0; color: #ef6c00; }\n    .runtime {\n      font-size: 0.8em;\n      color: #666;\n      display: block;\n      margin-top: 2px;\n    }\n    .no-data {\n      color: #999;\n      font-style: italic;\n    }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>n8n Execution Report</h1>\n    <div class=\"date-range\">\n      <strong>Period:</strong> ${dateRangeText}\n    </div>\n`;\n\n// Calculate totals for summary\nlet totalError = 0;\nlet totalSuccess = 0;\nlet totalWaiting = 0;\n\nfor (const workflowId in workflowStats) {\n  const stats = workflowStats[workflowId];\n  totalError += stats.error.count;\n  totalSuccess += stats.success.count;\n  totalWaiting += stats.waiting.count;\n}\n\nhtml += `\n    <div class=\"summary\">\n      <div class=\"summary-item summary-error\">\n        \u2717 ${totalError} Errors\n      </div>\n      <div class=\"summary-item summary-success\">\n        \u2713 ${totalSuccess} Success\n      </div>\n      <div class=\"summary-item summary-waiting\">\n        \u23f3 ${totalWaiting} Waiting\n      </div>\n    </div>\n  </div>\n  \n  <table>\n    <thead>\n      <tr>\n        <th>Workflow</th>\n        <th class=\"status-cell\">Error</th>\n        <th class=\"status-cell\">Success</th>\n        <th class=\"status-cell\">Waiting</th>\n      </tr>\n    </thead>\n    <tbody>\n`;\n\n// Add rows for each workflow\nfor (const workflowId in workflowStats) {\n  const stats = workflowStats[workflowId];\n  \n  html += `\n      <tr>\n        <td>\n          <span class=\"workflow-name\">${stats.name}</span>\n          <span class=\"workflow-id\">${stats.id}</span>\n        </td>\n  `;\n  \n  // Error column\n  html += '<td class=\"status-cell\">';\n  if (stats.error.count > 0) {\n    const avgRuntime = stats.error.totalRuntime / stats.error.count;\n    html += `\n      <span class=\"status-badge error\">\u2717 ${stats.error.count}</span>\n      <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n      <span class=\"runtime\">Total: ${formatRuntime(stats.error.totalRuntime)}</span>\n    `;\n  } else {\n    html += '<span class=\"no-data\">-</span>';\n  }\n  html += '</td>';\n  \n  // Success column\n  html += '<td class=\"status-cell\">';\n  if (stats.success.count > 0) {\n    const avgRuntime = stats.success.totalRuntime / stats.success.count;\n    html += `\n      <span class=\"status-badge success\">\u2713 ${stats.success.count}</span>\n      <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n      <span class=\"runtime\">Total: ${formatRuntime(stats.success.totalRuntime)}</span>\n    `;\n  } else {\n    html += '<span class=\"no-data\">-</span>';\n  }\n  html += '</td>';\n  \n  // Waiting column\n  html += '<td class=\"status-cell\">';\n  if (stats.waiting.count > 0) {\n    const avgRuntime = stats.waiting.totalRuntime / stats.waiting.count;\n    html += `\n      <span class=\"status-badge waiting\">\u23f3 ${stats.waiting.count}</span>\n      <span class=\"runtime\">Avg: ${formatRuntime(avgRuntime)}</span>\n      <span class=\"runtime\">Total: ${formatRuntime(stats.waiting.totalRuntime)}</span>\n    `;\n  } else {\n    html += '<span class=\"no-data\">-</span>';\n  }\n  html += '</td>';\n  \n  html += '</tr>';\n}\n\nhtml += `\n    </tbody>\n  </table>\n</body>\n</html>\n`;\n\nreturn [{ json: { html: html, subject: subject } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "4b1154e2-76bc-4b8c-a2b6-f4338a3c3f10",
      "name": "Send a message gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3792,
        -176
      ],
      "parameters": {
        "message": "={{ $json.html }}",
        "options": {},
        "subject": "={{ $json.subject }}"
      },
      "typeVersion": 2.1
    },
    {
      "id": "2946c6b2-f93f-4e31-bca1-14995de72e7d",
      "name": "Send a message outlook",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        3792,
        96
      ],
      "parameters": {
        "subject": "={{ $json.subject }}",
        "bodyContent": "={{ $json.html }}",
        "additionalFields": {
          "bodyContentType": "html"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "0faa8265-c32e-479f-873d-c603722afe12",
      "name": "Sticky Note - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -160
      ],
      "parameters": {
        "color": 3,
        "width": 600,
        "height": 1020,
        "content": "## Workflow Overview for Documenting n8n Executions\n\n### Goal:\nThis workflow automates the process of documenting all previous workflow executions within n8n. By fetching data on past executions and workflows, it generates a comprehensive report that can be sent via email. This helps users keep track of their automation tasks and assess performance efficiently.\n\n### How it works:\n- \ud83d\udd51 **Schedule Trigger**: Initiates the workflow at defined intervals.\n- \ud83d\udd04 **Get All Previous Executions**: Fetches logs of past executions from n8n.\n- \ud83d\udcc4 **Get All Workflows**: Retrieves current workflows set up in the environment.\n- \ud83d\udd17 **Merge**: Combines data from previous executions and workflows for comprehensive analysis.\n- \ud83c\udff7\ufe0f **Edit Field ID to workflowId**: Updates specific identifiers to ensure correct mapping.\n- \ud83d\udd0e **Filter Executions Last Week**: Filters data to only include executions from the last week.\n- \ud83d\udcdd **Prepare HTML Report**: Formats the filtered data into a structured HTML report.\n- \ud83d\udce7 **Send a Message via Gmail & Outlook**: Delivers the report to users' email accounts for easy access.\n\n### Parameters to configure:\n- \ud83d\udd51 **Schedule settings**: Specify the frequency of the trigger.\n- \u2709\ufe0f **Email configurations**: Set Gmail and Outlook authentication details for message delivery.\n\n### Limitations / Gotchas:\n- \ud83d\udcc5 Ensure the schedule does not overlap with high load times.\n- \ud83d\udd12 Check permissions for accessing previous executions data.\n\n### Expected result:\nUsers receive an HTML report in their inbox summarizing workflow executions from the past week, facilitating performance tracking and documentation.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "595171e1-c6b0-48b8-bf86-86ffb155e118",
      "name": "Sticky Note - Send a message gmail",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3664,
        -1056
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 860,
        "content": "## \ud83d\udce7 Send a message Gmail \n\n### Purpose\nSend an email using Gmail service with specified subject and message content.\n\n### Inputs / Outputs\n- **Inputs:** \n  - Subject: The title of the email.\n  - Message: The main body content of the email in HTML format.\n- **Outputs:** \n  - Confirmation of the email sent or error details if the process fails.\n\n### Key Fields to Configure\n- **Subject:** \n  - Set using the expression `={{ $json.subject }}`, allowing dynamic subject lines based on input data.\n- **Message:** \n  - Set using the expression `={{ $json.html }}`, allowing HTML formatted content for the email body.\n  \n### Tip / Validation\n- Ensure that Gmail OAuth2 credentials are correctly configured and authorized for sending emails.\n- Check the formatting of the HTML content to ensure proper rendering in the recipient's email client.\n- This node is currently **disabled**; enable it for functionality.\n- Remember to handle potential API errors and response codes from Gmail when sending messages."
      },
      "typeVersion": 1
    },
    {
      "id": "7a12b760-b67c-47ff-995c-6ac53194a036",
      "name": "Sticky Note - Send a message outlook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3680,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## \ud83d\udce9 Send a message outlook \n\n### Purpose\nSend an email through Microsoft Outlook to specified recipients, integrating with workflows for communication purposes.\n\n### Inputs / Outputs\n- **Inputs:** \n  - Recipients' email address (e.g., `wessel@bulte.org`).\n  - Email subject and body content (HTML format).\n- **Outputs:**\n  - Confirmation that the message was sent successfully.\n\n### Key Fields to Configure\n- **toRecipients:** \n  - Email addresses of the recipients. \n- **subject:** \n  - Subject line of the email. Can use dynamic values (e.g., `\"={{ $json.subject }}\"`).\n- **bodyContent:** \n  - Main content of the email, formatted as HTML (e.g., `\"={{ $json.html }}\"`).\n- **bodyContentType:** \n  - Default is set to `\"html\"` to ensure proper formatting.\n\n### Tip / Validation\n- Verify that the email address provided in `toRecipients` is valid to avoid delivery failures.\n- Ensure the subject and body contain meaningful content for better communication.\n- Check that the OAuth credentials for Microsoft Outlook are correctly configured to avoid authentication errors."
      },
      "typeVersion": 1
    },
    {
      "id": "a85a215d-c1ef-4695-b965-9d3a56cfd9b1",
      "name": "Sticky Note - Prepare html report",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3248,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## \ud83d\udcc1 Prepare HTML Report \n\n### Purpose\nGenerate an HTML report summarizing workflow execution statistics over the past 7 days, including counts of errors, successes, and waiting workflows.\n\n### Inputs / Outputs\n- **Inputs:** \n  - Data from previous nodes containing execution records with fields like `workflowId`, `name`, `status`, `startedAt`, and `stoppedAt`.\n- **Outputs:** \n  - An HTML string containing the formatted report and an email subject line for reference.\n\n### Key Operations\n- **Date Range Calculation:**\n  - Retrieves execution data from the last 7 days.\n  \n- **Statistics Grouping:**\n  - Aggregates execution counts and total runtimes by workflow status (error, success, waiting).\n\n- **HTML Report Construction:**\n  - Builds a styled HTML document that visually represents workflow execution statistics, including a summary and detailed table format."
      },
      "typeVersion": 1
    },
    {
      "id": "d134b4f0-1fbc-404c-9edc-9f2884824226",
      "name": "Sticky Note - Filter executions last week",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2848,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## Filter Executions Last Week\n\n### Purpose\nFilter out executions that were started in the last week, allowing for targeted analysis and documentation of recent workflow activities.\n\n### Inputs / Outputs\n- **Inputs:** \n  - Workflow execution data including start date (`startedAt`).\n- **Outputs:** \n  - Filtered data of executions that occurred within the past week.\n\n### Key Fields to Configure\n- **Conditions:** \n  - Uses a single condition to check if the `startedAt` date is after the date that was exactly 7 days prior to the current date.\n  - **Operator:** \n    - Type: `dateTime`\n    - Operation: `after`\n  - **Left Value:** \n    - `={{ $json.startedAt }}`\n  - **Right Value:**\n    - `={{ DateTime.now().minus({ days: 7 }) }}`\n\n### Tip / Validation\n- Ensure the `startedAt` date formatted correctly (ISO 8601 is recommended) for accurate filtering.\n- Remember that the comparison is case-sensitive due to the option `caseSensitive: true`. Adjust if necessary for your context.\n- This node does not always output data; ensure downstream nodes handle the absence of expected data gracefully."
      },
      "typeVersion": 1
    },
    {
      "id": "d6d8301c-b2f7-4e8b-b3ed-f32edd84c92b",
      "name": "Sticky Note - Merge",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2448,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## Merge \n\n### Purpose\nCombine two data sets based on specified fields to enrich the input with additional information.\n\n### Inputs / Outputs\n- **Inputs:** \n  - Two data sets to be merged, identified by the `workflowId` field.\n- **Outputs:** \n  - A single data set that merges the attributes of both inputs according to the defined merging strategy.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "95f22f9d-86fa-4cc3-aeba-38d90320ca29",
      "name": "Sticky Note - Edit Field ID to workflowId",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## Edit Field ID to workflowId \n\n### Purpose\nThis node updates the field ID in the provided JSON data to a new key named `workflowId`, streamlining the data structure for easier identification and reference.\n\n### Inputs / Outputs\n- **Inputs:** \n  - JSON data containing an `id` field to be transformed into `workflowId`.\n- **Outputs:** \n  - Modified JSON data with the `workflowId` field instead of the original `id`.\n\n### Key Fields to Configure\n- **Assignments:**\n  - **ID:** Unique identifier for the newly created field.\n  - **Name:** Set to `workflowId` to reflect the new key.\n  - **Value:** Expression `={{ $json.id }}` to extract the original `id` value.\n\n### Tip / Validation\n- Ensure the original JSON contains the `id` field for successful transformation; otherwise, the output may not reflect the desired structure.\n- Use the `includeOtherFields` option to retain additional fields during the transformation process."
      },
      "typeVersion": 1
    },
    {
      "id": "9be4bac7-d68a-47d8-87c5-99df34830f13",
      "name": "Sticky Note - Get all previous executions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1664,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## Get All Previous Executions \n\n### Purpose\nRetrieve all previous executions of a specified resource, enabling users to track and document the history of actions performed in workflows.\n\n### Inputs / Outputs\n- **Inputs:** \n  - None required; the node automatically fetches all previous executions.\n- **Outputs:** \n  - A list of previous execution records, which can be used for analysis or logging purposes.\n\n### Key Fields to Configure\n- **Resource:**\n  - Set to `execution` to specify that the node is fetching execution records.\n- **Return All:**\n  - Set to `true` to ensure all previous executions are retrieved.\n- **Filters:** \n  - Can be customized to narrow down results based on specific criteria (currently empty).\n- **Options & Request Options:** \n  - Additional configurations can be added if necessary (currently empty).\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9946f889-e6c4-46e0-bd6e-b5fe41a6e991",
      "name": "Sticky Note - Get all Workflows",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## Get all Workflows \n\n### Purpose\nFetch all workflows stored in n8n to facilitate documentation and management of automation processes.\n\n### Inputs / Outputs\n- **Inputs:** \n  - None (The node retrieves all workflows without needing specific parameters).\n- **Outputs:** \n  - A list of all available workflows, including their metadata (IDs, names, etc.).\n\n### Key Fields to Configure\n- **Filters:** \n  - Currently configured as empty (no specific filters are set).\n- **Request Options:** \n  - Also currently empty, allowing for default request behavior.\n\n### Tip / Validation\n- Make sure you have the appropriate permissions set in your n8n account to access workflow data.\n- This node may return a large dataset if numerous workflows exist, so consider handling the response efficiently to avoid performance issues."
      },
      "typeVersion": 1
    },
    {
      "id": "27a53d26-b49c-41f9-9cde-49c81e3a5454",
      "name": "Sticky Note - Schedule Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 1020,
        "content": "## \ud83d\uddd3\ufe0f Schedule Trigger \n\n### Purpose\nThis node initiates a scheduled trigger, allowing workflows to run at specified intervals."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Filter executions last week",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get all previous executions",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get all Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all Workflows": {
      "main": [
        [
          {
            "node": "Edit Field ID to workflowId",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare html report": {
      "main": [
        [
          {
            "node": "Send a message outlook",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send a message gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Field ID to workflowId": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter executions last week": {
      "main": [
        [
          {
            "node": "Prepare html report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all previous executions": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}