AutomationFlowsAI & RAG › YouTube to AI Newsletter with Gmail

YouTube to AI Newsletter with Gmail

Original n8n title: Create AI Newsletters From Youtube with Langchain, Gemini, Apify & Gmail

ByPratyush Kumar Jha @pratyush on n8n.io

This n8n workflow converts a YouTube video into a polished, email-ready newsletter. It scrapes the transcript, extracts a thumbnail/logo and brand color theme, uses multiple AI agents to (1) clean & summarize the transcript into three newsletter sections, (2) convert that…

Event trigger★★★★☆ complexityAI-powered26 nodesOutput Parser StructuredAgentGmailForm TriggerHTTP RequestGoogle SheetsGoogle Gemini ChatInformation Extractor
AI & RAG Trigger: Event Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #14012 — we link there as the canonical source.

This workflow follows the Agent → 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 →

Download .json
{
  "id": "pCBzf4zyJcIsQkth",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Video \u2192 Newsletter AI Agent",
  "tags": [],
  "nodes": [
    {
      "id": "3e73c364-46f3-4c9f-8a63-a1f60ee491f9",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        3456,
        608
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"the email subject\"\n    },\n    \"content\": {\n      \"type\": \"string\",\n      \"description\": \"the newsletter content\"\n    }\n  },\n  \"required\": [\"subject\", \"content\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "ba883af4-bb38-452b-94e8-1970cf1a1ead",
      "name": "Convert Newsletter to HTML (AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        3312,
        400
      ],
      "parameters": {
        "text": "=\nData: {{ $('Aggregate').item.json.output[2].output }}\n",
        "options": {
          "systemMessage": "=You are an expert newsletter editor and visual designer.\nGenerate email-ready HTML body that maintains a consistent professional layout, while adapting only the text colors according to the provided brand color theme.\n\n\ud83c\udfaf Objectives\n\nRefine clarity, coherence, and tone across all sections.\n\nMaintain a friendly, modern, Gen Z\u2013aligned voice that\u2019s professional yet approachable.\n\nOnly text colors (headings, paragraphs, links, footer text) should dynamically adapt to the provided color theme.\n\nPreserve the original layout, structure, padding, and overall visual hierarchy exactly as provided.\n\nEnsure strong readability, balance, and flow.\n\nKeep total content \u2264 1000 words (hard limit). Avoid filler or redundant text.\n\nEnd every email with a friendly, brand-colored footer.\n\n\ud83c\udfa8 Brand Text Color Adaptation Rules\n\nUse the color theme study provided by the workflow, which typically includes:\n\nVariable\tDescription\nprimary_color\tHighlight / heading color\nsecondary_color\tBody and paragraph text color\naccent_color\tLinks and buttons\nbackground_color\tOverall background tone\n\n\u2705 Important: Only apply these to text elements.\nDo not alter layout properties such as background, borders, padding, or container structure.\n\n\ud83e\uddf1 Fixed Layout Template\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<body style=\"background-color:#f9f9f9; padding:30px; font-family:'Helvetica Neue', Arial, sans-serif;\">\n  <div style=\"max-width:720px; margin:auto; background:#ffffff; padding:35px 40px; border-radius:16px; line-height:1.7; color:{{ $('Aggregate').item.json.output[1].output.secondary_color }}; box-shadow:0 4px 12px rgba(0,0,0,0.05);\">\n\n    <div style=\"text-align:center;\">\n      <img src=\"{{ $('Aggregate').item.json.output[0].output.Logo }}\" alt=\"Company Logo\" width=\"120\" />\n    </div>\n\n    <h1 style=\"font-size:26px; color:{{ $('Aggregate').item.json.output[1].output.primary_color }}; margin-bottom:20px; text-align:center; font-weight:700;\">\n      {{ $('On form submission').item.json['Brand Name'] }} Newsletter \u2728\n    </h1>\n    <div style=\"margin:16px 0 20px 0; text-align:center;\">\n  <a href=\"{{ $('Aggregate').item.json.output[3]['You Tube Video Link'] }}\" target=\"_blank\">\n    <img \n      src=\"{{ $('Aggregate').item.json.output[3].Thumbnail }}\" \n      alt=\"Watch on YouTube\" \n      style=\"width:100%; max-width:640px; border-radius:12px; display:block;\"\n    />\n  </a>\n</div>\n    <p> Hi {{ $json.Name }}, </p>\n    \n    <!-- Dynamic merged content goes here -->\n    \n    <p style=\"font-size:14px; color:{{ $('Aggregate').item.json.output[1].output.secondary_color }}; text-align:center; margin-top:35px; border-top:1px solid #eee; padding-top:15px;\">\n      \u00a9 {{ $now.format('yyyy') }} <span style=\"color:{{ $('Aggregate').item.json.output[1].output.primary_color }}; font-weight:bold;\">{{ $('On form submission').item.json['Brand Name'] }}</span> | Built with \ud83d\udc9a for our community <br>\n      <span style=\"font-size:12px; color:{{ $('Aggregate').item.json.output[1].output.accent_color }};\">Stay curious. Stay creative. \ud83d\ude80</span>\n    </p>\n  </div>\n</body>\n\n\ud83d\udd8b Element Styling (Only Text Color Adapts)\nElement\tStyle\n<h2>\tfont-size:21px; color: {{ $('Aggregate').item.json.output[1].output.primary_color }}; margin-top:28px; margin-bottom:12px; font-weight:600;\n<h3>\tfont-size:18px; color: {{ $('Aggregate').item.json.output[1].output.secondary_color }}; margin-top:22px; margin-bottom:10px; font-weight:500;\n<p>\tfont-size:16px; margin-bottom:18px; color: {{ $('Aggregate').item.json.output[1].output.secondary_color }};\n<ul>\tmargin:18px 0 18px 25px; font-size:16px; color: {{ $('Aggregate').item.json.output[1].output.secondary_color }};\n<li>\tmargin-bottom:10px;\n<a>\tcolor: {{ $('Aggregate').item.json.output[1].output.accent_color }}; text-decoration:none; (hover underline optional)\n\nThe layout (margins, padding, shadows, alignment) remains static. Only text colors are dynamically injected from the color study.\n\n\ud83e\udde9 Content Structure\n\nIntroduction Paragraph:\nBriefly introduce the three topics and mention today\u2019s date: {{ $now.format('yyyy-MM-dd') }}.\n\nEach Section:\n\n<h2>: Use or slightly refine the section title.\n\n<p>: Summarize clearly and engagingly.\n\nAdd verifiable citations using clickable <a href=\"https://...\">Source</a> links.\n\nSources Section:\n\n<h3>Sources:</h3>\n<ul>\n  <li><a href=\"[URL]\">[Publication Name] \u2013 [Article Title]</a></li>\n</ul>\n\n\nAlphabetize by publication name\n\nRemove duplicates\n\nConclusion:\nSummarize all three themes and end with an uplifting or call-to-action note.\n\n\ud83d\udd17 Citation Rules\n\nNever fabricate or alter sources.\n\nOnly use real, verifiable URLs.\n\nStandardize all sources into <a> tags.\n\nRemove duplicates.\n\n\ud83d\udce5 Input\n\nYou will receive:\n\nThree newsletter content sections\n\nBrand color theme study (primary_color, secondary_color, accent_color, background_color)\n\nOptionally: brand_name and brand_logo_url\n\n\ud83d\udce4 Output Format\n\nSubject line: One concise, specific subject (\u2264 80 characters)\n\nBody: Fully styled HTML that applies dynamic text colors only, while preserving the fixed, professional layout and footer."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "f4a8e7b1-004f-4912-90f7-080d21d5c9b6",
      "name": "Sending Emails to all the Subscribers",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3680,
        480
      ],
      "parameters": {
        "sendTo": "={{ $('Loop Over Items').item.json.Email }}",
        "message": "={{ $('Convert Newsletter to HTML (AI)').item.json.output.content }}",
        "options": {},
        "subject": "={{ $('Convert Newsletter to HTML (AI)').item.json.output.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0f3bdc82-1eac-4f73-a78d-4f0a7ad93cb0",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        928,
        416
      ],
      "parameters": {
        "options": {},
        "formTitle": "Newsletter",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Brand Logo",
              "multipleFiles": false,
              "requiredField": true
            },
            {
              "fieldLabel": "Brand Name",
              "requiredField": true
            },
            {
              "fieldLabel": "Brand Website",
              "requiredField": true
            },
            {
              "fieldLabel": "You Tube Video Link",
              "requiredField": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "07a77200-990c-4db6-8281-c417994090fb",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1488,
        128
      ],
      "parameters": {
        "url": "={{ $json['Brand Website'] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "a67fcffa-eaa3-49e5-b5a2-5fc1415d3762",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2400,
        352
      ],
      "parameters": {
        "numberInputs": 4
      },
      "typeVersion": 3.2
    },
    {
      "id": "03af34d4-125d-476a-abef-aaadb973285f",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2624,
        368
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "output"
      },
      "typeVersion": 1
    },
    {
      "id": "8b6c2b24-7b82-402c-9fd5-beaa4afa6723",
      "name": "Structured Output Parser2",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1840,
        320
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"primary_color\": \"\",\n\t\"secondary_color\": \"\",\n    \"accent_color\": \"\",\n    \"background_color\":\"\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "f7e10755-4e35-47fe-81e2-2b4e6a925779",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        3056,
        384
      ],
      "parameters": {
        "options": {}
      },
      "executeOnce": true,
      "typeVersion": 3
    },
    {
      "id": "414424e3-9640-4ac9-b2f8-e53b6f123f95",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2848,
        368
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 358131854,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA/edit#gid=358131854",
          "cachedResultName": "Subscribers List"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA/edit?usp=drivesdk",
          "cachedResultName": "Newsletter Emails"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c42d0232-6dcf-4a01-88cd-4b8bba157f1e",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1680,
        128
      ],
      "parameters": {
        "text": "={{ $json.data }}",
        "options": {
          "systemMessage": "analyze the website html data and then provide me the colour code this website is following like the theme of this website and output the result providing\nprimary_color \u2013 brand\u2019s accent or highlight color\n\nsecondary_color \u2013 neutral contrast or typography color\n\naccent_color \u2013 supporting tone for buttons or links\n\nbackground_color \u2013 overall email background tone"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "0059f930-9451-4e7b-99b0-fc90f2766a16",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        1536,
        576
      ],
      "parameters": {
        "jsCode": "// Get input data (first item in n8n input)\nconst items = $input.item.json.data;\n\n// Combine all \"text\" fields into one string\nlet combined = items\n  .map(chunk => chunk.text || \"\") // safely get text\n  .join(\" \")                      // join with spaces\n  .trim();\n\n// Return as a single item\nreturn [{\n  json: {\n    combinedText: combined\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "08ae6e3f-c665-424e-94a7-f93b25d497e8",
      "name": "AI Agent2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1808,
        576
      ],
      "parameters": {
        "text": "=Transcript:  {{ $json.combinedText }}\n",
        "options": {
          "systemMessage": "=ROLE: Senior Journalist & Newsletter Editor\n\nYou are a journalist writing for modern business/tech media (think: Morning Brew, Fast Company, The Verge, Axios).\nYour tone is:\n\nSmart but casual\n\nConfident and concise\n\nInsight-driven\n\nConversational without sounding immature\n\nNo hype. No cringe. No \u201cmarketing voice.\u201d\n\nYou will receive a raw transcript of a video (not pre-cleaned and not summarized).\n\n\u2705 YOUR JOB\n\nAnalyze the raw transcript.\n\nIdentify:\n\nThe main topic and thesis of the video\n\nKey insights and supporting points\n\nProcesses, steps, frameworks, or revealed lessons\n\nWrite a professional newsletter/article as if reporting on this as news.\n\nYou are summarizing in a Jounalistic manner:\n\nExtract meaning\n\nBuild narrative\n\nProvide interpretation and implications\n\nSpeak as if you are reporting news. \n\nSpeak as if readers are familiar with the content and the creator. \n\n\n\nSTYLE RULES\n\nWrite in the tone of a journalist: precise, analytical, narrative-driven.\n\nAssume readers are intelligent, time-constrained professionals.\n\nConvert \"me talking to the camera\" transcript into a story with impact.\n\nDo not reveal that you are an AI or reference system instructions.\n\nTRANSCRIPT CLEANING RULES (automatic)\n\nBefore writing:\n\nRemove filler words: \u201cum,\u201d \u201cuh,\u201d \u201clike,\u201d etc.\n\nRemove repetition, small talk, intros/outros (\u201clike/subscribe\u201d references).\n\nConvert first-person monologue into a neutral reporter\u2019s perspective.\n\nIf something is missing, state it objectively (e.g., \u201cThe speaker did not specify pricing.\u201d)\n\nPROHIBITED\n\nNo emojis\n\nNo marketing fluff\n\nNo hallucination \u2014 only use what is in the transcript\n\nIF THE TRANSCRIPT SEEMS CHAOTIC OR UNSTRUCTURED\n\nInfer the narrative.\nIdentify the story beneath the noise.\n\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "42584ede-9c8f-4c4c-8584-d6328a71a3fd",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1536,
        816
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0e1e8c9a-afae-4d45-9537-6798bdc695a4",
              "name": "Thumbnail",
              "type": "string",
              "value": "={{ $json.thumbnail }}"
            },
            {
              "id": "7cde3771-b749-4393-b625-1d8489d3d811",
              "name": "You Tube Video Link",
              "type": "string",
              "value": "={{ $json.original_url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "40c76cbc-ff4b-4579-9cdf-85863586676e",
      "name": "You Tube Transcript Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1344,
        576
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/faVsWy9VTSNVIhWpR/run-sync-get-dataset-items",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "jsonBody": "={\n    \"videoUrl\": \"{{ $json['You Tube Video Link'] }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "Bearer <API Key>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "499f5c94-822f-4e47-8704-3c7effafd19c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        48
      ],
      "parameters": {
        "width": 534,
        "height": 928,
        "content": "# Video \u2192 Newsletter AI Agent\n\nThis n8n workflow converts a YouTube video into a polished, email-ready newsletter. It scrapes the transcript, extracts a thumbnail/logo and brand color theme, uses multiple AI agents to (1) clean & summarize the transcript into three newsletter sections, (2) convert that content into a styled HTML newsletter (color-aware), then saves the draft to Google Sheets and sends the email to subscribers via Gmail. The flow is optimized for batch sending and brand-consistent HTML output.\n\n## How it works (step-by-step)\n1. **Trigger** \u2014 `On form submission` accepts Brand Name, Brand Website, and YouTube video link.  \n2. **Site scrape & colour study** \u2014 HTTP requests + `Information Extractor` \u2192 AI agent derives brand color theme (primary/secondary/accent/background).  \n3. **Transcript retrieval** \u2014 Two YouTube transcript scrapers (Apify acts) fetch the video transcript and thumbnail; a small `Code` node merges transcript chunks.  \n4. **Summarization & journalism** \u2014 `AI Agent2` (LangChain/Gemini) cleans the transcript, extracts thesis + key points, and writes 3 newsletter sections in a journalistic tone.  \n5. **HTML conversion** \u2014 `Convert Newsletter to HTML (AI)` agent applies the fixed layout and injects only text color variables (keeps layout intact) and outputs Subject + HTML body (\u22641000 words).  \n6. **Aggregate & merge** \u2014 `Merge` + `Aggregate` assemble files, assets, and parsed outputs.  \n7. **Save & send** \u2014 Save the email draft to Google Sheets (`Save Newsletter Draft in Google Sheet`) and loop through subscribers from a subscribers sheet; `Sending Emails to all the Subscribers` (Gmail node) sends the HTML to each address in batches.  \n8. **Batching & looping** \u2014 `Split In Batches` handles large subscriber lists; `Loop Over Items` triggers the HTML-conversion per recipient batch.\n\n## Quick Setup Guide\n\ud83d\udc49 [Demo & Setup Video](https://drive.google.com/file/d/1bOfkyDY-Y06pq9ojZzLaGy5Xuvp9LdH7/view?usp=sharing)\n\ud83d\udc49 [Sheet Template](https://docs.google.com/spreadsheets/d/1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA/edit?usp=sharing)\n\ud83d\udc49 [Course](https://www.udemy.com/course/n8n-automation-mastery-build-ai-powered-enterprise-ready/?referralCode=2EAE71591D3BEB80F2CC)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9dcde39b-9e42-4783-a293-a7b64783b214",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        256
      ],
      "parameters": {
        "color": 6,
        "width": 294,
        "height": 384,
        "content": "## Workflow Input (Form Trigger)\nThis section collects the required inputs from the user through a form submission."
      },
      "typeVersion": 1
    },
    {
      "id": "5bccab58-f443-47d7-994a-d303978c7d5e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        -160
      ],
      "parameters": {
        "color": 6,
        "width": 1190,
        "height": 608,
        "content": "## Extract Brand Style & Colors\nThis block analyzes the provided brand website to determine the brand\u2019s visual identity."
      },
      "typeVersion": 1
    },
    {
      "id": "287201ba-2b24-40ed-967c-b1f70d8536be",
      "name": "You Tube Thumbnail Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1344,
        816
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/gLdh4fh3Q9Rqcmqdf/run-sync-get-dataset-items",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "jsonBody": "={\n    \"video_urls\": [\n        {\n            \"url\": \"{{ $json['You Tube Video Link'] }}\"\n        }\n    ]\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "Bearer <API Key>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ecd1c08a-7936-470b-a383-5c46cd26c5a4",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        464
      ],
      "parameters": {
        "color": 6,
        "width": 1190,
        "height": 544,
        "content": "## Fetch YouTube Transcript\nThis section retrieves the transcript and thumbnail from the YouTube video."
      },
      "typeVersion": 1
    },
    {
      "id": "9b457210-34aa-4936-ab2b-ec8a27b58f05",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2368,
        208
      ],
      "parameters": {
        "color": 6,
        "width": 1478,
        "height": 592,
        "content": "## AI Processing, HTML Generation & Email Delivery\nThis section handles the core content generation and delivery of the newsletter."
      },
      "typeVersion": 1
    },
    {
      "id": "97699901-a961-438e-b33a-b334a005a9bf",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1792,
        768
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5f23ca4b-f0fd-441f-9304-460cde581ebe",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3312,
        624
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f3c78fce-5e7d-4cda-bd0f-9d534c1d2d3c",
      "name": "Information Extractor",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        1664,
        -32
      ],
      "parameters": {
        "text": "={{ $json.data }}",
        "options": {},
        "attributes": {
          "attributes": [
            {
              "name": "Logo",
              "description": "Logo Image Link"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9c0f0a8a-18a0-41bc-96ca-2ff465f19d12",
      "name": "HTTP Request5",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1488,
        -32
      ],
      "parameters": {
        "url": "={{ $json['Brand Website'] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "d51b5ac2-ba70-405b-8264-bb67a2e2c7db",
      "name": "Save Newsletter Draft in Google Sheet1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3664,
        288
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.output.subject }}",
            "Message": "={{ $json.output.content }}",
            "Email Send At": "={{$now}}",
            "Email Created At": "={{$now}}"
          },
          "schema": [
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Created At",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Send At",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Send At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hvB5Zif52eCLv_X7E_OifQv9OI5usn-CQ50-TsZTMQA/edit?usp=drivesdk",
          "cachedResultName": "Newsletter Emails"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cf336a58-c66b-46dc-96f9-e8fc9a4ef723",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "AI Agent2": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request5": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Convert Newsletter to HTML (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "AI Agent2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          },
          {
            "node": "You Tube Transcript Scraper",
            "type": "main",
            "index": 0
          },
          {
            "node": "You Tube Thumbnail Scraper",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Request5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Information Extractor": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "AI Agent2",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Convert Newsletter to HTML (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Convert Newsletter to HTML (AI)",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser2": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "You Tube Thumbnail Scraper": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "You Tube Transcript Scraper": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Newsletter to HTML (AI)": {
      "main": [
        [
          {
            "node": "Sending Emails to all the Subscribers",
            "type": "main",
            "index": 0
          },
          {
            "node": "Save Newsletter Draft in Google Sheet1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sending Emails to all the Subscribers": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This n8n workflow converts a YouTube video into a polished, email-ready newsletter. It scrapes the transcript, extracts a thumbnail/logo and brand color theme, uses multiple AI agents to (1) clean & summarize the transcript into three newsletter sections, (2) convert that…

Source: https://n8n.io/workflows/14012/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7
AI & RAG

This is an automated blog post generation system that: Researches topics using AI agents and web search tools Writes complete blog posts with proper SEO structure Generates custom images for each post

Output Parser Structured, Google Gemini Chat, HTTP Request Tool +11
AI & RAG

CV → Match → Screen → Decide, all automated

HTTP Request, Information Extractor, Google Sheets +7
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

HTTP Request, Google Sheets, OpenRouter Chat +5
AI & RAG

The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical

Google Sheets, Agent, OpenAI Chat +5