{
  "workflow": {
    "id": 12033,
    "name": "Multi-platform revenue reconciliation across Stripe, PayPal & bank with tax archive",
    "views": 58,
    "recentViews": 2,
    "totalViews": 58,
    "createdAt": "2025-12-22T15:19:08.312Z",
    "description": "## How It Works\nThis workflow automates monthly revenue reconciliation across Stripe, PayPal, and bank statements by standardizing data formats, detecting discrepancies, and producing audit-ready reports. It concurrently retrieves revenue data from multiple sources, normalizes datasets into consistent structures, consolidates records, and reconciles transactions against bank statements with intelligent mismatch detection. The system aggregates monthly totals, generates detailed audit reports with clearly flagged discrepancies, archives finalized outputs to Google Drive, and notifies tax agents. Designed for accounting firms, finance teams, and businesses, it enables automated revenue verification, multi-channel reconciliation, discrepancy identification, and compliance audit documentation without manual record matching or error-prone spreadsheet workflows.\n\n## Setup Steps\n1. Configure Stripe, PayPal.\n2. Set up normalization rules for date, currency, and transaction ID mappings.\n3. Connect Google Drive for report archiving and Gmail for agent notifications.\n4. Define mismatch thresholds and reconciliation tolerance parameters.\n\n## Prerequisites\nStripe, PayPal, and bank statement accounts\n\n## Use Cases\nAccounting firms automating client revenue verification; multi-channel e-commerce businesses  \n\n## Customization\nAdd additional payment sources (Square, Shopify), adjust normalization rules for regional formats \n\n## Benefits\nEliminates manual reconciliation, detects discrepancies automatically ",
    "workflow": {
      "id": "hnrLA7lWf3bSl7Dw",
      "meta": {
        "instanceId": "b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502"
      },
      "name": "Automated Revenue Reconciliation & Tax Evidence Archive",
      "tags": [],
      "nodes": [
        {
          "id": "bbb0bbe0-fd8f-46cd-bd2f-c4826efcca19",
          "name": "Monthly Schedule",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -448,
            192
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "months",
                  "triggerAtHour": 2
                }
              ]
            }
          },
          "typeVersion": 1.3
        },
        {
          "id": "6d08da53-983a-438c-b164-ff86ce7c1b47",
          "name": "Workflow Configuration",
          "type": "n8n-nodes-base.set",
          "position": [
            -224,
            192
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "id-1",
                  "name": "stripeApiUrl",
                  "type": "string",
                  "value": "<__PLACEHOLDER_VALUE__Stripe API endpoint URL__>"
                },
                {
                  "id": "id-2",
                  "name": "paypalApiUrl",
                  "type": "string",
                  "value": "<__PLACEHOLDER_VALUE__PayPal API endpoint URL__>"
                },
                {
                  "id": "id-3",
                  "name": "bankApiUrl",
                  "type": "string",
                  "value": "<__PLACEHOLDER_VALUE__Bank API endpoint URL__>"
                },
                {
                  "id": "id-4",
                  "name": "archiveFolderId",
                  "type": "string",
                  "value": "<__PLACEHOLDER_VALUE__Google Drive folder ID for archive__>"
                },
                {
                  "id": "id-5",
                  "name": "taxAgentEmail",
                  "type": "string",
                  "value": "<__PLACEHOLDER_VALUE__Tax agent email address__>"
                },
                {
                  "id": "id-6",
                  "name": "reconciliationThreshold",
                  "type": "number",
                  "value": 0.01
                }
              ]
            },
            "includeOtherFields": true
          },
          "typeVersion": 3.4
        },
        {
          "id": "ead117d5-1bee-4c3f-bd93-1810f7f9600a",
          "name": "Get Stripe Revenue",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            0,
            0
          ],
          "parameters": {
            "url": "={{ $('Workflow Configuration').first().json.stripeApiUrl }}",
            "options": {},
            "sendQuery": true,
            "authentication": "predefinedCredentialType",
            "queryParameters": {
              "parameters": [
                {
                  "name": "created[gte]",
                  "value": "={{ $now.minus({ months: 1 }).startOf('month').toUnixInteger() }}"
                },
                {
                  "name": "created[lt]",
                  "value": "={{ $now.startOf('month').toUnixInteger() }}"
                }
              ]
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "43052c70-6f3f-49b7-aa1a-22f8db32790d",
          "name": "Get PayPal Revenue",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            0,
            192
          ],
          "parameters": {
            "url": "={{ $('Workflow Configuration').first().json.paypalApiUrl }}",
            "options": {},
            "sendQuery": true,
            "authentication": "predefinedCredentialType",
            "queryParameters": {
              "parameters": [
                {
                  "name": "start_date",
                  "value": "={{ $now.minus({ months: 1 }).startOf('month').toISO() }}"
                },
                {
                  "name": "end_date",
                  "value": "={{ $now.startOf('month').toISO() }}"
                }
              ]
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "8efb034f-82d7-43db-aa89-96ca9bb14f63",
          "name": "Get Bank Statements",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            224,
            384
          ],
          "parameters": {
            "url": "={{ $('Workflow Configuration').first().json.bankApiUrl }}",
            "options": {},
            "sendQuery": true,
            "authentication": "predefinedCredentialType",
            "queryParameters": {
              "parameters": [
                {
                  "name": "from_date",
                  "value": "={{ $now.minus({ months: 1 }).startOf('month').toISODate() }}"
                },
                {
                  "name": "to_date",
                  "value": "={{ $now.startOf('month').toISODate() }}"
                }
              ]
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "ba8740a8-2dcb-4513-94e0-047e96cc0f26",
          "name": "Normalize Stripe Data",
          "type": "n8n-nodes-base.set",
          "position": [
            224,
            0
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "id-1",
                  "name": "transactionId",
                  "type": "string",
                  "value": "={{ $json.id }}"
                },
                {
                  "id": "id-2",
                  "name": "amount",
                  "type": "number",
                  "value": "={{ $json.amount / 100 }}"
                },
                {
                  "id": "id-3",
                  "name": "currency",
                  "type": "string",
                  "value": "={{ $json.currency }}"
                },
                {
                  "id": "id-4",
                  "name": "date",
                  "type": "string",
                  "value": "={{ $json.created }}"
                },
                {
                  "id": "id-5",
                  "name": "source",
                  "type": "string",
                  "value": "Stripe"
                },
                {
                  "id": "id-6",
                  "name": "description",
                  "type": "string",
                  "value": "={{ $json.description }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "131da027-2258-4957-a297-c232325e4ea5",
          "name": "Normalize PayPal Data",
          "type": "n8n-nodes-base.set",
          "position": [
            224,
            192
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "id-1",
                  "name": "transactionId",
                  "type": "string",
                  "value": "={{ $json.transaction_info.transaction_id }}"
                },
                {
                  "id": "id-2",
                  "name": "amount",
                  "type": "number",
                  "value": "={{ $json.transaction_info.transaction_amount.value }}"
                },
                {
                  "id": "id-3",
                  "name": "currency",
                  "type": "string",
                  "value": "={{ $json.transaction_info.transaction_amount.currency_code }}"
                },
                {
                  "id": "id-4",
                  "name": "date",
                  "type": "string",
                  "value": "={{ $json.transaction_info.transaction_initiation_date }}"
                },
                {
                  "id": "id-5",
                  "name": "source",
                  "type": "string",
                  "value": "PayPal"
                },
                {
                  "id": "id-6",
                  "name": "description",
                  "type": "string",
                  "value": "={{ $json.transaction_info.transaction_subject }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "ac495591-815b-4443-a661-be7aa94af167",
          "name": "Normalize Bank Data",
          "type": "n8n-nodes-base.set",
          "position": [
            448,
            384
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "id-1",
                  "name": "transactionId",
                  "type": "string",
                  "value": "={{ $json.transaction_id }}"
                },
                {
                  "id": "id-2",
                  "name": "amount",
                  "type": "number",
                  "value": "={{ $json.amount }}"
                },
                {
                  "id": "id-3",
                  "name": "currency",
                  "type": "string",
                  "value": "={{ $json.currency }}"
                },
                {
                  "id": "id-4",
                  "name": "date",
                  "type": "string",
                  "value": "={{ $json.booking_date }}"
                },
                {
                  "id": "id-5",
                  "name": "source",
                  "type": "string",
                  "value": "Bank"
                },
                {
                  "id": "id-6",
                  "name": "description",
                  "type": "string",
                  "value": "={{ $json.remittance_information }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "6e01a2e2-2224-441c-983e-91ed044382ee",
          "name": "Combine Revenue Sources",
          "type": "n8n-nodes-base.merge",
          "position": [
            448,
            96
          ],
          "parameters": {},
          "typeVersion": 3.2
        },
        {
          "id": "a2d97894-1d5d-48b0-a05d-26a2bf3db021",
          "name": "Reconcile Revenue vs Bank",
          "type": "n8n-nodes-base.code",
          "position": [
            672,
            192
          ],
          "parameters": {
            "jsCode": "// Reconcile revenue sources against bank statements\nconst items = $input.all();\n\n// Separate revenue sources from bank data\nconst revenueItems = [];\nconst bankItems = [];\n\nfor (const item of items) {\n  if (item.json.source === 'stripe' || item.json.source === 'paypal') {\n    revenueItems.push(item.json);\n  } else if (item.json.source === 'bank') {\n    bankItems.push(item.json);\n  }\n}\n\n// Calculate total revenue from payment processors\nconst totalRevenue = revenueItems.reduce((sum, item) => {\n  return sum + (parseFloat(item.amount) || 0);\n}, 0);\n\n// Calculate total deposits from bank\nconst totalBankDeposits = bankItems.reduce((sum, item) => {\n  return sum + (parseFloat(item.amount) || 0);\n}, 0);\n\n// Calculate difference\nconst difference = totalRevenue - totalBankDeposits;\nconst differencePercentage = totalBankDeposits > 0 \n  ? ((difference / totalBankDeposits) * 100).toFixed(2)\n  : 0;\n\n// Create reconciliation report\nconst reconciliation = {\n  totalRevenue: totalRevenue.toFixed(2),\n  totalBankDeposits: totalBankDeposits.toFixed(2),\n  difference: difference.toFixed(2),\n  differencePercentage: differencePercentage,\n  hasMismatch: Math.abs(difference) > 0.01, // Allow for small rounding differences\n  revenueCount: revenueItems.length,\n  bankTransactionCount: bankItems.length,\n  reconciliationDate: new Date().toISOString(),\n  revenueBreakdown: {\n    stripe: revenueItems.filter(i => i.source === 'stripe').reduce((sum, i) => sum + parseFloat(i.amount || 0), 0).toFixed(2),\n    paypal: revenueItems.filter(i => i.source === 'paypal').reduce((sum, i) => sum + parseFloat(i.amount || 0), 0).toFixed(2)\n  },\n  allTransactions: [...revenueItems, ...bankItems]\n};\n\nreturn [{ json: reconciliation }];"
          },
          "typeVersion": 2
        },
        {
          "id": "dfdd2e11-c8f1-4504-b13e-d7137c59b2a1",
          "name": "Check for Mismatches",
          "type": "n8n-nodes-base.if",
          "position": [
            896,
            192
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 3,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "id-1",
                  "operator": {
                    "type": "boolean",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $('Reconcile Revenue vs Bank').item.json.hasMismatches }}",
                  "rightValue": true
                }
              ]
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "858def70-5a67-4b79-8c2a-e3528082f850",
          "name": "Flag Mismatches",
          "type": "n8n-nodes-base.set",
          "position": [
            1120,
            128
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "id-1",
                  "name": "mismatchFlag",
                  "type": "string",
                  "value": "ATTENTION REQUIRED"
                },
                {
                  "id": "id-2",
                  "name": "reviewRequired",
                  "type": "boolean",
                  "value": true
                }
              ]
            },
            "includeOtherFields": true
          },
          "typeVersion": 3.4
        },
        {
          "id": "c907f41d-c860-4d1a-8708-d26a62dc4786",
          "name": "Aggregate Monthly Data",
          "type": "n8n-nodes-base.aggregate",
          "position": [
            1344,
            192
          ],
          "parameters": {
            "options": {},
            "aggregate": "aggregateAllItemData"
          },
          "typeVersion": 1
        },
        {
          "id": "c64b6ad1-cc8e-4dc7-bc93-7598b0379e8e",
          "name": "Generate Audit Report",
          "type": "n8n-nodes-base.code",
          "position": [
            1568,
            192
          ],
          "parameters": {
            "jsCode": "// Generate comprehensive audit-proof monthly revenue report\nconst items = $input.all();\n\n// Extract date range from workflow configuration\nconst currentDate = new Date();\nconst reportMonth = currentDate.toLocaleString('default', { month: 'long', year: 'numeric' });\n\n// Aggregate data from all items\nlet totalStripeRevenue = 0;\nlet totalPayPalRevenue = 0;\nlet totalBankDeposits = 0;\nlet transactions = [];\nlet mismatches = [];\n\nfor (const item of items) {\n  const data = item.json;\n  \n  // Collect transaction details\n  if (data.source) {\n    transactions.push({\n      date: data.date || data.transaction_date,\n      source: data.source,\n      amount: data.amount,\n      description: data.description || data.memo,\n      transactionId: data.transaction_id || data.id\n    });\n  }\n  \n  // Aggregate revenue by source\n  if (data.source === 'Stripe') {\n    totalStripeRevenue += parseFloat(data.amount || 0);\n  } else if (data.source === 'PayPal') {\n    totalPayPalRevenue += parseFloat(data.amount || 0);\n  } else if (data.source === 'Bank') {\n    totalBankDeposits += parseFloat(data.amount || 0);\n  }\n  \n  // Collect mismatches\n  if (data.mismatch_flag || data.reconciliation_status === 'mismatch') {\n    mismatches.push({\n      date: data.date,\n      expectedAmount: data.expected_amount,\n      actualAmount: data.actual_amount,\n      difference: data.difference,\n      notes: data.notes\n    });\n  }\n}\n\n// Calculate totals and variance\nconst totalRevenue = totalStripeRevenue + totalPayPalRevenue;\nconst variance = totalBankDeposits - totalRevenue;\nconst variancePercentage = totalRevenue > 0 ? ((variance / totalRevenue) * 100).toFixed(2) : 0;\n\n// Generate report structure\nconst report = {\n  reportMetadata: {\n    title: `Monthly Revenue Reconciliation Report - ${reportMonth}`,\n    generatedDate: currentDate.toISOString(),\n    reportPeriod: reportMonth,\n    reportType: 'Tax Audit Evidence'\n  },\n  executiveSummary: {\n    totalStripeRevenue: totalStripeRevenue.toFixed(2),\n    totalPayPalRevenue: totalPayPalRevenue.toFixed(2),\n    totalRevenue: totalRevenue.toFixed(2),\n    totalBankDeposits: totalBankDeposits.toFixed(2),\n    variance: variance.toFixed(2),\n    variancePercentage: `${variancePercentage}%`,\n    reconciliationStatus: Math.abs(variance) < 1 ? 'RECONCILED' : 'VARIANCE DETECTED',\n    totalTransactions: transactions.length,\n    mismatchCount: mismatches.length\n  },\n  revenueBreakdown: {\n    stripe: {\n      total: totalStripeRevenue.toFixed(2),\n      percentage: totalRevenue > 0 ? ((totalStripeRevenue / totalRevenue) * 100).toFixed(2) + '%' : '0%'\n    },\n    paypal: {\n      total: totalPayPalRevenue.toFixed(2),\n      percentage: totalRevenue > 0 ? ((totalPayPalRevenue / totalRevenue) * 100).toFixed(2) + '%' : '0%'\n    }\n  },\n  transactions: transactions.sort((a, b) => new Date(a.date) - new Date(b.date)),\n  mismatches: mismatches,\n  reconciliationNotes: {\n    methodology: 'Automated reconciliation comparing payment processor revenue against bank deposits',\n    toleranceThreshold: '$1.00',\n    dataSource: 'Stripe API, PayPal API, Bank Statements',\n    verificationStatus: mismatches.length === 0 ? 'All transactions verified' : `${mismatches.length} discrepancies require review`\n  },\n  auditTrail: {\n    workflowExecutionId: $execution.id,\n    executionDate: currentDate.toISOString(),\n    dataIntegrity: 'Verified',\n    complianceStandard: 'Tax Authority Requirements'\n  }\n};\n\n// Generate PDF-ready HTML content\nconst htmlReport = `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Revenue Reconciliation Report - ${reportMonth}</title>\n  <style>\n    body { font-family: Arial, sans-serif; margin: 40px; color: #333; }\n    h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }\n    h2 { color: #34495e; margin-top: 30px; border-bottom: 1px solid #bdc3c7; padding-bottom: 5px; }\n    .summary-box { background: #ecf0f1; padding: 20px; border-radius: 5px; margin: 20px 0; }\n    .status-ok { color: #27ae60; font-weight: bold; }\n    .status-warning { color: #e74c3c; font-weight: bold; }\n    table { width: 100%; border-collapse: collapse; margin: 20px 0; }\n    th { background: #34495e; color: white; padding: 12px; text-align: left; }\n    td { padding: 10px; border-bottom: 1px solid #ddd; }\n    tr:hover { background: #f5f5f5; }\n    .amount { text-align: right; font-family: monospace; }\n    .footer { margin-top: 50px; font-size: 12px; color: #7f8c8d; border-top: 1px solid #bdc3c7; padding-top: 20px; }\n  </style>\n</head>\n<body>\n  <h1>${report.reportMetadata.title}</h1>\n  <p><strong>Generated:</strong> ${new Date(report.reportMetadata.generatedDate).toLocaleString()}</p>\n  <p><strong>Report Type:</strong> ${report.reportMetadata.reportType}</p>\n  \n  <div class=\"summary-box\">\n    <h2>Executive Summary</h2>\n    <table>\n      <tr><td><strong>Total Stripe Revenue:</strong></td><td class=\"amount\">$${report.executiveSummary.totalStripeRevenue}</td></tr>\n      <tr><td><strong>Total PayPal Revenue:</strong></td><td class=\"amount\">$${report.executiveSummary.totalPayPalRevenue}</td></tr>\n      <tr><td><strong>Total Revenue:</strong></td><td class=\"amount\">$${report.executiveSummary.totalRevenue}</td></tr>\n      <tr><td><strong>Total Bank Deposits:</strong></td><td class=\"amount\">$${report.executiveSummary.totalBankDeposits}</td></tr>\n      <tr><td><strong>Variance:</strong></td><td class=\"amount ${Math.abs(variance) < 1 ? 'status-ok' : 'status-warning'}\">$${report.executiveSummary.variance} (${report.executiveSummary.variancePercentage})</td></tr>\n      <tr><td><strong>Status:</strong></td><td class=\"${Math.abs(variance) < 1 ? 'status-ok' : 'status-warning'}\">${report.executiveSummary.reconciliationStatus}</td></tr>\n      <tr><td><strong>Total Transactions:</strong></td><td>${report.executiveSummary.totalTransactions}</td></tr>\n      <tr><td><strong>Mismatches:</strong></td><td class=\"${mismatches.length === 0 ? 'status-ok' : 'status-warning'}\">${report.executiveSummary.mismatchCount}</td></tr>\n    </table>\n  </div>\n  \n  <h2>Revenue Breakdown by Source</h2>\n  <table>\n    <tr><th>Source</th><th>Amount</th><th>Percentage</th></tr>\n    <tr><td>Stripe</td><td class=\"amount\">$${report.revenueBreakdown.stripe.total}</td><td class=\"amount\">${report.revenueBreakdown.stripe.percentage}</td></tr>\n    <tr><td>PayPal</td><td class=\"amount\">$${report.revenueBreakdown.paypal.total}</td><td class=\"amount\">${report.revenueBreakdown.paypal.percentage}</td></tr>\n  </table>\n  \n  <h2>Transaction Details</h2>\n  <table>\n    <tr><th>Date</th><th>Source</th><th>Transaction ID</th><th>Description</th><th>Amount</th></tr>\n    ${transactions.map(t => `\n      <tr>\n        <td>${new Date(t.date).toLocaleDateString()}</td>\n        <td>${t.source}</td>\n        <td>${t.transactionId}</td>\n        <td>${t.description}</td>\n        <td class=\"amount\">$${parseFloat(t.amount).toFixed(2)}</td>\n      </tr>\n    `).join('')}\n  </table>\n  \n  ${mismatches.length > 0 ? `\n    <h2>Discrepancies Requiring Review</h2>\n    <table>\n      <tr><th>Date</th><th>Expected</th><th>Actual</th><th>Difference</th><th>Notes</th></tr>\n      ${mismatches.map(m => `\n        <tr>\n          <td>${new Date(m.date).toLocaleDateString()}</td>\n          <td class=\"amount\">$${parseFloat(m.expectedAmount).toFixed(2)}</td>\n          <td class=\"amount\">$${parseFloat(m.actualAmount).toFixed(2)}</td>\n          <td class=\"amount status-warning\">$${parseFloat(m.difference).toFixed(2)}</td>\n          <td>${m.notes}</td>\n        </tr>\n      `).join('')}\n    </table>\n  ` : '<p class=\"status-ok\">No discrepancies detected. All transactions reconciled successfully.</p>'}\n  \n  <h2>Reconciliation Methodology</h2>\n  <p>${report.reconciliationNotes.methodology}</p>\n  <p><strong>Tolerance Threshold:</strong> ${report.reconciliationNotes.toleranceThreshold}</p>\n  <p><strong>Data Sources:</strong> ${report.reconciliationNotes.dataSource}</p>\n  <p><strong>Verification Status:</strong> ${report.reconciliationNotes.verificationStatus}</p>\n  \n  <div class=\"footer\">\n    <h2>Audit Trail</h2>\n    <p><strong>Workflow Execution ID:</strong> ${report.auditTrail.workflowExecutionId}</p>\n    <p><strong>Execution Date:</strong> ${new Date(report.auditTrail.executionDate).toLocaleString()}</p>\n    <p><strong>Data Integrity:</strong> ${report.auditTrail.dataIntegrity}</p>\n    <p><strong>Compliance Standard:</strong> ${report.auditTrail.complianceStandard}</p>\n    <p><em>This report was automatically generated by an audited workflow process and contains verified financial data suitable for tax authority submission.</em></p>\n  </div>\n</body>\n</html>\n`;\n\n// Return both JSON and HTML formats\nreturn [\n  {\n    json: {\n      report: report,\n      htmlReport: htmlReport,\n      fileName: `Revenue_Reconciliation_${reportMonth.replace(' ', '_')}_${currentDate.toISOString().split('T')[0]}.html`,\n      pdfReady: true,\n      summary: {\n        totalRevenue: totalRevenue,\n        totalBankDeposits: totalBankDeposits,\n        variance: variance,\n        status: Math.abs(variance) < 1 ? 'RECONCILED' : 'VARIANCE_DETECTED',\n        mismatchCount: mismatches.length\n      }\n    }\n  }\n];"
          },
          "typeVersion": 2
        },
        {
          "id": "511a0aa7-79b0-4a62-a21c-daee9e7796f3",
          "name": "Upload to Archive",
          "type": "n8n-nodes-base.googleDrive",
          "position": [
            1792,
            192
          ],
          "parameters": {
            "name": "={{ 'Revenue_Report_' + $now.minus({ months: 1 }).toFormat('yyyy-MM') + '.pdf' }}",
            "driveId": {
              "__rl": true,
              "mode": "list",
              "value": "My Drive"
            },
            "options": {},
            "folderId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ $('Workflow Configuration').first().json.archiveFolderId }}"
            }
          },
          "credentials": {
            "googleDriveOAuth2Api": {
              "id": "credential-id",
              "name": "googleDriveOAuth2Api Credential"
            }
          },
          "typeVersion": 3
        },
        {
          "id": "f11ee402-4b02-49d6-869f-fbcd9a151fd0",
          "name": "Notify Tax Agent",
          "type": "n8n-nodes-base.gmail",
          "position": [
            2016,
            192
          ],
          "webhookId": "cf035252-7852-470c-b8bd-7f30f002529f",
          "parameters": {
            "sendTo": "={{ $('Workflow Configuration').first().json.taxAgentEmail }}",
            "message": "=<h2>Monthly Revenue Report</h2>\n\n<p>Dear Tax Agent,</p>\n\n<p>The automated revenue reconciliation for {{ $now.minus({ months: 1 }).toFormat('MMMM yyyy') }} has been completed.</p>\n\n<h3>Report Summary:</h3>\n<ul>\n  <li><strong>Total Revenue:</strong> {{ $('Aggregate Monthly Data').first().json.totalRevenue }}</li>\n  <li><strong>Stripe Revenue:</strong> {{ $('Aggregate Monthly Data').first().json.stripeRevenue }}</li>\n  <li><strong>PayPal Revenue:</strong> {{ $('Aggregate Monthly Data').first().json.paypalRevenue }}</li>\n  <li><strong>Bank Deposits:</strong> {{ $('Aggregate Monthly Data').first().json.bankDeposits }}</li>\n</ul>\n\n{{ $('Flag Mismatches').all().length > 0 ? '<h3 style=\"color: #ff6b6b;\">⚠️ Mismatches Detected:</h3><p>There are ' + $('Flag Mismatches').all().length + ' discrepancies that require review. Please check the detailed report.</p>' : '<p style=\"color: #51cf66;\">✓ All revenue sources reconciled successfully with no discrepancies.</p>' }}\n\n<h3>Archived Report:</h3>\n<p>The complete audit report has been uploaded to Google Drive:</p>\n<p><a href=\"{{ $('Upload to Archive').first().json.webViewLink }}\">View Report</a></p>\n\n<p>Best regards,<br>Automated Revenue Reconciliation System</p>",
            "options": {},
            "subject": "={{ 'Monthly Revenue Report Ready - ' + $now.minus({ months: 1 }).toFormat('MMMM yyyy') }}"
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "credential-id",
              "name": "gmailOAuth2 Credential"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "22bc4a46-41f2-409a-8376-1f7b8081f26f",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            896,
            -416
          ],
          "parameters": {
            "color": 5,
            "width": 720,
            "height": 288,
            "content": "## Prerequisites\nStripe, PayPal, and bank statement accounts; API credentials for each source \n## Use Cases\nAccounting firms automating client revenue verification; multi-channel e-commerce businesses  \n## Customization\nAdd additional payment sources (Square, Shopify), adjust normalization rules for regional formats \n## Benefits\nEliminates manual reconciliation, detects discrepancies automatically "
          },
          "typeVersion": 1
        },
        {
          "id": "ebd4913f-814c-4fdd-bc36-41f3b187f965",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            384,
            -352
          ],
          "parameters": {
            "width": 464,
            "height": 208,
            "content": "## Setup Steps\n1. Configure Stripe, PayPal.\n2. Set up normalization rules for date, currency, and transaction ID mappings.\n3. Connect Google Drive for report archiving and Gmail for agent notifications.\n4. Define mismatch thresholds and reconciliation tolerance parameters."
          },
          "typeVersion": 1
        },
        {
          "id": "f04bccea-bc33-465f-a9cf-c83c55420662",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -448,
            -352
          ],
          "parameters": {
            "width": 800,
            "height": 224,
            "content": "## How It Works\nThis workflow automates monthly revenue reconciliation across Stripe, PayPal, and bank statements by standardizing data formats, detecting discrepancies, and producing audit-ready reports. It concurrently retrieves revenue data from multiple sources, normalizes datasets into consistent structures, consolidates records, and reconciles transactions against bank statements with intelligent mismatch detection. The system aggregates monthly totals, generates detailed audit reports with clearly flagged discrepancies, archives finalized outputs to Google Drive, and notifies tax agents. Designed for accounting firms, finance teams, and businesses, it enables automated revenue verification, multi-channel reconciliation, discrepancy identification, and compliance audit documentation without manual record matching or error-prone spreadsheet workflows."
          },
          "typeVersion": 1
        },
        {
          "id": "71f605f8-f4e9-4bc5-bd86-13f1e375cff0",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1504,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 656,
            "height": 688,
            "content": "## Generate Audit Report & Notification\nWhat: Compiles flagged mismatches, monthly aggregates into audit documentation.\nWhy: Provides compliance evidence, supports tax filing \n"
          },
          "typeVersion": 1
        },
        {
          "id": "99a328fb-27cb-4781-a415-bc349e543a1b",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            368,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 1120,
            "height": 704,
            "content": "## Reconcile & Flag Mismatches\nWhat: Compares aggregated revenue against bank statement totals and identifies discrepancies.\nWhy: Detects timing differences, missing transactions, and potential fraud  "
          },
          "typeVersion": 1
        },
        {
          "id": "1595a83a-4df7-46b6-91bc-7bde3fe23798",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -496,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 848,
            "height": 672,
            "content": "## Fetch Multi-Source Data\nWhat: Retrieves revenue records from Stripe, PayPal, and bank statements in parallel.\nWhy: Captures complete revenue picture across all payment and settlement channels."
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "availableInMCP": false,
        "executionOrder": "v1"
      },
      "versionId": "df95ae9d-7021-4834-b49d-efc9c1ca3243",
      "connections": {
        "Flag Mismatches": {
          "main": [
            [
              {
                "node": "Aggregate Monthly Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Monthly Schedule": {
          "main": [
            [
              {
                "node": "Workflow Configuration",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Upload to Archive": {
          "main": [
            [
              {
                "node": "Notify Tax Agent",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get PayPal Revenue": {
          "main": [
            [
              {
                "node": "Normalize PayPal Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get Stripe Revenue": {
          "main": [
            [
              {
                "node": "Normalize Stripe Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get Bank Statements": {
          "main": [
            [
              {
                "node": "Normalize Bank Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Normalize Bank Data": {
          "main": [
            [
              {
                "node": "Reconcile Revenue vs Bank",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check for Mismatches": {
          "main": [
            [
              {
                "node": "Flag Mismatches",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Aggregate Monthly Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Audit Report": {
          "main": [
            [
              {
                "node": "Upload to Archive",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Normalize PayPal Data": {
          "main": [
            [
              {
                "node": "Combine Revenue Sources",
                "type": "main",
                "index": 1
              }
            ]
          ]
        },
        "Normalize Stripe Data": {
          "main": [
            [
              {
                "node": "Combine Revenue Sources",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Aggregate Monthly Data": {
          "main": [
            [
              {
                "node": "Generate Audit Report",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Workflow Configuration": {
          "main": [
            [
              {
                "node": "Get Stripe Revenue",
                "type": "main",
                "index": 0
              },
              {
                "node": "Get PayPal Revenue",
                "type": "main",
                "index": 0
              },
              {
                "node": "Get Bank Statements",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Combine Revenue Sources": {
          "main": [
            [
              {
                "node": "Reconcile Revenue vs Bank",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Reconcile Revenue vs Bank": {
          "main": [
            [
              {
                "node": "Check for Mismatches",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 22,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.set": {
          "count": 5
        },
        "n8n-nodes-base.code": {
          "count": 2
        },
        "n8n-nodes-base.gmail": {
          "count": 1
        },
        "n8n-nodes-base.merge": {
          "count": 1
        },
        "n8n-nodes-base.aggregate": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 6
        },
        "n8n-nodes-base.googleDrive": {
          "count": 1
        },
        "n8n-nodes-base.httpRequest": {
          "count": 3
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Cheng Siong Chin",
      "username": "cschin",
      "bio": "Dr. Cheng Siong CHIN is an n8n workflow creator specializing in AI-powered automation, agent orchestration, and intelligent system integrations. He designs and builds end-to-end workflows that combine LLMs, APIs, and data pipelines to streamline complex processes and deliver production-ready automation solutions. Contact me to discuss custom AI workflows and agent architectures.\n",
      "verified": true,
      "links": [
        "https://gravatar.com/mysticluminary9fa255f7f5"
      ],
      "avatar": "https://gravatar.com/avatar/54544f98e839bb9dd9a764ad1e6823eeddb6db5138d201e42f291a7b0a73303f?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 19,
        "icon": "file:httprequest.svg",
        "name": "n8n-nodes-base.httpRequest",
        "codex": {
          "data": {
            "alias": [
              "API",
              "Request",
              "URL",
              "Build",
              "cURL"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/world-poetry-day-workflow/",
                  "icon": "📜",
                  "label": "Celebrating World Poetry Day with a daily poem in Telegram"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/",
                  "icon": "🎨",
                  "label": "Automate Designs with Bannerbear and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/",
                  "icon": "🧰",
                  "label": "How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                },
                {
                  "url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
                  "icon": "🤟",
                  "label": "Creating scheduled text affirmations with n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "HTTP Request",
          "color": "#0004F5"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="
        },
        "displayName": "HTTP Request",
        "typeVersion": 4,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 24,
        "icon": "file:merge.svg",
        "name": "n8n-nodes-base.merge",
        "codex": {
          "data": {
            "alias": [
              "Join",
              "Concatenate",
              "Wait"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/how-to-sync-data-between-two-systems/",
                  "icon": "🏬",
                  "label": "How to synchronize data between two systems (one-way vs. two-way sync"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Merge"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Merge",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 38,
        "icon": "fa:pen",
        "name": "n8n-nodes-base.set",
        "codex": {
          "data": {
            "alias": [
              "Set",
              "JS",
              "JSON",
              "Filter",
              "Transform",
              "Map"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/",
                  "icon": "📡",
                  "label": "Database Monitoring and Alerting with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Edit Fields"
        },
        "iconData": {
          "icon": "pen",
          "type": "icon"
        },
        "displayName": "Edit Fields (Set)",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 58,
        "icon": "file:googleDrive.svg",
        "name": "n8n-nodes-base.googleDrive",
        "codex": {
          "data": {
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Google Drive"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Google Drive",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          }
        ]
      },
      {
        "id": 356,
        "icon": "file:gmail.svg",
        "name": "n8n-nodes-base.gmail",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Gmail"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
        },
        "displayName": "Gmail",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1236,
        "icon": "file:aggregate.svg",
        "name": "n8n-nodes-base.aggregate",
        "codex": {
          "data": {
            "alias": [
              "Aggregate",
              "Combine",
              "Flatten",
              "Transform",
              "Array",
              "List",
              "Item"
            ],
            "details": "",
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Aggregate"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
        },
        "displayName": "Aggregate",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 35,
        "name": "Document Extraction"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}