DEV Community

Alex Kane
Alex Kane

Posted on

n8n for WealthTech & RoboAdvisor SaaS: 5 Automations for Reg BI, FINRA 2111 Suitability, Fiduciary Duty, and SEC Compliance

WealthTech and RoboAdvisor SaaS vendors operate under a compliance stack that creates liability before a breach occurs. The SEC, FINRA, and Investment Advisers Act create obligations tied to your architecture — not your incident history. This article covers five production-ready n8n workflows with full JSON for the five highest-impact compliance requirements in this vertical.

The Reg BI Algorithm Audit Trail Problem

SEC Regulation Best Interest (17 CFR §240.15l-1, effective June 30, 2020) requires that every investment recommendation meet the Best Interest standard. For algorithmic advisors, every recommendation event generated by your engine is subject to this rule. The audit trail that documents your compliance with Reg BI must be preserved under SEC Rule 17a-4(f) — electronic records must be stored on WORM-compliant media or equivalent.

When your automation layer runs on cloud iPaaS, the execution logs of your algorithmic recommendation logic sit on a third-party server. Those logs are SEC examination-discoverable records. If your cloud iPaaS vendor is subpoenaed, if they have a breach, or if their log retention policies differ from your Rule 17a-4 obligations — you have a compliance gap that no SLA can fix.

Self-hosted n8n, running inside your SEC Rule 17a-4(f)-compliant cloud environment, keeps all recommendation audit trail logs inside your WORM boundary. No third-party server. No vendor discovery process. No audit gap.

Compliance Obligations That Start at Architecture

Investment Advisers Act §207 and Form ADV Material Disclosure. Under IAA §207, material misrepresentations in Form ADV filings create SEC enforcement exposure. Cloud iPaaS that routes client data through algorithmic recommendation workflows is a material subcontractor in your advice process. If it is not disclosed in Form ADV Part 2A, that is a §207 material omission — not a risk, a violation. Form ADV amendment is required within 24 hours of identifying a material change (17 CFR §279.1).

FINRA Rule 2111 Suitability: Every Algorithmic Recommendation. FINRA Rule 2111 requires a 'reasonable basis' suitability determination for every recommendation. For algorithmic platforms, this means every recommendation event must have a documented reasonable basis — and those documentation records must be inside your FINRA examination perimeter. Cloud iPaaS execution logs outside your perimeter create a FINRA Rule 3110 supervision gap: you cannot supervise what you cannot see.

SEC Rule 206(4)-7: Annual Compliance Program Review. SEC Rule 206(4)-7 requires investment advisers to review their compliance programs annually. An undisclosed cloud iPaaS in your recommendation workflow is a §206(4)-7 deficiency — it will be flagged in the next SEC examination as an undocumented system in your compliance architecture.

SEC Cybersecurity Rule for Investment Advisers (Rel. IA-6383, October 2023). Effective in 2024, this rule requires investment advisers to disclose material cybersecurity risks in Form ADV Part 2A. Cloud iPaaS with access to client portfolio data is a material cybersecurity risk requiring annual disclosure. Failure to update Form ADV is a §207 violation.

Compliance Clocks: Fastest in the WealthTech Vertical

Incident Clock Statute
SEC Examination Opened IMMEDIATE — examiners present without advance notice IAA §204; Rules 204-2
FINRA Cause Examination IMMEDIATE — FINRA Rule 8210 document production 10-15 BD FINRA Rules 8210, 2111
Reg BI Suitability Complaint 24h internal escalation; FINRA arbitration if elected 17 CFR §240.15l-1; FINRA Rule 2111
Form ADV Material Change Prompt amendment = 24h from discovery 17 CFR §279.1; IAA §207
FINRA 2111 Suitability Failure 24h internal; 90d FINRA arbitration statute of limitations FINRA Rule 2111
SEC Cybersecurity Incident 48h — Form ADV amendment if material (Rel. IA-6383) SEC Rel. IA-6383 (Oct 2023)
Reg D Investor Qualification Gap 30d — potential rescission offer required SEC Rule 506(c)

Customer Tiers: WealthTech/RoboAdvisor SaaS

Tier Primary Reg BI/FINRA Exposure Fastest Clock
ROBO_ADVISOR_SAAS Reg BI + FINRA 2111 suitability per recommendation event; Form ADV §207 material disclosure IMMEDIATE (SEC exam)
DIGITAL_WEALTH_PLATFORM Form ADV Part 2A disclosure; FINRA Rule 4370 BCP documentation IMMEDIATE (FINRA cause exam)
MICRO_INVESTING_APP FINRA Rule 2111 for algorithmic recommendations; SEC cybersecurity rule (Oct 2023) 24h (Reg BI suitability)
ESG_SCREENED_PORTFOLIO_SAAS Form ADV ESG disclosure accuracy (SEC Rel. IA-6383 climate risk) 24h (Form ADV amendment)
CRYPTO_WEALTH_SAAS SEC enforcement posture on digital assets + FINRA jurisdiction question + Reg BI if securities IMMEDIATE (SEC exam)
RIA_TECHNOLOGY_VENDOR §206(4)-7 compliance program documentation for IA clients; Form ADV Part 1A item 7 24h (Form ADV amendment)
WEALTHTECH_STARTUP Reg D private placement investor verification before offering (Rule 506(c)) 30d (rescission)

Self-Hosting: Why Architecture Determines Compliance

Framework Cloud iPaaS Problem Self-Hosted n8n Solution
SEC Rule 17a-4(f) WORM Algo recommendation logs on third-party server outside WORM boundary Logs inside your Rule 17a-4(f)-compliant storage from day one
IAA §207 / Form ADV Cloud iPaaS = undisclosed material subcontractor = §207 material omission Internal system = no third-party disclosure obligation
FINRA Rule 2111 Recommendation logic logs outside FINRA examination perimeter All suitability documentation inside your supervisory perimeter
SEC Rule 206(4)-7 Undisclosed cloud iPaaS = annual compliance review deficiency Fully documented internal compliance architecture
SEC Cybersecurity Rule IA Cloud iPaaS = material cybersecurity risk requiring Form ADV disclosure Internal system = no external cybersecurity risk to disclose

5 n8n Workflows with Full JSON

Workflow 1: Tier-Segmented Reg BI Compliance Onboarding Drip

{
  "name": "RoboAdvisor SaaS \u2014 Tier-Segmented Reg BI Compliance Onboarding",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "robo-onboard",
        "responseMode": "lastNode",
        "options": {}
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "ROBO_ADVISOR_SAAS"
            },
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "DIGITAL_WEALTH_PLATFORM"
            },
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "MICRO_INVESTING_APP"
            },
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "ESG_SCREENED_PORTFOLIO_SAAS"
            },
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "CRYPTO_WEALTH_SAAS"
            },
            {
              "value1": "={{$json[\"customer_tier\"]}}",
              "operation": "equal",
              "value2": "RIA_TECHNOLOGY_VENDOR"
            }
          ]
        }
      },
      "name": "Route by Tier",
      "type": "n8n-nodes-base.switch",
      "position": [
        450,
        300
      ]
    },
    {
      "parameters": {
        "to": "={{$json[\"compliance_email\"]}}",
        "subject": "Reg BI Best Interest Standard: Your Algorithmic Advice Architecture",
        "text": "={{$json[\"customer_tier\"] === 'ROBO_ADVISOR_SAAS' ? '[ROBO ADVISOR] Day 0 Compliance Note: SEC Reg BI (17 CFR \u00a7240.15l-1) requires that algorithmic recommendations meet the Best Interest standard. Cloud iPaaS routing your algorithm's recommendation events creates a third-party data processor that must appear in your Form ADV Part 2A disclosure (\u00a7207 material misrepresentation if omitted). Self-hosted n8n inside your compliant cloud environment eliminates the third-party data processor classification \u2014 recommendation audit trail stays inside your SEC Rule 17a-4(f) WORM boundary.' : '[DIGITAL WEALTH] Day 0: Your platform's account opening and KYC data flows must be documented in Form ADV Part 2A. Cloud iPaaS routing client profile data = material subcontractor requiring disclosure under IAA \u00a7207. FINRA Rule 4370 BCP also requires your technology infrastructure to be documented \u2014 undisclosed cloud iPaaS = BCP gap.'}}"
      },
      "name": "Day 0 Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        750,
        300
      ]
    },
    {
      "parameters": {
        "amount": 4,
        "unit": "days"
      },
      "name": "Wait 4 Days",
      "type": "n8n-nodes-base.wait",
      "position": [
        950,
        300
      ]
    },
    {
      "parameters": {
        "to": "={{$json[\"compliance_email\"]}}",
        "subject": "FINRA Rule 2111 Suitability: Algorithmic Recommendations Require Documented Reasonable Basis",
        "text": "Day 4 Compliance Note: FINRA Rule 2111 requires a 'reasonable basis' suitability determination for every recommendation. For algorithmic advisors, every recommendation event generated by your engine is subject to this rule. Cloud iPaaS execution logs of your recommendation engine logic = FINRA examination-discoverable records outside your firm's direct control. FINRA Rule 4370 BCP: if cloud iPaaS routes your suitability workflow, a vendor outage = BCP event. Self-hosted n8n: all recommendation logic logs stay inside your perimeter, immediately available for FINRA examination without vendor discovery process."
      },
      "name": "Day 4 Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1150,
        300
      ]
    },
    {
      "parameters": {
        "amount": 4,
        "unit": "days"
      },
      "name": "Wait 4 More Days",
      "type": "n8n-nodes-base.wait",
      "position": [
        1350,
        300
      ]
    },
    {
      "parameters": {
        "to": "={{$json[\"compliance_email\"]}}",
        "subject": "Form ADV Annual Amendment Deadline + SEC Cybersecurity Rule IA (Oct 2023)",
        "text": "Day 8 Compliance Note: SEC Investment Advisers Act \u00a7204A insider trading prevention + Oct 2023 SEC Cybersecurity Rule for Investment Advisers (Rel. IA-6383) requires annual Form ADV disclosure of material cybersecurity risks. Cloud iPaaS = third-party with access to client account data = material cybersecurity risk requiring Form ADV Part 2A disclosure. SEC Rule 206(4)-7 requires annual compliance program review \u2014 undisclosed cloud iPaaS in your recommendation workflow = \u00a7206(4)-7 deficiency. Form ADV annual amendment due within 90 days of fiscal year end (17 CFR \u00a7279.1). See stripeai.gumroad.com for n8n templates."
      },
      "name": "Day 8 Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1550,
        300
      ]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Route by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Tier": {
      "main": [
        [
          {
            "node": "Day 0 Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Day 0 Email": {
      "main": [
        [
          {
            "node": "Wait 4 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 4 Days": {
      "main": [
        [
          {
            "node": "Day 4 Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Day 4 Email": {
      "main": [
        [
          {
            "node": "Wait 4 More Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 4 More Days": {
      "main": [
        [
          {
            "node": "Day 8 Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 2: SEC/FINRA/Reg BI Compliance Deadline Tracker (6-hour poll)

{
  "name": "RoboAdvisor SaaS \u2014 SEC/FINRA/Reg BI Compliance Deadline Tracker",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "\nconst staticData = $getWorkflowStaticData('global');\nconst now = new Date();\nconst items = [];\nconst deadlines = [\n  {type: 'SEC_EXAM_DEFICIENCY_LETTER', label: 'SEC Examination Deficiency Response', hoursFromNow: 0, priority: 'P0', note: 'IMMEDIATE \u2014 SEC exam deficiency letter requires prompt response; no statutory deadline but examiner expects reply within days'},\n  {type: 'FINRA_CAUSE_EXAM', label: 'FINRA Cause Examination Response', hoursFromNow: 0, priority: 'P0', note: 'IMMEDIATE \u2014 FINRA cause exam initiated without advance notice'},\n  {type: 'FORM_ADV_ANNUAL_AMENDMENT', label: 'Form ADV Annual Amendment (90d fiscal year-end)', hoursFromNow: 2160, priority: 'P1', note: '17 CFR \u00a7279.1: annual amendment within 90 days of fiscal year-end'},\n  {type: 'REG_BI_BEST_INTEREST_REVIEW', label: 'Reg BI Best Interest Annual Program Review', hoursFromNow: 8760, priority: 'P1', note: 'SEC Reg BI (17 CFR \u00a7240.15l-1): annual review of policies/procedures'},\n  {type: 'FINRA_2111_SUITABILITY_AUDIT', label: 'FINRA Rule 2111 Suitability Annual Audit', hoursFromNow: 8760, priority: 'P1', note: 'FINRA Rule 2111: reasonable basis suitability for every recommendation \u2014 annual supervisory audit required'},\n  {type: 'SEC_CYBERSECURITY_ANNUAL_REPORT', label: 'SEC Cybersecurity Rule IA Annual Disclosure (Form ADV)', hoursFromNow: 2160, priority: 'P1', note: 'SEC Rel. IA-6383 (Oct 2023): annual Form ADV disclosure of material cybersecurity risks'},\n  {type: 'FORM_ADV_MATERIAL_CHANGE', label: 'Form ADV Material Change Amendment (prompt filing)', hoursFromNow: 168, priority: 'P1', note: 'Prompt amendment required for material changes \u2014 cloud iPaaS addition = material change'},\n  {type: 'SEC_206_4_7_ANNUAL_REVIEW', label: 'SEC Rule 206(4)-7 Annual Compliance Program Review', hoursFromNow: 8760, priority: 'P1', note: 'SEC Rule 206(4)-7: annual compliance program review; examiner checks documentation'},\n  {type: 'FINRA_4370_BCP_ANNUAL', label: 'FINRA Rule 4370 Business Continuity Plan Annual Review', hoursFromNow: 8760, priority: 'P1', note: 'FINRA Rule 4370: annual BCP review and update \u2014 cloud iPaaS dependencies must be documented'},\n  {type: 'REG_D_ACCREDITED_INVESTOR_REVIEW', label: 'Reg D Private Placement Accredited Investor Re-Verification', hoursFromNow: 8760, priority: 'P2', note: 'SEC Rule 506(c): accredited investor verification must be current; annual review for ongoing Reg D offerings'},\n  {type: 'SOC2_TYPE2_RENEWAL', label: 'SOC 2 Type II Audit Renewal', hoursFromNow: 8760, priority: 'P2', note: 'Annual SOC 2 Type II renewal \u2014 cloud iPaaS must appear as subservice organization or be removed'},\n  {type: 'ANNUAL_PENTEST', label: 'Annual Penetration Test', hoursFromNow: 8760, priority: 'P2', note: 'SEC cybersecurity rule + SOC 2 CC7.1: annual pen test of algorithmic trading infrastructure'},\n];\nconst key = `last_check_${now.toISOString().slice(0,10)}`;\nif (!staticData[key]) {\n  staticData[key] = true;\n  for (const d of deadlines) {\n    const due = new Date(now.getTime() + d.hoursFromNow * 3600000);\n    items.push({json: {...d, due_iso: due.toISOString(), checked_at: now.toISOString()}});\n  }\n}\nreturn items.length > 0 ? items : [{json: {status: 'already_checked_today'}}];\n"
      },
      "name": "Build Deadline Items",
      "type": "n8n-nodes-base.function",
      "position": [
        450,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"priority\"]}}",
              "operation": "equal",
              "value2": "P0"
            }
          ]
        }
      },
      "name": "Filter P0 Urgent",
      "type": "n8n-nodes-base.if",
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "to": "compliance@example.com",
        "subject": "=URGENT: {{$json[\"label\"]}} \u2014 {{$json[\"note\"]}}",
        "text": "={{$json[\"label\"]}}: {{$json[\"note\"]}}\n\nPriority: {{$json[\"priority\"]}}\nDue: {{$json[\"due_iso\"]}}\nType: {{$json[\"type\"]}}"
      },
      "name": "Send P0 Alert",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        850,
        200
      ]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Build Deadline Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Deadline Items": {
      "main": [
        [
          {
            "node": "Filter P0 Urgent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter P0 Urgent": {
      "main": [
        [
          {
            "node": "Send P0 Alert",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 3: SEC/FINRA API Health Monitor (15-minute intervals)

{
  "name": "RoboAdvisor SaaS \u2014 SEC/FINRA API Health Monitor (15-min)",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "\nconst staticData = $getWorkflowStaticData('global');\nconst endpoints = [\n  {name: 'sec_edgar_adviser_search', url: 'https://efts.sec.gov/LATEST/search-index?q=%22investment+adviser%22&dateRange=custom&startdt=2024-01-01', compliance: 'SEC EDGAR: Form ADV filing status and examination history (Investment Advisers Act \u00a7204)'},\n  {name: 'finra_brokercheck_api', url: 'https://api.brokercheck.finra.org/search/firm/0', compliance: 'FINRA BrokerCheck: firm registration status \u2014 FINRA Rule 2111 suitability, Rule 4370 BCP, Rule 3110 supervision'},\n  {name: 'sec_reg_bi_resource_center', url: 'https://www.sec.gov/regulation-best-interest', compliance: 'SEC Reg BI (17 CFR \u00a7240.15l-1): Best Interest standard for broker-dealer algorithmic recommendations \u2014 July 2020 effective'},\n  {name: 'finra_investor_alert_feed', url: 'https://www.finra.org/investors/alerts/rss', compliance: 'FINRA Investor Alerts: suitability enforcement actions relevant to robo-advisor platforms (Rule 2111)'},\n  {name: 'sec_cybersecurity_ia_rule', url: 'https://www.sec.gov/rules/2023/07/ia-6383', compliance: 'SEC Cybersecurity Rule for Investment Advisers (Rel. IA-6383, Oct 2023): Form ADV Part 2A cyber risk disclosure requirement'},\n];\nconst now = Date.now();\nconst results = [];\nfor (const ep of endpoints) {\n  const lastKey = `last_${ep.name}`;\n  if (!staticData[lastKey] || (now - staticData[lastKey]) > 900000) {\n    staticData[lastKey] = now;\n    results.push({json: ep});\n  }\n}\nreturn results.length > 0 ? results : [{json: {status: 'all_checked_within_window'}}];\n"
      },
      "name": "Dedup Check",
      "type": "n8n-nodes-base.function",
      "position": [
        450,
        300
      ]
    },
    {
      "parameters": {
        "url": "={{$json[\"url\"]}}",
        "options": {
          "timeout": 10000
        }
      },
      "name": "HTTP Check",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$json[\"statusCode\"]}}",
              "operation": "largerEqual",
              "value2": 500
            }
          ]
        }
      },
      "name": "Check Status",
      "type": "n8n-nodes-base.if",
      "position": [
        850,
        300
      ]
    },
    {
      "parameters": {
        "to": "alerts@example.com",
        "subject": "=ALERT: SEC/FINRA API Down \u2014 {{$node['Dedup Check'].json['name']}}",
        "text": "=Endpoint: {{$node['Dedup Check'].json['name']}}\nURL: {{$node['Dedup Check'].json['url']}}\nCompliance: {{$node['Dedup Check'].json['compliance']}}\nStatus: DOWN"
      },
      "name": "Send Alert",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1050,
        200
      ]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Dedup Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dedup Check": {
      "main": [
        [
          {
            "node": "HTTP Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check": {
      "main": [
        [
          {
            "node": "Check Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Status": {
      "main": [
        [
          {
            "node": "Send Alert",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 4: Reg BI/FINRA/SEC Incident Response Pipeline

{
  "name": "RoboAdvisor SaaS \u2014 Reg BI/FINRA/SEC Incident Response Pipeline",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "robo-incident",
        "responseMode": "lastNode",
        "options": {}
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "SEC_EXAMINATION_OPENED"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "FINRA_CAUSE_EXAM_INITIATED"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "REG_BI_SUITABILITY_COMPLAINT"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "FORM_ADV_MATERIAL_OMISSION_IDENTIFIED"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "FINRA_2111_SUITABILITY_FAILURE"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "SEC_CYBERSECURITY_INCIDENT"
            },
            {
              "value1": "={{$json[\"incident_type\"]}}",
              "operation": "equal",
              "value2": "REG_D_INVESTOR_QUALIFICATION_GAP"
            }
          ]
        }
      },
      "name": "Route Incident",
      "type": "n8n-nodes-base.switch",
      "position": [
        450,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "\nconst incidentType = $json['incident_type'];\nconst clocks = {\n  'SEC_EXAMINATION_OPENED': {clock: 'IMMEDIATE \u2014 SEC examiners present; no advance notice required by statute', priority: 'P0', action: 'Notify CEO + GC + CCO immediately. Pull all Form ADV filings, compliance manuals, algorithmic recommendation logs. Do NOT alter records.', statute: 'Investment Advisers Act \u00a7204; SEC Rules 204-2'},\n  'FINRA_CAUSE_EXAM_INITIATED': {clock: 'IMMEDIATE \u2014 FINRA Rule 8210 document production typically 10-15 BD', priority: 'P0', action: 'Notify CEO + CCO. Preserve all FINRA Rule 2111 suitability records, algorithmic recommendation logs, client communications. FINRA Rule 4370 BCP activation if operational disruption.', statute: 'FINRA Rules 8210, 2111, 3110'},\n  'REG_BI_SUITABILITY_COMPLAINT': {clock: '24h \u2014 internal escalation; FINRA arbitration if elected by client (FINRA Rule 12000)', priority: 'P0', action: 'Document recommendation basis (FINRA Rule 2111 reasonable basis). Pull algorithmic recommendation audit trail. GC review within 24h.', statute: 'SEC Reg BI 17 CFR \u00a7240.15l-1; FINRA Rule 2111'},\n  'FORM_ADV_MATERIAL_OMISSION_IDENTIFIED': {clock: '24h \u2014 prompt amendment required; \u00a7207 misrepresentation clock', priority: 'P0', action: 'File Form ADV amendment via IARD within 24h of discovery. Material = cloud iPaaS vendor access to client data, algorithmic strategy material change, cybersecurity incident.', statute: 'IAA \u00a7207; 17 CFR \u00a7279.1'},\n  'FINRA_2111_SUITABILITY_FAILURE': {clock: '24h \u2014 internal; FINRA arbitration 90d statute of limitations for clients', priority: 'P1', action: 'Document suitability analysis for flagged recommendation. Review algorithmic basis. Report to CCO. FINRA Rule 3110 supervision review.', statute: 'FINRA Rule 2111; FINRA Rule 3110'},\n  'SEC_CYBERSECURITY_INCIDENT': {clock: '48h \u2014 SEC Cybersecurity Rule IA (Rel. IA-6383): material incident requires disclosure in Form ADV; notify clients promptly', priority: 'P1', action: 'Assess materiality per Rel. IA-6383. File Form ADV amendment if material. Notify affected clients. CISO + GC + CCO.', statute: 'SEC Rel. IA-6383 (Oct 2023)'},\n  'REG_D_INVESTOR_QUALIFICATION_GAP': {clock: '30d \u2014 SEC Rule 506(c): retroactive disqualification of offering if investor not properly verified', priority: 'P1', action: 'Pull investor qualification records. Re-verify accredited investor status. Notify GC. Consider rescission offer if offering tainted.', statute: 'SEC Rule 506(c); Securities Act \u00a74(a)(2)'},\n};\nconst info = clocks[incidentType] || {clock: '72h internal review', priority: 'P2', action: 'Escalate to CCO', statute: 'General compliance'};\nreturn [{json: {...$json, ...info}}];\n"
      },
      "name": "Enrich Incident",
      "type": "n8n-nodes-base.function",
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "to": "ceo@example.com",
        "cc": "cco@example.com,gc@example.com",
        "subject": "=[{{$json[\"priority\"]}}] RoboAdvisor Compliance Incident: {{$json[\"incident_type\"]}}",
        "text": "=Incident: {{$json[\"incident_type\"]}}\nPriority: {{$json[\"priority\"]}}\nClock: {{$json[\"clock\"]}}\nRequired Action: {{$json[\"action\"]}}\nStatute: {{$json[\"statute\"]}}\nReported: {{$json[\"reported_at\"]}}"
      },
      "name": "Notify Team",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        850,
        300
      ]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Route Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Incident": {
      "main": [
        [
          {
            "node": "Enrich Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrich Incident": {
      "main": [
        [
          {
            "node": "Notify Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 5: Weekly Compliance KPI Report (CEO + CCO)

{
  "name": "RoboAdvisor SaaS \u2014 Weekly Compliance KPI Report (CEO + CCO)",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1"
            }
          ]
        }
      },
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "url": "https://internal-api.example.com/metrics/robo-compliance",
        "options": {}
      },
      "name": "Fetch KPIs",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        450,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "\nconst d = $json;\nreturn [{json: {\n  subject: `[RoboAdvisor Compliance KPI] Week of ${new Date().toISOString().slice(0,10)}`,\n  body: `WEEKLY COMPLIANCE KPI \u2014 ROBOADVISOR SAAS PLATFORM\n\nCUSTOMER TIERS (AUM managed):\n  ROBO_ADVISOR_SAAS: ${d.robo_advisor_accounts || 0} accounts | $${(d.robo_aum_usd || 0).toLocaleString()} AUM\n  DIGITAL_WEALTH_PLATFORM: ${d.digital_wealth_accounts || 0} accounts\n  MICRO_INVESTING_APP: ${d.micro_investing_accounts || 0} accounts\n  ESG_SCREENED_PORTFOLIO_SAAS: ${d.esg_accounts || 0} accounts\n  CRYPTO_WEALTH_SAAS: ${d.crypto_wealth_accounts || 0} accounts\n  RIA_TECHNOLOGY_VENDOR: ${d.ria_vendor_accounts || 0} accounts\n  WEALTHTECH_STARTUP: ${d.startup_accounts || 0} accounts\n  Total MRR: $${(d.total_mrr_usd || 0).toLocaleString()} (WoW: ${d.mrr_wow_pct || 0}%)\n\nCOMPLIANCE FLAGS IN CUSTOMER BASE:\n  REG_BI_BEST_INTEREST: ${d.reg_bi_customers || 0} customers\n  FORM_ADV_ANNUAL_AMENDMENT: ${d.form_adv_customers || 0} customers\n  FINRA_RULE_2111_SUITABILITY: ${d.finra_2111_customers || 0} customers\n  REG_D_PRIVATE_PLACEMENT: ${d.reg_d_customers || 0} customers\n  SEC_CYBERSECURITY_RULE_IA: ${d.sec_cyber_customers || 0} customers\n\nOPEN INCIDENTS (last 7 days):\n  SEC exam/inquiry: ${d.sec_exams_open || 0}\n  FINRA cause exams: ${d.finra_exams_open || 0}\n  Reg BI complaints: ${d.reg_bi_complaints_7d || 0}\n  Form ADV amendments pending: ${d.form_adv_amendments_pending || 0}\n  FINRA 2111 suitability failures: ${d.finra_2111_failures_7d || 0}\n  Cybersecurity incidents: ${d.sec_cyber_incidents_7d || 0}\n  Reg D investor qualification gaps: ${d.reg_d_gaps_7d || 0}\n\nUPCOMING DEADLINES (30 days):\n  Form ADV annual amendments due: ${d.form_adv_due_30d || 0}\n  Reg BI annual program reviews due: ${d.reg_bi_reviews_due_30d || 0}\n  SEC 206(4)-7 annual reviews due: ${d.sec_206_reviews_due_30d || 0}\n  SOC 2 renewals due: ${d.soc2_renewals_due_30d || 0}\n\nALGORITHMIC RECOMMENDATION METRICS:\n  Recommendations generated (7d): ${d.algo_recs_7d || 0}\n  FINRA 2111 reasonable-basis challenges: ${d.finra_challenges_7d || 0}\n  Reg BI best-interest documentation gaps: ${d.reg_bi_doc_gaps_7d || 0}\n\n\u2014 FlowKit n8n Compliance Automation | stripeai.gumroad.com`\n}}];\n"
      },
      "name": "Build KPI Report",
      "type": "n8n-nodes-base.function",
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "to": "ceo@example.com",
        "cc": "cco@example.com",
        "bcc": "gc@example.com,ciso@example.com",
        "subject": "={{$json[\"subject\"]}}",
        "text": "={{$json[\"body\"]}}"
      },
      "name": "Send KPI Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        850,
        300
      ]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch KPIs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch KPIs": {
      "main": [
        [
          {
            "node": "Build KPI Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build KPI Report": {
      "main": [
        [
          {
            "node": "Send KPI Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

FAQ

Q: Does Reg BI apply to my robo-advisor platform?
A: If your platform provides investment recommendations (including algorithmic ones) to retail customers, Reg BI applies. The 'Best Interest' standard requires you to document the basis for every recommendation. Your n8n automation that generates, routes, or logs those recommendations is part of your Reg BI compliance architecture.

Q: Do I need to disclose my automation platform in Form ADV?
A: If your cloud iPaaS has access to client data or is part of your algorithmic recommendation process, it is a material third party that should appear in Form ADV Part 2A under 'Other Business Activities' or the cybersecurity risk disclosure. Failure to disclose is a §207 material omission.

Q: What does 'reasonable basis' mean for algorithmic recommendations under FINRA Rule 2111?
A: For algorithmic advisors, the 'reasonable basis' requirement means your algorithm must have a documented investment thesis that can be produced during a FINRA examination. The execution logs of your algorithm are the documentation. If those logs are on a cloud iPaaS server, your documentation is outside your FINRA examination control.

Q: How does the SEC Cybersecurity Rule for Investment Advisers affect my Form ADV?
A: SEC Rel. IA-6383 (effective 2024) requires investment advisers to disclose material cybersecurity risks in Form ADV Part 2A. Any cloud system that has access to client data is a material cybersecurity risk that must be disclosed annually. A cloud iPaaS vendor breach or outage affecting client data is a reportable incident.


These workflows are available as part of the FlowKit n8n Automation Templates bundle. All 15 templates include full workflow JSON, implementation guides, and compliance context for your specific regulatory stack.

Top comments (0)