This workflow corresponds to n8n.io template #14712 — we link there as the canonical source.
This workflow follows the Form Trigger → Gmail 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 →
{
"nodes": [
{
"id": "10b72a9f-fcf7-4ca8-8456-1e8d4be00b1b",
"name": "Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2144,
-336
],
"parameters": {
"width": 460,
"height": 772,
"content": "## Product Demo Highlight Reel Generator\n\nFor product marketers, sales teams, and content creators who want to extract the best moments from demo recordings without manual scrubbing. Submit a demo recording URL with a plain-English query describing what moments to find. WayinVideo AI scans the full recording, extracts matching clips, and sends a formatted review email with every clip title, timestamp, relevance score, description, and a download link.\n\n## How it works\n- **1. Form \u2014 Demo URL + Query + Email** collects the recording URL, product name, moment query, and recipient email\n- **2. WayinVideo \u2014 Submit Find Moments** sends the video and query to WayinVideo Find Moments API\n- **3. Wait \u2014 90 Seconds** pauses to allow WayinVideo time to start processing\n- **4. WayinVideo \u2014 Get Moments Result** polls the API for the completed result\n- **5. IF \u2014 Status SUCCEEDED?** checks if processing is done \u2014 retries every 30 seconds if not\n- **7. Gmail \u2014 Send Review Email** formats all clips into a clean HTML email and sends it\n\n## Set up steps\n1. In **2. WayinVideo \u2014 Submit Find Moments** \u2014 replace YOUR_WAYINVIDEO_API_KEY in the Authorization header\n2. In **4. WayinVideo \u2014 Get Moments Result** \u2014 replace YOUR_WAYINVIDEO_API_KEY in the Authorization header\n3. In **7. Gmail \u2014 Send Review Email** \u2014 connect your Gmail account via Google OAuth2\n4. Activate the workflow and open the Form URL to test"
},
"typeVersion": 1
},
{
"id": "fb6b38b8-fad2-4785-97e4-b39ad215814f",
"name": "Section \u2014 Form Input",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1648,
-304
],
"parameters": {
"color": 5,
"height": 340,
"content": "## Form Input\nUser submits the demo recording URL, product name, moment query, and review email address. Submitting the form triggers the workflow."
},
"typeVersion": 1
},
{
"id": "4eff62d7-2199-4d60-b362-f99624fe9f65",
"name": "Section \u2014 Moment Submission",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1392,
-304
],
"parameters": {
"color": 6,
"height": 340,
"content": "## Moment Submission\nSends the video URL and search query to WayinVideo Find Moments API. Returns a task ID used to poll for results."
},
"typeVersion": 1
},
{
"id": "23cd5e04-0aee-471b-ab0f-5d8c1c4f88be",
"name": "Section \u2014 Processing and Poll",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
-304
],
"parameters": {
"color": 6,
"width": 660,
"height": 484,
"content": "## Processing and Poll\nWaits 90 seconds then checks if WayinVideo has finished. If clips are not ready, waits 30 more seconds and checks again. Loops until status is SUCCEEDED."
},
"typeVersion": 1
},
{
"id": "8ce1dc3a-98f9-41c6-97bd-6fde2109a891",
"name": "Section \u2014 Review Email",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
-304
],
"parameters": {
"color": 4,
"width": 336,
"height": 324,
"content": "## Review Email\nFormats all clip results into a clean HTML email with titles, timestamps, scores, descriptions, and download links. Sends via Gmail."
},
"typeVersion": 1
},
{
"id": "e6116ad6-502f-4a09-affd-ba4d7a1f9e13",
"name": "Note \u2014 Infinite Loop Risk",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
272
],
"parameters": {
"color": 3,
"width": 444,
"content": "## \u26a0\ufe0f Infinite Retry Loop Risk\nIf WayinVideo never returns SUCCEEDED \u2014 for example due to an invalid URL, private video, or API error \u2014 this workflow loops forever between nodes 4 and 6. Add a retry counter and a second IF node to stop after 10 attempts and send an error email instead."
},
"typeVersion": 1
},
{
"id": "473c1155-7dcb-4b32-a900-a75160be085b",
"name": "Note \u2014 Export Links Expire",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
288
],
"parameters": {
"color": 3,
"width": 396,
"content": "## \u26a0\ufe0f Download Links Expire in 24h\nThe export_link URLs inside the email are temporary and expire after 24 hours. Download clips immediately after receiving the email, or add a Google Drive upload step before the Gmail node to save clips permanently."
},
"typeVersion": 1
},
{
"id": "33dfff70-1a97-4c8b-ade8-be920b714fbc",
"name": "1. Form \u2014 Demo URL + Query + Email",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1600,
-144
],
"parameters": {
"options": {},
"formTitle": "\ud83c\udfac Product Demo Highlight Reel Generator",
"formFields": {
"values": [
{
"fieldLabel": "Demo Recording URL",
"placeholder": "https://zoom.us/rec/xxxxxxx or YouTube link",
"requiredField": true
},
{
"fieldLabel": "Product / Brand Name",
"placeholder": "e.g. Incrementors CRM, MyApp, SaaSProduct",
"requiredField": true
},
{
"fieldLabel": "What Moments To Find",
"placeholder": "e.g. pricing and cost discussion",
"requiredField": true
},
{
"fieldLabel": "Send Review Email To",
"placeholder": "user@example.com",
"requiredField": true
}
]
},
"formDescription": "Paste your product demo recording URL \u2014 AI will find exact moments you need and send clips to your email for review."
},
"typeVersion": 2.2
},
{
"id": "1de987e8-ff93-498e-ae45-36562aa4e400",
"name": "2. WayinVideo \u2014 Submit Find Moments",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1344,
-144
],
"parameters": {
"url": "https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments",
"method": "POST",
"options": {},
"jsonBody": "={\n \"video_url\": \"{{ $json['Demo Recording URL'] }}\",\n \"query\": \"{{ $json['What Moments To Find'] }}\",\n \"project_name\": \"{{ $json['Product / Brand Name'] }}\",\n \"limit\": 5,\n \"enable_export\": true,\n \"resolution\": \"HD_720\",\n \"enable_caption\": true,\n \"caption_display\": \"original\",\n \"cc_style_tpl\": \"temp-7\",\n \"enable_ai_reframe\": false,\n \"target_lang\": \"en\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_TOKEN_HERE"
},
{
"name": "x-wayinvideo-api-version",
"value": "v2"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "00533754-feab-4f6c-ae65-6d4ab53a0abf",
"name": "3. Wait \u2014 90 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
-1088,
-144
],
"parameters": {
"amount": 90
},
"typeVersion": 1.1
},
{
"id": "5866fbc2-b14f-4523-99ae-2e6cd8f8d25a",
"name": "4. WayinVideo \u2014 Get Moments Result",
"type": "n8n-nodes-base.httpRequest",
"position": [
-880,
-144
],
"parameters": {
"url": "=https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments/results/{{ $('2. WayinVideo \u2014 Submit Find Moments').item.json.data.id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_TOKEN_HERE"
},
{
"name": "x-wayinvideo-api-version",
"value": "v2"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "b0311624-a1c0-47cd-a1b9-2c88f991c84f",
"name": "5. IF \u2014 Status SUCCEEDED?",
"type": "n8n-nodes-base.if",
"position": [
-640,
-144
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-status-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "SUCCEEDED"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "a90e937d-9975-4d6a-be4a-30083d6e30a7",
"name": "6. Wait \u2014 30 Seconds Retry",
"type": "n8n-nodes-base.wait",
"position": [
-640,
64
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "8f78ffa9-ad44-48eb-bf75-b8753f7a2115",
"name": "7. Gmail \u2014 Send Review Email",
"type": "n8n-nodes-base.gmail",
"position": [
-336,
-160
],
"parameters": {
"sendTo": "={{ $('1. Form \u2014 Demo URL + Query + Email').item.json['Send Review Email To'] }}",
"message": "=<div style=\"font-family:Arial,sans-serif;max-width:600px;margin:0 auto;color:#222;\">\n\n<div style=\"background:#1a1a1a;padding:24px;text-align:center;\">\n <h1 style=\"color:#fff;font-size:22px;margin:0;\">\ud83c\udfac Demo Highlight Clips Ready</h1>\n <p style=\"color:#aaa;font-size:13px;margin:8px 0 0;\">{{ $('1. Form \u2014 Demo URL + Query + Email').item.json['Product / Brand Name'] }}</p>\n</div>\n\n<div style=\"padding:24px;\">\n <p style=\"font-size:15px;\">Hi,</p>\n <p>Your demo highlight clips are ready for review.</p>\n <p><strong>Query Used:</strong> {{ $('1. Form \u2014 Demo URL + Query + Email').item.json['What Moments To Find'] }}</p>\n <p><strong>Full Recording:</strong> <a href=\"{{ $('1. Form \u2014 Demo URL + Query + Email').item.json['Demo Recording URL'] }}\" style=\"color:#1a1a1a;\">View Full Demo</a></p>\n <p style=\"font-size:13px;color:#888;\">Total Clips Found: {{ $('4. WayinVideo \u2014 Get Moments Result').item.json.data.clips.length }}</p>\n</div>\n\n<hr style=\"border:none;border-top:1px solid #eee;margin:0 24px;\"/>\n\n{{ $('4. WayinVideo \u2014 Get Moments Result').item.json.data.clips.map((c, i) => `\n<div style=\"padding:20px 24px;border-bottom:1px solid #f0f0f0;\">\n <h3 style=\"margin:0 0 8px;font-size:15px;color:#1a1a1a;\">Clip ${i+1}: ${c.title}</h3>\n <table style=\"font-size:12px;color:#666;margin-bottom:8px;\">\n <tr>\n <td style=\"padding-right:16px;\">\u23f1 <strong>Timestamp:</strong> ${Math.floor(c.begin_ms/1000)}s \u2014 ${Math.floor(c.end_ms/1000)}s</td>\n <td>\ud83d\udd25 <strong>Relevance Score:</strong> ${c.score}/100</td>\n </tr>\n </table>\n <p style=\"margin:6px 0;font-size:13px;color:#444;\">${c.desc}</p>\n <p style=\"margin:4px 0;font-size:12px;color:#aaa;\">${c.tags.join(' ')}</p>\n <a href=\"${c.export_link}\" style=\"display:inline-block;margin-top:10px;padding:8px 16px;background:#1a1a1a;color:#fff;text-decoration:none;border-radius:4px;font-size:12px;font-weight:bold;\">\u2b07 Download Clip</a>\n</div>\n`).join('') }}\n\n<div style=\"padding:24px;background:#f9f9f9;\">\n <p style=\"font-size:12px;color:#999;margin:0;\">\u26a0\ufe0f Download links expire in <strong>24 hours</strong>. Please download your clips promptly.</p>\n <p style=\"font-size:12px;color:#999;margin:8px 0 0;\">Powered by WayinVideo Find Moments API</p>\n</div>\n\n</div>",
"options": {},
"subject": "=\ud83c\udfac Demo Highlight Clips Ready \u2014 {{ $('1. Form \u2014 Demo URL + Query + Email').item.json['Product / Brand Name'] }}"
},
"typeVersion": 2.1
}
],
"connections": {
"3. Wait \u2014 90 Seconds": {
"main": [
[
{
"node": "4. WayinVideo \u2014 Get Moments Result",
"type": "main",
"index": 0
}
]
]
},
"5. IF \u2014 Status SUCCEEDED?": {
"main": [
[
{
"node": "7. Gmail \u2014 Send Review Email",
"type": "main",
"index": 0
}
],
[
{
"node": "6. Wait \u2014 30 Seconds Retry",
"type": "main",
"index": 0
}
]
]
},
"6. Wait \u2014 30 Seconds Retry": {
"main": [
[
{
"node": "4. WayinVideo \u2014 Get Moments Result",
"type": "main",
"index": 0
}
]
]
},
"1. Form \u2014 Demo URL + Query + Email": {
"main": [
[
{
"node": "2. WayinVideo \u2014 Submit Find Moments",
"type": "main",
"index": 0
}
]
]
},
"4. WayinVideo \u2014 Get Moments Result": {
"main": [
[
{
"node": "5. IF \u2014 Status SUCCEEDED?",
"type": "main",
"index": 0
}
]
]
},
"2. WayinVideo \u2014 Submit Find Moments": {
"main": [
[
{
"node": "3. Wait \u2014 90 Seconds",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Fill in a simple form with your demo recording URL, your product name, and describe the moments you want to find in plain English — the workflow does the rest. WayinVideo AI scans your full recording and extracts the exact clips that match your search query. You receive a…
Source: https://n8n.io/workflows/14712/ — 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.
Echo Brand Voice Analysis (Processor) - TASK-074 Dec 10 Fix. Uses formTrigger, httpRequest, executeWorkflowTrigger, moveBinaryData. Event-driven trigger; 40 nodes.
Streamline your content pipeline by bridging Notion and Instagram with a professional "review-before-publish" safeguard. This workflow allows team members to submit content via a simple form, generate
🎥 Analyze YouTube Video for Summaries, Transcripts & Content + Google Gemini AI. Uses stickyNote, httpRequest, googleDrive, gmail. Event-driven trigger; 33 nodes.
This n8n template automates PDF translation into 1 or 2 target languages while maintaining professional formatting. Users submit PDFs via web form and receive translated documents via email with prese
Submit any YouTube, Vimeo, or Zoom webinar URL using a simple form and the workflow handles everything from there. It runs a two-phase pipeline: first identifying the top viral moments in your video w