This workflow corresponds to n8n.io template #8827 — we link there as the canonical source.
This workflow follows the Emailsend → Form Trigger 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "1dc70980-1f3d-4352-8f39-9465eb0357ff",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-80,
0
],
"parameters": {
"options": {},
"formTitle": "YouTube Video giveaway ",
"formFields": {
"values": [
{
"fieldLabel": "url",
"requiredField": true
}
]
},
"formDescription": "YouTube Video giveaway "
},
"typeVersion": 2.2
},
{
"id": "bc236f4c-6d15-447b-94a8-d1d435455e20",
"name": "Fetch YouTube Comments",
"type": "n8n-nodes-base.httpRequest",
"position": [
176,
0
],
"parameters": {
"url": "https://youtube-comments-scraper.p.rapidapi.com/comment.php",
"method": "POST",
"options": {
"response": {
"response": {
"fullResponse": true
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "youtube-comments-scraper.p.rapidapi.com"
},
{
"name": "x-rapidapi-key",
"value": "your key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "155352c4-d1d6-49c3-a86f-a65176acba98",
"name": "Check API Response Status",
"type": "n8n-nodes-base.if",
"position": [
448,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "38976149-dd8b-452f-a2d1-cd4c88dfa791",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.statusCode }}",
"rightValue": "=200"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "eefb9182-3705-4c12-9e58-7ae37a3e5c88",
"name": "Select Random Commenter",
"type": "n8n-nodes-base.code",
"position": [
720,
0
],
"parameters": {
"jsCode": "// Extract the array of comment items from the API response\nconst comments = $input.first().json.body.items || [];\n\n// Extract authorDisplayName safely\nconst authors = comments\n .map(item => {\n // Check if snippet and topLevelComment exist before accessing authorDisplayName\n if (item.snippet && item.snippet.topLevelComment && item.snippet.topLevelComment.snippet) {\n return item.snippet.topLevelComment.snippet.authorDisplayName;\n }\n return null; // or undefined\n })\n .filter(name => !!name); // filter out null/undefined\n\nif (authors.length === 0) {\n // No authors found, return empty or null\n return [{ json: { randomAuthorDisplayName: null } }];\n}\n\n// Randomly select one authorDisplayName\nconst randomIndex = Math.floor(Math.random() * authors.length);\nconst randomAuthor = authors[randomIndex];\n\n// Return as output\nreturn [{ json: { randomAuthorDisplayName: randomAuthor } }];\n"
},
"typeVersion": 2
},
{
"id": "ac6097b0-8fd5-41d3-8733-e6d61217b822",
"name": "Notify: Invalid API Response",
"type": "n8n-nodes-base.emailSend",
"position": [
704,
320
],
"parameters": {
"html": "Hello,\n\nThe attempt to fetch comments from the provided YouTube URL did not succeed. \nPlease verify the URL and try again.\n\nIf the problem persists, please check the API key or contact support.\n\nBest regards, \nYouTube Giveaway Bot\n",
"options": {},
"subject": "YouTube Comments Scraper: API Request Failed",
"toEmail": "user@example.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b28e03d1-0103-4453-97bf-cdb69ecb3c49",
"name": "Notify Winner Email",
"type": "n8n-nodes-base.emailSend",
"position": [
1312,
-64
],
"parameters": {
"html": "=Hello ,\n\nThe YouTube giveaway has concluded, and the winner has been selected!\n\nWinner: {{$json.randomAuthorDisplayName}}\n\nThe winner's details have been logged in the spreadsheet for your records.\n\nBest regards, \nYour Giveaway Automation Bot\n",
"options": {},
"subject": "=Congratulations! {{$json.randomAuthorDisplayName}} is the Winner of the Giveaway!",
"toEmail": "=owner@gmail.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "00ed6cc0-8f7f-44e9-bf69-cb7512c49163",
"name": "Log Winner to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1008,
-48
],
"parameters": {
"columns": {
"value": {
"Url": "={{ $('On form submission').item.json.url }}",
"Date": "={{ $('On form submission').item.json.submittedAt }}",
"Winner": "={{ $json.randomAuthorDisplayName }}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Url",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Winner",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Winner",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "7345d6e6-dde3-4880-85a5-e34780ad9335",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-112
],
"parameters": {
"height": 256,
"content": "Sends a POST request to RapidAPI to scrape YouTube comments from the given URL.\nIncludes API key and necessary headers for authentication."
},
"typeVersion": 1
},
{
"id": "9f072800-bbac-412f-99a1-28a552ce9558",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-112
],
"parameters": {
"height": 256,
"content": "Triggers the workflow when a form with a YouTube URL is submitted.\nCaptures the URL input for further processing."
},
"typeVersion": 1
},
{
"id": "26e755bc-4755-4dc7-a7d0-4f2f3cfbf0ca",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
384,
-112
],
"parameters": {
"height": 256,
"content": "Checks if the API response status code equals 200 (success).\nRoutes workflow based on success or failure of the API call."
},
"typeVersion": 1
},
{
"id": "449460b5-3b24-42a0-957f-2a47363889bc",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-112
],
"parameters": {
"height": 256,
"content": "Extracts author names from the fetched comments.\nRandomly selects one commenter as the giveaway winner."
},
"typeVersion": 1
},
{
"id": "023052db-e197-48ff-9567-62d2565cbf2e",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
192
],
"parameters": {
"height": 288,
"content": "Sends an email notification if the API call fails or returns an invalid response.\nAlerts the admin to verify URL or API credentials."
},
"typeVersion": 1
},
{
"id": "f814c860-8649-4f9b-bcb7-8f9a7a83d697",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
944,
-176
],
"parameters": {
"height": 288,
"content": "Appends the winner\u2019s name, URL, and submission date to a Google Sheet.\nUses service account authentication for Google Sheets access."
},
"typeVersion": 1
},
{
"id": "e4feec40-ba6b-4c15-b2a2-5525f4424dfd",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
-192
],
"parameters": {
"height": 272,
"content": "Sends a congratulatory email announcing the giveaway winner.\nIncludes the winner\u2019s name and relevant giveaway details."
},
"typeVersion": 1
}
],
"connections": {
"On form submission": {
"main": [
[
{
"node": "Fetch YouTube Comments",
"type": "main",
"index": 0
}
]
]
},
"Fetch YouTube Comments": {
"main": [
[
{
"node": "Check API Response Status",
"type": "main",
"index": 0
}
]
]
},
"Select Random Commenter": {
"main": [
[
{
"node": "Log Winner to Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Check API Response Status": {
"main": [
[
{
"node": "Select Random Commenter",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify: Invalid API Response",
"type": "main",
"index": 0
}
]
]
},
"Log Winner to Google Sheet": {
"main": [
[
{
"node": "Notify Winner Email",
"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.
googleApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Description: Easily automate your YouTube video giveaways using n8n and the YouTube Comments Scraper API. This workflow fetches comments, selects a random winner, logs results to Google Sheets, and notifies the admin—all hands-free!
Source: https://n8n.io/workflows/8827/ — 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.
Track website traffic and backlinks effortlessly using the Website Traffic Checker - Ahref API. This n8n workflow automates data retrieval and logging into Google Sheets, making it perfect for SEO pro
Overview 🌐
Splitout Code. Uses splitOut, httpRequest, googleSheets, stickyNote. Event-driven trigger; 36 nodes.
This n8n workflow is designed for Customer Success Managers (CSM), marketers, sales teams, and data administrators who need to automate the process of uploading and processing CSV data in HubSpot. It
The SEO On Page API is a powerful tool for keyword research, competitor analysis, backlink insights, and overall SEO optimization. With multiple endpoints, you can instantly gather actionable SEO data