This workflow corresponds to n8n.io template #10226 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"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
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Generate Weekly n8n Execution Report and Email Summary Automatically runs every 7 days to pull all n8n workflow executions from the past week Merges execution data with workflow information to provide context Generates a professional HTML report with execution statistics…
Source: https://n8n.io/workflows/10226/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Limit Code. Uses scheduleTrigger, n8n, googleDrive, splitInBatches. Scheduled trigger; 29 nodes.
This workflow automates the backup of your self-hosted n8n instance by exporting all workflows and saving them as individual files to a designated OneDrive folder. Each file is timestamped for easy ve
YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.
The FamilyFlow Assistant is your n8n-powered 🚀 companion designed to streamline daily parenting tasks, reduce mental load, and bring a bit more organization and fun into your family life. This versati
Instead of providing a routine check, it focuses on significant movements by: Sending a Slack alert only if a query crosses a defined movement threshold. Emailing a structured report with the Top 25 i