This workflow corresponds to n8n.io template #14436 — we link there as the canonical source.
This workflow follows the Agent → Agenttool recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "IZ0qoQ92vI8smhR4",
"name": "AI-powered legal policy governance with compliance tracking and notification",
"tags": [],
"nodes": [
{
"id": "f224a44f-c7d9-48b8-81e1-2741f09534df",
"name": "Policy Submission Form",
"type": "n8n-nodes-base.formTrigger",
"position": [
256,
784
],
"parameters": {
"options": {
"appendAttribution": false
},
"formTitle": "Legal Policy Submission & Review",
"formFields": {
"values": [
{
"fieldName": "policyTitle",
"fieldLabel": "Policy Title",
"requiredField": true
},
{
"fieldName": "policyType",
"fieldType": "dropdown",
"fieldLabel": "Policy Type",
"fieldOptions": {
"values": [
{
"option": "Contract"
},
{
"option": "Internal Policy"
},
{
"option": "Compliance Document"
},
{
"option": "Legal Agreement"
},
{
"option": "Regulatory Requirement"
}
]
},
"requiredField": true
},
{
"fieldName": "policyDocument",
"fieldType": "file",
"fieldLabel": "Policy Document (PDF/DOCX)",
"requiredField": true
},
{
"fieldName": "contractualRequirements",
"fieldType": "textarea",
"fieldLabel": "Key Contractual Requirements",
"placeholder": "List key requirements, obligations, or compliance criteria"
},
{
"fieldName": "stakeholders",
"fieldType": "textarea",
"fieldLabel": "Stakeholder Emails (comma-separated)",
"placeholder": "user@example.com, user@example.com",
"requiredField": true
}
]
},
"formDescription": "Submit legal policies and contracts for AI-driven analysis, compliance validation, and governance approval workflow"
},
"typeVersion": 2.5
},
{
"id": "dcd04c30-5764-481e-a62e-ae7fc37501c3",
"name": "Extract Policy Document",
"type": "n8n-nodes-base.extractFromFile",
"position": [
480,
784
],
"parameters": {
"options": {},
"binaryPropertyName": "policyDocument"
},
"typeVersion": 1.1
},
{
"id": "f2a7630e-147c-446b-ba17-badfc4b2f749",
"name": "Policy Analysis Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
784,
1232
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.2
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "0f674b6e-9ddf-4587-9a60-bfc4399753c1",
"name": "Policy Analysis Agent",
"type": "@n8n/n8n-nodes-langchain.agentTool",
"position": [
832,
1008
],
"parameters": {
"text": "={{ $fromAI('policy_content', 'The policy document content and contractual requirements to analyze', 'string') }}",
"options": {
"systemMessage": "You are a Policy Analysis Agent specializing in legal policy review and contractual analysis. Your role is to: 1) Analyze policy documents for legal compliance and contractual obligations, 2) Identify gaps, risks, and areas requiring attention, 3) Validate alignment with regulatory requirements, 4) Provide structured analysis with risk levels and recommendations. Return your analysis in a clear, structured format with sections for: Summary, Key Findings, Compliance Status, Risk Assessment, and Recommendations."
},
"toolDescription": "Reviews internal legal policies and contractual requirements, identifies compliance gaps, validates policy alignment with regulations, and provides detailed legal analysis"
},
"typeVersion": 3
},
{
"id": "1d9d207e-6249-4109-8069-50f5023222ec",
"name": "Compliance Tracking Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1200,
1216
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.2
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "76b3d25a-2d18-4436-b2f1-64e76e51dd54",
"name": "Compliance Tracking Agent",
"type": "@n8n/n8n-nodes-langchain.agentTool",
"position": [
1120,
1008
],
"parameters": {
"text": "={{ $fromAI('policy_analysis', 'The policy analysis results to validate for compliance', 'string') }}",
"options": {
"systemMessage": "You are a Compliance Tracking Agent specializing in regulatory compliance and policy validation. Your role is to: 1) Validate policy alignment with relevant compliance frameworks (GDPR, SOC2, HIPAA, etc.), 2) Track compliance status and identify gaps, 3) Assess regulatory requirements and obligations, 4) Generate compliance scores and tracking metrics. Return structured compliance data with: Compliance Score (0-100), Framework Alignment, Regulatory Requirements, Gaps Identified, and Remediation Actions."
},
"toolDescription": "Validates policy alignment with compliance frameworks, tracks compliance status, identifies regulatory requirements, and maintains compliance records"
},
"typeVersion": 3
},
{
"id": "2268a7fb-6dff-44be-a4e1-e4ea03505143",
"name": "Legal Summary Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1488,
1216
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.3
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "02778f6a-9298-48ce-84a4-5ea536494bed",
"name": "Legal Summary Agent",
"type": "@n8n/n8n-nodes-langchain.agentTool",
"position": [
1408,
1008
],
"parameters": {
"text": "={{ $fromAI('analysis_data', 'The policy analysis and compliance data to summarize', 'string') }}",
"options": {
"systemMessage": "You are a Legal Summary Agent specializing in legal documentation and audit reporting. Your role is to: 1) Generate concise executive summaries of policy reviews, 2) Create audit-ready governance documentation, 3) Produce compliance reports for stakeholders, 4) Format legal findings for decision-makers. Return professional documentation with: Executive Summary, Key Legal Findings, Compliance Status, Approval Recommendations, and Audit Trail Information."
},
"toolDescription": "Generates executive legal summaries, audit-ready documentation, and governance reports from policy analysis and compliance data"
},
"typeVersion": 3
},
{
"id": "c8d37d63-cb7f-498e-a0e2-7bd45ab8aad3",
"name": "Legal Governance Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
704,
1008
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.2
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "d9f5332c-524a-40bc-af1e-3df067632e56",
"name": "Governance Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2016,
1008
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"approvalStatus\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"enum\": [\"approved\", \"requires_review\", \"rejected\"]\n\t\t},\n\t\t\"riskLevel\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"enum\": [\"low\", \"medium\", \"high\", \"critical\"]\n\t\t},\n\t\t\"complianceScore\": {\n\t\t\t\"type\": \"number\"\n\t\t},\n\t\t\"policyAnalysisSummary\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"complianceFindings\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"legalSummary\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"approvalRecommendation\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"stakeholderNotifications\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t},\n\t\t\"auditNotes\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t},\n\t\"required\": [\"approvalStatus\", \"riskLevel\", \"complianceScore\", \"policyAnalysisSummary\", \"complianceFindings\", \"legalSummary\", \"approvalRecommendation\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "291f4128-55d8-4b26-858a-364a752d47a3",
"name": "Email Notification Tool",
"type": "n8n-nodes-base.gmailTool",
"position": [
1696,
1008
],
"parameters": {
"sendTo": "={{ $fromAI('recipient_email', 'The email address of the stakeholder to notify', 'string') }}",
"message": "={{ $fromAI('email_body', 'The email message content', 'string') }}",
"options": {},
"subject": "={{ $fromAI('email_subject', 'The email subject line', 'string') }}",
"descriptionType": "manual",
"toolDescription": "Send email notifications to stakeholders about policy review status, approvals, and compliance updates"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "0815a125-97ea-4d41-914f-99f08183684c",
"name": "Slack Notification Tool",
"type": "n8n-nodes-base.slackTool",
"position": [
1824,
1008
],
"parameters": {
"text": "={{ $fromAI('message', 'The Slack message content', 'string') }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $fromAI('channel_id', 'The Slack channel ID to post to', 'string') }}"
},
"otherOptions": {},
"authentication": "oAuth2",
"descriptionType": "manual",
"toolDescription": "Post notifications to Slack channels about policy governance updates, approvals, and compliance alerts"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "0952dedc-c6bc-48a9-ad0b-37607f49b2d5",
"name": "Legal Governance Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1416,
784
],
"parameters": {
"text": "={{ 'Policy Title: ' + $json.policyTitle + '\\nPolicy Type: ' + $json.policyType + '\\nPolicy Content: ' + $json.text + '\\nContractual Requirements: ' + $json.contractualRequirements + '\\nStakeholders: ' + $json.stakeholders }}",
"options": {
"systemMessage": "You are the Legal Governance Agent, the supervisor orchestrating enterprise legal operations. Your responsibilities: 1) Coordinate the Policy Analysis Agent to review legal documents, 2) Direct the Compliance Tracking Agent to validate policy alignment, 3) Instruct the Legal Summary Agent to generate audit documentation, 4) Make approval decisions based on sub-agent findings, 5) Notify stakeholders via email or Slack, 6) Track compliance and maintain governance records. Process: First call policy_analysis_agent with the policy content, then call compliance_tracking_agent with the analysis results, then call legal_summary_agent with all findings. Based on the combined analysis, determine approval status (approved/requires_review/rejected), risk level, and compliance score. Send notifications to stakeholders as needed. Return structured governance decision with all required fields."
},
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "1ccfc938-8210-457c-8f1d-d4457da7094a",
"name": "Route by Approval Status",
"type": "n8n-nodes-base.switch",
"position": [
2192,
752
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalStatus }}",
"rightValue": "approved"
}
]
}
},
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalStatus }}",
"rightValue": "requires_review"
}
]
}
},
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalStatus }}",
"rightValue": "rejected"
}
]
}
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"typeVersion": 3.4
},
{
"id": "886cb86a-bd64-4389-980f-0e7ae0d61811",
"name": "Prepare Policy Record",
"type": "n8n-nodes-base.set",
"position": [
2384,
784
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "policyId",
"type": "string",
"value": "={{ $now.toISO() + '-' + $json.policyTitle.replace(/\\s+/g, '-').toLowerCase() }}"
},
{
"id": "id-2",
"name": "policyTitle",
"type": "string",
"value": "={{ $('Policy Submission Form').item.json.policyTitle }}"
},
{
"id": "id-3",
"name": "policyType",
"type": "string",
"value": "={{ $('Policy Submission Form').item.json.policyType }}"
},
{
"id": "id-4",
"name": "submissionDate",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-5",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-6",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-7",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-8",
"name": "stakeholders",
"type": "string",
"value": "={{ $('Policy Submission Form').item.json.stakeholders }}"
},
{
"id": "id-9",
"name": "contractualRequirements",
"type": "string",
"value": "={{ $('Policy Submission Form').item.json.contractualRequirements }}"
},
{
"id": "id-10",
"name": "policyAnalysisSummary",
"type": "string",
"value": "={{ $json.policyAnalysisSummary }}"
},
{
"id": "id-11",
"name": "complianceFindings",
"type": "string",
"value": "={{ $json.complianceFindings }}"
},
{
"id": "id-12",
"name": "legalSummary",
"type": "string",
"value": "={{ $json.legalSummary }}"
},
{
"id": "id-13",
"name": "approvalRecommendation",
"type": "string",
"value": "={{ $json.approvalRecommendation }}"
},
{
"id": "id-14",
"name": "auditNotes",
"type": "string",
"value": "={{ $json.auditNotes || 'N/A' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bc81edf8-81b6-4bb3-9110-ab1cbb216a70",
"name": "Store Policy Records",
"type": "n8n-nodes-base.dataTable",
"position": [
2688,
784
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__policy_records_table__>"
}
},
"typeVersion": 1.1
},
{
"id": "801a455e-9a8f-42e1-a546-31c14210c569",
"name": "Prepare Approval Record",
"type": "n8n-nodes-base.set",
"position": [
2688,
1072
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "approvalId",
"type": "string",
"value": "={{ $now.toISO() + '-' + $json.policyId }}"
},
{
"id": "id-2",
"name": "policyId",
"type": "string",
"value": "={{ $json.policyId }}"
},
{
"id": "id-3",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-4",
"name": "approvalDate",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-5",
"name": "approvalRecommendation",
"type": "string",
"value": "={{ $json.approvalRecommendation }}"
},
{
"id": "id-6",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-7",
"name": "stakeholdersNotified",
"type": "string",
"value": "={{ $json.stakeholderNotifications ? $json.stakeholderNotifications.join(', ') : 'None' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "020be2f2-c1f7-4194-a220-66e3af2d372e",
"name": "Track Approvals",
"type": "n8n-nodes-base.dataTable",
"position": [
2912,
1072
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__approval_tracking_table__>"
}
},
"typeVersion": 1.1
},
{
"id": "c9cb53ee-17a5-4d25-810b-3a3946d11644",
"name": "Prepare Compliance Record",
"type": "n8n-nodes-base.set",
"position": [
2688,
1264
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "complianceId",
"type": "string",
"value": "={{ $now.toISO() + '-' + $json.policyId }}"
},
{
"id": "id-2",
"name": "policyId",
"type": "string",
"value": "={{ $json.policyId }}"
},
{
"id": "id-3",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-4",
"name": "complianceFindings",
"type": "string",
"value": "={{ $json.complianceFindings }}"
},
{
"id": "id-5",
"name": "assessmentDate",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-6",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-7",
"name": "policyType",
"type": "string",
"value": "={{ $json.policyType }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b97135db-f5c7-4951-9dd3-3257c5378e1b",
"name": "Track Compliance",
"type": "n8n-nodes-base.dataTable",
"position": [
2912,
1264
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__compliance_tracking_table__>"
}
},
"typeVersion": 1.1
},
{
"id": "1d17b560-c158-4097-8d95-c8b58694ef76",
"name": "Prepare Audit Log",
"type": "n8n-nodes-base.set",
"position": [
2688,
1456
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "auditId",
"type": "string",
"value": "={{ $now.toISO() + '-AUDIT-' + $json.policyId }}"
},
{
"id": "id-2",
"name": "policyId",
"type": "string",
"value": "={{ $json.policyId }}"
},
{
"id": "id-3",
"name": "policyTitle",
"type": "string",
"value": "={{ $json.policyTitle }}"
},
{
"id": "id-4",
"name": "auditDate",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-5",
"name": "legalSummary",
"type": "string",
"value": "={{ $json.legalSummary }}"
},
{
"id": "id-6",
"name": "policyAnalysisSummary",
"type": "string",
"value": "={{ $json.policyAnalysisSummary }}"
},
{
"id": "id-7",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-8",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-9",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-10",
"name": "auditNotes",
"type": "string",
"value": "={{ $json.auditNotes }}"
},
{
"id": "id-11",
"name": "stakeholders",
"type": "string",
"value": "={{ $json.stakeholders }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0cedac92-5635-4d9b-b2bd-9c29d9815ad3",
"name": "Audit Trail",
"type": "n8n-nodes-base.dataTable",
"position": [
2912,
1456
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__audit_trail_table__>"
}
},
"typeVersion": 1.1
},
{
"id": "e568185b-819e-4b8e-a6f9-8fb7e03ba59c",
"name": "Split Stakeholders",
"type": "n8n-nodes-base.splitOut",
"position": [
2912,
688
],
"parameters": {
"options": {},
"fieldToSplitOut": "stakeholders"
},
"typeVersion": 1
},
{
"id": "36fd87b9-3fa0-4ea0-bf95-c4a3d58fa6b9",
"name": "Send Stakeholder Email",
"type": "n8n-nodes-base.gmail",
"position": [
3136,
688
],
"parameters": {
"sendTo": "={{ $('Policy Submission Form').item.json.stakeholders }}",
"message": "={{ 'Dear Stakeholder,\\n\\nThe legal policy review for \"' + $('Policy Submission Form').item.json.policyTitle + '\" has been completed.\\n\\n**Approval Status:** ' + $('Legal Governance Agent').item.json.output.approvalStatus.toUpperCase() + '\\n**Risk Level:** ' + $('Legal Governance Agent').item.json.output.riskLevel.toUpperCase() + '\\n**Compliance Score:** ' + $('Legal Governance Agent').item.json.output.complianceScore + '/100\\n\\n**Legal Summary:**\\n' + $('Legal Governance Agent').item.json.output.legalSummary + '\\n\\n**Approval Recommendation:**\\n' + $('Legal Governance Agent').item.json.output.approvalRecommendation + '\\n\\n**Compliance Findings:**\\n' + $('Legal Governance Agent').item.json.output.complianceFindings + '\\n\\nThis is an automated notification from the Legal Governance System.\\n\\nBest regards,\\nLegal Governance Team' }}",
"options": {},
"subject": "={{ 'Policy Review Complete: ' + $('Policy Submission Form').item.json.policyTitle + ' - ' + $('Legal Governance Agent').item.json.output.approvalStatus.toUpperCase() }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "a2b98679-001c-4ecf-96d4-c46d40740e89",
"name": "Post Governance Update",
"type": "n8n-nodes-base.slack",
"position": [
2912,
880
],
"parameters": {
"text": "={{ '\ud83d\udd14 *Policy Review Complete*\\n\\n*Policy:* ' + $('Policy Submission Form').item.json.policyTitle + '\\n*Type:* ' + $('Policy Submission Form').item.json.policyType + '\\n*Status:* ' + $('Legal Governance Agent').item.json.approvalStatus.toUpperCase() + '\\n*Risk Level:* ' + $('Legal Governance Agent').item.json.riskLevel.toUpperCase() + '\\n*Compliance Score:* ' + $('Legal Governance Agent').item.json.complianceScore + '/100\\n\\n*Recommendation:* ' + $('Legal Governance Agent').item.json.approvalRecommendation }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__legal_governance_channel__>"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "2a9aaae6-73ca-4146-8890-bf270039beb1",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1440,
176
],
"parameters": {
"color": 6,
"width": 672,
"height": 352,
"content": "## Prerequisites\n- OpenAI API key (or compatible LLM)\n- Gmail account with OAuth credentials\n- Slack workspace with bot credentials\n- Google Sheets with policy, approval, compliance, and audit tabs pre-created\n## Use Cases\n- Legal teams automating policy submission review and approval classification\n## Customisation\n- Extend routing logic to include partial-approval or escalation tiers for complex policies\n## Benefits\n- Eliminates manual policy triage and stakeholder notification across large submission volumes"
},
"typeVersion": 1
},
{
"id": "bccccab7-6e21-415b-b409-278c83c1acde",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
256
],
"parameters": {
"width": 416,
"height": 272,
"content": "## Setup Steps\n1. Import workflow; configure the Policy Submission Form trigger.\n2. Add AI model credentials to the Legal Governance Agent, Policy Analysis Agent, Compliance Tracking Agent, and Legal Summary Agent.\n3. Connect Gmail credentials to the Email Notification Tool; link Slack credentials to the Slack Notification Tool.\n4. Link Google Sheets credentials; set sheet IDs for Policy Records, Approvals, Compliance, and Audit Trail tabs."
},
"typeVersion": 1
},
{
"id": "ea8b1680-7a6e-4f4b-9346-ae97083550a9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
224,
256
],
"parameters": {
"width": 672,
"height": 304,
"content": "## How It Works\nThis workflow automates legal policy governance for legal teams, policy managers, and compliance officers, eliminating manual document review, approval classification, and multi-channel stakeholder distribution. Submitted policy documents are form-triggered, extracted into structured text, and passed to the Legal Governance Agent. Backed by shared memory and a governance model, it coordinates three specialist agents: Policy Analysis (content evaluation), Compliance Tracking (regulatory alignment), and Legal Summary (structured report generation). Gmail and Slack notification tools handle multi-channel alerts in parallel. Outputs are parsed and routed by approval status across four concurrent Google Sheets tracks: policy record storage with stakeholder notifications, approval preparation and tracking, compliance record preparation and tracking, and audit log generation, ensuring a complete, audit-ready governance trail for every submission."
},
"typeVersion": 1
},
{
"id": "0f94f956-4155-40e5-970f-c89329b6e734",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
624
],
"parameters": {
"color": 7,
"width": 464,
"height": 832,
"content": "## Email & Slack Notification Tools\n**Why** \u2014 Multi-channel notifications ensure governance decisions reach stakeholders immediately without manual distribution.\n\n"
},
"typeVersion": 1
},
{
"id": "08e3357f-2b6a-4a22-b29c-6af0720d3dfe",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
640
],
"parameters": {
"color": 7,
"width": 960,
"height": 832,
"content": "## Legal Governance Agent & Specialist Agents\n**Why** \u2014 Coordinates Policy Analysis, Compliance Tracking, and Legal Summary agents in parallel using shared memory for consistent, context-aware policy evaluation.\n"
},
"typeVersion": 1
},
{
"id": "64656730-d1e5-4eaa-84dc-06ad63aaf0e9",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
640
],
"parameters": {
"color": 7,
"width": 576,
"height": 304,
"content": "## Policy Submission & Document Extraction\n**Why** \u2014 Form-triggered ingestion and structured text extraction ensure every policy document enters the pipeline in a consistent, processable format."
},
"typeVersion": 1
},
{
"id": "caac662f-3354-4505-bbe1-0a7e42a3f841",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2160,
592
],
"parameters": {
"color": 7,
"width": 352,
"height": 848,
"content": "## Route by Approval Status\n**Why** \u2014 Rules-based routing separates approved, compliance-flagged, and audit-required records for proportionate, parallel handling."
},
"typeVersion": 1
},
{
"id": "3131cfcd-b5b6-48bb-935d-8350b0782e2b",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2544,
592
],
"parameters": {
"color": 7,
"width": 864,
"height": 1056,
"content": "## Policy Records, Approvals, Compliance & Audit Trail\n**Why** \u2014 Four parallel Google Sheets tracks capture policy storage, approval decisions, compliance status, and audit logs \u2014 maintaining a complete, audit-ready governance record."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "42866cad-c087-4795-b3aa-5a447a023210",
"connections": {
"Prepare Audit Log": {
"main": [
[
{
"node": "Audit Trail",
"type": "main",
"index": 0
}
]
]
},
"Split Stakeholders": {
"main": [
[
{
"node": "Send Stakeholder Email",
"type": "main",
"index": 0
}
]
]
},
"Legal Summary Agent": {
"ai_tool": [
[
{
"node": "Legal Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Legal Summary Model": {
"ai_languageModel": [
[
{
"node": "Legal Summary Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Store Policy Records": {
"main": [
[
{
"node": "Split Stakeholders",
"type": "main",
"index": 0
},
{
"node": "Post Governance Update",
"type": "main",
"index": 0
}
]
]
},
"Policy Analysis Agent": {
"ai_tool": [
[
{
"node": "Legal Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Policy Analysis Model": {
"ai_languageModel": [
[
{
"node": "Policy Analysis Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Prepare Policy Record": {
"main": [
[
{
"node": "Store Policy Records",
"type": "main",
"index": 0
},
{
"node": "Prepare Approval Record",
"type": "main",
"index": 0
},
{
"node": "Prepare Compliance Record",
"type": "main",
"index": 0
},
{
"node": "Prepare Audit Log",
"type": "main",
"index": 0
}
]
]
},
"Legal Governance Agent": {
"main": [
[
{
"node": "Route by Approval Status",
"type": "main",
"index": 0
}
]
]
},
"Legal Governance Model": {
"ai_languageModel": [
[
{
"node": "Legal Governance Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Policy Submission Form": {
"main": [
[
{
"node": "Extract Policy Document",
"type": "main",
"index": 0
}
]
]
},
"Email Notification Tool": {
"ai_tool": [
[
{
"node": "Legal Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Extract Policy Document": {
"main": [
[
{
"node": "Legal Governance Agent",
"type": "main",
"index": 0
}
]
]
},
"Prepare Approval Record": {
"main": [
[
{
"node": "Track Approvals",
"type": "main",
"index": 0
}
]
]
},
"Slack Notification Tool": {
"ai_tool": [
[
{
"node": "Legal Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Governance Output Parser": {
"ai_outputParser": [
[
{
"node": "Legal Governance Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Route by Approval Status": {
"main": [
[
{
"node": "Prepare Policy Record",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Policy Record",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Policy Record",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Policy Record",
"type": "main",
"index": 0
}
]
]
},
"Compliance Tracking Agent": {
"ai_tool": [
[
{
"node": "Legal Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Compliance Tracking Model": {
"ai_languageModel": [
[
{
"node": "Compliance Tracking Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Prepare Compliance Record": {
"main": [
[
{
"node": "Track Compliance",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2openAiApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates legal policy governance for legal teams, policy managers, and compliance officers, eliminating manual document review, approval classification, and multi-channel stakeholder distribution. Submitted policy documents are form-triggered, extracted into…
Source: https://n8n.io/workflows/14436/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.
This workflow serves as a comprehensive "Workflow Nodes SEO & Documentation Generator". It uses AI to analyze, rename, and document n8n workflows, offering a streamlined way to optimize workflow reada
This workflow automates end-to-end contract and invoice management using AI intelligence. It processes proposals through intelligent contract generation, approval workflows, and automated invoicing. O
Automates SaaS operations by consolidating user management, AI-driven support triage, analytics, and billing into one unified system. User signups flow through registration, support requests route via
This workflow automates end-to-end candidate evaluation for HR teams and recruiters overwhelmed by high-volume hiring. Designed for talent acquisition professionals, hiring managers, and HR operations