{
  "id": "iWTbaNAM3oNJnYj4",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automate Instagram Engagement & Sentiment Analysis with GPT-4 and Slack Reports",
  "tags": [],
  "nodes": [
    {
      "id": "1164e598-a1f0-46c8-a57a-235d4b674646",
      "name": "Fetch Recent Instagram Posts",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        -1248,
        128
      ],
      "parameters": {
        "edge": "media",
        "options": {
          "fields": {
            "field": [
              {
                "name": "id,caption,media_type,media_url,permalink,timestamp,like_count,comments_count,comments{username,text,timestamp,like_count}"
              }
            ]
          }
        },
        "graphApiVersion": "v23.0"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bfbb74f0-ef19-44c6-bb55-b626489aff92",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1472,
        128
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 10
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5958fe5f-35b9-4e5e-9418-8a2bea7eaf69",
      "name": "AI Agent - Sentiment Analyzer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -752,
        128
      ],
      "parameters": {
        "text": "=Analyze the following Instagram posts and their audience engagement metrics.\n\nPosts JSON:\n{{ JSON.stringify($json) }}\n\nFor each post, consider:\n- Post caption, media type, likes, comments_count, total_engagement\n- The sentiment and content of comments\n- How positive/negative reactions might affect performance\n\nReturn your analysis strictly in JSON format:\n\n{\n  \"summary\": {\n    \"totalPostsAnalyzed\": number,\n    \"averageEngagement\": number,\n    \"topPerformingPostId\": string,\n    \"topPerformanceReason\": string\n  },\n  \"posts\": [\n    {\n      \"post_id\": string,\n      \"post_url\": string,\n      \"caption\": string,\n      \"likes\": number,\n      \"comments_count\": number,\n      \"total_engagement\": number,\n      \"engagementScore\": number,\n      \"commentSentiment\": {\n        \"averageScore\": number,\n        \"label\": string,\n        \"positiveComments\": [string],\n        \"negativeComments\": [string]\n      },\n      \"performanceLabel\": string,\n      \"insight\": string,\n      \"recommendation\": string\n    }\n  ],\n  \"overallInsights\": {\n    \"contentPatterns\": [string],\n    \"engagementInsights\": [string],\n    \"recommendations\": [string]\n  }\n}\n",
        "options": {
          "systemMessage": "=You are an AI Instagram Performance Analyst.  \nYour goal is to evaluate the performance of multiple Instagram posts using both quantitative engagement data and qualitative comment sentiment.\n\nAnalyze each post considering:\n- Likes, comments count, and total engagement\n- The tone of comments (positive, neutral, negative)\n- Caption style and media type\n- Audience interaction patterns\n\nThen identify which post performed best overall, explain why, and provide content strategy recommendations.  \nBe analytical and specific \u2014 avoid generic comments.  \nAlways respond strictly in **valid JSON** format with no extra text.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "d59bdb69-efb5-4a9b-81ea-60a34b1b7738",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -672,
        352
      ],
      "parameters": {
        "sessionKey": "=\"Post Engagement\"",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b8cfe1b8-8de0-4527-a8d6-0ed897551a71",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1776,
        -640
      ],
      "parameters": {
        "width": 448,
        "height": 576,
        "content": "## \ud83e\udde9 Social Engagement Analyzer\n\n### How it works\nThis workflow automates social media post performance tracking for Instagram. It pulls recent posts via the Graph API, analyzes engagement and comment sentiment using OpenAI GPT-4o, identifies top or underperforming content, and sends alerts or summaries to Slack, Outlook, and Google Sheets.\n\nThe flow includes AI-driven sentiment classification, engagement scoring, and actionable recommendations \u2014 giving your marketing team a full engagement report each day automatically.\n\n### Setup steps\n1. Connect your **Facebook Graph API** to your Instagram Business account.  \n2. Add **OpenAI** credentials and keep the model as `gpt-4o`.  \n3. Connect your **Slack workspace**, **Outlook**, and **Google Sheets** accounts.  \n4. Set the **Schedule Trigger** (e.g., daily at 10 AM).  \n5. Adjust the **Switch node** conditions if you want custom sentiment labels.  \n6. Run once manually to verify connections and data flow.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0087156a-16e8-4dbe-8e05-c1805e7c9267",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        -112
      ],
      "parameters": {
        "color": 2,
        "width": 480,
        "height": 640,
        "content": "## \ud83e\udde0 AI Sentiment & Engagement Analysis  \n\nAnalyzes likes, comments, and caption tone using GPT-4o. Generates structured JSON insights identifying performance patterns, sentiment scores, and improvement recommendations.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eb57fa22-2964-489f-878d-3ad92a9b01f3",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -400
      ],
      "parameters": {
        "color": 2,
        "width": 256,
        "height": 768,
        "content": "## \ud83d\udcac Team Notifications  \n\n\nSends automated performance updates and alerts via Slack and Outlook. Positive posts share insights; negative ones trigger a \u201cPerformance Alert\u201d to your team.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "090c96f3-03c1-4b97-9315-b6c07c8226c6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        -176
      ],
      "parameters": {
        "color": 2,
        "width": 192,
        "height": 640,
        "content": "## \u2699\ufe0f Sentiment Decision Logic  \n\n\nEvaluates AI output to decide next actions: positive results route to performance reporting, negative results trigger alerts to Slack and email.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "65e09666-1f38-4a07-a751-5acf04ba97db",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        -32
      ],
      "parameters": {
        "color": 2,
        "width": 640,
        "height": 336,
        "content": "## \u23f0 Data Fetch & Preparation  \n\nThis section triggers the workflow on schedule, fetches Instagram posts using the Graph API, and formats them into clean, analyzable JSON data.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "63c36a24-19b2-4fb9-b287-f371e19ee11d",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -544,
        352
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"summary\": {\n    \"totalPostsAnalyzed\": 2,\n    \"averageEngagement\": 9,\n    \"topPerformingPostId\": \"18409530772188672\",\n    \"topPerformanceReason\": \"High positive sentiment and better like-to-comment ratio.\"\n  },\n  \"posts\": [\n    {\n      \"post_id\": \"18409530772188672\",\n      \"post_url\": \"https://www.instagram.com/p/DQwFngujZgI/\",\n      \"caption\": \"King of the jungle vibes. Unleash your inner tiger...\",\n      \"likes\": 3,\n      \"comments_count\": 5,\n      \"total_engagement\": 8,\n      \"engagementScore\": 8.5,\n      \"commentSentiment\": {\n        \"averageScore\": 0.9,\n        \"label\": \"Highly Positive\",\n        \"positiveComments\": [\n          \"Awsome tiger\",\n          \"King of Jungle\",\n          \"Nice posts aashu team\ud83d\ude4c\ud83d\ude4c\"\n        ],\n        \"negativeComments\": []\n      },\n      \"performanceLabel\": \"High Engagement\",\n      \"insight\": \"Audience responded very positively to nature/wildlife content.\",\n      \"recommendation\": \"Post more wildlife or 'motivational' themed content with emojis and short captions.\"\n    },\n    {\n      \"post_id\": \"18056243003289432\",\n      \"post_url\": \"https://www.instagram.com/p/DQvmp7lguoV/\",\n      \"caption\": \"Living for the moments that take your breath away.\",\n      \"likes\": 2,\n      \"comments_count\": 8,\n      \"total_engagement\": 10,\n      \"engagementScore\": 6.8,\n      \"commentSentiment\": {\n        \"averageScore\": 0.4,\n        \"label\": \"Mixed\",\n        \"positiveComments\": [\n          \"Amazing image \ud83c\udf89\",\n          \"\u2764\ufe0f\u2764\ufe0f\"\n        ],\n        \"negativeComments\": [\n          \"Bad posting \ud83d\ude4c\",\n          \"Not good post\",\n          \"looking like the blurry image.\"\n        ]\n      },\n      \"performanceLabel\": \"Moderate\",\n      \"insight\": \"Higher comment count but mixed audience sentiment reduced quality engagement.\",\n      \"recommendation\": \"Improve image clarity; audience responds negatively to poor visuals.\"\n    }\n  ],\n  \"overallInsights\": {\n    \"contentPatterns\": [\n      \"Posts with strong visual or emotional elements perform best.\"\n    ],\n    \"engagementInsights\": [\n      \"Positive audience tone correlates with higher like-to-comment ratio.\"\n    ],\n    \"recommendations\": [\n      \"Focus on wildlife or motivational imagery with clean composition.\",\n      \"Avoid blurry visuals or unclear posts; they reduce engagement quality.\"\n    ]\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a77f57fb-7f5c-4456-afc7-85a80d119ea0",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -800,
        352
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "options": {
          "temperature": 0.4
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "75e5cae4-b4a4-49fe-867c-7e284bab7148",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -16
      ],
      "parameters": {
        "color": 2,
        "width": 448,
        "height": 416,
        "content": "## \ud83d\udcca Log Analytics to Google Sheets  \n\n\nFlattens and saves all engagement and sentiment metrics into Google Sheets for trend tracking and data-driven decisions.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c344edb9-fc03-4c83-9911-60e56801798b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        192
      ],
      "parameters": {
        "color": 6,
        "width": 336,
        "height": 224,
        "content": "## \ud83d\udd10 Credentials & Security  \n\n\nUse OAuth2 for Slack, Google Sheets, and Outlook.  \nAPI keys for OpenAI and Graph API only.  \nAvoid storing personal or business emails in shared templates.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f303ebd2-c5a8-4c1a-b29b-5588268a6911",
      "name": "Format Instagram Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -1024,
        128
      ],
      "parameters": {
        "jsCode": "// n8n Code Node - Instagram Data Formatter\n// Access input data\nconst inputData = $input.all();\n\n// Process and format the data\nconst formattedItems = [];\n\nfor (const item of inputData) {\n  const rawData = item.json;\n  \n  // Check if data array exists\n  if (rawData.data && Array.isArray(rawData.data)) {\n    \n    // Process each post\n    for (const post of rawData.data) {\n      const formattedPost = {\n        // Post Basic Info\n        post_id: post.id,\n        post_url: post.permalink,\n        timestamp: post.timestamp,\n        posted_date: new Date(post.timestamp).toLocaleDateString(),\n        posted_time: new Date(post.timestamp).toLocaleTimeString(),\n        \n        // Content Info\n        caption: post.caption || '',\n        media_type: post.media_type,\n        media_url: post.media_url,\n        \n        // Engagement Metrics\n        likes: post.like_count || 0,\n        comments_count: post.comments_count || 0,\n        total_engagement: (post.like_count || 0) + (post.comments_count || 0),\n        \n        // Comments Details\n        comments: [],\n        has_comments: post.comments && post.comments.data && post.comments.data.length > 0\n      };\n      \n      // Process comments if they exist\n      if (post.comments && post.comments.data && Array.isArray(post.comments.data)) {\n        formattedPost.comments = post.comments.data.map(comment => ({\n          comment_id: comment.id,\n          username: comment.username,\n          text: comment.text,\n          timestamp: comment.timestamp,\n          commented_date: new Date(comment.timestamp).toLocaleDateString(),\n          commented_time: new Date(comment.timestamp).toLocaleTimeString(),\n          likes: comment.like_count || 0\n        }));\n      }\n      \n      // Add the formatted post to results\n      formattedItems.push({ json: formattedPost });\n    }\n  }\n}\n\n// Return formatted data\nreturn formattedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "62d51c53-7426-421c-942b-dc863b6ca592",
      "name": "Prepare Google Sheets Data",
      "type": "n8n-nodes-base.code",
      "position": [
        464,
        208
      ],
      "parameters": {
        "jsCode": "// n8n Code Node - Format Instagram Analytics for Google Sheets\n// This flattens the nested analytics data into sheet-friendly rows\n\nconst items = $input.all();\nconst sheetRows = [];\n\nfor (const item of items) {\n  const data = item.json.output || item.json;\n  \n  // Process each post in the analytics\n  if (data.posts && Array.isArray(data.posts)) {\n    data.posts.forEach(post => {\n      const postRow = {\n        // Summary Information\n        totalPostsAnalyzed: data.summary?.totalPostsAnalyzed || 0,\n        averageEngagement: data.summary?.averageEngagement || 0,\n        topPerformingPostId: data.summary?.topPerformingPostId || '',\n        topPerformanceReason: data.summary?.topPerformanceReason || '',\n        \n        // Post Basic Information\n        postId: post.post_id || '',\n        postUrl: post.post_url || '',\n        caption: post.caption || '',\n        \n        // Engagement Metrics\n        likes: post.likes || 0,\n        commentsCount: post.comments_count || 0,\n        totalEngagement: post.total_engagement || 0,\n        engagementScore: post.engagementScore || 0,\n        \n        // Performance Assessment\n        performanceLabel: post.performanceLabel || '',\n        insight: post.insight || '',\n        recommendation: post.recommendation || '',\n        \n        // Comment Sentiment\n        sentimentScore: post.commentSentiment?.averageScore || 0,\n        sentimentLabel: post.commentSentiment?.label || '',\n        positiveCommentsCount: post.commentSentiment?.positiveComments?.length || 0,\n        negativeCommentsCount: post.commentSentiment?.negativeComments?.length || 0,\n        \n        // Positive Comments (comma-separated)\n        positiveComments: post.commentSentiment?.positiveComments?.join(' | ') || '',\n        \n        // Negative Comments (comma-separated)\n        negativeComments: post.commentSentiment?.negativeComments?.join(' | ') || '',\n        \n        // Alert Flags\n        needsAttention: post.commentSentiment?.label === 'Negative' || \n                        post.performanceLabel === 'Poor',\n        isTopPerformer: post.post_id === data.summary?.topPerformingPostId,\n        \n        // Overall Insights (from summary)\n        contentPatterns: data.overallInsights?.contentPatterns?.join(' | ') || '',\n        engagementInsights: data.overallInsights?.engagementInsights?.join(' | ') || '',\n        recommendations: data.overallInsights?.recommendations?.join(' | ') || '',\n        \n        // Timestamp\n        analyzedAt: new Date().toISOString(),\n        analyzedDate: new Date().toLocaleDateString(),\n        analyzedTime: new Date().toLocaleTimeString()\n      };\n      \n      sheetRows.push(postRow);\n    });\n  }\n}\n\n// Return formatted data for Google Sheets\nreturn sheetRows.map(row => ({ json: row }));"
      },
      "typeVersion": 2
    },
    {
      "id": "1aa67d90-3cf9-406a-9580-bf9db948da7c",
      "name": "Slack: Post Positive Summary",
      "type": "n8n-nodes-base.slack",
      "position": [
        80,
        16
      ],
      "parameters": {
        "text": "=\ud83d\udea8 *Top Post Performance metrics*\n\n\ud83d\udcdd *Post Message:*\n{{ $json.output.posts[0].caption }}\n\n\ud83d\udd17 *Post ID:* `{{ $json.output.posts[0].post_id }}`\n\n\ud83d\ude0a *Post Sentiment:* _{{ $json.output.posts[0].commentSentiment.label }}\n\n\u26a0\ufe0f *Overall Post Sentiment:* {{ $json.output.posts[0].insight }}\n\n\ud83d\udcac *Comments ({{ $json.output.posts[0].commentSentiment.positiveComments }}):*\n\nRecommendation:-{{ $json.output.overallInsights.recommendations[0] }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1184055b-8c18-4217-a35e-3f17a79de1c0",
      "name": "Outlook: Email Report",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        64,
        -160
      ],
      "parameters": {
        "subject": "=Top Post Perfomer ",
        "bodyContent": "=Subject: Top Post Performer - Instagram Analytics Report\n\nHi Team,\n\nHere's your Instagram post performance summary:\n\n\ud83d\udcca POST PERFORMANCE OVERVIEW\nPost ID: {{ $json.output.posts[0].post_id }}\nPost URL: {{ $json.output.posts[0].post_url }}\n\n\ud83d\udcc8 ENGAGEMENT METRICS\n- Likes: {{ $json.output.posts[0].likes }}\n- Comments: {{ $json.output.posts[0].commentSentiment.averageScore }}\n- Total Engagement: {{ $json.output.posts[0].total_engagement }}\n- Engagement Score: {{ $json.output.posts[0].engagementScore }}\n- Performance Label: {{ $json.output.posts[0].commentSentiment.label }}\n\n\ud83d\udcdd CAPTION\n\"King of the jungle vibes. Unleash your inner tiger. Fearlessly embracing my stripes.\n#tigerwoods #nature_lovers #kingofkings #wildlifeofinstagram\"\n\n\ud83d\udcac COMMENT SENTIMENT ANALYSIS\n-{{ $json.output.posts[0].commentSentiment.positiveComments }}\n\n\u2728 KEY INSIGHTS\n{{ $json.output.posts[0].insight }}\n\n\ud83d\udca1 RECOMMENDATIONS\n{{ $json.output.overallInsights.recommendations }} \n\nBest regards,\nInstagram Analytics Team",
        "additionalFields": {
          "bodyContentType": "Text"
        }
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9e1966bf-4cb1-4f75-95c0-e77167bad8c5",
      "name": "Slack: Post Negative Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        80,
        176
      ],
      "parameters": {
        "text": "=\ud83d\udea8 *Negative Performance metrics Alert*\n\n\ud83d\udcdd *Post Message:*\n{{ $json.output.posts[0].caption }}\n\n\ud83d\udd17 *Post ID:* `{{ $json.output.posts[0].post_id }}`\n\n\ud83d\ude0a *Post Sentiment:* _{{ $json.output.posts[0].commentSentiment.label }}\n\n\u26a0\ufe0f *Overall Post Sentiment:* {{ $json.output.posts[0].insight }}\n\n\ud83d\udcac *Comments ({{ $json.output.posts[0].commentSentiment.positiveComments }}):*\n\nRecommendation:-{{ $json.output.overallInsights.recommendations[0] }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "9a7265bf-8b87-4e9c-a08a-c6b8ab5bf191",
      "name": "Sentiment Decision Router",
      "type": "n8n-nodes-base.switch",
      "position": [
        -304,
        128
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "7ee8a25a-3c77-4674-8fc3-bb2ceb798661",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.posts[0].commentSentiment.label }}",
                    "rightValue": "Positive"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b074dc01-a4d5-40ea-9599-4376ed0e47b4",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.posts[0].commentSentiment.label }}",
                    "rightValue": "Negative"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "a73e3520-0715-4ae7-ab93-07f631b115e4",
      "name": "Log Analytics to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        656,
        208
      ],
      "parameters": {
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7eeeef48-74fa-4df4-9173-8e4fc9f3223a",
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch Recent Instagram Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent - Sentiment Analyzer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent - Sentiment Analyzer",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Format Instagram Data": {
      "main": [
        [
          {
            "node": "AI Agent - Sentiment Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent - Sentiment Analyzer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Sentiment Decision Router": {
      "main": [
        [
          {
            "node": "Outlook: Email Report",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Google Sheets Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack: Post Positive Summary",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack: Post Negative Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Google Sheets Data": {
      "main": [
        [
          {
            "node": "Log Analytics to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Recent Instagram Posts": {
      "main": [
        [
          {
            "node": "Format Instagram Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent - Sentiment Analyzer": {
      "main": [
        [
          {
            "node": "Sentiment Decision Router",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}