This workflow corresponds to n8n.io template #14426 — 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": "mLG9RV1ET0em2G6Y",
"name": "AI-powered ESG sustainability governance with compliance routing and tracking",
"tags": [],
"nodes": [
{
"id": "930cbe9c-6b2e-44ff-a679-2d9bd1458a04",
"name": "Periodic Sustainability Monitoring",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
256,
400
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"typeVersion": 1.3
},
{
"id": "327b9cd8-b505-4e18-9284-166cd4e77819",
"name": "External ESG Platform Events",
"type": "n8n-nodes-base.webhook",
"position": [
256,
592
],
"parameters": {
"path": "sustainability-events",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "e7e61ba9-02f6-48ec-8063-fe286dab79c4",
"name": "Normalize Sustainability Input",
"type": "n8n-nodes-base.set",
"position": [
480,
496
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "eventType",
"type": "string",
"value": "={{ $json.eventType || 'scheduled_monitoring' }}"
},
{
"id": "id-2",
"name": "carbonFootprint",
"type": "number",
"value": "={{ $json.carbonFootprint || $json.metrics?.carbonFootprint || 0 }}"
},
{
"id": "id-3",
"name": "energyConsumption",
"type": "number",
"value": "={{ $json.energyConsumption || $json.metrics?.energyConsumption || 0 }}"
},
{
"id": "id-4",
"name": "resourceUtilization",
"type": "number",
"value": "={{ $json.resourceUtilization || $json.metrics?.resourceUtilization || 0 }}"
},
{
"id": "id-5",
"name": "complianceSignals",
"type": "array",
"value": "={{ $json.complianceSignals || $json.metrics?.complianceSignals || [] }}"
},
{
"id": "id-6",
"name": "timestamp",
"type": "string",
"value": "={{ $json.timestamp || $now.toISO() }}"
},
{
"id": "id-7",
"name": "source",
"type": "string",
"value": "={{ $json.source || 'internal' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "57303e02-afd8-4ca6-9557-38cb990f36e8",
"name": "Green Governance Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1104,
496
],
"parameters": {
"text": "={{ $json.eventType + ': Carbon=' + $json.carbonFootprint + 'kg, Energy=' + $json.energyConsumption + 'kWh, Resources=' + $json.resourceUtilization + '%, Compliance Signals=' + JSON.stringify($json.complianceSignals) + ', Source=' + $json.source + ', Timestamp=' + $json.timestamp }}",
"options": {
"systemMessage": "You are the Green Governance Agent orchestrating sustainability approvals, access controls, and compliance documentation across green economy platforms and enterprise sustainability initiatives. Your responsibilities include: 1) Coordinating with the Sustainability Oversight Agent to validate environmental metrics, 2) Making governance decisions on sustainability approvals based on ESG requirements, 3) Tracking green KPI performance and environmental impact lineage, 4) Automating sustainability governance processes, 5) Generating audit-ready compliance documentation, 6) Managing access controls for sustainability data, 7) Coordinating across multi-cloud and enterprise platforms. Use the sustainability_oversight_validator tool to validate metrics before making governance decisions. Ensure all actions are compliant, traceable, and aligned with green economy principles."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "bd259f2a-111c-4084-babc-844cc730094d",
"name": "Governance Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
912,
688
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.2
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "54039690-1b8f-4095-b400-c36b08c038ca",
"name": "ESG Compliance Output Schema",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1520,
1008
],
"parameters": {
"jsonSchemaExample": "{\n\t\"approvalStatus\": \"approved\",\n\t\"complianceScore\": 85.5,\n\t\"carbonFootprintValidated\": 1250.75,\n\t\"energyEfficiencyRating\": \"A+\",\n\t\"resourceUtilizationScore\": 92.3,\n\t\"greenPolicyCompliance\": true,\n\t\"esgRequirementsMet\": [\"ISO 14001\", \"GRI Standards\", \"TCFD\"],\n\t\"sustainabilityKPIs\": {\n\t\t\"renewableEnergyPercentage\": 65,\n\t\t\"wasteReduction\": 40,\n\t\t\"waterConservation\": 30\n\t},\n\t\"governanceActions\": [\"Implement carbon offset program\", \"Enhance energy monitoring\"],\n\t\"auditTrail\": \"ESG compliance audit completed on 2024-01-15\",\n\t\"riskLevel\": \"low\",\n\t\"recommendations\": [\"Increase renewable energy usage\", \"Optimize resource allocation\", \"Strengthen sustainability reporting\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "4a4aaaf0-438b-49eb-a015-f97104ca093d",
"name": "Sustainability Oversight Agent Tool",
"type": "@n8n/n8n-nodes-langchain.agentTool",
"position": [
912,
992
],
"parameters": {
"text": "={{ $fromAI('metrics_data', 'Environmental metrics and compliance data to validate') }}",
"options": {
"systemMessage": "You are the Sustainability Oversight Agent responsible for validating environmental impact metrics with precision and rigor. Analyze carbon footprint data, energy consumption patterns, resource utilization efficiency, and green policy compliance signals. Validate against ESG requirements, industry standards, and regulatory frameworks. Calculate sustainability KPIs, identify compliance gaps, assess environmental impact severity, and provide detailed validation reports. Use available tools for calculations and data retrieval. Be thorough, data-driven, and focused on accuracy."
},
"toolDescription": "Validates environmental impact metrics including carbon footprint, energy consumption, resource utilization, and green policy compliance signals. Returns detailed validation results and ESG requirement assessments."
},
"typeVersion": 3
},
{
"id": "94042d83-f340-466d-926d-8c84619ea0a9",
"name": "Oversight Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
912,
1264
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {
"temperature": 0.1
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "55e957f5-b65e-48ca-9c77-eb3415c79bce",
"name": "Sustainability Metrics Calculator",
"type": "@n8n/n8n-nodes-langchain.toolCalculator",
"position": [
1104,
1264
],
"parameters": {},
"typeVersion": 1
},
{
"id": "ca938994-5b99-4384-b398-3968142b8e2a",
"name": "ESG Scoring Engine",
"type": "@n8n/n8n-nodes-langchain.toolCode",
"position": [
1312,
1264
],
"parameters": {
"jsCode": "// ESG Scoring Calculator\n// Accepts environmental metrics and calculates comprehensive ESG scores\n\n// Parse the input query (expecting JSON string or object)\nlet metrics;\ntry {\n metrics = typeof query === 'string' ? JSON.parse(query) : query;\n} catch (e) {\n return JSON.stringify({ error: 'Invalid input format. Expected JSON with carbon, energy, and resource data.' });\n}\n\nconst carbon = metrics.carbonFootprint || metrics.carbon || 0;\nconst energy = metrics.energyConsumption || metrics.energy || 0;\nconst resources = metrics.resourceUtilization || metrics.resources || 0;\n\n// Calculate Carbon Efficiency Score (0-100, lower carbon is better)\nconst carbonScore = Math.max(0, 100 - (carbon / 50)); // Assuming 5000kg is poor, 0 is perfect\n\n// Calculate Energy Efficiency Score (0-100, lower consumption is better)\nconst energyScore = Math.max(0, 100 - (energy / 100)); // Assuming 10000kWh is poor, 0 is perfect\n\n// Resource Utilization Score (already a percentage, higher is better)\nconst resourceScore = Math.min(100, resources);\n\n// Overall ESG Score (weighted average)\nconst esgScore = (carbonScore * 0.4 + energyScore * 0.35 + resourceScore * 0.25).toFixed(2);\n\n// Energy Efficiency Rating\nlet energyRating;\nif (energyScore >= 90) energyRating = 'A+';\nelse if (energyScore >= 80) energyRating = 'A';\nelse if (energyScore >= 70) energyRating = 'B';\nelse if (energyScore >= 60) energyRating = 'C';\nelse energyRating = 'D';\n\n// Risk Level Assessment\nlet riskLevel;\nif (esgScore >= 80) riskLevel = 'low';\nelse if (esgScore >= 60) riskLevel = 'medium';\nelse riskLevel = 'high';\n\n// Compliance Status\nconst complianceStatus = esgScore >= 70 ? 'compliant' : 'non-compliant';\n\n// Build result object\nconst result = {\n esgScore: parseFloat(esgScore),\n carbonScore: parseFloat(carbonScore.toFixed(2)),\n energyScore: parseFloat(energyScore.toFixed(2)),\n resourceScore: parseFloat(resourceScore.toFixed(2)),\n energyEfficiencyRating: energyRating,\n riskLevel: riskLevel,\n complianceStatus: complianceStatus,\n carbonFootprintValidated: carbon,\n energyConsumptionValidated: energy,\n resourceUtilizationValidated: resources,\n sustainabilityKPIs: {\n carbonEfficiency: carbonScore,\n energyEfficiency: energyScore,\n resourceOptimization: resourceScore\n }\n};\n\nreturn JSON.stringify(result, null, 2);",
"description": "Calculates comprehensive ESG scores, carbon footprint metrics, energy efficiency ratios, resource utilization percentages, and sustainability KPI performance based on input environmental data"
},
"typeVersion": 1.3
},
{
"id": "34d69e6f-ed46-495b-9b7b-9382e85d0364",
"name": "Multi-Cloud Sustainability API",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
1456,
1264
],
"parameters": {
"url": "={{ $fromAI('api_endpoint', 'The API endpoint to query for sustainability data', 'string') }}",
"options": {},
"toolDescription": "Retrieves real-time sustainability metrics, emissions data, and resource utilization statistics from multi-cloud monitoring platforms and enterprise ESG systems"
},
"typeVersion": 4.4
},
{
"id": "1bb3ec8c-a62c-49d0-804e-c59ab05ace97",
"name": "ESG Reporting Sheets Tool",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
1600,
1264
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
},
"descriptionType": "manual",
"toolDescription": "Reads ESG compliance thresholds, industry benchmarks, and sustainability baseline data from Google Sheets for validation and comparison"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "88cc074d-ada0-4c87-9124-89156bf713d7",
"name": "Governance Alerts Tool",
"type": "n8n-nodes-base.slackTool",
"position": [
1200,
992
],
"parameters": {
"text": "={{ $fromAI('alert_message', 'The alert message content', 'string') }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $fromAI('slack_channel', 'The Slack channel to send the alert to', 'string') }}"
},
"otherOptions": {},
"authentication": "oAuth2",
"descriptionType": "manual",
"toolDescription": "Sends sustainability alerts, ESG compliance notifications, and governance approval requests to designated Slack channels"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "c4dd16b3-a657-422e-9070-976f5374d939",
"name": "Compliance Documentation Tool",
"type": "n8n-nodes-base.airtableTool",
"position": [
1344,
992
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": ""
},
"table": {
"__rl": true,
"mode": "id",
"value": "={{ $fromAI('table_name', 'The Airtable table to store compliance documentation', 'string') }}"
},
"options": {},
"operation": "create",
"descriptionType": "manual",
"toolDescription": "Creates audit-ready compliance documentation records in Airtable with environmental impact lineage, governance actions, and ESG validation results"
},
"typeVersion": 2.2
},
{
"id": "10d7e8cc-fc39-46b2-8b2e-c82bdfecdff9",
"name": "Route by Approval Status",
"type": "n8n-nodes-base.switch",
"position": [
1632,
480
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"string": [
{
"value1": "={{ $json.approvalStatus }}",
"value2": "approved",
"operation": "equals"
}
]
}
},
{
"conditions": {
"string": [
{
"value1": "={{ $json.approvalStatus }}",
"value2": "needs_review",
"operation": "equals"
}
]
}
},
{
"conditions": {
"string": [
{
"value1": "={{ $json.approvalStatus }}",
"value2": "rejected",
"operation": "equals"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "bebfb315-df07-4c7b-b7e1-2e873b091204",
"name": "Store Approved Sustainability Records",
"type": "n8n-nodes-base.dataTable",
"position": [
2080,
688
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__approved_sustainability_records__>"
}
},
"typeVersion": 1.1
},
{
"id": "1a19f88e-4a28-4c8f-aba7-f70b83fadd63",
"name": "Send Review Request",
"type": "n8n-nodes-base.slack",
"position": [
1856,
496
],
"parameters": {
"text": "=\ud83d\udd0d **Sustainability Review Required**\n\n**Compliance Score:** {{ $json.complianceScore }}\n**Carbon Footprint:** {{ $json.carbonFootprintValidated }} kg CO2e\n**Energy Rating:** {{ $json.energyEfficiencyRating }}\n**Risk Level:** {{ $json.riskLevel }}\n\n**ESG Requirements:** {{ JSON.stringify($json.esgRequirementsMet) }}\n\n**Recommendations:**\n{{ $json.recommendations.join('\\n') }}\n\n**Audit Trail:** {{ $json.auditTrail }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__sustainability_review_channel__>"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "5efe9d06-82bc-421d-812c-ec1088733f85",
"name": "Log Rejected Items",
"type": "n8n-nodes-base.dataTable",
"position": [
2080,
304
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__rejected_sustainability_items__>"
}
},
"typeVersion": 1.1
},
{
"id": "e7762aa8-602a-4c22-b87d-ef2012fb54fa",
"name": "Prepare Approved Record",
"type": "n8n-nodes-base.set",
"position": [
1856,
688
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-2",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-3",
"name": "carbonFootprint",
"type": "number",
"value": "={{ $json.carbonFootprintValidated }}"
},
{
"id": "id-4",
"name": "energyRating",
"type": "string",
"value": "={{ $json.energyEfficiencyRating }}"
},
{
"id": "id-5",
"name": "resourceScore",
"type": "number",
"value": "={{ $json.resourceUtilizationScore }}"
},
{
"id": "id-6",
"name": "greenCompliance",
"type": "boolean",
"value": "={{ $json.greenPolicyCompliance }}"
},
{
"id": "id-7",
"name": "esgRequirements",
"type": "string",
"value": "={{ JSON.stringify($json.esgRequirementsMet) }}"
},
{
"id": "id-8",
"name": "kpis",
"type": "string",
"value": "={{ JSON.stringify($json.sustainabilityKPIs) }}"
},
{
"id": "id-9",
"name": "governanceActions",
"type": "string",
"value": "={{ JSON.stringify($json.governanceActions) }}"
},
{
"id": "id-10",
"name": "auditTrail",
"type": "string",
"value": "={{ $json.auditTrail }}"
},
{
"id": "id-11",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-12",
"name": "timestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "70659d96-bdca-45ce-9329-c5878ed852b4",
"name": "Update ESG Dashboard",
"type": "n8n-nodes-base.googleSheets",
"position": [
2752,
1136
],
"parameters": {
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "82da3a03-132e-478a-ba3a-579313e77d67",
"name": "Send Compliance Report",
"type": "n8n-nodes-base.gmail",
"position": [
2304,
400
],
"parameters": {
"sendTo": "<__PLACEHOLDER_VALUE__compliance_stakeholder_email__>",
"message": "=**Sustainability Governance Report**\n\n**Status:** {{ $json.approvalStatus }}\n**Compliance Score:** {{ $json.complianceScore }}/100\n**Risk Level:** {{ $json.riskLevel }}\n\n**Environmental Metrics:**\n- Carbon Footprint: {{ $json.carbonFootprint }} kg CO2e\n- Energy Efficiency: {{ $json.energyRating }}\n- Resource Utilization: {{ $json.resourceScore }}%\n- Green Policy Compliance: {{ $json.greenCompliance ? 'Yes' : 'No' }}\n\n**ESG Requirements Met:**\n{{ JSON.stringify($json.esgRequirements, null, 2) }}\n\n**Sustainability KPIs:**\n{{ JSON.stringify($json.kpis, null, 2) }}\n\n**Governance Actions:**\n{{ JSON.stringify($json.governanceActions, null, 2) }}\n\n**Audit Trail:**\n{{ $json.auditTrail }}\n\nThis is an automated compliance report generated by the Green Governance Agent.",
"options": {},
"subject": "=ESG Compliance Report - {{ $json.approvalStatus.toUpperCase() }} - {{ $now.toFormat('yyyy-MM-dd') }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "95438d6f-c47a-4133-b30a-ac4fc18ba674",
"name": "Sync to Enterprise ESG Platform",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
2304,
592
],
"parameters": {
"url": "<__PLACEHOLDER_VALUE__enterprise_esg_platform_api__>",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "approvalStatus",
"value": "={{ $json.approvalStatus }}"
},
{
"name": "complianceScore",
"value": "={{ $json.complianceScore }}"
},
{
"name": "carbonFootprint",
"value": "={{ $json.carbonFootprint }}"
},
{
"name": "energyRating",
"value": "={{ $json.energyRating }}"
},
{
"name": "resourceScore",
"value": "={{ $json.resourceScore }}"
},
{
"name": "greenCompliance",
"value": "={{ $json.greenCompliance }}"
},
{
"name": "esgRequirements",
"value": "={{ $json.esgRequirements }}"
},
{
"name": "kpis",
"value": "={{ $json.kpis }}"
},
{
"name": "governanceActions",
"value": "={{ $json.governanceActions }}"
},
{
"name": "auditTrail",
"value": "={{ $json.auditTrail }}"
},
{
"name": "riskLevel",
"value": "={{ $json.riskLevel }}"
},
{
"name": "timestamp",
"value": "={{ $json.timestamp }}"
}
]
}
},
"typeVersion": 4.4
},
{
"id": "2f835735-3732-4aa2-b690-0bcd26da8698",
"name": "Track Environmental Impact Lineage",
"type": "n8n-nodes-base.dataTable",
"position": [
2528,
880
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__environmental_impact_lineage__>"
}
},
"typeVersion": 1.1
},
{
"id": "875a5f40-ba89-468f-b5f0-b19b277efa4e",
"name": "Prepare Lineage Record",
"type": "n8n-nodes-base.set",
"position": [
2304,
880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "recordId",
"type": "string",
"value": "={{ $json.approvalStatus + '_' + $now.toMillis() }}"
},
{
"id": "id-2",
"name": "eventType",
"type": "string",
"value": "={{ $('Normalize Sustainability Input').item.json.eventType }}"
},
{
"id": "id-3",
"name": "source",
"type": "string",
"value": "={{ $('Normalize Sustainability Input').item.json.source }}"
},
{
"id": "id-4",
"name": "inputTimestamp",
"type": "string",
"value": "={{ $('Normalize Sustainability Input').item.json.timestamp }}"
},
{
"id": "id-5",
"name": "validationTimestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-6",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-7",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-8",
"name": "carbonFootprintOriginal",
"type": "number",
"value": "={{ $('Normalize Sustainability Input').item.json.carbonFootprint }}"
},
{
"id": "id-9",
"name": "carbonFootprintValidated",
"type": "number",
"value": "={{ $json.carbonFootprint }}"
},
{
"id": "id-10",
"name": "energyConsumptionOriginal",
"type": "number",
"value": "={{ $('Normalize Sustainability Input').item.json.energyConsumption }}"
},
{
"id": "id-11",
"name": "energyEfficiencyRating",
"type": "string",
"value": "={{ $json.energyRating }}"
},
{
"id": "id-12",
"name": "resourceUtilizationOriginal",
"type": "number",
"value": "={{ $('Normalize Sustainability Input').item.json.resourceUtilization }}"
},
{
"id": "id-13",
"name": "resourceUtilizationScore",
"type": "number",
"value": "={{ $json.resourceScore }}"
},
{
"id": "id-14",
"name": "governanceActions",
"type": "string",
"value": "={{ JSON.stringify($json.governanceActions) }}"
},
{
"id": "id-15",
"name": "auditTrail",
"type": "string",
"value": "={{ $json.auditTrail }}"
},
{
"id": "id-16",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d3c3fd61-a5d4-4d4b-8254-7b8af71560e7",
"name": "Log API Sync Errors",
"type": "n8n-nodes-base.dataTable",
"position": [
2752,
496
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__api_sync_errors__>"
}
},
"typeVersion": 1.1
},
{
"id": "a77e2769-28e8-495a-a91f-93a882b591dd",
"name": "Alert on Sync Failure",
"type": "n8n-nodes-base.slack",
"position": [
2752,
688
],
"parameters": {
"text": "=\u26a0\ufe0f **Enterprise ESG Platform Sync Failed**\n\n**Error:** {{ $json.error.message }}\n**Timestamp:** {{ $now.toISO() }}\n\n**Record Details:**\n- Approval Status: {{ $('Prepare Approved Record').item.json.approvalStatus }}\n- Compliance Score: {{ $('Prepare Approved Record').item.json.complianceScore }}\n- Carbon Footprint: {{ $('Prepare Approved Record').item.json.carbonFootprint }} kg CO2e\n\nPlease investigate and retry the sync manually.",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__sustainability_alerts_channel__>"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "b5cdbc7d-7614-41ac-9f57-3d954c620240",
"name": "Track Green KPI Performance",
"type": "n8n-nodes-base.dataTable",
"position": [
2976,
880
],
"parameters": {
"columns": {
"value": null,
"mappingMode": "autoMapInputData"
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__green_kpi_performance__>"
}
},
"typeVersion": 1.1
},
{
"id": "970a4bbb-0c72-45ad-9898-56a4f42e0281",
"name": "Prepare KPI Record",
"type": "n8n-nodes-base.set",
"position": [
2752,
880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "timestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-2",
"name": "kpiType",
"type": "string",
"value": "sustainability_performance"
},
{
"id": "id-3",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-4",
"name": "carbonFootprint",
"type": "number",
"value": "={{ $json.carbonFootprint }}"
},
{
"id": "id-5",
"name": "energyRating",
"type": "string",
"value": "={{ $json.energyRating }}"
},
{
"id": "id-6",
"name": "resourceScore",
"type": "number",
"value": "={{ $json.resourceScore }}"
},
{
"id": "id-7",
"name": "greenCompliance",
"type": "boolean",
"value": "={{ $json.greenCompliance }}"
},
{
"id": "id-8",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-9",
"name": "kpiDetails",
"type": "string",
"value": "={{ JSON.stringify($json.kpis) }}"
},
{
"id": "id-10",
"name": "period",
"type": "string",
"value": "={{ $now.toFormat('yyyy-MM') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1e30e816-a932-4b55-8fb0-fd1acafb7f49",
"name": "Prepare Rejected Record",
"type": "n8n-nodes-base.set",
"position": [
1856,
304
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "approvalStatus",
"type": "string",
"value": "={{ $json.approvalStatus }}"
},
{
"id": "id-2",
"name": "complianceScore",
"type": "number",
"value": "={{ $json.complianceScore }}"
},
{
"id": "id-3",
"name": "carbonFootprint",
"type": "number",
"value": "={{ $json.carbonFootprintValidated }}"
},
{
"id": "id-4",
"name": "riskLevel",
"type": "string",
"value": "={{ $json.riskLevel }}"
},
{
"id": "id-5",
"name": "rejectionReasons",
"type": "string",
"value": "={{ JSON.stringify($json.recommendations) }}"
},
{
"id": "id-6",
"name": "auditTrail",
"type": "string",
"value": "={{ $json.auditTrail }}"
},
{
"id": "id-7",
"name": "timestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "310d2246-9824-4110-a123-f11f717d6384",
"name": "Prepare Error Record",
"type": "n8n-nodes-base.set",
"position": [
2528,
592
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "errorMessage",
"type": "string",
"value": "={{ $json.error.message }}"
},
{
"id": "id-2",
"name": "errorType",
"type": "string",
"value": "={{ $json.error.name }}"
},
{
"id": "id-3",
"name": "approvalStatus",
"type": "string",
"value": "={{ $('Prepare Approved Record').item.json.approvalStatus }}"
},
{
"id": "id-4",
"name": "complianceScore",
"type": "number",
"value": "={{ $('Prepare Approved Record').item.json.complianceScore }}"
},
{
"id": "id-5",
"name": "carbonFootprint",
"type": "number",
"value": "={{ $('Prepare Approved Record').item.json.carbonFootprint }}"
},
{
"id": "id-6",
"name": "timestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "id-7",
"name": "syncAttempt",
"type": "string",
"value": "enterprise_esg_platform"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c2f1c7cc-15c4-4f21-a2f7-f1f9ef591a2f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
880
],
"parameters": {
"color": 7,
"width": 1504,
"height": 576,
"content": "## Sustainability Oversight Sub-Agent & ESG Scoring Engine\n**Why** \u2014 Applies governance rules and quantitative scoring to surface non-compliant records early."
},
"typeVersion": 1
},
{
"id": "58c07aa9-e7b7-415a-9b22-f30510ff0a93",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2256,
160
],
"parameters": {
"color": 7,
"width": 432,
"height": 1024,
"content": "## Synchronise, Track Environmental Impact Lineage & Green KPI Performance\n**Why** \u2014 Maintains auditable data lineage and performance records required for regulatory reporting."
},
"typeVersion": 1
},
{
"id": "282086bb-1abe-436b-ae42-6f0d6f8b017b",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1552,
208
],
"parameters": {
"color": 7,
"width": 656,
"height": 640,
"content": "## Route by Approval Status\n**Why** \u2014 Rules-based routing separates rejected, under-review, and approved records for appropriate handling.\n "
},
"typeVersion": 1
},
{
"id": "eeffd6e1-8f7a-4580-a4cf-c932b071b494",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
320
],
"parameters": {
"color": 7,
"width": 784,
"height": 512,
"content": "## Green Governance Agent\n**Why** \u2014 Orchestrates ESG scoring, compliance checks, and documentation generation in one coordinated pass."
},
"typeVersion": 1
},
{
"id": "79ce4150-78e0-439d-adc5-4c5356e39a47",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
320
],
"parameters": {
"color": 7,
"width": 592,
"height": 416,
"content": "## Normalise Sustainability Input\n**Why** \u2014 Standardises heterogeneous ESG data before AI processing to prevent scoring errors."
},
"typeVersion": 1
},
{
"id": "962eb213-14d0-4dac-a365-f75b0a599ef7",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
-208
],
"parameters": {
"color": 6,
"width": 416,
"height": 416,
"content": "## Prerequisites\n- OpenAI API key (or compatible LLM)\n- Slack workspace with bot credentials\n- Google Sheets with ESG log tabs pre-created\n- Enterprise ESG platform API endpoint access\n## Use Cases\n- Corporations automating quarterly ESG compliance report generation\n## Customisation\n- Swap ESG Scoring Engine thresholds to match regional regulatory frameworks (EU Taxonomy, GRI, SASB)\n## Benefits\n- Eliminates manual ESG data aggregation, cutting reporting cycle time significantly"
},
"typeVersion": 1
},
{
"id": "aeae0570-6324-47d8-9354-f1c85c994a7b",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
-112
],
"parameters": {
"width": 368,
"height": 320,
"content": "## Setup Steps\n1. Import workflow and configure the periodic trigger interval and ESG platform webhook URL.\n2. Add AI model credentials to the Green Governance Agent and Sustainability Oversight Sub-Agent.\n3. Connect Slack credentials to Governance Alerts Tool and Sync Failure Alert nodes.\n4. Link Google Sheets credentials; set sheet IDs for Rejected Items, etc.\n5. Configure the Multi-Cloud Sustainability API and Enterprise ESG Platform sync endpoint URLs.\n6. Set ESG scoring thresholds in the ESG Scoring Engine node.\n"
},
"typeVersion": 1
},
{
"id": "1d1700ea-59fc-4dc2-ad49-0eb628b8f767",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
224,
-112
],
"parameters": {
"width": 624,
"height": 336,
"content": "## How It Works\nThis workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves the challenge of manually aggregating multi-source ESG data, applying scoring logic, and routing records through approval chains, a process that is slow, error-prone, and difficult to audit. Sustainability data enters via two sources: a periodic scheduler and an external ESG platform webhook. Inputs are normalised and passed to a Green Governance Agent equipped with a Sustainability Oversight Sub-Agent, ESG Scoring Engine, Multi-Cloud Sustainability API, Governance Alerts Tool, Compliance Documentation Tool, and ESG Reporting Sheets Tool. The agent produces a structured compliance output, which is then routed by approval status, rejected records are logged, review requests are sent via Slack, and approved records are stored and synced to the enterprise ESG platform. Sync errors trigger Slack alerts and error logging. Approved data simultaneously updates environmental impact lineage, KPI performance tracking, and the ESG dashboard in Google Sheets.\n"
},
"typeVersion": 1
},
{
"id": "8727416c-1db9-4b1b-b092-24b292041bcc",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2704,
352
],
"parameters": {
"color": 7,
"width": 480,
"height": 944,
"content": "## Update ESG Dashboard\n**Why** \u2014 Keeps the Google Sheets dashboard current for real-time stakeholder visibility."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "c6b60819-218d-4d4d-a9de-19de396a7aa6",
"connections": {
"Oversight Model": {
"ai_languageModel": [
[
{
"node": "Sustainability Oversight Agent Tool",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Governance Model": {
"ai_languageModel": [
[
{
"node": "Green Governance Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"ESG Scoring Engine": {
"ai_tool": [
[
{
"node": "Sustainability Oversight Agent Tool",
"type": "ai_tool",
"index": 0
}
]
]
},
"Prepare KPI Record": {
"main": [
[
{
"node": "Track Green KPI Performance",
"type": "main",
"index": 0
}
]
]
},
"Prepare Error Record": {
"main": [
[
{
"node": "Log API Sync Errors",
"type": "main",
"index": 0
},
{
"node": "Alert on Sync Failure",
"type": "main",
"index": 0
}
]
]
},
"Governance Alerts Tool": {
"ai_tool": [
[
{
"node": "Green Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Green Governance Agent": {
"main": [
[
{
"node": "Route by Approval Status",
"type": "main",
"index": 0
}
]
]
},
"Prepare Lineage Record": {
"main": [
[
{
"node": "Track Environmental Impact Lineage",
"type": "main",
"index": 0
}
]
]
},
"Prepare Approved Record": {
"main": [
[
{
"node": "Store Approved Sustainability Records",
"type": "main",
"index": 0
}
]
]
},
"Prepare Rejected Record": {
"main": [
[
{
"node": "Log Rejected Items",
"type": "main",
"index": 0
}
]
]
},
"Route by Approval Status": {
"main": [
[
{
"node": "Prepare Approved Record",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Review Request",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Rejected Record",
"type": "main",
"index": 0
}
]
]
},
"ESG Reporting Sheets Tool": {
"ai_tool": [
[
{
"node": "Sustainability Oversight Agent Tool",
"type": "ai_tool",
"index": 0
}
]
]
},
"ESG Compliance Output Schema": {
"ai_outputParser": [
[
{
"node": "Green Governance Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"External ESG Platform Events": {
"main": [
[
{
"node": "Normalize Sustainability Input",
"type": "main",
"index": 0
}
]
]
},
"Compliance Documentation Tool": {
"ai_tool": [
[
{
"node": "Green Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Multi-Cloud Sustainability API": {
"ai_tool": [
[
{
"node": "Sustainability Oversight Agent Tool",
"type": "ai_tool",
"index": 0
}
]
]
},
"Normalize Sustainability Input": {
"main": [
[
{
"node": "Green Governance Agent",
"type": "main",
"index": 0
}
]
]
},
"Sync to Enterprise ESG Platform": {
"main": [
[],
[
{
"node": "Prepare Error Record",
"type": "main",
"index": 0
}
]
]
},
"Sustainability Metrics Calculator": {
"ai_tool": [
[
{
"node": "Sustainability Oversight Agent Tool",
"type": "ai_tool",
"index": 0
}
]
]
},
"Periodic Sustainability Monitoring": {
"main": [
[
{
"node": "Normalize Sustainability Input",
"type": "main",
"index": 0
}
]
]
},
"Track Environmental Impact Lineage": {
"main": [
[
{
"node": "Prepare KPI Record",
"type": "main",
"index": 0
}
]
]
},
"Sustainability Oversight Agent Tool": {
"ai_tool": [
[
{
"node": "Green Governance Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Store Approved Sustainability Records": {
"main": [
[
{
"node": "Update ESG Dashboard",
"type": "main",
"index": 0
},
{
"node": "Send Compliance Report",
"type": "main",
"index": 0
},
{
"node": "Sync to Enterprise ESG Platform",
"type": "main",
"index": 0
},
{
"node": "Prepare Lineage Record",
"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.
gmailOAuth2googleSheetsOAuth2ApiopenAiApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves the challenge of manually aggregating multi-source ESG data, applying scoring…
Source: https://n8n.io/workflows/14426/ — 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.
This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
Created by: Peyton Leveillee Last updated: October 2025
SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.
This workflow was born out of a very real problem.
Automate post-purchase workflows by instantly fetching successful Stripe payments, matching them to corresponding automation templates in Google Sheets, and sending customers personalized access email