{
  "workflow": {
    "id": 6567,
    "name": "Automate regulatory compliance monitoring with ScrapeGraphAI and email alerts",
    "views": 572,
    "recentViews": 0,
    "totalViews": 572,
    "createdAt": "2025-07-28T10:53:17.091Z",
    "description": "# How it works\n\nThis workflow automatically monitors government regulatory changes and provides comprehensive compliance tracking and executive alerts.\n\n## Key Steps\n\n1. **Scheduled Monitoring** - Runs daily at 9 AM to check for new regulatory changes from government sources.\n2. **AI-Powered Scraping** - Uses ScrapeGraphAI to extract regulatory information from Federal Register and government websites.\n3. **Impact Assessment** - Analyzes each regulation for business impact, risk factors, and compliance requirements.\n4. **Compliance Tracking** - Creates detailed tracking records with assigned teams, deadlines, and action items.\n5. **Executive Alerts** - Sends prioritized alerts to relevant teams based on impact level and urgency.\n\n## Set up steps\n\n**Setup time: 10-15 minutes**\n\n1. **Configure ScrapeGraphAI credentials** - Add your ScrapeGraphAI API key for web scraping capabilities.\n2. **Set up email connections** - Configure email service to send executive alerts to compliance and legal teams.\n3. **Customize monitoring targets** - Update the government website URLs to monitor specific agencies or regulatory bodies.\n4. **Adjust alert recipients** - Configure email distribution lists for different impact levels (Critical, High, Medium, Low).\n5. **Set up compliance tracking** - Integrate with your project management system for task assignment and progress tracking.\n\n## Key Features\n\n- **Automated Impact Assessment** - Uses AI to evaluate regulatory impact on your business sectors\n- **Priority-Based Alerts** - Sends urgent notifications for critical regulations requiring immediate attention\n- **Compliance Task Generation** - Automatically creates compliance checklists and action items\n- **Team Assignment** - Routes regulations to appropriate teams based on impact level\n- **Deadline Tracking** - Monitors comment deadlines, effective dates, and review timelines\n",
    "workflow": {
      "id": "VhEwspDqzu7ssFVE",
      "meta": {
        "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3",
        "templateCredsSetupCompleted": true
      },
      "name": "My workflow 2",
      "tags": [
        {
          "id": "DxXGubfBzRKh6L8T",
          "name": "Revenue Optimization",
          "createdAt": "2025-07-25T16:24:30.370Z",
          "updatedAt": "2025-07-25T16:24:30.370Z"
        },
        {
          "id": "IxkcJ2IpYIxivoHV",
          "name": "Content Strategy",
          "createdAt": "2025-07-25T12:57:37.677Z",
          "updatedAt": "2025-07-25T12:57:37.677Z"
        },
        {
          "id": "PAKIJ2Mm9EvRcR3u",
          "name": "Trend Monitoring",
          "createdAt": "2025-07-25T12:57:37.670Z",
          "updatedAt": "2025-07-25T12:57:37.670Z"
        },
        {
          "id": "YtfXmaZk44MYedPO",
          "name": "Dynamic Pricing",
          "createdAt": "2025-07-25T16:24:30.369Z",
          "updatedAt": "2025-07-25T16:24:30.369Z"
        }
      ],
      "nodes": [
        {
          "id": "084f3e30-edcd-41a6-a8d4-9b5c003bec82",
          "name": "Schedule Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            240,
            368
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "cronExpression"
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "0ed22ae1-9405-4006-950f-0a56c59bf7da",
          "name": "ScrapeGraphAI",
          "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
          "position": [
            944,
            624
          ],
          "parameters": {
            "userPrompt": "Extract regulatory changes and new rules from this government site. Use the following schema for response: { \"title\": \"Rule Title\", \"agency\": \"SEC\", \"publication_date\": \"2025-01-15\", \"effective_date\": \"2025-03-15\", \"summary\": \"Brief description of the rule\", \"impact_level\": \"High/Medium/Low\", \"affected_sectors\": [\"Financial Services\", \"Banking\"], \"document_url\": \"https://federalregister.gov/...\", \"rule_type\": \"Final Rule/Proposed Rule/Notice\", \"comment_deadline\": \"2025-02-15\" }",
            "websiteUrl": "https://www.federalregister.gov/documents/search?conditions%5Bagencies%5D%5B%5D=securities-and-exchange-commission&conditions%5Bpublication_date%5D%5Bgte%5D={{ $now.minus({ days: 1 }).toISODate() }}"
          },
          "typeVersion": 1
        },
        {
          "id": "f82dfb15-b15a-4436-8256-082f4169de47",
          "name": "Regulation Parser",
          "type": "n8n-nodes-base.code",
          "notes": "Parse and clean\nregulatory data\nfrom scraping",
          "position": [
            1680,
            368
          ],
          "parameters": {
            "jsCode": "// Get the input data from ScrapeGraphAI\nconst inputData = $input.all()[0].json;\n\n// Extract regulatory changes array from result\nconst regulations = inputData.result.regulatory_changes || inputData.result.rules || inputData.result.regulations || inputData.regulations || [];\n\nfunction parseRegulation(regulation) {\n  const {\n    title,\n    agency,\n    publication_date,\n    effective_date,\n    summary,\n    impact_level,\n    affected_sectors,\n    document_url,\n    rule_type,\n    comment_deadline\n  } = regulation;\n\n  // Clean and validate data\n  const cleanTitle = title?.trim() || 'Title not available';\n  const cleanAgency = agency?.trim() || 'Agency not specified';\n  const cleanSummary = summary?.trim() || 'Summary not available';\n  const cleanImpactLevel = impact_level || 'Medium';\n  const cleanRuleType = rule_type || 'Unknown';\n  const cleanUrl = document_url || '#';\n  \n  // Parse dates\n  const pubDate = publication_date ? new Date(publication_date).toLocaleDateString() : 'Not specified';\n  const effDate = effective_date ? new Date(effective_date).toLocaleDateString() : 'Not specified';\n  const commentDate = comment_deadline ? new Date(comment_deadline).toLocaleDateString() : 'N/A';\n  \n  // Handle sectors array\n  const sectors = Array.isArray(affected_sectors) ? affected_sectors : (affected_sectors ? [affected_sectors] : ['General']);\n  \n  return {\n    title: cleanTitle,\n    agency: cleanAgency,\n    publication_date: pubDate,\n    effective_date: effDate,\n    summary: cleanSummary,\n    impact_level: cleanImpactLevel,\n    affected_sectors: sectors,\n    document_url: cleanUrl,\n    rule_type: cleanRuleType,\n    comment_deadline: commentDate,\n    parsed_at: new Date().toISOString()\n  };\n}\n\n// Debug log\nconsole.log(`Found ${regulations.length} regulatory changes`);\n\n// Return each regulation as separate execution with parsed data\nreturn regulations.map(regulation => ({\n  json: parseRegulation(regulation)\n}));"
          },
          "notesInFlow": true,
          "typeVersion": 2
        },
        {
          "id": "0027ecda-5b32-4cfa-b0b4-dac6c967f548",
          "name": "Impact Assessor",
          "type": "n8n-nodes-base.code",
          "notes": "Assess business\nimpact and risk\nlevels",
          "position": [
            2448,
            480
          ],
          "parameters": {
            "jsCode": "// Get parsed regulation data\nconst regulation = $input.all()[0].json;\n\n// Define impact assessment criteria\nfunction assessImpact(regulation) {\n  const { title, summary, affected_sectors, rule_type, agency } = regulation;\n  \n  let impactScore = 0;\n  let riskFactors = [];\n  let opportunities = [];\n  let complianceActions = [];\n  \n  // Impact scoring based on rule type\n  switch (rule_type.toLowerCase()) {\n    case 'final rule':\n      impactScore += 3;\n      complianceActions.push('Immediate compliance review required');\n      break;\n    case 'proposed rule':\n      impactScore += 2;\n      complianceActions.push('Prepare comment response');\n      break;\n    case 'notice':\n      impactScore += 1;\n      complianceActions.push('Monitor for developments');\n      break;\n  }\n  \n  // Sector-specific impact assessment\n  const criticalSectors = ['financial services', 'banking', 'healthcare', 'energy', 'technology'];\n  const matchedCriticalSectors = affected_sectors.filter(sector => \n    criticalSectors.some(critical => sector.toLowerCase().includes(critical.toLowerCase()))\n  );\n  \n  if (matchedCriticalSectors.length > 0) {\n    impactScore += 2;\n    riskFactors.push(`Direct impact on critical sectors: ${matchedCriticalSectors.join(', ')}`);\n  }\n  \n  // Keyword-based impact assessment\n  const highImpactKeywords = ['compliance', 'penalty', 'fine', 'mandatory', 'prohibited', 'required'];\n  const mediumImpactKeywords = ['guidance', 'recommendation', 'best practice', 'voluntary'];\n  const opportunityKeywords = ['incentive', 'tax credit', 'grant', 'funding', 'streamlined'];\n  \n  const textToAnalyze = `${title} ${summary}`.toLowerCase();\n  \n  highImpactKeywords.forEach(keyword => {\n    if (textToAnalyze.includes(keyword)) {\n      impactScore += 1;\n      riskFactors.push(`Contains high-impact keyword: ${keyword}`);\n    }\n  });\n  \n  mediumImpactKeywords.forEach(keyword => {\n    if (textToAnalyze.includes(keyword)) {\n      impactScore += 0.5;\n    }\n  });\n  \n  opportunityKeywords.forEach(keyword => {\n    if (textToAnalyze.includes(keyword)) {\n      opportunities.push(`Potential opportunity: ${keyword}`);\n    }\n  });\n  \n  // Determine final impact level\n  let finalImpactLevel;\n  if (impactScore >= 5) {\n    finalImpactLevel = 'Critical';\n    complianceActions.push('Executive review required within 24 hours');\n  } else if (impactScore >= 3) {\n    finalImpactLevel = 'High';\n    complianceActions.push('Legal and compliance team review required');\n  } else if (impactScore >= 1.5) {\n    finalImpactLevel = 'Medium';\n    complianceActions.push('Department head review recommended');\n  } else {\n    finalImpactLevel = 'Low';\n    complianceActions.push('Standard monitoring sufficient');\n  }\n  \n  return {\n    ...regulation,\n    impact_assessment: {\n      impact_score: impactScore,\n      final_impact_level: finalImpactLevel,\n      risk_factors: riskFactors,\n      opportunities: opportunities,\n      compliance_actions: complianceActions,\n      assessment_date: new Date().toISOString()\n    }\n  };\n}\n\n// Return assessed regulation\nreturn [{ json: assessImpact(regulation) }];"
          },
          "notesInFlow": true,
          "typeVersion": 2
        },
        {
          "id": "72a0346a-6a67-4a07-87f7-ceeb1178e939",
          "name": "Compliance Tracker",
          "type": "n8n-nodes-base.code",
          "notes": "Create compliance\ntracking record\nand tasks",
          "position": [
            3200,
            432
          ],
          "parameters": {
            "jsCode": "// Get assessed regulation data\nconst regulation = $input.all()[0].json;\nconst { impact_assessment, title, agency, effective_date, comment_deadline } = regulation;\n\n// Create compliance tracking record\nfunction createComplianceTracker(regulation) {\n  const compliance = {\n    regulation_id: `REG_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n    title: regulation.title,\n    agency: regulation.agency,\n    status: 'New',\n    priority: regulation.impact_assessment.final_impact_level,\n    key_dates: {\n      publication_date: regulation.publication_date,\n      effective_date: regulation.effective_date,\n      comment_deadline: regulation.comment_deadline,\n      review_due_date: calculateReviewDate(regulation.impact_assessment.final_impact_level)\n    },\n    assigned_team: assignTeam(regulation.impact_assessment.final_impact_level),\n    compliance_tasks: generateComplianceTasks(regulation),\n    tracking_status: {\n      initial_review: 'Pending',\n      impact_analysis: 'Pending',\n      policy_update: 'Pending',\n      training_required: 'Pending',\n      implementation: 'Pending'\n    },\n    created_at: new Date().toISOString(),\n    last_updated: new Date().toISOString()\n  };\n  \n  return {\n    ...regulation,\n    compliance_tracking: compliance\n  };\n}\n\nfunction calculateReviewDate(impactLevel) {\n  const now = new Date();\n  switch (impactLevel) {\n    case 'Critical':\n      return new Date(now.getTime() + 24 * 60 * 60 * 1000).toISOString(); // 1 day\n    case 'High':\n      return new Date(now.getTime() + 3 * 24 * 60 * 60 * 1000).toISOString(); // 3 days\n    case 'Medium':\n      return new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000).toISOString(); // 1 week\n    default:\n      return new Date(now.getTime() + 14 * 24 * 60 * 60 * 1000).toISOString(); // 2 weeks\n  }\n}\n\nfunction assignTeam(impactLevel) {\n  switch (impactLevel) {\n    case 'Critical':\n      return ['Executive Team', 'Legal', 'Compliance', 'Operations'];\n    case 'High':\n      return ['Legal', 'Compliance', 'Department Heads'];\n    case 'Medium':\n      return ['Compliance', 'Relevant Department'];\n    default:\n      return ['Compliance'];\n  }\n}\n\nfunction generateComplianceTasks(regulation) {\n  const baseTasks = [\n    'Review regulation text',\n    'Assess current policy alignment',\n    'Identify compliance gaps'\n  ];\n  \n  const { final_impact_level, compliance_actions } = regulation.impact_assessment;\n  \n  if (final_impact_level === 'Critical' || final_impact_level === 'High') {\n    baseTasks.push(\n      'Conduct legal review',\n      'Update internal policies',\n      'Plan staff training',\n      'Create implementation timeline'\n    );\n  }\n  \n  if (regulation.comment_deadline !== 'N/A') {\n    baseTasks.push('Prepare regulatory comment response');\n  }\n  \n  return baseTasks.concat(compliance_actions);\n}\n\n// Return regulation with compliance tracking\nreturn [{ json: createComplianceTracker(regulation) }];"
          },
          "notesInFlow": true,
          "typeVersion": 2
        },
        {
          "id": "59ac11b9-2a10-4fed-ac03-a73e5d92ec3b",
          "name": "Executive Alert",
          "type": "n8n-nodes-base.code",
          "notes": "Format executive\nalert message",
          "position": [
            3968,
            432
          ],
          "parameters": {
            "jsCode": "// Get regulation with compliance tracking\nconst regulation = $input.all()[0].json;\nconst { impact_assessment, compliance_tracking } = regulation;\n\n// Format executive alert based on impact level\nfunction formatExecutiveAlert(regulation) {\n  const { title, agency, impact_assessment, compliance_tracking } = regulation;\n  const { final_impact_level, risk_factors, opportunities } = impact_assessment;\n  \n  let alertLevel = '⚠️';\n  let urgency = 'Standard';\n  \n  switch (final_impact_level) {\n    case 'Critical':\n      alertLevel = '🚨';\n      urgency = 'URGENT';\n      break;\n    case 'High':\n      alertLevel = '⚠️';\n      urgency = 'High Priority';\n      break;\n    case 'Medium':\n      alertLevel = '📋';\n      urgency = 'Medium Priority';\n      break;\n    case 'Low':\n      alertLevel = 'ℹ️';\n      urgency = 'Low Priority';\n      break;\n  }\n  \n  let message = `${alertLevel} **REGULATORY ALERT - ${urgency}**\\n\\n`;\n  message += `**Regulation:** ${title}\\n`;\n  message += `**Agency:** ${agency}\\n`;\n  message += `**Impact Level:** ${final_impact_level}\\n`;\n  message += `**Publication Date:** ${regulation.publication_date}\\n`;\n  message += `**Effective Date:** ${regulation.effective_date}\\n\\n`;\n  \n  message += `**📊 SUMMARY**\\n${regulation.summary}\\n\\n`;\n  \n  if (risk_factors.length > 0) {\n    message += `**⚠️ RISK FACTORS**\\n`;\n    risk_factors.forEach(risk => {\n      message += `• ${risk}\\n`;\n    });\n    message += `\\n`;\n  }\n  \n  if (opportunities.length > 0) {\n    message += `**💡 OPPORTUNITIES**\\n`;\n    opportunities.forEach(opp => {\n      message += `• ${opp}\\n`;\n    });\n    message += `\\n`;\n  }\n  \n  message += `**👥 ASSIGNED TEAMS**\\n${compliance_tracking.assigned_team.join(', ')}\\n\\n`;\n  \n  message += `**📅 KEY DATES**\\n`;\n  message += `• Review Due: ${new Date(compliance_tracking.key_dates.review_due_date).toLocaleDateString()}\\n`;\n  if (regulation.comment_deadline !== 'N/A') {\n    message += `• Comment Deadline: ${regulation.comment_deadline}\\n`;\n  }\n  message += `• Effective Date: ${regulation.effective_date}\\n\\n`;\n  \n  message += `**✅ IMMEDIATE ACTIONS REQUIRED**\\n`;\n  compliance_tracking.compliance_tasks.slice(0, 5).forEach(task => {\n    message += `• ${task}\\n`;\n  });\n  \n  message += `\\n**🔗 RESOURCES**\\n`;\n  message += `• [Full Regulation Document](${regulation.document_url})\\n`;\n  message += `• Compliance ID: ${compliance_tracking.regulation_id}\\n\\n`;\n  \n  message += `**📈 TRACKING STATUS**\\nAll compliance tasks have been logged and assigned. Progress will be monitored through the compliance dashboard.\\n\\n`;\n  \n  message += `━━━━━━━━━━━━━━━━━━━━━━\\n`;\n  message += `🕐 Alert Generated: ${new Date().toLocaleString()}`;\n  \n  return message;\n}\n\n// Return formatted alert\nreturn [{\n  json: {\n    alert_text: formatExecutiveAlert(regulation),\n    alert_level: regulation.impact_assessment.final_impact_level,\n    regulation_id: regulation.compliance_tracking.regulation_id,\n    title: regulation.title,\n    agency: regulation.agency,\n    effective_date: regulation.effective_date,\n    assigned_teams: regulation.compliance_tracking.assigned_team,\n    review_due_date: regulation.compliance_tracking.key_dates.review_due_date,\n    document_url: regulation.document_url\n  }\n}]);"
          },
          "notesInFlow": true,
          "typeVersion": 2
        },
        {
          "id": "ca7c5d3e-9fbc-4fd4-be75-a709463f989c",
          "name": "Email Alert",
          "type": "n8n-nodes-base.emailSend",
          "position": [
            4688,
            528
          ],
          "webhookId": "0b4a0564-f0cf-4d92-9227-8172df56d509",
          "parameters": {
            "options": {
              "ccEmail": "user@example.com"
            },
            "subject": "🚨 Regulatory Alert: {{ $json.alert_level }} Impact - {{ $json.title }}"
          },
          "typeVersion": 2
        },
        {
          "id": "042db0d2-3542-4818-8540-1abacdcff0a3",
          "name": "Sticky Note - Trigger",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            0,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 574.9363634768473,
            "height": 530.4701664623029,
            "content": "# Step 1: Schedule Trigger ⏱️\n\nThis trigger runs the regulatory monitoring workflow daily.\n\n## Configuration Options\n- **Default**: 9:00 AM daily\n- **Customizable**: Adjust timing based on regulatory publication schedules\n- **Alternative Triggers**: Manual trigger for urgent checks\n\n## Best Practices\n- Run during business hours for immediate response\n- Consider time zones of regulatory agencies\n- Set up backup triggers for critical periods"
          },
          "typeVersion": 1
        },
        {
          "id": "1db2ba2f-034c-4c81-89e0-ff20e1f0f090",
          "name": "Sticky Note - Scraper",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            720,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 575,
            "height": 802,
            "content": "# Step 2: ScrapeGraphAI - Gov Websites 🤖\n\nScrapes government regulatory websites for new rules and changes.\n\n## Target Sites\n- Federal Register\n- SEC.gov\n- FDA.gov\n- EPA.gov\n- Industry-specific regulatory bodies\n\n## Extraction Schema\n- Rule titles and summaries\n- Publication and effective dates\n- Affected sectors and impact levels\n- Comment deadlines\n- Document URLs"
          },
          "typeVersion": 1
        },
        {
          "id": "698e22f1-b735-4b59-8e57-398e3c7b05d9",
          "name": "Sticky Note - Parser",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1472,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 574.9363634768473,
            "height": 530.4701664623029,
            "content": "# Step 3: Regulation Parser 🧱\n\nCleans and structures the scraped regulatory data.\n\n## What it does\n- Validates and cleans scraped data\n- Standardizes date formats\n- Handles missing information gracefully\n- Prepares data for impact assessment\n\n## Data Processing\n- Title and summary cleaning\n- Date parsing and validation\n- Sector categorization\n- URL verification"
          },
          "typeVersion": 1
        },
        {
          "id": "f934cb28-2de3-4bdd-b4b1-7188c102221a",
          "name": "Sticky Note - Assessor",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2224,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 575,
            "height": 706,
            "content": "# Step 4: Impact Assessor 📊\n\nAnalyzes business impact and assigns risk levels.\n\n## Assessment Criteria\n- Rule type (Final/Proposed/Notice)\n- Affected business sectors\n- Keyword analysis for compliance terms\n- Historical impact patterns\n\n## Risk Scoring\n- **Critical**: Immediate executive action required\n- **High**: Legal review needed\n- **Medium**: Department review recommended\n- **Low**: Standard monitoring"
          },
          "typeVersion": 1
        },
        {
          "id": "47c2b00a-a24b-4bba-af23-4b25ed6bdf9f",
          "name": "Sticky Note - Tracker",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2992,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 575,
            "height": 626,
            "content": "# Step 5: Compliance Tracker 📋\n\nCreates compliance tracking records and assigns tasks.\n\n## Tracking Features\n- Unique regulation IDs\n- Team assignments based on impact\n- Task generation and deadlines\n- Progress monitoring setup\n\n## Compliance Tasks\n- Policy review and updates\n- Staff training requirements\n- Implementation timelines\n- Comment response preparation"
          },
          "typeVersion": 1
        },
        {
          "id": "c5d0dcbe-8f8d-49d5-aa70-379ca0dd8d72",
          "name": "Sticky Note - Alert",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            3744,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 575,
            "height": 658,
            "content": "# Step 6: Executive Alert 📧\n\nFormats and sends executive alerts based on impact level.\n\n## Alert Content\n- Regulation summary and impact\n- Risk factors and opportunities\n- Assigned teams and deadlines\n- Immediate action items\n- Direct links to documents\n\n## Delivery Options\n- Email alerts\n- Slack notifications\n- Teams messages\n- Dashboard updates"
          },
          "typeVersion": 1
        },
        {
          "id": "d5731eb6-3f2c-4e1c-9927-f2c95a522b51",
          "name": "Sticky Note - Email",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            4448,
            0
          ],
          "parameters": {
            "color": 5,
            "width": 575,
            "height": 690,
            "content": "# Step 7: Email Alert 📬\n\nSends formatted alerts to executive and compliance teams.\n\n## Recipients\n- Executive team\n- Legal department\n- Compliance officers\n- Relevant department heads\n\n## Alert Prioritization\n- Critical: Immediate delivery\n- High: Priority delivery\n- Medium/Low: Standard delivery\n\n## Follow-up Actions\n- Calendar invites for urgent reviews\n- Task assignments in project management\n- Compliance dashboard updates"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "ddbb349b-d97b-4e8e-b644-332bd48d815c",
      "connections": {
        "ScrapeGraphAI": {
          "main": [
            [
              {
                "node": "Regulation Parser",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Executive Alert": {
          "main": [
            [
              {
                "node": "Email Alert",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Impact Assessor": {
          "main": [
            [
              {
                "node": "Compliance Tracker",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "ScrapeGraphAI",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Regulation Parser": {
          "main": [
            [
              {
                "node": "Impact Assessor",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Compliance Tracker": {
          "main": [
            [
              {
                "node": "Executive Alert",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 14,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.emailSend": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 7
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "n8n-nodes-scrapegraphai.scrapegraphAi": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "vinci-king-01",
      "username": "vinci-king-01",
      "bio": "",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/marco-vinciguerra-7ba365242/"
      ],
      "avatar": "https://gravatar.com/avatar/d939eeef03a5fcb5df08bee8196f12ccb248c38209487414e419032004f0c014?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 11,
        "icon": "fa:envelope",
        "name": "n8n-nodes-base.emailSend",
        "codex": {
          "data": {
            "alias": [
              "SMTP",
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/sendemail/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Send Email",
          "color": "#00bb88"
        },
        "iconData": {
          "icon": "envelope",
          "type": "icon"
        },
        "displayName": "Send Email",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 29,
        "name": "SecOps"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}