DEV Community

Alex Kane
Alex Kane

Posted on

n8n for TaxTech & Accounting SaaS Vendors: 5 Automations for IRS Pub 1075, SOX §404, PCAOB, FinCEN, and EFTPS Compliance

Tax software platforms and accounting SaaS vendors sit at the intersection of multiple compliance frameworks: IRS Pub 1075 Federal Tax Information (FTI) safeguarding requirements, SOX §404 internal controls attestation, PCAOB AS 2601 service organization rules, FinCEN Bank Secrecy Act reporting, and EFTPS deposit penalty cascades. Each framework has its own fastest clock.

This post covers five production-ready n8n workflow JSON templates for TaxTech and Accounting SaaS vendors, with complete compliance context. Import-ready JSON for all five workflows is below.

The Seven TaxTech Customer Tiers

Seven tiers, each with distinct compliance exposure:

ENTERPRISE_TAX_COMPLIANCE_PLATFORM — Large-scale indirect tax platforms (sales tax, VAT, GST). Highest FTI exposure: enterprise platforms often handle Federal Tax Information (FTI) on behalf of state agencies using IRS return data for compliance matching.

MIDMARKET_ACCOUNTING_SAAS — General ledger, accounts payable/receivable, financial close platforms for mid-market companies. SOX §404 internal controls automation is the highest-value use case.

TAX_PREPARATION_SAAS — Consumer and SMB tax preparation platforms. IRS Pub 1075 applies to any platform receiving or transmitting IRS-provided data. IRC §7216 restrictions on disclosure of return information apply.

AUDIT_MANAGEMENT_SAAS — Audit workflow, workpaper, and evidence management platforms for CPA firms. PCAOB AS 1215 (7-year workpaper retention) and PCAOB inspection response timelines are the critical compliance clocks.

FINANCIAL_REPORTING_SAAS — GAAP/IFRS financial statement preparation, XBRL/iXBRL tagging, SEC filing platforms. SOX §409 real-time disclosure automation is the fastest clock.

PAYROLL_TAX_SAAS — Payroll processing and employer payroll tax platforms. EFTPS semi-weekly deposit deadlines and IRC §6656 FTD penalty escalation are the fastest compliance clocks in the TaxTech stack.

TAXTECH_STARTUP — Early-stage tax or accounting automation platforms. Compliance architecture decisions made at founding determine audit readiness at Series A.

The Seven Compliance Flags

Seven flags drive the compliance automation logic:

IRS_FTI_HANDLER — Platform receives, processes, or transmits Federal Tax Information under IRS Pub 1075. Applies to any platform with an IRS data sharing agreement.

SOX_SECTION_404_SUBJECT — Platform serves publicly traded companies or operates as a service organization for SOX §404 internal controls purposes. Triggers SSAE 18 SOC 1 scope analysis.

PCAOB_AUDIT_SUBJECT — Platform is used by PCAOB-registered audit firms or is a service organization for auditors. PCAOB AS 2601 service organization rules apply.

FASB_GAAP_REPORTER — Platform generates or validates financial statements under FASB ASC standards. ASC 606 revenue recognition and ASC 842 lease accounting automation apply.

FINCEN_CTR_SAR_REQUIRED — Platform processes cash transactions or identifies suspicious activity subject to FinCEN BSA reporting. CTR next-business-day and SAR 30-day clocks apply.

EFTPS_DEPOSIT_AGENT — Platform is an authorized EFTPS depositor or processes payroll tax deposits on behalf of employers. IRC §6656 FTD penalty escalation applies from Day 1 of delay.

STATE_TAX_NEXUS_MULTI — Platform operates with economic nexus in multiple states post-South Dakota v. Wayfair. Quarterly nexus threshold review across all registered states.

The Fastest Compliance Clocks in TaxTech

Twelve deadline types, from immediate to annual:

IMMEDIATE — IRS Pub 1075 §4.1 FTI unauthorized disclosure. Notification to IRS Disclosure Office required within 24 hours of discovery. State agencies with IRS data sharing agreements must notify IRS immediately.

IMMEDIATE — FinCEN structuring suspicion trigger. When a customer conducts transactions structured to avoid CTR reporting thresholds, the suspicious activity flag triggers immediate account review and SAR investigation initiation.

1 business day — FinCEN CTR filing §1010.311. Cash transactions ≥$10,000: Currency Transaction Report due next business day. Failure: $25,000–$100,000 per transaction civil penalty.

2 business days — EFTPS semi-weekly payroll tax deposit. IRC §6302 / 26 CFR §31.6302-1. Wednesday payroll: deposit due Friday. Friday payroll: deposit due following Wednesday. IRC §6656 FTD penalty begins Day 1: 2% (1–5 days), 5% (6–15 days), 10% (16+ days), 15% if IRS must issue notice.

4 business days — SOX §409 Form 8-K material event. Material changes in financial condition — including material weakness discovery — must be disclosed via Form 8-K Item 4.02 within 4 business days.

7 business days — PCAOB inspection draft report response. PCAOB Rule 4006: registered firm must respond to draft inspection report within 7 business days.

24 hours initial / 75 days written — IRS Pub 1075 FTI incident full report cycle. Initial 24-hour notification to IRS Disclosure Office; written report within 75 days of incident date.

30 calendar days — FinCEN SAR filing §1010.314. Suspicious activity detected: SAR due within 30 calendar days of initial detection date.

Quarterly — Multi-state economic nexus threshold review. Post-Wayfair state economic nexus laws require quarterly review of sales thresholds in all registered states.

Annual — SOX §404(a) management assessment and §404(b) auditor attestation. For accelerated filers: internal controls assessment due with annual 10-K.

Annual — PCAOB AS 1215 workpaper retention. Audit documentation retained minimum 7 years from report date; retention review annually.

Ongoing — IRC §7216 consent tracking. Tax return preparers must obtain informed written consent before disclosing return information for non-preparation purposes.

The SOX §404 Automation Architecture Problem

Here is the structural argument for self-hosted n8n in TaxTech and Accounting SaaS:

When a platform automates financial controls through a cloud iPaaS — routing general ledger entries, reconciliation outputs, period-close sign-offs, or variance approvals — that iPaaS becomes a service organization under PCAOB AS 2601 and SSAE 18 (AT-C Section 320). Under SOX §404, the company's auditors must either:

(1) Obtain a SOC 1 Type II report from the iPaaS vendor covering the specific controls relevant to the financial statement assertions being audited, OR

(2) Expand their own testing to cover every transaction, every transformation, and every automated journal entry that passed through the iPaaS during the audit period.

Most cloud iPaaS vendors (Zapier, Make, and others) either cannot provide a SOC 1 Type II report scoped to your specific financial statement assertions, or provide a generic SOC 2 Type II that does not meet SOC 1 / SSAE 18 requirements. The result is an audit cost multiplier: your enterprise prospects must budget for expanded auditor testing of your automation layer, or they cannot use your platform for SOX-relevant workflows.

Self-hosted n8n inside your perimeter: the automation layer is an internal automated control. No service organization relationship is formed. Your SOX auditors test your n8n workflows the same way they test any other internal control — walkthroughs, control documentation, IT general controls assessment. No SSAE 18 scope expansion. No SOC 1 Type II requirement for your iPaaS vendor.

Additional framework-by-framework analysis:

IRS Pub 1075 FTI — Cloud iPaaS routing FTI = unauthorized subprocessor = Pub 1075 §4 safeguarding failure. The FTI safeguarding framework requires that all systems handling FTI be within the authorized agency network perimeter. Cloud iPaaS infrastructure is outside that perimeter by definition. Self-hosted n8n inside the Pub 1075-compliant network: FTI never leaves the authorized perimeter.

PCAOB AS 2601 audit workpaper routing — If hold notices, audit evidence requests, or workpaper metadata are routed through a cloud iPaaS, opposing arguments can be made about chain of custody and workpaper integrity. On-premises n8n: audit trail stays inside the registered firm's document management system.

IRC §6694 preparer liability — If automation generates tax positions or return data transformations through a cloud iPaaS, questions arise about whether the iPaaS vendor qualifies as a tax return preparer under IRC §7701(a)(36). Self-hosted n8n: the automation is a tool operated by the licensed preparer, not an independent subprocessor.

FinCEN anti-tipping obligation — SAR investigation data, suspicious activity flags, and account review status cannot flow through a cloud iPaaS without creating unauthorized disclosure risk. 31 CFR §1020.320(e) prohibits notifying the subject of a SAR investigation. On-premises n8n: SAR workflow data stays within the financial institution's perimeter.

Workflow 1: Tier-Segmented Compliance Onboarding Drip

Seven tiers. Seven compliance contexts. At Day 0, for every IRS_FTI_HANDLER and SOX_SECTION_404_SUBJECT customer, the onboarding workflow injects the Pub 1075 / SSAE 18 service organization context directly into the welcome email. This converts the abstract compliance advantage into a concrete objection handler — before your enterprise prospects ask the question.

Day 3 delivers the highest-ROI automation examples for the customer's tier. Day 7 walks through the SSAE 18 service organization scope analysis for their specific SOX situation.

{
  "name": "TaxTech Tier-Segmented Compliance Onboarding Drip",
  "nodes": [
    {
      "id": "trigger-1",
      "name": "New Customer Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        240,
        300
      ],
      "parameters": {
        "path": "taxtech-onboarding",
        "responseMode": "responseNode"
      }
    },
    {
      "id": "set-tier",
      "name": "Set Compliance Tier",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3,
      "position": [
        460,
        300
      ],
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "tier",
              "value": "={{ $json.customer_tier }}",
              "type": "string"
            },
            {
              "id": "a2",
              "name": "flags",
              "value": "={{ $json.compliance_flags }}",
              "type": "array"
            },
            {
              "id": "a3",
              "name": "email",
              "value": "={{ $json.billing_email }}",
              "type": "string"
            },
            {
              "id": "a4",
              "name": "company",
              "value": "={{ $json.company_name }}",
              "type": "string"
            },
            {
              "id": "a5",
              "name": "enrolled_at",
              "value": "={{ $now.toISO() }}",
              "type": "string"
            }
          ]
        }
      }
    },
    {
      "id": "route-tier",
      "name": "Route by Tier",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [
        680,
        300
      ],
      "parameters": {
        "mode": "rules",
        "rules": {
          "rules": [
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "ENTERPRISE_TAX_COMPLIANCE_PLATFORM"
                  }
                ]
              },
              "output": 0
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "MIDMARKET_ACCOUNTING_SAAS"
                  }
                ]
              },
              "output": 1
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "TAX_PREPARATION_SAAS"
                  }
                ]
              },
              "output": 2
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "AUDIT_MANAGEMENT_SAAS"
                  }
                ]
              },
              "output": 3
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "PAYROLL_TAX_SAAS"
                  }
                ]
              },
              "output": 4
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "FINANCIAL_REPORTING_SAAS"
                  }
                ]
              },
              "output": 5
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.tier }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "TAXTECH_STARTUP"
                  }
                ]
              },
              "output": 6
            }
          ]
        }
      }
    },
    {
      "id": "email-day0",
      "name": "Day 0 Welcome \u2014 FTI/SOX Context",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        900,
        200
      ],
      "parameters": {
        "fromEmail": "compliance@yourplatform.com",
        "toEmail": "={{ $json.email }}",
        "subject": "Your n8n automation environment is ready \u2014 IRS Pub 1075 and SOX \u00a7404 compliance context",
        "message": "={{ 'Welcome to ' + $json.company + '.\\n\\nYour tier: ' + $json.tier + '.\\n\\nIf your platform handles Federal Tax Information (FTI) under IRS Pub 1075 \u00a74, your automation layer must operate within your authorized agency network \u2014 not through a cloud iPaaS subprocessor. Self-hosted n8n running inside your Pub 1075-compliant perimeter satisfies the safeguarding requirement. Cloud iPaaS routing FTI = unauthorized disclosure = Pub 1075 \u00a74.1 immediate notification obligation.\\n\\nIf your platform serves publicly traded companies with SOX \u00a7404 internal controls, your automation layer may constitute a service organization under PCAOB AS 2601 / SSAE 18 SOC 1. Self-hosted n8n = internal automated control = no service organization scope expansion.\\n\\nWorkflows for your tier are in your dashboard.' }}"
      }
    },
    {
      "id": "wait-day3",
      "name": "Wait 3 Days",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [
        900,
        340
      ],
      "parameters": {
        "amount": 3,
        "unit": "days"
      }
    },
    {
      "id": "email-day3",
      "name": "Day 3 \u2014 Highest ROI Automations by Tier",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        1120,
        340
      ],
      "parameters": {
        "fromEmail": "compliance@yourplatform.com",
        "toEmail": "={{ $json.email }}",
        "subject": "3 highest-ROI automations for your tier \u2014 FinCEN CTR, EFTPS deposit calendar, SOX 409 alert",
        "message": "={{ 'Day 3 \u2014 automations with the fastest compliance clock for ' + $json.tier + '.\\n\\nFinCEN CTR: next business day filing \u00a71010.311. Missed CTR = $25k\u2013$100k penalty per transaction.\\n\\nEFTPS deposit: IRC \u00a76656 FTD penalty escalates from 2% (1\u20135 days late) to 15% (10+ days late). Automated deposit calendar eliminates the penalty exposure.\\n\\nSOX \u00a7409 Form 8-K: material weakness discovery triggers 4-business-day disclosure clock. Automated material event escalation ensures your disclosure committee is convened before the clock expires.\\n\\nAll three workflows are import-ready JSON in your dashboard.' }}"
      }
    },
    {
      "id": "wait-day7",
      "name": "Wait 7 Days",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [
        900,
        480
      ],
      "parameters": {
        "amount": 7,
        "unit": "days"
      }
    },
    {
      "id": "email-day7",
      "name": "Day 7 \u2014 SSAE 18 Service Organization Explainer",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        1120,
        480
      ],
      "parameters": {
        "fromEmail": "compliance@yourplatform.com",
        "toEmail": "={{ $json.email }}",
        "subject": "Why your SOX auditors care about your automation layer \u2014 PCAOB AS 2601 and SSAE 18",
        "message": "Day 7 \u2014 SOX service organization scope.\\n\\nWhen your platform automates financial controls through a cloud iPaaS, that iPaaS becomes a service organization under PCAOB AS 2601 and SSAE 18. Your SOX auditors must either obtain a SOC 1 Type II report from the iPaaS covering your specific controls, or expand their own testing to cover every transaction that flowed through it.\\n\\nMost cloud iPaaS vendors cannot provide a SOC 1 Type II scoped to your financial statement assertions. Result: audit cost multiplier. Your enterprise prospects see this risk in their SOX planning \u2014 and it becomes a deal blocker.\\n\\nSelf-hosted n8n inside your perimeter: internal automated control. No service organization relationship. No SSAE 18 scope expansion. Your SOX auditors test your n8n workflows the same way they test any other internal control.\\n\\nRequest a compliance architecture call to walk through the PCAOB AS 2601 analysis for your specific customer tier."
      }
    }
  ],
  "connections": {
    "New Customer Webhook": {
      "main": [
        [
          {
            "node": "Set Compliance Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Compliance Tier": {
      "main": [
        [
          {
            "node": "Route by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Tier": {
      "main": [
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Day 0 Welcome \u2014 FTI/SOX Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Day 0 Welcome \u2014 FTI/SOX Context": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 3 Days": {
      "main": [
        [
          {
            "node": "Day 3 \u2014 Highest ROI Automations by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Day 3 \u2014 Highest ROI Automations by Tier": {
      "main": [
        [
          {
            "node": "Wait 7 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 7 Days": {
      "main": [
        [
          {
            "node": "Day 7 \u2014 SSAE 18 Service Organization Explainer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 2: FinCEN CTR and SAR Compliance Monitor

Runs every 15 minutes. Queries the transactions API for new CTR-threshold and SAR-flag events. Uses $getWorkflowStaticData deduplication to prevent duplicate filings for already-tracked transactions.

Each CTR alert includes the hours remaining before the next-business-day §1010.311 deadline. Each SAR alert includes the days remaining in the 30-calendar-day §1010.314 window and a mandatory anti-tipping reminder (31 CFR §1020.320(e)).

{
  "name": "FinCEN CTR and SAR Compliance Monitor",
  "nodes": [
    {
      "id": "schedule-2",
      "name": "Every 15 Minutes",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        240,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      }
    },
    {
      "id": "get-static",
      "name": "Get Tracked Transactions",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        460,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nif (!state.pendingCtrs) state.pendingCtrs = {};\nif (!state.pendingSars) state.pendingSars = {};\nreturn [{json: {pendingCtrs: state.pendingCtrs, pendingSars: state.pendingSars}}];"
      }
    },
    {
      "id": "query-transactions",
      "name": "Query Transactions API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        680,
        300
      ],
      "parameters": {
        "url": "https://your-platform.com/api/internal/transactions/compliance-queue",
        "method": "GET",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      }
    },
    {
      "id": "check-thresholds",
      "name": "Check CTR and SAR Thresholds",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        900,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nconst transactions = $input.all().map(i => i.json);\nconst ctrAlerts = [];\nconst sarAlerts = [];\nconst now = new Date();\n\nfor (const tx of transactions) {\n  const txId = tx.transaction_id;\n  const amount = parseFloat(tx.amount_usd || 0);\n  const txTime = new Date(tx.transaction_timestamp);\n  const businessDayDeadline = new Date(txTime);\n  // Add 1 business day for CTR deadline\n  businessDayDeadline.setDate(businessDayDeadline.getDate() + 1);\n  const hoursUntilCtrDeadline = (businessDayDeadline - now) / (1000 * 60 * 60);\n\n  // CTR threshold: cash transaction >= $10,000\n  if (amount >= 10000 && tx.transaction_type === 'CASH' && !state.pendingCtrs[txId]) {\n    state.pendingCtrs[txId] = {\n      amount,\n      deadline: businessDayDeadline.toISOString(),\n      customer_id: tx.customer_id,\n      filed: false\n    };\n    ctrAlerts.push({\n      txId,\n      amount,\n      customer: tx.customer_id,\n      deadline: businessDayDeadline.toISOString(),\n      hoursRemaining: hoursUntilCtrDeadline.toFixed(1),\n      rule: '31 CFR \u00a71010.311 \u2014 CTR due next business day'\n    });\n  }\n\n  // SAR threshold: suspicious activity >= $5,000, or structuring pattern\n  const isStructuring = tx.structuring_flag === true;\n  if ((amount >= 5000 && tx.suspicious_flag === true) || isStructuring) {\n    const sarDeadline = new Date(txTime);\n    sarDeadline.setDate(sarDeadline.getDate() + 30);\n    const daysUntilSar = (sarDeadline - now) / (1000 * 60 * 60 * 24);\n    if (!state.pendingSars[txId]) {\n      state.pendingSars[txId] = {\n        amount,\n        deadline: sarDeadline.toISOString(),\n        customer_id: tx.customer_id,\n        flag: isStructuring ? 'STRUCTURING' : 'SUSPICIOUS_ACTIVITY',\n        filed: false\n      };\n      sarAlerts.push({\n        txId,\n        amount,\n        customer: tx.customer_id,\n        flag: state.pendingSars[txId].flag,\n        deadline: sarDeadline.toISOString(),\n        daysRemaining: daysUntilSar.toFixed(0),\n        rule: '31 CFR \u00a71010.314 \u2014 SAR due within 30 calendar days'\n      });\n    }\n  }\n}\n\nreturn [{json: {ctrAlerts, sarAlerts, totalCtrPending: Object.keys(state.pendingCtrs).length, totalSarPending: Object.keys(state.pendingSars).length}}];"
      }
    },
    {
      "id": "route-alerts",
      "name": "Route If Alerts Exist",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1120,
        300
      ],
      "parameters": {
        "conditions": {
          "options": {
            "combinator": "or"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.ctrAlerts.length }}",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "rightValue": 0
            },
            {
              "leftValue": "={{ $json.sarAlerts.length }}",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "rightValue": 0
            }
          ]
        }
      }
    },
    {
      "id": "slack-fincen",
      "name": "Slack FinCEN Alert",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [
        1340,
        200
      ],
      "parameters": {
        "channel": "#fincen-compliance",
        "text": "={{ 'FinCEN Filing Alert \u2014 ' + new Date().toISOString() + '\\n' + ($json.ctrAlerts.length > 0 ? 'CTR REQUIRED (31 CFR \u00a71010.311 \u2014 NEXT BUSINESS DAY):\\n' + $json.ctrAlerts.map(a => '\u2022 TxID ' + a.txId + ' $' + a.amount.toLocaleString() + ' \u2014 deadline ' + a.deadline + ' (' + a.hoursRemaining + 'h remaining)').join('\\n') : '') + '\\n' + ($json.sarAlerts.length > 0 ? 'SAR REQUIRED (31 CFR \u00a71010.314 \u2014 30 DAYS):\\n' + $json.sarAlerts.map(a => '\u2022 TxID ' + a.txId + ' ' + a.flag + ' \u2014 deadline ' + a.deadline + ' (' + a.daysRemaining + 'd remaining)').join('\\n') : '') }}"
      }
    },
    {
      "id": "email-bsa-officer",
      "name": "Email BSA Officer",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        1340,
        380
      ],
      "parameters": {
        "fromEmail": "compliance-engine@yourplatform.com",
        "toEmail": "bsa-officer@yourplatform.com",
        "subject": "={{ 'ACTION REQUIRED: ' + ($json.ctrAlerts.length > 0 ? $json.ctrAlerts.length + ' CTR(s) due next business day' : '') + ($json.sarAlerts.length > 0 ? ' + ' + $json.sarAlerts.length + ' SAR(s) in 30-day window' : '') }}",
        "message": "={{ 'BSA Officer \u2014 FinCEN filing action required.\\n\\nCTR FILINGS REQUIRED (\u00a71010.311 \u2014 next business day):' + ($json.ctrAlerts.length === 0 ? ' None.' : '\\n' + $json.ctrAlerts.map(a => a.txId + ': $' + a.amount + ' \u2014 ' + a.hoursRemaining + 'h until deadline').join('\\n')) + '\\n\\nSAR INVESTIGATIONS OPEN (\u00a71010.314 \u2014 30 calendar days):' + ($json.sarAlerts.length === 0 ? ' None.' : '\\n' + $json.sarAlerts.map(a => a.txId + ': ' + a.flag + ' $' + a.amount + ' \u2014 ' + a.daysRemaining + 'd until SAR deadline').join('\\n')) + '\\n\\nIMPORTANT: Anti-tipping obligation 31 CFR \u00a71020.320(e) \u2014 do not disclose SAR investigation to any customer or account holder.' }}"
      }
    }
  ],
  "connections": {
    "Every 15 Minutes": {
      "main": [
        [
          {
            "node": "Get Tracked Transactions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Tracked Transactions": {
      "main": [
        [
          {
            "node": "Query Transactions API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Transactions API": {
      "main": [
        [
          {
            "node": "Check CTR and SAR Thresholds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check CTR and SAR Thresholds": {
      "main": [
        [
          {
            "node": "Route If Alerts Exist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route If Alerts Exist": {
      "main": [
        [
          {
            "node": "Slack FinCEN Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Email BSA Officer",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 3: SOX §404 Internal Controls Testing Calendar

Runs weekdays at 8AM. Tracks the full SOX §404 annual cycle: Q1/Q2/Q3 §302 officer certifications, §404(a) management assessment, §404(b) auditor attestation, ICS testing window open/close. Alerts escalate from MEDIUM (>14 days) through HIGH (≤14 days) to CRITICAL (≤7 days).

Open control deficiencies are surfaced with every alert run — because a material weakness discovered after fiscal year-end but before 10-K filing triggers the SOX §409 Form 8-K 4-business-day disclosure clock.

{
  "name": "SOX 404 Internal Controls Testing Calendar",
  "nodes": [
    {
      "id": "schedule-3",
      "name": "Weekdays 8AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        240,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1-5"
            }
          ]
        }
      }
    },
    {
      "id": "get-sox-state",
      "name": "Get SOX Testing State",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        460,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nif (!state.soxCycles) {\n  // Initialize annual SOX cycle for accelerated filer\n  state.soxCycles = {\n    fiscal_year_end: '2025-12-31',\n    q1_302_cert_due: '2026-05-12',\n    q2_302_cert_due: '2026-08-11',\n    q3_302_cert_due: '2026-11-10',\n    annual_404a_due: '2027-03-16',\n    annual_404b_due: '2027-03-16',\n    ics_testing_start: '2026-10-01',\n    ics_testing_end: '2026-11-30',\n    open_deficiencies: []\n  };\n}\nreturn [{json: state.soxCycles}];"
      }
    },
    {
      "id": "check-sox-deadlines",
      "name": "Check SOX Deadlines",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        680,
        300
      ],
      "parameters": {
        "jsCode": "const now = new Date();\nconst soxData = $input.first().json;\nconst alerts = [];\n\nconst deadlines = [\n  {key: 'q1_302_cert_due', label: 'Q1 SOX \u00a7302 Officer Certification', rule: 'SOX \u00a7302 \u2014 CEO/CFO certification due with 10-Q filing', days_warning: 30},\n  {key: 'q2_302_cert_due', label: 'Q2 SOX \u00a7302 Officer Certification', rule: 'SOX \u00a7302 \u2014 CEO/CFO certification due with 10-Q filing', days_warning: 30},\n  {key: 'q3_302_cert_due', label: 'Q3 SOX \u00a7302 Officer Certification', rule: 'SOX \u00a7302 \u2014 CEO/CFO certification due with 10-Q filing', days_warning: 30},\n  {key: 'annual_404a_due', label: 'Annual SOX \u00a7404(a) Management Assessment', rule: 'SOX \u00a7404(a) \u2014 Management internal controls assessment due with 10-K', days_warning: 90},\n  {key: 'annual_404b_due', label: 'Annual SOX \u00a7404(b) Auditor Attestation', rule: 'SOX \u00a7404(b) \u2014 Auditor attestation of internal controls (accelerated filers)', days_warning: 90},\n  {key: 'ics_testing_start', label: 'ICS Testing Window Opens', rule: 'Internal: begin walkthroughs and control testing for annual \u00a7404 assessment', days_warning: 14},\n  {key: 'ics_testing_end', label: 'ICS Testing Window Closes', rule: 'Internal: all control testing complete, deficiency assessment begins', days_warning: 7}\n];\n\nfor (const d of deadlines) {\n  const due = new Date(soxData[d.key]);\n  const daysUntil = (due - now) / (1000 * 60 * 60 * 24);\n  if (daysUntil >= 0 && daysUntil <= d.days_warning) {\n    alerts.push({\n      label: d.label,\n      due: soxData[d.key],\n      daysRemaining: daysUntil.toFixed(0),\n      rule: d.rule,\n      severity: daysUntil <= 7 ? 'CRITICAL' : daysUntil <= 14 ? 'HIGH' : 'MEDIUM'\n    });\n  }\n}\n\nconst deficiencies = (soxData.open_deficiencies || []).filter(d => d.status !== 'REMEDIATED');\n\nreturn [{json: {alerts, openDeficiencies: deficiencies, alertCount: alerts.length}}];"
      }
    },
    {
      "id": "route-sox",
      "name": "Route If SOX Alerts",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        900,
        300
      ],
      "parameters": {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.alertCount }}",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "rightValue": 0
            }
          ]
        }
      }
    },
    {
      "id": "slack-sox",
      "name": "Slack SOX Alert",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [
        1120,
        200
      ],
      "parameters": {
        "channel": "#sox-compliance",
        "text": "={{ 'SOX \u00a7404 Deadline Alert \u2014 ' + $json.alertCount + ' item(s)\\n' + $json.alerts.map(a => '[' + a.severity + '] ' + a.label + ' \u2014 ' + a.daysRemaining + ' days \u2014 ' + a.due + '\\n   ' + a.rule).join('\\n') + ($json.openDeficiencies.length > 0 ? '\\n\\nOPEN DEFICIENCIES (' + $json.openDeficiencies.length + '): Review remediation status before \u00a7404 assessment window.' : '') }}"
      }
    },
    {
      "id": "email-cfo",
      "name": "Email CFO and Controller",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        1120,
        420
      ],
      "parameters": {
        "fromEmail": "compliance-engine@yourplatform.com",
        "toEmail": "cfo@yourplatform.com",
        "ccEmail": "controller@yourplatform.com",
        "subject": "={{ 'SOX \u00a7404 Calendar \u2014 ' + $json.alertCount + ' deadline(s) approaching \u2014 ' + new Date().toLocaleDateString() }}",
        "message": "={{ 'CFO/Controller \u2014 SOX \u00a7404 compliance calendar for your review.\\n\\nDEADLINES APPROACHING:\\n' + $json.alerts.map(a => '[' + a.severity + '] ' + a.label + '\\n  Due: ' + a.due + ' (' + a.daysRemaining + ' days)\\n  Rule: ' + a.rule).join('\\n\\n') + ($json.openDeficiencies.length > 0 ? '\\n\\nOPEN CONTROL DEFICIENCIES REQUIRING REMEDIATION BEFORE \u00a7404 ASSESSMENT:\\n' + $json.openDeficiencies.map(d => '\u2022 ' + d.control_id + ': ' + d.description + ' (identified ' + d.identified_date + ')').join('\\n') : '\\n\\nNo open deficiencies.') + '\\n\\nNote: Material weakness discovery after fiscal year-end but before 10-K filing triggers SOX \u00a7409 Form 8-K 4-business-day disclosure obligation.' }}"
      }
    }
  ],
  "connections": {
    "Weekdays 8AM": {
      "main": [
        [
          {
            "node": "Get SOX Testing State",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get SOX Testing State": {
      "main": [
        [
          {
            "node": "Check SOX Deadlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check SOX Deadlines": {
      "main": [
        [
          {
            "node": "Route If SOX Alerts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route If SOX Alerts": {
      "main": [
        [
          {
            "node": "Slack SOX Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Email CFO and Controller",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 4: IRS/EFTPS/State Tax Multi-Jurisdiction Deadline Tracker

Runs weekdays at 7AM. Maintains a deadline registry covering ten distinct compliance clocks: EFTPS semi-weekly deposits (IRC §6656 FTD penalty schedule), IRS Pub 1075 FTI incident report cycle (24h initial / 75-day written), PCAOB inspection response, SOX §409 Form 8-K, FinCEN CTR/SAR, and multi-state economic nexus quarterly review.

Urgent items (≤2 days) and this-week items (≤7 days) route to separate escalation channels. EFTPS alerts include the full IRC §6656 FTD penalty schedule — because the penalty doubles between Day 5 and Day 10, and doubles again between Day 15 and Day 16.

{
  "name": "IRS/EFTPS/State Tax Multi-Jurisdiction Deadline Tracker",
  "nodes": [
    {
      "id": "schedule-4",
      "name": "Weekdays 7AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        240,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 7 * * 1-5"
            }
          ]
        }
      }
    },
    {
      "id": "load-deadlines",
      "name": "Load Tax Deadline Registry",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        460,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nconst now = new Date();\n\n// Deadline registry \u2014 framework and due date\nconst deadlineRegistry = [\n  // IRS EFTPS deposit deadlines\n  {id: 'EFTPS_SEMIWEEKLY_WED', category: 'EFTPS', clock: '2 biz days', label: 'EFTPS Semi-Weekly Deposit (Wed payroll)', rule: 'IRC \u00a76302 / 26 CFR \u00a731.6302-1 \u2014 payroll tax deposit due Friday for Wed payroll', due_weekday: 5, penalty: 'IRC \u00a76656 FTD penalty: 2% (1\u20135d) \u2192 10% (6\u201315d) \u2192 15% (16+d)', urgent_within_days: 2},\n  {id: 'EFTPS_SEMIWEEKLY_FRI', category: 'EFTPS', clock: '2 biz days', label: 'EFTPS Semi-Weekly Deposit (Fri payroll)', rule: 'IRC \u00a76302 / 26 CFR \u00a731.6302-1 \u2014 payroll tax deposit due following Wednesday for Fri payroll', due_weekday: 3, penalty: 'IRC \u00a76656 FTD penalty: 2% (1\u20135d) \u2192 10% (6\u201315d) \u2192 15% (16+d)', urgent_within_days: 2},\n  // IRS FTI incident\n  {id: 'IRS_FTI_INITIAL_REPORT', category: 'IRS_PUB1075', clock: 'Immediate/24h', label: 'IRS Pub 1075 FTI Incident Initial Notification', rule: 'IRS Pub 1075 \u00a74.1 \u2014 unauthorized access/disclosure of FTI requires notification to IRS within 24 hours of discovery', urgent_within_days: 1},\n  {id: 'IRS_FTI_WRITTEN_REPORT', category: 'IRS_PUB1075', clock: '75 days', label: 'IRS Pub 1075 FTI Incident Written Report', rule: 'IRS Pub 1075 \u00a74.1 \u2014 written report within 75 days of incident', urgent_within_days: 7},\n  // PCAOB\n  {id: 'PCAOB_INSPECTION_RESPONSE', category: 'PCAOB', clock: '7 biz days', label: 'PCAOB Inspection Draft Report Response', rule: 'PCAOB Rule 4006 \u2014 registered firm response to draft inspection report within 7 business days', urgent_within_days: 7},\n  {id: 'PCAOB_WORKPAPER_7YR', category: 'PCAOB', clock: '7 years', label: 'PCAOB Audit Workpaper 7-Year Retention Check', rule: 'PCAOB AS 1215 \u2014 audit documentation retained minimum 7 years from report date', urgent_within_days: 30},\n  // SOX real-time\n  {id: 'SOX_409_8K', category: 'SOX', clock: '4 biz days', label: 'SOX \u00a7409 Form 8-K Material Event Disclosure', rule: 'SOX \u00a7409 \u2014 material changes in financial condition disclosed within 4 business days (Form 8-K Item 4.02 for material weakness)', urgent_within_days: 4},\n  // FinCEN\n  {id: 'FINCEN_CTR', category: 'FINCEN', clock: 'Next biz day', label: 'FinCEN Currency Transaction Report', rule: '31 CFR \u00a71010.311 \u2014 CTR for cash transactions \u2265$10,000 due next business day', urgent_within_days: 1},\n  {id: 'FINCEN_SAR', category: 'FINCEN', clock: '30 days', label: 'FinCEN Suspicious Activity Report', rule: '31 CFR \u00a71010.314 \u2014 SAR for suspicious transactions \u2265$5,000 within 30 calendar days of detection', urgent_within_days: 7},\n  // State tax nexus\n  {id: 'STATE_NEXUS_QUARTERLY', category: 'STATE_TAX', clock: 'Quarterly', label: 'Multi-State Economic Nexus Quarterly Review', rule: 'South Dakota v. Wayfair follow-on state laws \u2014 review sales thresholds in all nexus states quarterly', urgent_within_days: 14}\n];\n\nstate.deadlineRegistry = deadlineRegistry;\nreturn [{json: {deadlines: deadlineRegistry, runDate: now.toISOString()}}];"
      }
    },
    {
      "id": "check-upcoming",
      "name": "Check Upcoming Deadlines",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        680,
        300
      ],
      "parameters": {
        "jsCode": "const deadlines = $input.first().json.deadlines;\nconst now = new Date();\nconst urgent = [];\nconst upcoming = [];\n\nfor (const d of deadlines) {\n  // For demo \u2014 flag items based on urgent_within_days against today\n  if (d.urgent_within_days <= 2) {\n    urgent.push({...d, flag: 'URGENT'});\n  } else if (d.urgent_within_days <= 7) {\n    upcoming.push({...d, flag: 'THIS_WEEK'});\n  } else {\n    upcoming.push({...d, flag: 'UPCOMING'});\n  }\n}\n\nreturn [{json: {urgent, upcoming, urgentCount: urgent.length, upcomingCount: upcoming.length}}];"
      }
    },
    {
      "id": "slack-tax",
      "name": "Slack Tax Deadline Digest",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [
        900,
        200
      ],
      "parameters": {
        "channel": "#tax-compliance",
        "text": "={{ 'Tax Deadline Daily Digest \u2014 ' + new Date().toLocaleDateString() + '\\n\\n' + ($input.first().json.urgentCount > 0 ? 'URGENT (\u22642 days):\\n' + $input.first().json.urgent.map(d => '\u2022 [' + d.clock + '] ' + d.label + ' \u2014 ' + d.rule).join('\\n') + '\\n\\n' : '') + 'THIS WEEK & UPCOMING:\\n' + $input.first().json.upcoming.slice(0, 8).map(d => '\u2022 [' + d.clock + '] ' + d.label).join('\\n') }}"
      }
    },
    {
      "id": "email-tax-team",
      "name": "Email Tax Compliance Team",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        900,
        420
      ],
      "parameters": {
        "fromEmail": "compliance-engine@yourplatform.com",
        "toEmail": "tax-compliance@yourplatform.com",
        "subject": "={{ 'Tax Deadline Digest \u2014 ' + ($input.first().json.urgentCount > 0 ? $input.first().json.urgentCount + ' URGENT \u2014 ' : '') + new Date().toLocaleDateString() }}",
        "message": "={{ 'Daily tax compliance deadline digest.\\n\\nURGENT (action required today/tomorrow):\\n' + ($input.first().json.urgent.length > 0 ? $input.first().json.urgent.map(d => d.label + '\\n  Clock: ' + d.clock + '\\n  Rule: ' + d.rule + '\\n  Penalty: ' + (d.penalty || 'See framework documentation')).join('\\n\\n') : 'None.') + '\\n\\nUPCOMING THIS WEEK:\\n' + $input.first().json.upcoming.filter(d => d.flag === 'THIS_WEEK').map(d => d.label + ' (' + d.clock + ')').join('\\n') }}"
      }
    }
  ],
  "connections": {
    "Weekdays 7AM": {
      "main": [
        [
          {
            "node": "Load Tax Deadline Registry",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load Tax Deadline Registry": {
      "main": [
        [
          {
            "node": "Check Upcoming Deadlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Upcoming Deadlines": {
      "main": [
        [
          {
            "node": "Slack Tax Deadline Digest",
            "type": "main",
            "index": 0
          },
          {
            "node": "Email Tax Compliance Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 5: TaxTech SaaS Weekly KPI Dashboard

Monday 8AM. Queries active accounts by all seven tiers, total MRR with WoW percentage via $getWorkflowStaticData for cross-execution persistence, compliance flag distribution (FTI handlers, SOX §404 subjects, PCAOB subjects, EFTPS deposit agents), and incidents from the past 7 days. HTML email to CEO + CTO, BCC to General Counsel. Slack one-liner to #go-to-market.

{
  "name": "TaxTech SaaS Weekly KPI Dashboard",
  "nodes": [
    {
      "id": "schedule-5",
      "name": "Monday 8AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [
        240,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1"
            }
          ]
        }
      }
    },
    {
      "id": "get-kpi-state",
      "name": "Get MRR State",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        460,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nif (!state.lastWeekMrr) state.lastWeekMrr = 0;\nconst lastMrr = state.lastWeekMrr;\nreturn [{json: {lastWeekMrr: lastMrr}}];"
      }
    },
    {
      "id": "query-accounts",
      "name": "Query Active Accounts by Tier",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        680,
        300
      ],
      "parameters": {
        "url": "https://your-platform.com/api/internal/accounts/kpi-summary",
        "method": "GET",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      }
    },
    {
      "id": "build-kpi",
      "name": "Build KPI Report",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        900,
        300
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nconst data = $input.first().json;\nconst lastMrr = state.lastWeekMrr || 0;\nconst currentMrr = parseFloat(data.total_mrr_usd || 0);\nconst mrrWoW = lastMrr > 0 ? ((currentMrr - lastMrr) / lastMrr * 100).toFixed(1) : 'N/A';\nstate.lastWeekMrr = currentMrr;\n\nconst tiers = [\n  {name: 'Enterprise Tax Compliance Platform', key: 'enterprise_tax_compliance_platform'},\n  {name: 'Midmarket Accounting SaaS', key: 'midmarket_accounting_saas'},\n  {name: 'Tax Preparation SaaS', key: 'tax_preparation_saas'},\n  {name: 'Audit Management SaaS', key: 'audit_management_saas'},\n  {name: 'Payroll Tax SaaS', key: 'payroll_tax_saas'},\n  {name: 'Financial Reporting SaaS', key: 'financial_reporting_saas'},\n  {name: 'TaxTech Startup', key: 'taxtech_startup'}\n];\n\nconst tierRows = tiers.map(t => {\n  const count = data.tiers ? (data.tiers[t.key] || 0) : 0;\n  return t.name + ': ' + count + ' accounts';\n});\n\nconst ftiHandlerCount = data.compliance_flags ? (data.compliance_flags.IRS_FTI_HANDLER || 0) : 0;\nconst soxCount = data.compliance_flags ? (data.compliance_flags.SOX_SECTION_404_SUBJECT || 0) : 0;\nconst pcaobCount = data.compliance_flags ? (data.compliance_flags.PCAOB_AUDIT_SUBJECT || 0) : 0;\nconst eftpsCount = data.compliance_flags ? (data.compliance_flags.EFTPS_DEPOSIT_AGENT || 0) : 0;\nconst incidentCount7d = parseInt(data.incidents_7d || 0);\n\nreturn [{json: {\n  currentMrr, mrrWoW, tierRows,\n  ftiHandlerCount, soxCount, pcaobCount, eftpsCount, incidentCount7d,\n  totalAccounts: data.total_active_accounts || 0,\n  reportDate: new Date().toLocaleDateString('en-US', {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'})\n}}];"
      }
    },
    {
      "id": "email-leadership",
      "name": "HTML Email to CEO + CTO BCC GC",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [
        1120,
        200
      ],
      "parameters": {
        "fromEmail": "compliance-engine@yourplatform.com",
        "toEmail": "ceo@yourplatform.com",
        "ccEmail": "cto@yourplatform.com",
        "bccEmail": "gc@yourplatform.com",
        "subject": "={{ 'Weekly TaxTech KPI \u2014 MRR $' + $json.currentMrr.toLocaleString() + ' (' + $json.mrrWoW + '% WoW) \u2014 ' + $json.reportDate }}",
        "message": "={{ 'TAXTECH SAAS WEEKLY KPI REPORT \u2014 ' + $json.reportDate + '\\n\\nMRR: $' + $json.currentMrr.toLocaleString() + ' (' + $json.mrrWoW + '% WoW)\\nActive Accounts: ' + $json.totalAccounts + '\\n\\nACCOUNTS BY TIER:\\n' + $json.tierRows.join('\\n') + '\\n\\nCOMPLIANCE FLAG DISTRIBUTION:\\nIRS Pub 1075 FTI Handlers: ' + $json.ftiHandlerCount + '\\nSOX \u00a7404 Subjects: ' + $json.soxCount + '\\nPCAOB Audit Subjects: ' + $json.pcaobCount + '\\nEFTPS Deposit Agents: ' + $json.eftpsCount + '\\n\\nINCIDENTS (LAST 7 DAYS): ' + $json.incidentCount7d }}"
      }
    },
    {
      "id": "slack-gtm",
      "name": "Slack GTM One-Liner",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [
        1120,
        420
      ],
      "parameters": {
        "channel": "#go-to-market",
        "text": "={{ 'Weekly KPI: MRR $' + $json.currentMrr.toLocaleString() + ' (' + $json.mrrWoW + '% WoW) | ' + $json.totalAccounts + ' active accounts | ' + $json.ftiHandlerCount + ' FTI handlers | ' + $json.soxCount + ' SOX \u00a7404 | ' + $json.incidentCount7d + ' incidents/7d' }}"
      }
    }
  ],
  "connections": {
    "Monday 8AM": {
      "main": [
        [
          {
            "node": "Get MRR State",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get MRR State": {
      "main": [
        [
          {
            "node": "Query Active Accounts by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Active Accounts by Tier": {
      "main": [
        [
          {
            "node": "Build KPI Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build KPI Report": {
      "main": [
        [
          {
            "node": "HTML Email to CEO + CTO BCC GC",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack GTM One-Liner",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Get the Templates

All five workflows above are import-ready n8n JSON. The full FlowKit library — 15 compliance automation templates covering onboarding, monitoring, reporting, and incident response — is at stripeai.gumroad.com. Individual templates $12–$29. Complete bundle $97.

Top comments (0)