Workflow: Splitout Noop Automation

Workflow Details

Download Workflow
{
    "id": "xaC6zL4bWBo14xyJ",
    "meta": {
        "instanceId": "10f6e8a86649316fe7041c503c24e6d77b68a961a9f4f1f76d0100c435446092",
        "templateCredsSetupCompleted": true
    },
    "name": "YouTube Comment Sentiment Analyzer",
    "tags": [],
    "nodes": [
        {
            "id": "0bacd739-7ea3-42f5-8986-2f7d47628ee9",
            "name": "Split Out",
            "type": "n8n-nodes-base.splitOut",
            "position": [
                820,
                -40
            ],
            "parameters": {
                "options": [],
                "fieldToSplitOut": "body.items"
            },
            "typeVersion": 1
        },
        {
            "id": "236aaaab-6a9a-42d7-8645-980bf8c3254d",
            "name": "OpenAI Chat Model",
            "type": "@n8n\/n8n-nodes-langchain.lmChatOpenAi",
            "position": [
                1080,
                180
            ],
            "parameters": {
                "model": {
                    "__rl": true,
                    "mode": "list",
                    "value": "gpt-4o-mini"
                },
                "options": []
            },
            "credentials": {
                "openAiApi": {
                    "id": "4d73v7kxEDNu3n25",
                    "name": "OpenAi account"
                }
            },
            "typeVersion": 1.1999999999999999555910790149937383830547332763671875
        },
        {
            "id": "c1eda3a6-9fbe-4150-8086-c3ffebaeb2e1",
            "name": "No Operation, do nothing",
            "type": "n8n-nodes-base.noOp",
            "position": [
                380,
                140
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "d28f3fbf-6013-47af-ba84-3bdd9800fd3b",
            "name": "Get Video Urls from Google Sheet",
            "type": "n8n-nodes-base.googleSheets",
            "position": [
                -200,
                -40
            ],
            "parameters": {
                "options": [],
                "sheetName": {
                    "__rl": true,
                    "mode": "list",
                    "value": 760258523,
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit#gid=760258523",
                    "cachedResultName": "Sheet2"
                },
                "documentId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4",
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit?usp=drivesdk",
                    "cachedResultName": "Youtube Videos Comments"
                },
                "authentication": "serviceAccount"
            },
            "credentials": {
                "googleApi": {
                    "id": "jPoTdPxgVL0vr9SQ",
                    "name": "Google Sheets account"
                }
            },
            "typeVersion": 4.5
        },
        {
            "id": "0ac06530-cfe7-4f1c-8c0a-8def2126df0f",
            "name": "check next fetch time is available or not",
            "type": "n8n-nodes-base.if",
            "position": [
                -20,
                -40
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "version": 2,
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "92084960-e023-4cd6-a5c0-ddd43275cc33",
                            "operator": {
                                "type": "string",
                                "operation": "empty",
                                "singleValue": true
                            },
                            "leftValue": "={{ $json.next_fetch_time }}",
                            "rightValue": "={{ $now.toISO() }}"
                        }
                    ]
                }
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "ba42f450-3b0c-41a3-8e72-d2a38b97cfc7",
            "name": "check next fetch time is before the current time",
            "type": "n8n-nodes-base.if",
            "position": [
                160,
                80
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "version": 2,
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "40c8d081-b298-46b1-850c-2322ed89d18d",
                            "operator": {
                                "type": "dateTime",
                                "operation": "before"
                            },
                            "leftValue": "={{ $json.next_fetch_time }}",
                            "rightValue": "={{ $now.toISO() }}"
                        }
                    ]
                }
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "aad11f42-b976-41d7-b771-151da60391d6",
            "name": "Get Comments for video urls",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                360,
                -60
            ],
            "parameters": {
                "url": "https:\/\/www.googleapis.com\/youtube\/v3\/commentThreads",
                "options": {
                    "response": {
                        "response": {
                            "fullResponse": true,
                            "responseFormat": "json"
                        }
                    },
                    "pagination": {
                        "pagination": {
                            "parameters": {
                                "parameters": [
                                    {
                                        "name": "pageToken",
                                        "value": "={{ $response.body.nextPageToken }}"
                                    }
                                ]
                            },
                            "completeExpression": "={{ !$response.body.nextPageToken}}",
                            "paginationCompleteWhen": "other"
                        }
                    }
                },
                "sendQuery": true,
                "authentication": "genericCredentialType",
                "genericAuthType": "httpQueryAuth",
                "queryParameters": {
                    "parameters": [
                        {
                            "name": "part",
                            "value": "snippet"
                        },
                        {
                            "name": "videoId",
                            "value": "={{ $json[\"video_urls\"].match(\/(?:v=|\\\/)([0-9A-Za-z_-]{11})\/)[1] || ''}}"
                        },
                        {
                            "name": "maxResults",
                            "value": "100"
                        }
                    ]
                }
            },
            "credentials": {
                "httpQueryAuth": {
                    "id": "LmsYEaslJmA6CMdL",
                    "name": "Query Auth account 4"
                }
            },
            "typeVersion": 4.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "4cf1ebd0-e260-4e53-bc26-be1db2f6e7f2",
            "name": "Analyze sentiment of every comment",
            "type": "@n8n\/n8n-nodes-langchain.sentimentAnalysis",
            "position": [
                1060,
                -40
            ],
            "parameters": {
                "options": {
                    "categories": "Positive, Neutral, Negative",
                    "systemPromptTemplate": "You are highly intelligent and accurate sentiment analyzer. Analyze the sentiment of the provided text. Categorize it into one of the following: {categories}. Use the provided formatting instructions. Only output the JSON."
                },
                "inputText": "={{ $json.snippet.topLevelComment.snippet.textOriginal }}"
            },
            "typeVersion": 1
        },
        {
            "id": "f306c5cd-6b6b-46fa-b7ef-f3ccef960931",
            "name": "Format fields as required to save in google sheet",
            "type": "n8n-nodes-base.set",
            "position": [
                1500,
                -40
            ],
            "parameters": {
                "options": [],
                "assignments": {
                    "assignments": [
                        {
                            "id": "25fb96a0-de38-4495-8473-0385a3fd5df9",
                            "name": "commentId",
                            "type": "string",
                            "value": "={{ $json.snippet.topLevelComment.id }}"
                        },
                        {
                            "id": "d824ecd0-89c0-4c07-992f-6a5d3421690e",
                            "name": "video_url",
                            "type": "string",
                            "value": "=https:\/\/www.youtube.com\/watch?v={{ $json.snippet.videoId }}"
                        },
                        {
                            "id": "cdcbc3d9-ab3e-4d7d-80a7-bfe168b0ed27",
                            "name": "comment",
                            "type": "string",
                            "value": "={{ $json.snippet.topLevelComment.snippet.textOriginal }}"
                        },
                        {
                            "id": "20bcfe96-3904-44d2-b72a-9eb49d603c8d",
                            "name": "authorName",
                            "type": "string",
                            "value": "={{ $json.snippet.topLevelComment.snippet.authorDisplayName }}"
                        },
                        {
                            "id": "c92f56bf-8b37-4c4e-9ce7-b7a49d63deee",
                            "name": "likes",
                            "type": "string",
                            "value": "={{ $json.snippet.topLevelComment.snippet.likeCount }}"
                        },
                        {
                            "id": "7cc4fdb3-7c41-418a-bf4f-71081fe9df74",
                            "name": "reply",
                            "type": "string",
                            "value": "={{ $json.snippet.totalReplyCount }}"
                        },
                        {
                            "id": "9988ea66-7f31-4b2c-90ab-3cad8efabf95",
                            "name": "sentiment",
                            "type": "string",
                            "value": "={{ $json.sentimentAnalysis.category }}"
                        },
                        {
                            "id": "6552df27-6e04-4048-b3c2-1e1755ccac28",
                            "name": "published_at",
                            "type": "string",
                            "value": "={{ $json.snippet.topLevelComment.snippet.publishedAt }}"
                        }
                    ]
                }
            },
            "typeVersion": 3.399999999999999911182158029987476766109466552734375
        },
        {
            "id": "6cd20a6e-8bcc-44c7-a62d-e3c3c75e6d9a",
            "name": "Insert and update comment in google sheet",
            "type": "n8n-nodes-base.googleSheets",
            "position": [
                1720,
                -40
            ],
            "parameters": {
                "columns": {
                    "value": [],
                    "schema": [
                        {
                            "id": "commentId",
                            "type": "string",
                            "display": true,
                            "removed": false,
                            "required": false,
                            "displayName": "commentId",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "video_url",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "video_url",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "comment",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "comment",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "authorName",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "authorName",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "likes",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "likes",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "reply",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "reply",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "sentiment",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "sentiment",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "published_at",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "published_at",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        }
                    ],
                    "mappingMode": "autoMapInputData",
                    "matchingColumns": [
                        "commentId"
                    ],
                    "attemptToConvertTypes": false,
                    "convertFieldsToString": false
                },
                "options": [],
                "operation": "appendOrUpdate",
                "sheetName": {
                    "__rl": true,
                    "mode": "list",
                    "value": "gid=0",
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit#gid=0",
                    "cachedResultName": "Sheet1"
                },
                "documentId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4",
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit?usp=drivesdk",
                    "cachedResultName": "Youtube Videos Comments"
                },
                "authentication": "serviceAccount"
            },
            "credentials": {
                "googleApi": {
                    "id": "jPoTdPxgVL0vr9SQ",
                    "name": "Google Sheets account"
                }
            },
            "typeVersion": 4.5
        },
        {
            "id": "ea240f38-1462-402b-8db2-36b3e8664c2f",
            "name": "Update last fetched time and next_fetch_time",
            "type": "n8n-nodes-base.googleSheets",
            "position": [
                1940,
                -40
            ],
            "parameters": {
                "columns": {
                    "value": {
                        "video_urls": "={{ $('Get Video Urls from Google Sheet').item.json.video_urls }}",
                        "next_fetch_time": "={{ $now.plus(5, 'min').toISO() }}",
                        "last_fetched_time": "={{ $now.toISO() }}"
                    },
                    "schema": [
                        {
                            "id": "video_urls",
                            "type": "string",
                            "display": true,
                            "removed": false,
                            "required": false,
                            "displayName": "video_urls",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "last_fetched_time",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "last_fetched_time",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "next_fetch_time",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "next_fetch_time",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        }
                    ],
                    "mappingMode": "defineBelow",
                    "matchingColumns": [
                        "video_urls"
                    ],
                    "attemptToConvertTypes": false,
                    "convertFieldsToString": false
                },
                "options": [],
                "operation": "appendOrUpdate",
                "sheetName": {
                    "__rl": true,
                    "mode": "list",
                    "value": 760258523,
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit#gid=760258523",
                    "cachedResultName": "Sheet2"
                },
                "documentId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4",
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1xoCVr_mlwn4jFcnJENtrU-_K5nkIytZ8qBXzxMq55n4\/edit?usp=drivesdk",
                    "cachedResultName": "Youtube Videos Comments"
                },
                "authentication": "serviceAccount"
            },
            "credentials": {
                "googleApi": {
                    "id": "jPoTdPxgVL0vr9SQ",
                    "name": "Google Sheets account"
                }
            },
            "typeVersion": 4.5
        },
        {
            "id": "610fa83c-a626-42c0-aa8b-1ebb1a6bcf44",
            "name": "No Operation, do nothing1",
            "type": "n8n-nodes-base.noOp",
            "position": [
                820,
                140
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "30570a68-78b8-434e-bb20-ea85a0689a63",
            "name": "When clicking \u2018Test workflow\u2019",
            "type": "n8n-nodes-base.manualTrigger",
            "position": [
                -380,
                -40
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "4fe79a97-fc39-41c0-9d2f-f07865deef5e",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                -440,
                -160
            ],
            "parameters": {
                "color": 5,
                "width": 2620,
                "height": 480,
                "content": "\n# \ud83d\ude80 YouTube Comment Sentiment Analyzer with Google Sheets & OpenAI"
            },
            "typeVersion": 1
        },
        {
            "id": "0ccb85d8-d29e-44a7-b644-49b3dcc6ce9b",
            "name": "Check Success Response",
            "type": "n8n-nodes-base.if",
            "position": [
                560,
                -60
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "version": 2,
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "bce76f94-5904-4fdb-b172-adc1134855f9",
                            "operator": {
                                "type": "number",
                                "operation": "equals"
                            },
                            "leftValue": "={{ $json.statusCode }}",
                            "rightValue": 200
                        }
                    ]
                }
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "880f570f-6300-4659-9dcf-d47880140131",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                -1100,
                -500
            ],
            "parameters": {
                "width": 640,
                "height": 820,
                "content": "### **How to Use This Workflow:**\n\ud83d\udcdd **YouTube Comment Sentiment Analyzer**\n\n1. \ud83d\udd18 **Trigger:** Click \"Execute Workflow\" to run it manually.\n\n2. \ud83d\udcc4 Your Google Sheet should have **2 sheets**:\n   - **Sheet1 (Results with Sentiment):**\n     - Column A: `commentId` (YouTube comment id)\n     - Column B: `video_url` (url of video)\n     - Column C: `comment` (YouTube comment)\n     - Column D: `authorName` (Name of author as per Youtube)\n     - Column E: `likes` (Number of likes on that particular comment)\n     - Column f: `reply` (Number of replies on that particular comment)\n     - Column g: `sentiment` (Analyzed sentiment of the comment)\n     - Column h: `published_at` (timestamp of comment published)\n   \n   - **Sheet2 (Video URLs):**\n     - Column A: `video_urls` (list of YouTube video URLs)\n     - Column B: `last_fetched_time` (timestamp of the last fetch)\n     - Column C: `next_fetch_time` (time for the next fetch)\n\n3. \ud83d\udd10 **Make sure these credentials are set up**:\n   - Google Sheets (Service Account)\n   - YouTube Data API v3\n   - OpenAI API Key (for sentiment analysis)\n\n4. \u2705 **What this workflow does**:\n   - Reads **video URLs** from **Sheet2**.\n   - Checks **last fetched time** (if applicable).\n   - Fetches new comments from YouTube.\n   - Analyzes sentiment using OpenAI.\n   - Appends **comment**, **sentiment**, **video ID**, and **timestamp** to **Sheet1**.\n   - Updates **last_fetched** timestamp in **Sheet2**.\n\n5. \ud83d\udca1 **Tip:**\n   - You can replace the **Manual Trigger** with a **Cron node** for automatic execution at specified intervals.\n"
            },
            "typeVersion": 1
        }
    ],
    "active": false,
    "pinData": [],
    "settings": {
        "executionOrder": "v1"
    },
    "versionId": "70007187-7437-4053-b909-5057bf816906",
    "connections": {
        "Split Out": {
            "main": [
                [
                    {
                        "node": "Analyze sentiment of every comment",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "OpenAI Chat Model": {
            "ai_languageModel": [
                [
                    {
                        "node": "Analyze sentiment of every comment",
                        "type": "ai_languageModel",
                        "index": 0
                    }
                ]
            ]
        },
        "Check Success Response": {
            "main": [
                [
                    {
                        "node": "Split Out",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "No Operation, do nothing1",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Comments for video urls": {
            "main": [
                [
                    {
                        "node": "Check Success Response",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Video Urls from Google Sheet": {
            "main": [
                [
                    {
                        "node": "check next fetch time is available or not",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "When clicking \u2018Test workflow\u2019": {
            "main": [
                [
                    {
                        "node": "Get Video Urls from Google Sheet",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Analyze sentiment of every comment": {
            "main": [
                [
                    {
                        "node": "Format fields as required to save in google sheet",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Format fields as required to save in google sheet",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Format fields as required to save in google sheet",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Insert and update comment in google sheet": {
            "main": [
                [
                    {
                        "node": "Update last fetched time and next_fetch_time",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "check next fetch time is available or not": {
            "main": [
                [
                    {
                        "node": "Get Comments for video urls",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "check next fetch time is before the current time",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Update last fetched time and next_fetch_time": {
            "main": [
                []
            ]
        },
        "check next fetch time is before the current time": {
            "main": [
                [
                    {
                        "node": "Get Comments for video urls",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "No Operation, do nothing",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Format fields as required to save in google sheet": {
            "main": [
                [
                    {
                        "node": "Insert and update comment in google sheet",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

High-Level Service Page SEO Blueprint Report
View
Respondtowebhook Stickynote Send Webhook
View
Mattermost GoogleSheets Create Scheduled
View
Splitout Code Create Webhook
View
Googledocs Webhook Create Webhook
View
Create a ticket in Zendesk
View
Speech Support Workflow
View
Filter Manual Send Triggered
View
Webhook Respondtowebhook Automate Webhook
View
Calendly Automate Triggered
View