If you sell SaaS into food manufacturing, precision agriculture, food safety testing, organic certification, or beverage compliance, your customers operate under some of the most precise mandatory notification clocks in any regulated industry.
FDA FSMA CCP deviations require immediate corrective action. USDA HACCP critical limit breaches require documentation within the same production shift. EPA FIFRA adverse effects reports are due within 15 calendar days of receipt — no extension available. USDA NOP organic certificate suspension is effective immediately upon USDA AMS finding.
Your platform holds the records that FDA, USDA FSIS, EPA, and TTB investigators request first. This article shows five n8n workflow architectures for AgriTech/FoodTech SaaS vendors — tier-segmented onboarding, compliance deadline tracking, API health monitoring, incident pipeline, and KPI reporting.
All workflow JSON is free. Advanced templates (including Traceability Rule 24-hour records pull automation, FSVP supplier verification workflows, and EU MIC microbiological criteria batch reports) are at FlowKit — n8n Automation Templates.
The Regulatory Landscape
Customer tiers this template covers
| Tier | Primary Compliance Scope |
|---|---|
FOOD_MANUFACTURING_SAAS_VENDOR |
FDA FSMA 21 CFR §117 HARPC + USDA HACCP 9 CFR §417 + FSMA §204 Traceability |
AGTECH_PRECISION_FARMING_SAAS |
EPA FIFRA §6(a)(2) adverse effects + USDA NOP 7 CFR §205 organic + USDA FSA records |
FOOD_SAFETY_TESTING_SAAS |
ISO/IEC 17025 + EU Regulation 2073/2004 MIC + USDA FSIS Listeria §430.4 |
ORGANIC_CERTIFICATION_SAAS |
USDA NOP §205.403 annual inspection + §205.662 IMMEDIATE suspension |
BEVERAGE_SPIRITS_COMPLIANCE_SAAS |
TTB 27 CFR §19 records 3yr + COLA + FDA food facility biennial registration |
SUPPLY_CHAIN_FOOD_TRACEABILITY_SAAS |
FSMA §204 Traceability Rule — 24h FDA records pull + FSVP 21 CFR §1.510 |
FOODTECH_STARTUP |
FDA food facility registration + FSMA baseline |
Compliance flags
FSMA_PREVENTIVE_CONTROLS_SUBJECT # 21 CFR §117 HARPC applies
USDA_HACCP_REQUIRED # 9 CFR §417 HACCP plan required
EPA_FIFRA_PESTICIDE_REGISTERED # FIFRA §6(a)(2) 15-day adverse effects
USDA_NOP_ORGANIC_CERTIFIED # 7 CFR §205 organic certificate active
EU_MIC_APPLICABLE # Reg (EC) 2073/2004 microbiological criteria
TTB_BEVERAGE_PERMIT_HOLDER # 27 CFR §19 spirits/wine/beer permit
SOC2_REQUIRED # Enterprise food/agri procurement requirement
The Self-Hosting Argument for AgriTech/FoodTech SaaS
Before the workflows: why architecture matters for your enterprise food and agriculture customers.
FDA FSMA records chain-of-custody. 21 CFR §117.305 requires HARPC records to be retained for 2 years and made available to FDA upon oral or written request at the beginning of an inspection. When your FSMA monitoring workflow runs through a cloud iPaaS, the deviation records live on a third-party server. FDA can subpoena your automation vendor independently — your QA team may learn about the document request after it's already been fulfilled.
USDA HACCP monitoring continuity. 9 CFR §417.3(a) requires IMMEDIATE corrective action when a critical limit is not met. FSIS inspectors verify HACCP monitoring records in real time during verification visits. A cloud automation downtime event during production = monitoring gap = potential FSIS enforcement action regardless of whether an actual CCP deviation occurred.
EPA FIFRA adverse effects. FIFRA §6(a)(2) + 40 CFR §159.195: pesticide registrants must report information suggesting unreasonable adverse effects within 15 calendar days. The clock starts at receipt of the reportable information — not at confirmation, not at internal review. Your automation platform receiving adverse effects data is the legal receipt point. Cloud iPaaS outage = clock still runs.
FSMA §204 Traceability Rule — 24-hour records pull. Effective January 20, 2026: FDA can require traceability records for High-Risk Foods to be provided within 24 hours of request. Your traceability platform is the records system. Cloud iPaaS in the data path = FDA can independently serve the vendor with a records request before your compliance team is notified.
TTB records custody. 27 CFR §19.580: distilled spirits production and storage records must be retained for 3 years. TTB examination (audit) can reach any record system used in operations. TTB special agents are authorized to examine all records. Your platform's TTB-related data in a cloud iPaaS = independent subpoena target.
Self-hosted n8n on AWS, Azure, GCP, or on-premises keeps all HARPC monitoring data, HACCP deviation records, FIFRA adverse effects workflows, organic certification audit trails, and TTB production records within your controlled system boundary. FDA, USDA, EPA, and TTB requests are directed to you — not your automation vendor.
Workflow 1: Tier-Segmented AgriTech/FoodTech Customer Onboarding
Webhook → Code (classify tier + inject compliance context) → Gmail (Day 0 welcome) → Sheets (log).
Each tier receives Day 0 onboarding with its specific regulatory context: FOOD_MANUFACTURING gets FDA FSMA §117 HARPC records chain-of-custody brief and USDA HACCP §417 monitoring continuity note; AGTECH_PRECISION_FARMING gets EPA FIFRA §6(a)(2) 15-day adverse effects clock and USDA NOP §205.403 annual inspection note; FOOD_SAFETY_TESTING gets EU Regulation 2073/2004 microbiological criteria and ISO/IEC 17025 traceability note; ORGANIC_CERTIFICATION gets USDA NOP §205.662 IMMEDIATE suspension risk; BEVERAGE_SPIRITS gets TTB §19.580 3-year records retention and COLA workflow note.
{
"name": "AgriTech/FoodTech Tier-Segmented Customer Onboarding",
"nodes": [
{
"id": "1",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": {
"path": "foodtech-signup",
"responseMode": "lastNode"
},
"position": [
240,
300
]
},
{
"id": "2",
"name": "Code - Classify Tier",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const data = $input.first().json;\nconst tier = data.customer_tier || 'FOODTECH_STARTUP';\nconst msgs = {\n 'FOOD_MANUFACTURING_SAAS_VENDOR': 'Note: FDA FSMA 21 CFR \u00a7117 Hazard Analysis and Risk-Based Preventive Controls (HARPC) \u2014 your platform processes HARPC records that FDA inspectors request on-site. Records must be retained 2 years (\u00a7117.305). Cloud iPaaS holding HARPC monitoring data creates a chain-of-custody gap: FDA can subpoena your automation vendor independently before your QA team knows. USDA HACCP 9 CFR \u00a7417.5 records: monitoring records 1 year, corrective action records 1 year, verification records 1 year, HACCP plan records life of operation. CCP deviation requires IMMEDIATE corrective action (\u00a7417.3(a)) \u2014 no cloud-down exception.',\n 'AGTECH_PRECISION_FARMING_SAAS': 'Note: EPA FIFRA 7 USC \u00a7136 \u2014 pesticide adverse effects reports due within 15 calendar days of receiving information (FIFRA \u00a76(a)(2), 40 CFR \u00a7159.195). Cloud automation holding adverse effects data outside your reporting system = EPA can reach your vendor independently. USDA NOP 7 CFR \u00a7205.403 organic inspection: annual on-site inspection required \u2014 your platform stores application records that organic certifiers review. USDA FSA and NRCS conservation program data: 3-year records retention for payment eligibility disputes.',\n 'FOOD_SAFETY_TESTING_SAAS': 'Note: FDA FSMA \u00a7117 + USDA FSIS 9 CFR \u00a7430.4 (Listeria monocytogenes control in RTE environments): positive Listeria finding in ready-to-eat product area = IMMEDIATE corrective action + FSIS notification. Your testing platform is the instrument record. EU Regulation 2073/2004 microbiological criteria: food safety criteria violations (Salmonella/E.coli O157:H7 absence in 25g, Listeria <100 cfu/g in RTE at end of shelf life) require immediate investigation. ISO/IEC 17025 laboratory accreditation requires traceable calibration records \u2014 cloud iPaaS = external audit target.',\n 'ORGANIC_CERTIFICATION_SAAS': 'Note: USDA NOP 7 CFR \u00a7205.403 annual inspection \u2014 certifying agents conduct on-site inspections annually. Your platform holds the application history, input approval records, and OSP (Organic System Plan) that the certifier reviews. \u00a7205.662 certification suspension is IMMEDIATE upon evidence of fraud or prohibited substance use. NOP complaints are investigated by USDA AMS \u2014 your certification data is a federal record. California Organic Products Act and state equivalency programs add additional recordkeeping layers.',\n 'BEVERAGE_SPIRITS_COMPLIANCE_SAAS': 'Note: TTB 27 CFR \u00a719 distilled spirits \u2014 production and storage records retention 3 years (\u00a719.580). Beverage alcohol tax: excise tax liability attaches at production, not sale. TTB examination (audit) can reach any records in your system. Craft brewery: TTB Brewer\\'s Report of Operations quarterly. Winery: TTB Wine Premises Operations Report quarterly. COLA (Certificate of Label Approval) required before any new label ships \u2014 TTB online system. FDA Food Facility Registration 21 USC \u00a7350d: biennial renewal required October 1\u2013December 31 even years.',\n 'SUPPLY_CHAIN_FOOD_TRACEABILITY_SAAS': 'Note: FDA FSMA Section 204 Food Traceability Rule (21 CFR Part 1, Subpart S) \u2014 effective January 20, 2026: required traceability records for High-Risk Foods (leafy greens, tomatoes, sprouts, melons, shell eggs, nut butters, certain fish) must be provided to FDA within 24 hours of request. FSMA Foreign Supplier Verification Program (FSVP) 21 CFR \u00a71.510: importers must verify foreign suppliers \u2014 records 2 years. Your traceability platform is the primary evidence trail for FDA investigations.',\n 'FOODTECH_STARTUP': 'Welcome to FlowKit. Your onboarding is configured. Contact us anytime.'\n};\nreturn [{json: {customer_id: data.customer_id, email: data.email, company: data.company, tier, onboarding_note: msgs[tier] || msgs['FOODTECH_STARTUP']}}];"
},
"position": [
460,
300
]
},
{
"id": "3",
"name": "Gmail - Day 0 Welcome",
"type": "n8n-nodes-base.gmail",
"parameters": {
"operation": "send",
"to": "={{$json.email}}",
"subject": "={{$json.company}} is live on FlowKit \u2014 FDA FSMA/USDA HACCP/EPA FIFRA compliance automations ready",
"message": "={{$json.onboarding_note}}\n\nYour FlowKit workflows are ready to activate."
},
"position": [
680,
300
]
},
{
"id": "4",
"name": "Sheets - Log Onboarding",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "append",
"spreadsheetId": "YOUR_SHEET_ID",
"range": "Onboarding!A:H",
"dataMode": "autoMapInputData"
},
"position": [
900,
300
]
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Code - Classify Tier",
"type": "main",
"index": 0
}
]
]
},
"Code - Classify Tier": {
"main": [
[
{
"node": "Gmail - Day 0 Welcome",
"type": "main",
"index": 0
}
]
]
},
"Gmail - Day 0 Welcome": {
"main": [
[
{
"node": "Sheets - Log Onboarding",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 2: FDA FSMA/USDA HACCP/EPA FIFRA/NOP Compliance Deadline Tracker
Daily schedule → Sheets (read compliance calendar) → Code (check deadlines, classify OVERDUE/CRITICAL/WARNING/NOTICE) → IF → Slack (#food-compliance) + Gmail (QA/compliance team) + Sheets (deadline log).
12 deadline types tracked:
| Deadline Type | Period | Fastest Penalty |
|---|---|---|
FSMA_HARPC_REANALYSIS_3YEAR |
Every 3 years or significant change | FDA warning letter |
USDA_HACCP_ANNUAL_REASSESSMENT |
Annual | FSIS plant suspension |
EPA_FIFRA_REGISTRATION_REVIEW_15YEAR |
Every 15 years (40 CFR §155.40) | $5,500/day FIFRA §14 |
USDA_NOP_ORGANIC_ANNUAL_INSPECTION |
Annual | IMMEDIATE suspension §205.662 |
FDA_FOOD_FACILITY_REGISTRATION_BIENNIAL |
Biennial Oct-Dec even years | FDA import alert |
FSMA_FSVP_SUPPLIER_VERIFICATION_ANNUAL |
Annual + 2yr records | FDA import refusal |
EPA_FIFRA_ADVERSE_EFFECTS_15DAY |
15 calendar days from receipt | $5,500/day |
TTB_BEVERAGE_ANNUAL_PERMIT_RENEWAL |
Annual operations report | Permit revocation |
EU_MIC_FOOD_SAFETY_ANNUAL_AUDIT |
Annual + event-driven | EU market access revocation |
USDA_FSIS_ANNUAL_VERIFICATION |
Annual + ongoing | Plant suspension |
SOC2_TYPE2_ANNUAL |
Annual | Contract breach |
ANNUAL_PENTEST |
Annual | Compliance gap / contract breach |
{
"name": "FDA FSMA/USDA HACCP/EPA FIFRA/NOP Compliance Deadline Tracker",
"nodes": [
{
"id": "1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 7 * * *"
}
]
}
},
"position": [
240,
300
]
},
{
"id": "2",
"name": "Sheets - Compliance Calendar",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "readRows",
"spreadsheetId": "YOUR_SHEET_ID",
"range": "ComplianceDeadlines!A:J"
},
"position": [
460,
300
]
},
{
"id": "3",
"name": "Code - Check Deadlines",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const rows = $input.all().map(i => i.json);\nconst today = new Date();\nconst alerts = [];\n\nconst deadlineTypes = {\n 'FSMA_HARPC_REANALYSIS_3YEAR': {label: 'FDA FSMA HARPC Reanalysis', period: 'EVERY 3 YEARS or significant change', penalty: 'FDA warning letter / consent decree', note: '21 CFR \u00a7117.170: hazard analysis and risk-based preventive controls must be reanalyzed every 3 years or when significant change in food or facility. Cloud iPaaS holding HARPC records creates chain-of-custody gap during FDA inspection.'},\n 'USDA_HACCP_ANNUAL_REASSESSMENT': {label: 'USDA HACCP Annual Plan Reassessment', period: 'ANNUAL', penalty: 'USDA FSIS enforcement action / plant closure', note: '9 CFR \u00a7417.4(a)(3): HACCP plan must be reassessed at least annually. Reassessment records: 1 year minimum. Positive Listeria in RTE = IMMEDIATE corrective action regardless of calendar.'},\n 'EPA_FIFRA_REGISTRATION_REVIEW_15YEAR': {label: 'EPA FIFRA Pesticide Registration Review', period: 'EVERY 15 YEARS (40 CFR \u00a7155.40)', penalty: 'Registration cancellation / $5,500/day FIFRA \u00a714', note: 'EPA FIFRA \u00a73(g): all registered pesticides undergo registration review every 15 years. Adverse effects reports: 15 calendar days FIFRA \u00a76(a)(2) from receipt of reportable information.'},\n 'USDA_NOP_ORGANIC_ANNUAL_INSPECTION': {label: 'USDA NOP Annual Organic Inspection', period: 'ANNUAL', penalty: 'Suspension/revocation of organic certificate', note: '7 CFR \u00a7205.403: certifying agent must conduct annual on-site inspection. OSP (Organic System Plan) must be current. Prohibited substance use = IMMEDIATE suspension \u00a7205.662.'},\n 'FDA_FOOD_FACILITY_REGISTRATION_BIENNIAL': {label: 'FDA Food Facility Registration Renewal', period: 'BIENNIAL Oct 1 - Dec 31 even years', penalty: 'FDA import alert / detention without physical examination', note: '21 USC \u00a7350d: food facility registration must be renewed every other year, October 1 through December 31 of each even-numbered year. Failure = facility\\'s food may be detained.'},\n 'FSMA_FSVP_SUPPLIER_VERIFICATION_ANNUAL': {label: 'FSMA FSVP Foreign Supplier Verification', period: 'ANNUAL review + records 2 years', penalty: 'FDA import refusal + FSVP warning letter', note: '21 CFR \u00a71.510: FSVP importers must conduct annual reassessment of foreign supplier verification activities. Records must be provided to FDA within 24 hours of request (FSMA \u00a7204 Traceability Rule).'},\n 'EPA_FIFRA_ADVERSE_EFFECTS_15DAY': {label: 'EPA FIFRA Adverse Effects Report', period: '15 CALENDAR DAYS from receipt', penalty: '$5,500/day FIFRA \u00a714(b)', note: 'FIFRA \u00a76(a)(2) + 40 CFR \u00a7159.195: registrant must report information suggesting unreasonable adverse effects within 15 calendar days. Cloud automation holding adverse effects data = EPA can independently subpoena vendor logs.'},\n 'TTB_BEVERAGE_ANNUAL_PERMIT_RENEWAL': {label: 'TTB Beverage Alcohol Permit Review', period: 'ANNUAL operations report', penalty: 'Permit revocation + excise tax liability', note: '27 CFR \u00a719: distilled spirits plant quarterly reports + annual summary. Records retention 3 years (\u00a719.580). TTB examination can reach any records system \u2014 cloud iPaaS logs subpoena target.'},\n 'EU_MIC_FOOD_SAFETY_ANNUAL_AUDIT': {label: 'EU Regulation 2073/2004 Microbiological Criteria Audit', period: 'ANNUAL + event-driven', penalty: 'EU market access revocation', note: 'Regulation (EC) 2073/2004: food safety criteria for Salmonella/E.coli/Listeria in ready-to-eat products. Failure to meet food safety criteria = mandatory withdrawal from EU market. GDPR Art.28 DPA required if testing data transits cloud iPaaS.'},\n 'USDA_FSIS_ANNUAL_VERIFICATION': {label: 'USDA FSIS HACCP Annual Verification', period: 'ANNUAL + ongoing', penalty: 'Plant suspension / consent agreement', note: '9 CFR \u00a7417.8: FSIS verifies HACCP plan adequacy at least annually. Records reviewed: monitoring records, corrective action records, verification records. Your platform\\'s data is primary evidence in FSIS verification inspections.'},\n 'SOC2_TYPE2_ANNUAL': {label: 'SOC2 Type II Audit', period: 'ANNUAL', penalty: 'Contract breach with enterprise food/agri clients', note: 'SOC2 CC9.2: subprocessor oversight required. Annual SOC2 Type II increasingly required by Tier 1 food manufacturers and agricultural enterprise procurement.'},\n 'ANNUAL_PENTEST': {label: 'Annual Penetration Test', period: 'ANNUAL', penalty: 'Contract breach / compliance gap', note: 'Annual pentest scope must include cloud automation integrations. Food facility SCADA/IoT integrations in scope for OT security review.'}\n};\n\nfor (const row of rows) {\n if (!row.deadline_type || !row.due_date) continue;\n const dueDate = new Date(row.due_date);\n const daysLeft = Math.floor((dueDate - today) / (1000 * 60 * 60 * 24));\n const config = deadlineTypes[row.deadline_type] || {label: row.deadline_type, penalty: 'Unknown', note: '', period: ''};\n\n if (daysLeft < 0) {\n alerts.push({deadline_type: row.deadline_type, label: config.label, company: row.company, due_date: row.due_date, days_left: daysLeft, status: 'OVERDUE', penalty: config.penalty, note: config.note, period: config.period});\n } else if (daysLeft <= 7) {\n alerts.push({deadline_type: row.deadline_type, label: config.label, company: row.company, due_date: row.due_date, days_left: daysLeft, status: 'CRITICAL', penalty: config.penalty, note: config.note, period: config.period});\n } else if (daysLeft <= 30) {\n alerts.push({deadline_type: row.deadline_type, label: config.label, company: row.company, due_date: row.due_date, days_left: daysLeft, status: 'WARNING', penalty: config.penalty, note: config.note, period: config.period});\n } else if (daysLeft <= 90) {\n alerts.push({deadline_type: row.deadline_type, label: config.label, company: row.company, due_date: row.due_date, days_left: daysLeft, status: 'NOTICE', penalty: config.penalty, note: config.note, period: config.period});\n }\n}\n\nif (alerts.length === 0) return [{json: {status: 'ALL_CLEAR', message: 'No food/agri compliance deadlines in next 90 days', check_date: today.toISOString().split('T')[0]}}];\nreturn alerts.map(a => ({json: a}));"
},
"position": [
680,
300
]
},
{
"id": "4",
"name": "IF - Alerts Exist",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.deadline_type}}",
"operation": "isNotEmpty"
}
]
}
},
"position": [
900,
300
]
},
{
"id": "5",
"name": "Slack - #food-compliance",
"type": "n8n-nodes-base.slack",
"parameters": {
"operation": "post",
"channel": "#food-compliance",
"text": "FOOD/AGRI COMPLIANCE: {{$json.status}} \u2014 {{$json.label}} | Due: {{$json.due_date}} ({{$json.days_left}} days) | Penalty: {{$json.penalty}}"
},
"position": [
1120,
200
]
},
{
"id": "6",
"name": "Gmail - QA/Compliance Team",
"type": "n8n-nodes-base.gmail",
"parameters": {
"operation": "send",
"to": "compliance@yourcompany.com",
"subject": "{{$json.status}}: {{$json.label}} \u2014 {{$json.company}} due {{$json.due_date}}",
"message": "Deadline: {{$json.label}}\nStatus: {{$json.status}}\nDue: {{$json.due_date}} ({{$json.days_left}} days)\nPenalty: {{$json.penalty}}\nPeriod: {{$json.period}}\nNote: {{$json.note}}"
},
"position": [
1120,
400
]
},
{
"id": "7",
"name": "Sheets - Deadline Log",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "append",
"spreadsheetId": "YOUR_SHEET_ID",
"range": "DeadlineAlerts!A:J",
"dataMode": "autoMapInputData"
},
"position": [
1340,
300
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Sheets - Compliance Calendar",
"type": "main",
"index": 0
}
]
]
},
"Sheets - Compliance Calendar": {
"main": [
[
{
"node": "Code - Check Deadlines",
"type": "main",
"index": 0
}
]
]
},
"Code - Check Deadlines": {
"main": [
[
{
"node": "IF - Alerts Exist",
"type": "main",
"index": 0
}
]
]
},
"IF - Alerts Exist": {
"main": [
[
{
"node": "Slack - #food-compliance",
"type": "main",
"index": 0
},
{
"node": "Gmail - QA/Compliance Team",
"type": "main",
"index": 0
}
],
[
{
"node": "Sheets - Deadline Log",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 3: AgriTech/FoodTech API & System Health Monitor
15-minute schedule → parallel HTTP checks on 5 endpoints → Code (evaluate with compliance annotation) → IF (any DOWN) → Slack (#food-safety-ops) + Gmail (QA lead).
| Endpoint | Compliance Annotation |
|---|---|
fsma_harpc_monitoring_api |
FDA FSMA 21 CFR §117 — CCP monitoring records 2yr retention §117.305 |
usda_haccp_ccp_api |
USDA FSIS 9 CFR §417 — IMMEDIATE corrective action required on CL breach |
pesticide_registration_api |
EPA FIFRA §6(a)(2) — 15-day adverse effects clock, downtime = reporting delay |
organic_certification_api |
USDA NOP §205.662 — IMMEDIATE suspension if certificate revoked, real-time status required |
food_safety_testing_api |
EU Regulation 2073/2004 — Listeria/Salmonella positive = IMMEDIATE EU market withdrawal |
{
"name": "AgriTech/FoodTech API & System Health Monitor",
"nodes": [
{
"id": "1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "*/15 * * * *"
}
]
}
},
"position": [
240,
300
]
},
{
"id": "2",
"name": "HTTP - fsma_harpc_api",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.yourplatform.com/health/fsma-harpc",
"method": "GET",
"timeout": 10000
},
"position": [
460,
200
]
},
{
"id": "3",
"name": "HTTP - usda_haccp_ccp_api",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.yourplatform.com/health/haccp-ccp",
"method": "GET",
"timeout": 10000
},
"position": [
460,
320
]
},
{
"id": "4",
"name": "HTTP - pesticide_registration_api",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.yourplatform.com/health/fifra-registration",
"method": "GET",
"timeout": 10000
},
"position": [
460,
440
]
},
{
"id": "5",
"name": "HTTP - organic_certification_api",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.yourplatform.com/health/nop-organic",
"method": "GET",
"timeout": 10000
},
"position": [
460,
560
]
},
{
"id": "6",
"name": "HTTP - food_safety_testing_api",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.yourplatform.com/health/micro-criteria",
"method": "GET",
"timeout": 10000
},
"position": [
460,
680
]
},
{
"id": "7",
"name": "Code - Evaluate Health",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const endpoints = [\n {name: 'fsma_harpc_monitoring_api', compliance: 'FDA FSMA 21 CFR \u00a7117 \u2014 HARPC CCP monitoring records', ccp_risk: 'HARPC deviation records must be available during FDA inspection (\u00a7117.305 2-year retention). Outage = chain-of-custody gap.'},\n {name: 'usda_haccp_ccp_api', compliance: 'USDA FSIS 9 CFR \u00a7417 \u2014 HACCP Critical Control Point monitoring', ccp_risk: 'CCP monitoring outage = immediate corrective action required under \u00a7417.3(a). FSIS verification inspectors check real-time monitoring continuity.'},\n {name: 'pesticide_registration_api', compliance: 'EPA FIFRA 7 USC \u00a7136 \u2014 pesticide registration and adverse effects reporting', ccp_risk: 'FIFRA \u00a76(a)(2): 15-day adverse effects reporting clock. System downtime creates reporting delay exposure.'},\n {name: 'organic_certification_api', compliance: 'USDA NOP 7 CFR \u00a7205 \u2014 organic certificate status and input approval tracking', ccp_risk: 'Organic certificate expiry or suspension is IMMEDIATE under \u00a7205.662. Real-time status monitoring prevents inadvertent use of revoked certificates.'},\n {name: 'food_safety_testing_api', compliance: 'EU Regulation 2073/2004 \u2014 microbiological criteria and food safety criteria monitoring', ccp_risk: 'Listeria/Salmonella positive in food safety criteria = IMMEDIATE withdrawal from EU market. Monitoring gap = delayed response.'},\n];\nconst inputs = $input.all();\nconst results = [];\nfor (let i = 0; i < inputs.length; i++) {\n const ep = endpoints[i] || {name: 'unknown', compliance: 'N/A', ccp_risk: 'N/A'};\n const status = inputs[i].json.status === 'ok' ? 'UP' : 'DOWN';\n results.push({json: {endpoint: ep.name, status, compliance: ep.compliance, ccp_risk: ep.ccp_risk, checked_at: new Date().toISOString()}});\n}\nreturn results;"
},
"position": [
680,
440
]
},
{
"id": "8",
"name": "IF - Any Down",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.status}}",
"operation": "equal",
"value2": "DOWN"
}
]
}
},
"position": [
900,
440
]
},
{
"id": "9",
"name": "Slack - #food-safety-ops",
"type": "n8n-nodes-base.slack",
"parameters": {
"operation": "post",
"channel": "#food-safety-ops",
"text": "FOOD/AGRI API DOWN: {{$json.endpoint}} | Compliance: {{$json.compliance}} | CCP Risk: {{$json.ccp_risk}}"
},
"position": [
1120,
340
]
},
{
"id": "10",
"name": "Gmail - QA Lead Alert",
"type": "n8n-nodes-base.gmail",
"parameters": {
"operation": "send",
"to": "qa-lead@yourcompany.com",
"subject": "ALERT: {{$json.endpoint}} DOWN \u2014 {{$json.compliance}}",
"message": "Endpoint: {{$json.endpoint}}\nStatus: {{$json.status}}\nCompliance scope: {{$json.compliance}}\nCCP/regulatory risk: {{$json.ccp_risk}}\nDetected: {{$json.checked_at}}"
},
"position": [
1120,
520
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "HTTP - fsma_harpc_api",
"type": "main",
"index": 0
},
{
"node": "HTTP - usda_haccp_ccp_api",
"type": "main",
"index": 0
},
{
"node": "HTTP - pesticide_registration_api",
"type": "main",
"index": 0
},
{
"node": "HTTP - organic_certification_api",
"type": "main",
"index": 0
},
{
"node": "HTTP - food_safety_testing_api",
"type": "main",
"index": 0
}
]
]
},
"HTTP - fsma_harpc_api": {
"main": [
[
{
"node": "Code - Evaluate Health",
"type": "main",
"index": 0
}
]
]
},
"HTTP - usda_haccp_ccp_api": {
"main": [
[
{
"node": "Code - Evaluate Health",
"type": "main",
"index": 1
}
]
]
},
"HTTP - pesticide_registration_api": {
"main": [
[
{
"node": "Code - Evaluate Health",
"type": "main",
"index": 2
}
]
]
},
"HTTP - organic_certification_api": {
"main": [
[
{
"node": "Code - Evaluate Health",
"type": "main",
"index": 3
}
]
]
},
"HTTP - food_safety_testing_api": {
"main": [
[
{
"node": "Code - Evaluate Health",
"type": "main",
"index": 4
}
]
]
},
"Code - Evaluate Health": {
"main": [
[
{
"node": "IF - Any Down",
"type": "main",
"index": 0
}
]
]
},
"IF - Any Down": {
"main": [
[
{
"node": "Slack - #food-safety-ops",
"type": "main",
"index": 0
},
{
"node": "Gmail - QA Lead Alert",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 4: Food Safety & AgriTech Compliance Incident Pipeline
Webhook → Code (classify incident type, assign SLA and regulatory citation) → Sheets (incident log) → Slack (#food-safety-incidents) + Gmail (response team).
8 incident types with regulatory SLAs:
| Incident Type | SLA | Regulation | Action |
|---|---|---|---|
FSMA_CCP_DEVIATION |
IMMEDIATE | FDA 21 CFR §117.150(a) | Stop, document, notify QA director, preserve cloud vendor logs |
USDA_HACCP_CRITICAL_LIMIT_BREACH |
IMMEDIATE | USDA FSIS 9 CFR §417.3(a) | Stop production, segregate product, corrective action records |
FDA_LISTERIA_POSITIVE_RTE |
IMMEDIATE + 24h recall decision | USDA FSIS 9 CFR §430.4 | FSIS District + FDA District, Class I recall likely |
EPA_FIFRA_ADVERSE_EFFECTS |
15 CALENDAR DAYS | FIFRA §6(a)(2) + 40 CFR §159.195 | EPA PR Notice 98-3 report, document receipt date precisely |
USDA_NOP_CERTIFICATION_SUSPENSION |
IMMEDIATE | 7 CFR §205.662 | Stop organic label use, notify certifier within 24h |
EU_MIC_FOOD_SAFETY_VIOLATION |
IMMEDIATE to 24h | Regulation 2073/2004 Art.7 | EU market withdrawal, RASFF notification, GDPR DPA check |
FDA_FOOD_RECALL_INITIATION |
24 HOURS | 21 CFR §7.53 | FDA District notification, consignee notification, Class I/II/III classification |
TTB_SPIRITS_DIVERSION |
IMMEDIATE | 27 CFR §19.245 | TTB National Revenue Center notification, preserve all records |
{
"name": "Food Safety & AgriTech Compliance Incident Pipeline",
"nodes": [
{
"id": "1",
"name": "Webhook - Incident Intake",
"type": "n8n-nodes-base.webhook",
"parameters": {
"path": "food-safety-incident",
"responseMode": "lastNode"
},
"position": [
240,
300
]
},
{
"id": "2",
"name": "Code - Classify Incident",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const inc = $input.first().json;\nconst type = inc.incident_type || 'GENERAL_FOOD_SAFETY';\nconst config = {\n 'FSMA_CCP_DEVIATION': {priority: 'P0', sla: 'IMMEDIATE', regulation: 'FDA FSMA 21 CFR \u00a7117.150(a)', action: 'IMMEDIATE corrective action. Document deviation and corrective action within same production day. Notify QA Director. Update HARPC records. FDA inspection may follow. Cloud automation vendor holds deviation log \u2014 preserve immediately.', team: 'qa-director@yourcompany.com'},\n 'USDA_HACCP_CRITICAL_LIMIT_BREACH': {priority: 'P0', sla: 'IMMEDIATE', regulation: 'USDA FSIS 9 CFR \u00a7417.3(a)', action: 'IMMEDIATE corrective action required. Stop production at CCP. Identify and segregate affected product. Determine root cause. Document all corrective actions (9 CFR \u00a7417.3(b) records). FSIS may conduct unannounced verification visit. Corrective action records: 1-year retention.', team: 'haccp-coordinator@yourcompany.com'},\n 'FDA_LISTERIA_POSITIVE_RTE': {priority: 'P0', sla: 'IMMEDIATE', regulation: 'USDA FSIS 9 CFR \u00a7430.4 + FDA \u00a7342', action: 'IMMEDIATE: stop production, quarantine affected lot, notify FSIS District Office and FDA District Office. Recall initiation within 24h if product in commerce (21 CFR \u00a77.53). Listeria monocytogenes in RTE product = Class I recall (reasonable probability of serious adverse health consequence). FSIS and FDA records request will include your testing platform data.', team: 'food-safety-director@yourcompany.com'},\n 'EPA_FIFRA_ADVERSE_EFFECTS': {priority: 'P1', sla: '15 CALENDAR DAYS', regulation: 'FIFRA \u00a76(a)(2) + 40 CFR \u00a7159.195', action: 'Report to EPA within 15 calendar days of receiving information suggesting unreasonable adverse effects. Use EPA PR Notice 98-3 format. Document receipt date precisely \u2014 clock starts at receipt, not confirmation. Cloud automation workflow holding the adverse effects data is an independent EPA subpoena target.', team: 'regulatory-affairs@yourcompany.com'},\n 'USDA_NOP_CERTIFICATION_SUSPENSION': {priority: 'P0', sla: 'IMMEDIATE', regulation: '7 CFR \u00a7205.662', action: 'IMMEDIATE: stop use of organic label. Notify certifying agent within 24 hours. Pull all affected product from distribution. File response to suspension notice within 30 days (\u00a7205.665). Document chain of custody for all products produced during suspension period. USDA AMS investigation may follow.', team: 'organic-compliance@yourcompany.com'},\n 'EU_MIC_FOOD_SAFETY_VIOLATION': {priority: 'P0', sla: 'IMMEDIATE to 24h', regulation: 'EU Regulation 2073/2004 Art.7', action: 'IMMEDIATE: withdraw affected product from EU market. Notify competent authority within 24h. Activate RASFF (Rapid Alert System for Food and Feed) notification chain if public health risk. Listeria in RTE: EU food safety criteria \u00a71 \u2014 absence in 25g at end of shelf life required. Review all affected lots. GDPR Art.28 DPA required for any food safety data transiting cloud iPaaS to EU.', team: 'eu-food-safety@yourcompany.com'},\n 'FDA_FOOD_RECALL_INITIATION': {priority: 'P0', sla: '24 HOURS', regulation: '21 CFR \u00a77.53 + FDA Voluntary Recall Guidelines', action: 'Notify FDA District Office within 24h of recall decision. Prepare recall notification to consignees. Classify recall: Class I (serious health hazard), Class II (remote probability), Class III (not likely to cause health consequence). FDA Recall Coordinator will request full distribution records \u2014 your traceability platform data is primary evidence.', team: 'regulatory-affairs@yourcompany.com'},\n 'TTB_SPIRITS_DIVERSION': {priority: 'P0', sla: 'IMMEDIATE', regulation: '27 CFR \u00a719.245 + TTB Circular 2020-1', action: 'IMMEDIATE: notify TTB National Revenue Center. Secure all affected inventory records. Do not destroy any records. TTB special agent investigation may follow. Excise tax liability may attach to diverted spirits. Records in cloud automation system are subject to TTB subpoena.', team: 'ttb-compliance@yourcompany.com'}\n};\nconst c = config[type] || {priority: 'P2', sla: 'WITHIN 48H', regulation: 'General food safety requirement', action: 'Review and escalate per standard operating procedure.', team: 'compliance@yourcompany.com'};\nreturn [{json: {incident_id: 'FOOD-' + Date.now(), incident_type: type, priority: c.priority, sla: c.sla, regulation: c.regulation, action: c.action, team: c.team, ...inc, logged_at: new Date().toISOString()}}];"
},
"position": [
460,
300
]
},
{
"id": "3",
"name": "Sheets - Incident Log",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "append",
"spreadsheetId": "YOUR_SHEET_ID",
"range": "IncidentLog!A:M",
"dataMode": "autoMapInputData"
},
"position": [
680,
300
]
},
{
"id": "4",
"name": "Slack - #food-safety-incidents",
"type": "n8n-nodes-base.slack",
"parameters": {
"operation": "post",
"channel": "#food-safety-incidents",
"text": "{{$json.priority}} FOOD SAFETY INCIDENT: {{$json.incident_type}} | SLA: {{$json.sla}} | Regulation: {{$json.regulation}} | ID: {{$json.incident_id}}"
},
"position": [
900,
200
]
},
{
"id": "5",
"name": "Gmail - Response Team",
"type": "n8n-nodes-base.gmail",
"parameters": {
"operation": "send",
"to": "={{$json.team}}",
"subject": "{{$json.priority}} FOOD SAFETY INCIDENT: {{$json.incident_type}} \u2014 SLA {{$json.sla}}",
"message": "Incident ID: {{$json.incident_id}}\nType: {{$json.incident_type}}\nPriority: {{$json.priority}}\nSLA: {{$json.sla}}\nRegulation: {{$json.regulation}}\nRequired action: {{$json.action}}\nLogged: {{$json.logged_at}}"
},
"position": [
900,
380
]
}
],
"connections": {
"Webhook - Incident Intake": {
"main": [
[
{
"node": "Code - Classify Incident",
"type": "main",
"index": 0
}
]
]
},
"Code - Classify Incident": {
"main": [
[
{
"node": "Sheets - Incident Log",
"type": "main",
"index": 0
}
]
]
},
"Sheets - Incident Log": {
"main": [
[
{
"node": "Slack - #food-safety-incidents",
"type": "main",
"index": 0
},
{
"node": "Gmail - Response Team",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 5: Weekly AgriTech/FoodTech SaaS KPI Briefing
Monday 7AM → parallel Postgres queries (customer metrics by tier + open compliance items) → Merge → Code (HTML table) → Gmail (CEO, BCC COO/CSO).
KPIs tracked: accounts by all 7 tiers, MRR, new/churned WoW, open FSMA CCP deviations, HACCP critical limit breaches, Listeria positives, EPA FIFRA adverse effects items, recalls initiated this week, compliance deadlines due in 30 days.
{
"name": "Weekly AgriTech/FoodTech SaaS KPI Briefing",
"nodes": [
{
"id": "1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 7 * * 1"
}
]
}
},
"position": [
240,
300
]
},
{
"id": "2",
"name": "Postgres - Customer Metrics",
"type": "n8n-nodes-base.postgres",
"parameters": {
"operation": "executeQuery",
"query": "SELECT\n COUNT(*) FILTER (WHERE tier = 'FOOD_MANUFACTURING_SAAS_VENDOR') AS food_mfg_accounts,\n COUNT(*) FILTER (WHERE tier = 'AGTECH_PRECISION_FARMING_SAAS') AS agtech_accounts,\n COUNT(*) FILTER (WHERE tier = 'FOOD_SAFETY_TESTING_SAAS') AS food_testing_accounts,\n COUNT(*) FILTER (WHERE tier = 'ORGANIC_CERTIFICATION_SAAS') AS organic_accounts,\n COUNT(*) FILTER (WHERE tier = 'BEVERAGE_SPIRITS_COMPLIANCE_SAAS') AS beverage_accounts,\n COUNT(*) FILTER (WHERE tier = 'SUPPLY_CHAIN_FOOD_TRACEABILITY_SAAS') AS traceability_accounts,\n COUNT(*) FILTER (WHERE tier = 'FOODTECH_STARTUP') AS startup_accounts,\n COUNT(*) AS total_accounts,\n SUM(mrr_usd) AS total_mrr,\n COUNT(*) FILTER (WHERE created_at > NOW() - INTERVAL '7 days') AS new_this_week,\n COUNT(*) FILTER (WHERE churned_at > NOW() - INTERVAL '7 days') AS churned_this_week\nFROM customers WHERE deleted_at IS NULL"
},
"position": [
460,
200
]
},
{
"id": "3",
"name": "Postgres - Open Compliance Items",
"type": "n8n-nodes-base.postgres",
"parameters": {
"operation": "executeQuery",
"query": "SELECT\n COUNT(*) FILTER (WHERE incident_type = 'FSMA_CCP_DEVIATION' AND resolved_at IS NULL) AS fsma_open,\n COUNT(*) FILTER (WHERE incident_type = 'USDA_HACCP_CRITICAL_LIMIT_BREACH' AND resolved_at IS NULL) AS haccp_open,\n COUNT(*) FILTER (WHERE incident_type = 'FDA_LISTERIA_POSITIVE_RTE' AND resolved_at IS NULL) AS listeria_open,\n COUNT(*) FILTER (WHERE incident_type = 'EPA_FIFRA_ADVERSE_EFFECTS' AND resolved_at IS NULL) AS fifra_open,\n COUNT(*) FILTER (WHERE incident_type = 'FDA_FOOD_RECALL_INITIATION' AND created_at > NOW() - INTERVAL '7 days') AS recalls_this_week,\n COUNT(*) FILTER (WHERE deadline_type IS NOT NULL AND due_date BETWEEN NOW() AND NOW() + INTERVAL '30 days' AND resolved_at IS NULL) AS deadlines_due_30d\nFROM incidents WHERE created_at > NOW() - INTERVAL '30 days'"
},
"position": [
460,
420
]
},
{
"id": "4",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"parameters": {
"mode": "combine",
"combinationMode": "mergeByPosition"
},
"position": [
680,
300
]
},
{
"id": "5",
"name": "Code - Build HTML Report",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const d = $input.first().json;\nconst html = `<h2>FlowKit AgriTech/FoodTech Weekly KPI \u2014 ${new Date().toISOString().split('T')[0]}</h2><table border='1' cellpadding='6'><tr><th>Tier</th><th>Accounts</th></tr><tr><td>Food Manufacturing SaaS</td><td>${d.food_mfg_accounts}</td></tr><tr><td>AgTech Precision Farming</td><td>${d.agtech_accounts}</td></tr><tr><td>Food Safety Testing</td><td>${d.food_testing_accounts}</td></tr><tr><td>Organic Certification</td><td>${d.organic_accounts}</td></tr><tr><td>Beverage/Spirits Compliance</td><td>${d.beverage_accounts}</td></tr><tr><td>Supply Chain Traceability</td><td>${d.traceability_accounts}</td></tr><tr><td>FoodTech Startup</td><td>${d.startup_accounts}</td></tr><tr><td><strong>Total</strong></td><td><strong>${d.total_accounts}</strong></td></tr></table><br><table border='1' cellpadding='6'><tr><th>Metric</th><th>Value</th></tr><tr><td>MRR</td><td>$${d.total_mrr}</td></tr><tr><td>New This Week</td><td>${d.new_this_week}</td></tr><tr><td>Churned This Week</td><td>${d.churned_this_week}</td></tr></table><br><h3>Open Compliance Items</h3><table border='1' cellpadding='6'><tr><th>Category</th><th>Open</th></tr><tr><td>FSMA CCP Deviations</td><td>${d.fsma_open}</td></tr><tr><td>USDA HACCP CL Breaches</td><td>${d.haccp_open}</td></tr><tr><td>Listeria Positives (RTE)</td><td>${d.listeria_open}</td></tr><tr><td>EPA FIFRA Adverse Effects</td><td>${d.fifra_open}</td></tr><tr><td>Recalls This Week</td><td>${d.recalls_this_week}</td></tr><tr><td>Deadlines Due in 30 Days</td><td>${d.deadlines_due_30d}</td></tr></table>`;\nreturn [{json: {html, subject: 'FlowKit AgriTech/FoodTech Weekly KPI \u2014 ' + new Date().toISOString().split('T')[0]}}];"
},
"position": [
900,
300
]
},
{
"id": "6",
"name": "Gmail - CEO Weekly Briefing",
"type": "n8n-nodes-base.gmail",
"parameters": {
"operation": "send",
"to": "ceo@yourcompany.com",
"bcc": "coo@yourcompany.com,cso@yourcompany.com",
"subject": "={{$json.subject}}",
"message": "={{$json.html}}",
"html": true
},
"position": [
1120,
300
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Postgres - Customer Metrics",
"type": "main",
"index": 0
},
{
"node": "Postgres - Open Compliance Items",
"type": "main",
"index": 0
}
]
]
},
"Postgres - Customer Metrics": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Postgres - Open Compliance Items": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code - Build HTML Report",
"type": "main",
"index": 0
}
]
]
},
"Code - Build HTML Report": {
"main": [
[
{
"node": "Gmail - CEO Weekly Briefing",
"type": "main",
"index": 0
}
]
]
}
}
}
Deployment Notes
FSMA Traceability Rule — 24-hour response. FSMA §204 (effective January 20, 2026) requires traceability records for High-Risk Foods to be producible within 24 hours of FDA request. Your traceability workflow must be able to pull and format the Key Data Elements (KDEs) on demand. Self-hosted n8n with a Postgres-backed KDE store gives you a verified response path — cloud iPaaS adds a vendor-notification step that consumes hours of your 24-hour window.
USDA FSIS real-time monitoring. FSIS inspectors conduct unannounced verification visits and review HACCP monitoring records in real time. Your monitoring API (Workflow 3) must reflect actual production-line CCP status, not a cached 15-minute-old value. Set monitor polling to ≤5 minutes for HACCP-critical endpoints.
EU Regulation 2073/2004 GDPR intersection. If your food safety testing data routes through a cloud iPaaS to EU customers, GDPR Art.28 requires a Data Processing Agreement with each subprocessor. A positive Listeria finding that routes through a non-DPA'd cloud iPaaS = simultaneous food safety violation AND GDPR Art.28 violation. Self-hosted n8n in an EU data center eliminates the DPA chain entirely.
EPA FIFRA clock starts at receipt. 40 CFR §159.195 is explicit: the 15-day adverse effects reporting obligation begins when the registrant receives reportable information — not when legal confirms it, not when the report is drafted. If your platform routes adverse effects submissions through a cloud automation workflow, the timestamp on that workflow execution is the legal receipt date. Keep this in your evidence trail.
All five workflow JSONs above are copy-paste ready for import into any self-hosted or cloud n8n instance. For the complete FlowKit AgriTech/FoodTech compliance template bundle — including FSMA §204 24-hour traceability pull, FSVP supplier verification, EU MIC microbiological batch report, and Organic System Plan (OSP) change-tracking workflows — visit FlowKit on Gumroad.
Free n8n workflows for FDA FSMA, USDA HACCP, EPA FIFRA, USDA NOP organic certification, EU microbiological criteria, TTB beverage compliance, and food safety incident response.
Top comments (0)