DEV Community

Alex Kane
Alex Kane

Posted on

n8n for Manufacturing/IndustrialTech SaaS Vendors: 5 Automations for OSHA §1904.39, EPA EPCRA §304, and ISO 9001 CAPA Compliance

If your SaaS platform is the system of record for EHS incidents, quality escapes, or chemical monitoring at manufacturing facilities, you are operating inside some of the fastest regulatory clocks in US industrial law.

EPA EPCRA Section 304: 15 minutes. If a facility handling Extremely Hazardous Substances (EHS) has a release, the Local Emergency Planning Committee (LEPC) and State Emergency Response Commission (SERC) must be notified within 15 minutes. If your industrial IoT platform polls sensor data every 5 minutes, you may detect the release between minute 1 and minute 5, then process it in the next polling cycle at minute 10. The LEPC notification that should fire at minute 15 may not even reach your customer's EHS team until minute 20.

OSHA 29 CFR §1904.39: 8 hours. Work-related fatalities must be reported to OSHA within 8 hours of employer knowledge. Not 8 hours from the incident — 8 hours from when the employer knew. If your EHS platform is the system of record and an incident comes in at 11 PM, the clock starts when it enters your system.

IATF 16949 §10.2.3: 24 hours. Automotive OEM customer-specific CAPA initial response requirements. Ford CS-1, GM BIQS, Stellantis Supplier Quality Manual — each with slightly different timing windows, all triggering scorecard penalties for missed response.

This article covers 5 n8n workflows (with full JSON) for the 7 core customer tiers in Manufacturing/IndustrialTech SaaS, organized around the regulatory clocks that create the highest incident-to-violation risk.

The 7 Manufacturing/IndustrialTech SaaS Customer Tiers

Tier Primary Regulatory Exposure Fastest Clock
DISCRETE_MANUFACTURING_SAAS OSHA §1904.39 + ISO 9001 CAPA + OSHA 300 Log 8h (fatality) / 24h (hospitalization)
PROCESS_MANUFACTURING_SAAS EPA EPCRA §304 + TSCA CDR + EPA Clean Air Act Title V 15 minutes (EHS release)
AUTOMOTIVE_OEM_SAAS IATF 16949 §10.2.3 customer CAPA + VDA 6.3 + PPAP 24h (customer quality escape)
AEROSPACE_DEFENSE_MANUFACTURING_SAAS AS9100 CAPA + ITAR 22 CFR Parts 120-130 + FAR/DFARS IMMEDIATE (safety of flight)
INDUSTRIAL_IOT_SAAS EPA EPCRA §304 + IEC 62443 OT security + NERC CIP 15 minutes (EHS release sensor)
QUALITY_MANAGEMENT_SAAS ISO 9001 §10.2 CAPA + FDA 21 CFR Part 820 + IATF 16949 24h (customer-specific CAPA)
MANUFACTURING_STARTUP_SAAS OSHA 29 CFR §1904 + ISO 9001 + REACH/RoHS baseline Variable by industry

The 3 Regulatory Clocks That Manufacturing SaaS Platforms Most Often Miss

1. EPA EPCRA Section 304 — The 15-Minute Release Notification

EPA EPCRA Section 304 (42 USC §11004) requires facilities to notify the LEPC and SERC within 15 minutes of a release of an Extremely Hazardous Substance (EHS) at or above the reportable quantity.

There are 355 EHS chemicals on the EPA Section 302 list, including common industrial chemicals: chlorine, ammonia, sulfuric acid, hydrogen fluoride, methyl isocyanate.

The polling architecture problem: industrial IoT platforms that poll sensor data every 5 minutes have a detection window of 0-5 minutes from release. Add processing time (1-2 minutes), routing to EHS manager (2-3 minutes), and the notification may leave the system at minute 8-10. That leaves 5-7 minutes for the EHS manager to reach LEPC and SERC. If anything slows the pipeline — a slow API response, a queue backup, a notification batch — the 15-minute window closes.

Self-hosted n8n processes webhook events from DCS/SCADA systems in real-time. When the sensor crosses the threshold, the n8n workflow fires immediately, not at the next polling cycle.

2. OSHA 29 CFR §1904.39 — Employer Knowledge, Not Incident Time

OSHA §1904.39(a)(1) requires employers to report work-related fatalities to OSHA within 8 hours of learning of the fatality.

The clock starts from employer knowledge, not from the incident time. If a fatality occurs at 11 PM on a Friday and the EHS platform flags it at 11:05 PM, the 8-hour clock runs to 7:05 AM Saturday. If the platform queues the incident for batch processing and the EHS team doesn't see the alert until 8 AM Saturday, the employer is already in breach.

The cloud SaaS problem: if your EHS platform routes incident data through a cloud automation layer that batches overnight, a fatality incident logged at 11 PM may not trigger the alert workflow until the next morning batch run — potentially after the 8-hour window closes.

3. IATF 16949 §10.2.3 — The Automotive Customer Scorecard Clock

IATF 16949:2016 §10.2.3 requires documented corrective action processes. But the binding clock for automotive tier suppliers is not IATF — it is customer-specific requirements:

  • Ford CS-1: initial response within 24 hours of quality escape notification
  • GM BIQS: initial containment within 24 hours, with documented evidence
  • Stellantis Supplier Quality Manual: 24-hour initial response required

If your QMS platform receives a customer portal notification and the CAPA timer starts, a missed 24-hour initial response shows up on the customer scorecard. Enough scorecard events = supplier rating downgrade = reduced business allocation.

The cloud routing problem: customer quality notifications often arrive via email or portal webhook. If your QMS platform routes these through a cloud iPaaS that batches every 30 minutes, a notification that arrives at 4:45 PM may not trigger the internal CAPA routing until 5:15 PM — and then hits end-of-business. The 24-hour clock still runs.

Workflow 1: Tier-Segmented Customer Onboarding Drip

Sends compliance-specific onboarding emails based on the customer's tier. Discrete manufacturing customers get the OSHA §1904.39 receipt-date trap. Process manufacturers get the EPA EPCRA §304 15-minute clock. Automotive OEM customers get the IATF 16949 customer-specific CAPA requirements.

{
  "name": "Manufacturing/IndustrialTech Onboarding Drip (Tier-Segmented)",
  "nodes": [
    {
      "id": "1",
      "name": "Webhook New Customer",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "mfg-industrialtech-onboard",
        "responseMode": "responseNode"
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Switch Route by Tier",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "DISCRETE_MANUFACTURING_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "PROCESS_MANUFACTURING_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "AUTOMOTIVE_OEM_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "AEROSPACE_DEFENSE_MANUFACTURING_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "INDUSTRIAL_IOT_SAAS"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.tier }}",
                    "operation": "equals",
                    "value2": "QUALITY_MANAGEMENT_SAAS"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Gmail Discrete Mfg Welcome OSHA CAPA",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "OSHA 29 CFR \u00a71904.39 8-Hour Fatality Clock + ISO 9001 CAPA \u2014 Your Discrete Manufacturing SaaS Onboarding Checklist",
        "message": "Welcome to FlowKit. As a discrete manufacturing SaaS vendor: (1) OSHA 29 CFR \u00a71904.39: work-related fatalities must be reported to OSHA within 8 hours. Inpatient hospitalizations, amputations, and eye losses must be reported within 24 hours. If your MES or EHS platform is the system of record for incident data, the clock starts when the incident is recorded \u2014 not when your compliance team reviews the queue. A cloud batch-sync cycle can burn hours of an 8-hour window before the report is even drafted. (2) ISO 9001:2015 \u00a710.2: CAPA processes must address root cause and prevent recurrence. If your platform manages CAPA workflows and a Critical nonconformance is logged, the audit trail showing response timing is ISO 9001 evidence. (3) OSHA 300 Log 29 CFR \u00a71904.29: must be retained 5 years. If your SaaS holds OSHA recordables, your data retention policy is an OSHA obligation."
      },
      "position": [
        800,
        50
      ]
    },
    {
      "id": "4",
      "name": "Gmail Process Mfg Welcome EPA EPCRA",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "EPA EPCRA Section 304 15-Minute Emergency Release Clock + TSCA CDR \u2014 Your Process Manufacturing SaaS Onboarding Checklist",
        "message": "As a process manufacturing SaaS vendor: (1) EPA EPCRA Section 304: if your platform monitors chemical release data for facilities handling Extremely Hazardous Substances (EHS), the facility must notify the Local Emergency Planning Committee (LEPC) and State Emergency Response Commission (SERC) within 15 minutes of a release. If your DCS integration or sensor data pipeline has a 5-minute polling cycle, you may deliver the alert 5-20 minutes after the release \u2014 inside or outside the 15-minute window depending on timing. Self-hosted n8n processes webhook events from DCS/SCADA in real-time. (2) TSCA Chemical Data Reporting (CDR) 40 CFR Part 711: manufacturers producing \u226525,000 lbs/year of a covered chemical must report every 4 years. If your platform tracks production volumes, your data is TSCA CDR evidence. (3) EPA Clean Air Act Title V permit: annual compliance certifications require production and emission data your platform may hold."
      },
      "position": [
        800,
        200
      ]
    },
    {
      "id": "5",
      "name": "Gmail Auto OEM Welcome IATF 16949",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "IATF 16949 Customer-Specific 24-Hour Initial Response + VDA 6.3 \u2014 Your Automotive OEM SaaS Onboarding Checklist",
        "message": "As an automotive OEM SaaS vendor: (1) IATF 16949:2016 \u00a710.2.3: customer-specific requirements for CAPA often mandate a 24-hour initial response to quality escape notifications. Ford CS-1, GM BIQS, Stellantis Supplier Quality Manual \u2014 each has different initial response time windows. If your QMS platform receives a customer quality notification and the CAPA timer starts, your workflow must route the right team within 24 hours or the customer scorecard is dinged. (2) VDA 6.3: audit evidence for process audits must show traceability of CAPA implementation. If your platform manages process audit data, the evidence must link to corrective action closure. (3) IATF \u00a78.5.1.1: production part approval process (PPAP) Level 3 requires dimension reports, material test results, and control plans in your quality records. Cloud iPaaS routing PPAP data is a customer-specific export control risk for defense-adjacent OEMs."
      },
      "position": [
        800,
        350
      ]
    },
    {
      "id": "6",
      "name": "Gmail IIoT Welcome NERC CIP Safety",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "NERC CIP + IEC 62443 OT Security + EPA EPCRA Real-Time Monitoring \u2014 Your Industrial IoT SaaS Onboarding Checklist",
        "message": "As an Industrial IoT SaaS vendor: (1) IEC 62443 OT Security: if your IIoT platform connects to operational technology (PLC, DCS, SCADA), it is in scope for OT cybersecurity assessment. Cloud routing of sensor data introduces an attack surface that IEC 62443-3-3 Security Level 2 prohibits for high-criticality process control environments. (2) NERC CIP-007 R2: for customers in the electric utility sector, your IIoT platform may be an Electronic Access Control or Monitoring System (EACMS) in scope for NERC CIP. Cloud-hosted EACMS components must be assessed for BES Cyber System Information (BCSI) exposure. (3) EPA EPCRA \u00a7304 real-time monitoring: IIoT platforms monitoring EHS chemical storage levels at Title III facilities have a 15-minute notification obligation on release detection. Polling-based architectures cannot reliably meet this clock."
      },
      "position": [
        800,
        500
      ]
    },
    {
      "id": "7",
      "name": "Wait 3 Days",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "resume": "timeInterval",
        "unit": "days",
        "value": 3
      },
      "position": [
        1050,
        300
      ]
    },
    {
      "id": "8",
      "name": "Gmail Day 4 Compliance Checkpoint",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "Day 4: Your Manufacturing Compliance Deadline Calendar",
        "message": "Your 4-day check-in. The n8n compliance workflow tracks: OSHA \u00a71904.39 8h fatality/24h hospitalization, EPA EPCRA \u00a7304 15-minute release notification, IATF 16949 24h customer CAPA response, ISO 9001 CAPA closure windows, TSCA CDR 4-year reporting, REACH SVHC 45-day notification, EU RoHS annual review, OSHA 300 Log 5-year retention."
      },
      "position": [
        1300,
        300
      ]
    },
    {
      "id": "9",
      "name": "Wait 4 More Days",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "resume": "timeInterval",
        "unit": "days",
        "value": 4
      },
      "position": [
        1550,
        300
      ]
    },
    {
      "id": "10",
      "name": "Gmail Day 8 Advanced CTA",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "={{ $('Webhook New Customer').item.json.email }}",
        "subject": "Day 8: Advanced Manufacturing Compliance Workflows Available",
        "message": "Next: the OSHA fatality/EPA emergency release incident pipeline (8 event types) and the manufacturing EHS API health monitor. Available in the FlowKit bundle: https://stripeai.gumroad.com"
      },
      "position": [
        1800,
        300
      ]
    }
  ],
  "connections": {
    "Webhook New Customer": {
      "main": [
        [
          {
            "node": "Switch Route by Tier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Route by Tier": {
      "main": [
        [
          {
            "node": "Gmail Discrete Mfg Welcome OSHA CAPA",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail Process Mfg Welcome EPA EPCRA",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail Auto OEM Welcome IATF 16949",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail Discrete Mfg Welcome OSHA CAPA",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail IIoT Welcome NERC CIP Safety",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail Auto OEM Welcome IATF 16949",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Discrete Mfg Welcome OSHA CAPA": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Process Mfg Welcome EPA EPCRA": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Auto OEM Welcome IATF 16949": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail IIoT Welcome NERC CIP Safety": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 3 Days": {
      "main": [
        [
          {
            "node": "Gmail Day 4 Compliance Checkpoint",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Day 4 Compliance Checkpoint": {
      "main": [
        [
          {
            "node": "Wait 4 More Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 4 More Days": {
      "main": [
        [
          {
            "node": "Gmail Day 8 Advanced CTA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 2: OSHA/EPA/ISO Manufacturing Compliance Deadline Tracker

Daily schedule (6 AM) reads a Google Sheet of compliance deadlines. Calculates days remaining for 10 clock types: OSHA fatality 8h, OSHA hospitalization 24h, IATF customer CAPA 24h, ISO 9001 CAPA root cause, REACH SVHC 45-day, FDA 820 CAPA closure, TSCA CDR 4-year, OSHA 300 Log 5-year retention, EU RoHS annual. Routes OSHA breaches to #ehs-critical immediately.

{
  "name": "OSHA/EPA/ISO Manufacturing Compliance Deadline Tracker",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Daily 6AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "triggerAtHour": 6
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Google Sheets Read Compliance Deadlines",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Deadlines!A2:L1000"
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Code Calculate Regulatory Clocks",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const now = new Date(); const results = []; for (const item of $input.all()) { const d = item.json; const deadline = new Date(d.deadline_date); const daysRemaining = Math.ceil((deadline - now) / (1000 * 60 * 60 * 24)); let severity; if (d.clock_type === 'OSHA_FATALITY_8H' && daysRemaining <= 0) { severity = 'OSHA_BREACH'; } else if (d.clock_type === 'OSHA_HOSPITALIZATION_24H' && daysRemaining <= 0) { severity = 'OSHA_BREACH'; } else if (d.clock_type === 'IATF_CUSTOMER_CAPA_24H' && daysRemaining <= 0) { severity = 'CRITICAL'; } else if (d.clock_type === 'IATF_CUSTOMER_CAPA_24H' && daysRemaining <= 1) { severity = 'CRITICAL'; } else if (d.clock_type === 'ISO9001_CAPA_ROOT_CAUSE' && daysRemaining <= 7) { severity = 'HIGH'; } else if (d.clock_type === 'REACH_SVHC_45DAY' && daysRemaining <= 7) { severity = 'HIGH'; } else if (d.clock_type === 'FDA_820_CAPA_CLOSURE' && daysRemaining <= 14) { severity = 'HIGH'; } else if (d.clock_type === 'TSCA_CDR_4YR' && daysRemaining <= 30) { severity = 'MEDIUM'; } else if (d.clock_type === 'OSHA_300_LOG_5YR' && daysRemaining <= 30) { severity = 'MEDIUM'; } else if (d.clock_type === 'EU_ROHS_ANNUAL' && daysRemaining <= 30) { severity = 'MEDIUM'; } else if (daysRemaining <= 2) { severity = 'CRITICAL'; } else if (daysRemaining <= 7) { severity = 'HIGH'; } else if (daysRemaining <= 30) { severity = 'MEDIUM'; } else { severity = 'OK'; } if (severity !== 'OK') { results.push({ json: { ...d, daysRemaining, severity, calculatedAt: now.toISOString() } }); } } return results;"
      },
      "position": [
        750,
        300
      ]
    },
    {
      "id": "4",
      "name": "Switch Route by Severity",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "OSHA_BREACH"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "CRITICAL"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "HIGH"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        1000,
        300
      ]
    },
    {
      "id": "5",
      "name": "Slack OSHA Breach Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#ehs-critical",
        "text": "OSHA REPORTING BREACH: {{ $json.customer_name }} \u2014 {{ $json.clock_type }} deadline MISSED. Facility: {{ $json.facility_name }} | Incident: {{ $json.incident_description }} | Required report: {{ $json.regulation_cite }}. Contact OSHA immediately: 1-800-321-OSHA. Document voluntary late filing."
      },
      "position": [
        1250,
        50
      ]
    },
    {
      "id": "6",
      "name": "Slack Critical Compliance Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#ehs-alerts",
        "text": "CRITICAL [{{ $json.clock_type }}] Customer: {{ $json.customer_name }} | Facility: {{ $json.facility_name }} | Deadline: {{ $json.deadline_date }} | {{ $json.daysRemaining }} days remaining | Regulation: {{ $json.regulation_cite }}"
      },
      "position": [
        1250,
        250
      ]
    },
    {
      "id": "7",
      "name": "Slack High Priority Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#ehs-alerts",
        "text": "HIGH [{{ $json.clock_type }}] Customer: {{ $json.customer_name }} | {{ $json.daysRemaining }} days to deadline {{ $json.deadline_date }}."
      },
      "position": [
        1250,
        450
      ]
    },
    {
      "id": "8",
      "name": "Gmail Daily Compliance Summary",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "ehs@yourcompany.com",
        "subject": "Manufacturing Compliance Deadline Summary {{ $now.format('YYYY-MM-DD') }}",
        "message": "Daily regulatory scan complete. Review Slack #ehs-critical for OSHA fatality/hospitalization, EPA EPCRA, and IATF 16949 items."
      },
      "position": [
        1250,
        650
      ]
    }
  ],
  "connections": {
    "Schedule Daily 6AM": {
      "main": [
        [
          {
            "node": "Google Sheets Read Compliance Deadlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read Compliance Deadlines": {
      "main": [
        [
          {
            "node": "Code Calculate Regulatory Clocks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Calculate Regulatory Clocks": {
      "main": [
        [
          {
            "node": "Switch Route by Severity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Route by Severity": {
      "main": [
        [
          {
            "node": "Slack OSHA Breach Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack Critical Compliance Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack High Priority Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack OSHA Breach Alert": {
      "main": [
        [
          {
            "node": "Gmail Daily Compliance Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 3: Manufacturing EHS & Quality API Health Monitor

Runs every 5 minutes. Checks MES API, EHS incident API, QMS CAPA API, and chemical sensor API. Each API downtime has a specific OSHA/EPA/IATF regulatory exposure documented in the alert: OSHA §1904.39 8h clock runs during EHS system outage; EPA EPCRA §304 15-minute notification clock runs unmonitored if sensor API is down.

{
  "name": "Manufacturing EHS & Quality API Health Monitor (5-Minute)",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Every 5 Min",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "value": 5
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "HTTP Check MES API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-mes.com/v1/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        100
      ]
    },
    {
      "id": "3",
      "name": "HTTP Check EHS Incident API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-ehs.com/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        250
      ]
    },
    {
      "id": "4",
      "name": "HTTP Check QMS CAPA API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-qms.com/v1/status",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        400
      ]
    },
    {
      "id": "5",
      "name": "HTTP Check Chemical Sensor API",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.your-sensor-platform.com/health",
        "method": "GET",
        "continueOnFail": true
      },
      "position": [
        500,
        550
      ]
    },
    {
      "id": "6",
      "name": "Code Evaluate API Health",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const checks = [\n  { name: 'MES API (OSHA 300 Log production records)', node: 'HTTP Check MES API', regulation: 'OSHA 29 CFR \u00a71904 \u2014 production stoppage data needed for fatality/injury investigation; 8h clock still runs during outage' },\n  { name: 'EHS Incident API (OSHA \u00a71904.39 reporting)', node: 'HTTP Check EHS Incident API', regulation: 'OSHA \u00a71904.39 \u2014 EHS system downtime during active incident = 8h fatality clock runs without incident capture' },\n  { name: 'QMS CAPA API (IATF 16949 24h response)', node: 'HTTP Check QMS CAPA API', regulation: 'IATF 16949 \u00a710.2.3 \u2014 CAPA system outage during customer quality escape = 24h response window missed' },\n  { name: 'Chemical Sensor API (EPA EPCRA \u00a7304 15-min)', node: 'HTTP Check Chemical Sensor API', regulation: 'EPA EPCRA \u00a7304 \u2014 sensor API downtime during EHS release = 15-minute LEPC notification clock runs unmonitored' }\n];\nconst results = [];\nfor (const check of checks) {\n  const resp = $node[check.node].json;\n  const isDown = resp.error || resp.statusCode >= 500 || !resp.statusCode;\n  if (isDown) {\n    results.push({ json: { api: check.name, regulation: check.regulation, status: 'DOWN', timestamp: new Date().toISOString() } });\n  }\n}\nreturn results.length > 0 ? results : [{ json: { status: 'ALL_OK', timestamp: new Date().toISOString() } }];"
      },
      "position": [
        800,
        300
      ]
    },
    {
      "id": "7",
      "name": "IF Any APIs Down",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.status }}",
              "operation": "notEquals",
              "value2": "ALL_OK"
            }
          ]
        }
      },
      "position": [
        1050,
        300
      ]
    },
    {
      "id": "8",
      "name": "Slack EHS API Down Alert",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#ehs-critical",
        "text": "MANUFACTURING API DOWN: {{ $json.api }}\nRegulation exposure: {{ $json.regulation }}\nTimestamp: {{ $json.timestamp }}\nAction: Notify EHS and Quality teams immediately. Manual incident logging required if EHS system is down during active incident."
      },
      "position": [
        1300,
        200
      ]
    }
  ],
  "connections": {
    "Schedule Every 5 Min": {
      "main": [
        [
          {
            "node": "HTTP Check MES API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check EHS Incident API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check QMS CAPA API",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Check Chemical Sensor API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check MES API": {
      "main": [
        [
          {
            "node": "Code Evaluate API Health",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check EHS Incident API": {
      "main": [
        [
          {
            "node": "Code Evaluate API Health",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check QMS CAPA API": {
      "main": [
        [
          {
            "node": "Code Evaluate API Health",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Check Chemical Sensor API": {
      "main": [
        [
          {
            "node": "Code Evaluate API Health",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Evaluate API Health": {
      "main": [
        [
          {
            "node": "IF Any APIs Down",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Any APIs Down": {
      "main": [
        [
          {
            "node": "Slack EHS API Down Alert",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 4: OSHA Fatality / EPA Emergency Release Incident Pipeline

Webhook receives EHS incident data. Classifies the regulatory clock based on incident type: WORK_RELATED_FATALITY (8-hour OSHA), INPATIENT_HOSPITALIZATION/AMPUTATION/EYE_LOSS (24-hour OSHA), EPA_EHS_RELEASE (15-minute EPCRA §304), IATF_CUSTOMER_QUALITY_ESCAPE (24-hour CAPA), FDA_820_CAPA_TRIGGERED (IMMEDIATE), REACH_SVHC_SUBSTANCE_IDENTIFIED (45-day). Routes to Slack with minutes remaining and regulation cite. Logs to Google Sheets.

{
  "name": "OSHA Fatality / EPA Emergency Release Incident Pipeline",
  "nodes": [
    {
      "id": "1",
      "name": "Webhook EHS Incident Received",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "mfg-ehs-incident",
        "responseMode": "responseNode"
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Code Classify Regulatory Clock",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const incident = $input.first().json;\nconst now = new Date();\nconst incidentTime = new Date(incident.incident_time || now);\nlet clockType, deadlineMinutes, regulationCite, alertChannel, severity, oshaPhone;\n\nif (incident.incident_type === 'WORK_RELATED_FATALITY') {\n  clockType = 'OSHA_FATALITY_8H';\n  deadlineMinutes = 8 * 60;\n  regulationCite = 'OSHA 29 CFR \u00a71904.39(a)(1) \u2014 8 hours from employer knowledge';\n  alertChannel = '#ehs-critical';\n  severity = 'CRITICAL';\n  oshaPhone = '1-800-321-OSHA';\n} else if (incident.incident_type === 'INPATIENT_HOSPITALIZATION' || incident.incident_type === 'AMPUTATION' || incident.incident_type === 'EYE_LOSS') {\n  clockType = 'OSHA_HOSPITALIZATION_24H';\n  deadlineMinutes = 24 * 60;\n  regulationCite = 'OSHA 29 CFR \u00a71904.39(a)(2) \u2014 24 hours from employer knowledge';\n  alertChannel = '#ehs-critical';\n  severity = 'CRITICAL';\n  oshaPhone = '1-800-321-OSHA';\n} else if (incident.incident_type === 'EPA_EHS_RELEASE') {\n  clockType = 'EPA_EPCRA_304_15MIN';\n  deadlineMinutes = 15;\n  regulationCite = 'EPA EPCRA Section 304 42 USC \u00a711004 \u2014 15 minutes from release of Extremely Hazardous Substance';\n  alertChannel = '#ehs-critical';\n  severity = 'CRITICAL';\n  oshaPhone = null;\n} else if (incident.incident_type === 'IATF_CUSTOMER_QUALITY_ESCAPE') {\n  clockType = 'IATF_CUSTOMER_CAPA_24H';\n  deadlineMinutes = 24 * 60;\n  regulationCite = 'IATF 16949 \u00a710.2.3 + customer-specific requirements (Ford CS-1/GM BIQS/Stellantis) \u2014 24h initial response';\n  alertChannel = '#quality-critical';\n  severity = 'HIGH';\n  oshaPhone = null;\n} else if (incident.incident_type === 'FDA_820_CAPA_TRIGGERED') {\n  clockType = 'FDA_820_CAPA_IMMEDIATE';\n  deadlineMinutes = 0;\n  regulationCite = 'FDA 21 CFR Part 820 \u00a7820.100 \u2014 CAPA must be initiated IMMEDIATELY for product quality escapes';\n  alertChannel = '#quality-critical';\n  severity = 'HIGH';\n  oshaPhone = null;\n} else if (incident.incident_type === 'REACH_SVHC_SUBSTANCE_IDENTIFIED') {\n  clockType = 'REACH_SVHC_45DAY';\n  deadlineMinutes = 45 * 24 * 60;\n  regulationCite = 'EU REACH SVHC Article 7(2) \u2014 45 days to notify ECHA if article contains SVHC >0.1% w/w AND >1 tonne/year';\n  alertChannel = '#regulatory-alerts';\n  severity = 'HIGH';\n  oshaPhone = null;\n} else {\n  clockType = 'OSHA_RECORDABLE_INCIDENT';\n  deadlineMinutes = 7 * 24 * 60;\n  regulationCite = 'OSHA 29 CFR \u00a71904.29 \u2014 recordable incident must be logged within 7 calendar days';\n  alertChannel = '#ehs-alerts';\n  severity = 'MEDIUM';\n  oshaPhone = null;\n}\n\nconst deadlineDate = new Date(incidentTime.getTime() + deadlineMinutes * 60 * 1000);\nconst minutesRemaining = Math.round((deadlineDate - now) / 60000);\n\nreturn [{ json: { ...incident, clockType, deadlineMinutes, deadlineDate: deadlineDate.toISOString(), minutesRemaining, regulationCite, alertChannel, severity, oshaPhone, incidentTime: incidentTime.toISOString(), classifiedAt: now.toISOString() } }];"
      },
      "position": [
        500,
        300
      ]
    },
    {
      "id": "3",
      "name": "Switch Route by Severity",
      "type": "n8n-nodes-base.switch",
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "CRITICAL"
                  }
                ]
              }
            },
            {
              "conditions": {
                "string": [
                  {
                    "value1": "={{ $json.severity }}",
                    "operation": "equals",
                    "value2": "HIGH"
                  }
                ]
              }
            }
          ]
        }
      },
      "position": [
        750,
        300
      ]
    },
    {
      "id": "4",
      "name": "Slack CRITICAL EHS Incident",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "={{ $json.alertChannel }}",
        "text": "CRITICAL EHS INCIDENT\nType: {{ $json.clockType }}\nRegulation: {{ $json.regulationCite }}\nDeadline: {{ $json.deadlineDate }} ({{ $json.minutesRemaining }} minutes remaining)\nFacility: {{ $json.facility_name }} | Customer: {{ $json.customer_name }}\nIncident: {{ $json.incident_description }}\nIncident time: {{ $json.incidentTime }}\n{{ $json.oshaPhone ? 'OSHA hotline: ' + $json.oshaPhone : '' }}"
      },
      "position": [
        1000,
        100
      ]
    },
    {
      "id": "5",
      "name": "Gmail EHS/Quality Alert",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "ehs@yourcompany.com",
        "subject": "URGENT: {{ $json.clockType }} \u2014 {{ $json.minutesRemaining }} Minutes Remaining | Incident: {{ $json.incident_description }}",
        "message": "EHS/Quality action required.\n\nClock type: {{ $json.clockType }}\nRegulation: {{ $json.regulationCite }}\nIncident time: {{ $json.incidentTime }}\nDeadline: {{ $json.deadlineDate }}\nMinutes remaining: {{ $json.minutesRemaining }}\nFacility: {{ $json.facility_name }}\nCustomer: {{ $json.customer_name }}\nIncident: {{ $json.incident_description }}\n\nThis record has been logged with timestamp. Self-hosted n8n instance ensures incident data remains within your infrastructure for audit purposes."
      },
      "position": [
        1000,
        300
      ]
    },
    {
      "id": "6",
      "name": "Google Sheets Log Incident",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "append",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Incidents!A:M",
        "data": {
          "values": [
            [
              "={{ $json.customer_name }}",
              "={{ $json.facility_name }}",
              "={{ $json.incident_type }}",
              "={{ $json.clockType }}",
              "={{ $json.incidentTime }}",
              "={{ $json.deadlineDate }}",
              "={{ $json.minutesRemaining }}",
              "={{ $json.regulationCite }}",
              "={{ $json.severity }}",
              "OPEN",
              "={{ $json.classifiedAt }}",
              "",
              ""
            ]
          ]
        }
      },
      "position": [
        1000,
        500
      ]
    },
    {
      "id": "7",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "responseCode": 200,
        "responseData": "{\"status\":\"logged\",\"clockType\":\"{{ $json.clockType }}\",\"deadline\":\"{{ $json.deadlineDate }}\",\"minutesRemaining\":{{ $json.minutesRemaining }},\"regulationCite\":\"{{ $json.regulationCite }}\"}"
      },
      "position": [
        1000,
        700
      ]
    }
  ],
  "connections": {
    "Webhook EHS Incident Received": {
      "main": [
        [
          {
            "node": "Code Classify Regulatory Clock",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Classify Regulatory Clock": {
      "main": [
        [
          {
            "node": "Switch Route by Severity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch Route by Severity": {
      "main": [
        [
          {
            "node": "Slack CRITICAL EHS Incident",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail EHS/Quality Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack CRITICAL EHS Incident": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail EHS/Quality Alert": {
      "main": [
        [
          {
            "node": "Google Sheets Log Incident",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Log Incident": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Workflow 5: Weekly Manufacturing KPI Dashboard

Runs Monday 8 AM. Pulls all open EHS incidents and compliance deadlines from Google Sheets. Generates a color-coded HTML table with 7 KPIs: OSHA fatality reports open, OSHA hospitalization reports open, EPA EPCRA release notifications open, IATF customer CAPA responses open, REACH SVHC notifications due, TSCA CDR reports due, EU RoHS annual reviews due. Emails to EHS Director + COO BCC with Quality Director.

{
  "name": "Weekly Manufacturing/IndustrialTech KPI Dashboard",
  "nodes": [
    {
      "id": "1",
      "name": "Schedule Monday 8AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1"
            }
          ]
        }
      },
      "position": [
        250,
        300
      ]
    },
    {
      "id": "2",
      "name": "Google Sheets Read EHS Incidents",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Incidents!A2:M1000"
      },
      "position": [
        500,
        200
      ]
    },
    {
      "id": "3",
      "name": "Google Sheets Read Compliance Deadlines",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "getAll",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Deadlines!A2:L1000"
      },
      "position": [
        500,
        400
      ]
    },
    {
      "id": "4",
      "name": "Code Build KPI Report",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const incidents = $('Google Sheets Read EHS Incidents').all().map(i => i.json);\nconst deadlines = $('Google Sheets Read Compliance Deadlines').all().map(i => i.json);\nconst now = new Date();\n\nconst oshaFatalityOpen = incidents.filter(e => e.clock_type === 'OSHA_FATALITY_8H' && e.status === 'OPEN').length;\nconst oshaHospOpen = incidents.filter(e => e.clock_type === 'OSHA_HOSPITALIZATION_24H' && e.status === 'OPEN').length;\nconst epaEpcraOpen = incidents.filter(e => e.clock_type === 'EPA_EPCRA_304_15MIN' && e.status === 'OPEN').length;\nconst iatfCapaOpen = incidents.filter(e => e.clock_type === 'IATF_CUSTOMER_CAPA_24H' && e.status === 'OPEN').length;\nconst reachSvhcDue = deadlines.filter(d => d.clock_type === 'REACH_SVHC_45DAY' && Math.ceil((new Date(d.deadline_date) - now) / 864e5) <= 14).length;\nconst tscaCdrDue = deadlines.filter(d => d.clock_type === 'TSCA_CDR_4YR' && Math.ceil((new Date(d.deadline_date) - now) / 864e5) <= 60).length;\nconst euRohsDue = deadlines.filter(d => d.clock_type === 'EU_ROHS_ANNUAL' && Math.ceil((new Date(d.deadline_date) - now) / 864e5) <= 30).length;\n\nconst html = `<h2>Weekly Manufacturing/IndustrialTech Compliance KPI Dashboard</h2><p>Week ending: ${now.toISOString().split('T')[0]}</p><table border='1'><tr><th>Metric</th><th>Count</th><th>Regulation</th></tr><tr><td>OSHA Fatality Reports Open</td><td style='color:${oshaFatalityOpen>0?'red':'green'}'>${oshaFatalityOpen}</td><td>OSHA 29 CFR \u00a71904.39(a)(1) \u2014 8h</td></tr><tr><td>OSHA Hospitalization/Amputation Reports Open</td><td style='color:${oshaHospOpen>0?'red':'green'}'>${oshaHospOpen}</td><td>OSHA 29 CFR \u00a71904.39(a)(2) \u2014 24h</td></tr><tr><td>EPA EPCRA \u00a7304 Release Notifications Open</td><td style='color:${epaEpcraOpen>0?'red':'green'}'>${epaEpcraOpen}</td><td>EPA EPCRA Section 304 \u2014 15min</td></tr><tr><td>IATF 16949 Customer CAPA Responses Open</td><td style='color:${iatfCapaOpen>0?'orange':'green'}'>${iatfCapaOpen}</td><td>IATF 16949 \u00a710.2.3 \u2014 24h</td></tr><tr><td>REACH SVHC Notifications Due \u226414 Days</td><td style='color:${reachSvhcDue>0?'orange':'green'}'>${reachSvhcDue}</td><td>EU REACH Art.7(2) \u2014 45 days</td></tr><tr><td>TSCA CDR Reports Due \u226460 Days</td><td style='color:${tscaCdrDue>0?'orange':'green'}'>${tscaCdrDue}</td><td>TSCA CDR 40 CFR Part 711 \u2014 4yr</td></tr><tr><td>EU RoHS Annual Reviews Due \u226430 Days</td><td style='color:${euRohsDue>0?'orange':'green'}'>${euRohsDue}</td><td>EU RoHS 2011/65/EU \u2014 annual</td></tr></table><p>Self-hosted n8n ensures all EHS incident data, CAPA records, and regulatory evidence remain within your infrastructure \u2014 not routed through cloud automation vendor logs discoverable under OSHA inspection, EPA enforcement, or customer audit.</p>`;\n\nreturn [{ json: { html, oshaFatalityOpen, oshaHospOpen, epaEpcraOpen, iatfCapaOpen, reachSvhcDue, tscaCdrDue, euRohsDue } }];"
      },
      "position": [
        800,
        300
      ]
    },
    {
      "id": "5",
      "name": "Gmail Weekly KPI to COO and EHS Director",
      "type": "n8n-nodes-base.gmail",
      "parameters": {
        "to": "ehs@yourcompany.com",
        "bcc": "coo@yourcompany.com,quality@yourcompany.com",
        "subject": "Weekly Manufacturing Compliance KPI Dashboard \u2014 {{ $now.format('YYYY-MM-DD') }}",
        "message": "={{ $json.html }}",
        "messageType": "html"
      },
      "position": [
        1100,
        300
      ]
    }
  ],
  "connections": {
    "Schedule Monday 8AM": {
      "main": [
        [
          {
            "node": "Google Sheets Read EHS Incidents",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets Read Compliance Deadlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read EHS Incidents": {
      "main": [
        [
          {
            "node": "Code Build KPI Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Read Compliance Deadlines": {
      "main": [
        [
          {
            "node": "Code Build KPI Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Build KPI Report": {
      "main": [
        [
          {
            "node": "Gmail Weekly KPI to COO and EHS Director",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

The Self-Hosting Argument for Manufacturing/IndustrialTech SaaS

When your platform is the system of record for OSHA incidents, EPA release data, or IATF CAPA evidence, the choice between cloud iPaaS and self-hosted n8n has direct regulatory consequences:

Risk Cloud iPaaS Self-Hosted n8n
EPA EPCRA §304 15-min clock Polling delay may push past 15 minutes Webhook triggers in real-time
OSHA §1904.39 8h fatality Batch processing delays employer notification Immediate incident capture
IATF 16949 customer CAPA Cloud routing adds latency to 24h window Direct webhook from QMS
OSHA 300 Log 5-year retention Vendor data retention policy controls records You control retention
EPA inspection discovery Cloud vendor logs subpoenable Self-hosted = no vendor to subpoena
REACH SVHC chemical data Product composition data routed externally Stays in your infrastructure
ISO 9001 audit trail Vendor access logs in audit scope No third-party access

The strongest argument for self-hosted n8n in manufacturing SaaS is the EPA EPCRA §304 15-minute clock. No cloud automation platform with a polling architecture can reliably guarantee a notification fires within 15 minutes of a chemical release detection. Self-hosted n8n with a direct DCS/SCADA webhook integration can.


These workflows and 10+ more are available at FlowKit on Gumroad — ready-to-import n8n JSON for Manufacturing/IndustrialTech SaaS compliance automation.

Top comments (0)