AutomationFlowsAI & RAG › Transform Video Transcripts Into Multi-platform Social Media Posts with Groq AI

Transform Video Transcripts Into Multi-platform Social Media Posts with Groq AI

ByMuhammad Shaheer Awan @shaheer03 on n8n.io

This workflow automates the process of turning your video transcripts into platform-specific social media posts using AI. It reads any uploaded transcript file, analyzes the text, and automatically generates full-length, engaging posts with image prompts for Facebook, LinkedIn,…

Event trigger★★★★☆ complexityAI-powered11 nodesRead Binary FileMove Binary DataGoogle SheetsAgentGroq ChatTool Serp Api
AI & RAG Trigger: Event Nodes: 11 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Google Sheets 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": "OYnQhavQIhmfyp3s",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "CONTENT WRITING",
  "tags": [],
  "nodes": [
    {
      "id": "d6385da1-12a2-4265-a527-c3831da5817b",
      "name": "Read Transcript File",
      "type": "n8n-nodes-base.readBinaryFile",
      "notes": "Upload your video transcript as a text file",
      "position": [
        -220,
        220
      ],
      "parameters": {
        "filePath": "D:\\1.     SHAHEER\\FILE TO TRANSCRIBE.txt"
      },
      "typeVersion": 1
    },
    {
      "id": "da1c5d28-4d5a-4d6f-8c7a-3ad85eeaa70d",
      "name": "Convert to Text",
      "type": "n8n-nodes-base.moveBinaryData",
      "position": [
        -40,
        220
      ],
      "parameters": {
        "options": {},
        "setAllData": false,
        "destinationKey": "transcript"
      },
      "typeVersion": 1
    },
    {
      "id": "a7189460-1e70-4600-ac72-3e86604998bb",
      "name": "Parse Content by Platform",
      "type": "n8n-nodes-base.function",
      "position": [
        700,
        220
      ],
      "parameters": {
        "functionCode": "// Function node code (n8n)\n// Input: expects previous node to provide .json.output which may be a stringified JSON array\n// Output: array of items -> each item: { json: { platform, post, imagePrompt, sheetRow: [platform, post, imagePrompt] } }\n\nconst rawOutput = $input.first().json.output || '';\n\n// helper: try several JSON parse strategies for escaped strings\nfunction tryParseJSON(input) {\n  if (!input || typeof input !== 'string') return null;\n  const attempts = [\n    input,\n    input.trim(),\n    input.replace(/\\\\n/g, '\\n'),\n    input.replace(/\\\\\"/g, '\"'),\n    input.replace(/\\\\'/g, \"'\"),\n    input.replace(/\\\\n/g, '\\n').replace(/\\\\\"/g, '\"')\n  ];\n  for (const attempt of attempts) {\n    try {\n      const parsed = JSON.parse(attempt);\n      return parsed;\n    } catch (e) {\n      // continue trying\n    }\n  }\n  return null;\n}\n\n// fallback smartExtract (your original approach) \u2014 used if parsing fails\nfunction smartExtract(text, keywords) {\n  if (!text || typeof text !== 'string') return '';\n  const patterns = [\n    new RegExp(`---${keywords}---([\\\\s\\\\S]*?)(?=---|$)`, 'i'),\n    new RegExp(`####${keywords}####([\\\\s\\\\S]*?)(?=####|$)`, 'i'),\n    new RegExp(`##\\\\s*${keywords}[\\\\s\\\\S]*?\\\\n([\\\\s\\\\S]*?)(?=##|$)`, 'i'),\n    new RegExp(`${keywords}[\\\\s\\\\S]*?\\\\n([\\\\s\\\\S]*?)(?=\\\\n\\\\n[A-Z]|$)`, 'i')\n  ];\n  for (const pattern of patterns) {\n    const match = text.match(pattern);\n    if (match && match[1]) {\n      return match[1].trim().replace(/```/g, '').replace(/\\n{3,}/g, '\\n\\n');\n    }\n  }\n  return '';\n}\n\n// normalize text: convert escaped newlines to real ones, trim excessive whitespace\nfunction normalizeText(s) {\n  if (!s && s !== '') return '';\n  let out = typeof s === 'string' ? s : String(s);\n  // convert common escaped sequences\n  out = out.replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\\"/g, '\"').replace(/\\\\'/g, \"'\");\n  // collapse more than 2 newlines into 2\n  out = out.replace(/\\n{3,}/g, '\\n\\n');\n  // trim leading/trailing whitespace on each line\n  out = out.split('\\n').map(l => l.trimEnd()).join('\\n').trim();\n  return out;\n}\n\nlet parsed = tryParseJSON(rawOutput);\nlet rows = [];\n\n// If parsed is a top-level object with \"output\" key that itself is a stringified JSON,\n// handle that too (some agents return [ { \"output\": \"[{...}]\" } ])\nif (!parsed && rawOutput && rawOutput.includes('\"[') && rawOutput.includes(']\"')) {\n  // attempt to extract the inner JSON substring\n  const innerMatch = rawOutput.match(/\"(\\[.*\\])\"/s);\n  if (innerMatch && innerMatch[1]) {\n    parsed = tryParseJSON(innerMatch[1]);\n  }\n}\n\n// If parsed looks like an array of objects (good), use it\nif (Array.isArray(parsed)) {\n  // Normalize common shapes: each element might be { platform, post, imagePrompt } or { \"platform\":..., \"post\": \"...\", ... }\n  for (const el of parsed) {\n    // if the AI returned wrapped objects like {\"platform\":..., \"post\": \"...\"} OR single-key objects\n    // sometimes the array elements are strings containing JSON, try to parse those too\n    let item = el;\n    if (typeof el === 'string') {\n      const maybe = tryParseJSON(el);\n      if (maybe) item = maybe;\n    }\n    // attempt to find platform/post/imagePrompt inside item\n    const platform = item.platform || item.Platform || (item.output && item.output.platform) || '';\n    const post = item.post || item.Post || item.caption || item.content || item.text || '';\n    const imagePrompt = item.imagePrompt || item.image_prompt || item.image || item.ImagePrompt || '';\n    // If values still empty, skip or push empty strings\n    const p = normalizeText(post);\n    const img = normalizeText(imagePrompt);\n    const plat = String(platform || '').trim();\n    rows.push({\n      json: {\n        platform: plat,\n        post: p,\n        imagePrompt: img,\n        sheetRow: [plat, p, img]\n      }\n    });\n  }\n}\n\n// If parsing failed or rows empty, fall back to smartExtract on the rawOutput (transcript-style)\nif (rows.length === 0) {\n  const fbPost = smartExtract(rawOutput, 'FACEBOOK_POST') || smartExtract(rawOutput, 'FACEBOOK') || '';\n  const fbImage = smartExtract(rawOutput, 'FACEBOOK_IMAGE_PROMPT') || smartExtract(rawOutput, 'FACEBOOK_IMAGE') || '';\n  const waPost = smartExtract(rawOutput, 'WHATSAPP_CHANNEL') || smartExtract(rawOutput, 'WHATSAPP') || '';\n  const waImage = smartExtract(rawOutput, 'WHATSAPP_IMAGE_PROMPT') || smartExtract(rawOutput, 'WHATSAPP_IMAGE') || '';\n  const liPost = smartExtract(rawOutput, 'LINKEDIN_POST') || smartExtract(rawOutput, 'LINKEDIN') || '';\n  const liImage = smartExtract(rawOutput, 'LINKEDIN_IMAGE_PROMPT') || smartExtract(rawOutput, 'LINKEDIN_IMAGE') || '';\n  const igPost = smartExtract(rawOutput, 'INSTAGRAM_CAPTION') || smartExtract(rawOutput, 'INSTAGRAM') || '';\n  const igImage = smartExtract(rawOutput, 'INSTAGRAM_IMAGE_PROMPT') || smartExtract(rawOutput, 'INSTAGRAM_IMAGE') || '';\n  const rdPost = smartExtract(rawOutput, 'REDDIT_POST') || smartExtract(rawOutput, 'REDDIT') || '';\n  const rdImage = smartExtract(rawOutput, 'REDDIT_IMAGE_PROMPT') || smartExtract(rawOutput, 'REDDIT_IMAGE') || '';\n  \n  rows = [\n    { json: { platform: 'Facebook', post: normalizeText(fbPost), imagePrompt: normalizeText(fbImage), sheetRow: ['Facebook', normalizeText(fbPost), normalizeText(fbImage)] } },\n    { json: { platform: 'WhatsApp', post: normalizeText(waPost), imagePrompt: normalizeText(waImage), sheetRow: ['WhatsApp', normalizeText(waPost), normalizeText(waImage)] } },\n    { json: { platform: 'LinkedIn', post: normalizeText(liPost), imagePrompt: normalizeText(liImage), sheetRow: ['LinkedIn', normalizeText(liPost), normalizeText(liImage)] } },\n    { json: { platform: 'Instagram', post: normalizeText(igPost), imagePrompt: normalizeText(igImage), sheetRow: ['Instagram', normalizeText(igPost), normalizeText(igImage)] } },\n    { json: { platform: 'Reddit', post: normalizeText(rdPost), imagePrompt: normalizeText(rdImage), sheetRow: ['Reddit', normalizeText(rdPost), normalizeText(rdImage)] } }\n  ];\n}\n\n// Final safety: ensure at least the five platforms exist (avoid missing rows)\nconst requiredPlatforms = ['Facebook','WhatsApp','LinkedIn','Instagram','Reddit'];\nconst existingPlats = rows.map(r => r.json.platform);\nfor (const rp of requiredPlatforms) {\n  if (!existingPlats.includes(rp)) {\n    rows.push({\n      json: {\n        platform: rp,\n        post: '',\n        imagePrompt: '',\n        sheetRow: [rp, '', '']\n      }\n    });\n  }\n}\n\nreturn rows;\n"
      },
      "typeVersion": 1
    },
    {
      "id": "78ec652a-5128-474a-9efa-13c28942820b",
      "name": "Save to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        900,
        220
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "brand",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "brand",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "priceFormatted",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "priceFormatted",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "screenSize",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "screenSize",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "processor",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "processor",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ram",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ram",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "storage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "storage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "os",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "os",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 256319129,
          "cachedResultUrl": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
          "cachedResultName": "SCRAP SHEET"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1-KNKTmjwN2ZXOODQc04-BLqNpEx1ME1FPZcXa3FGkL4",
          "cachedResultUrl": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
          "cachedResultName": "SCRAP DATA"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "ef01d728-16d8-4934-a07d-9ef856fbca1e",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        320,
        220
      ],
      "parameters": {
        "text": "=You are an elite social media copywriter & creative strategist with 10+ years of experience crafting viral, high-converting content across all platforms.\nYou\u2019ve generated $50M+ in revenue through social content, deeply understand 2025 algorithms, and specialize in emotion + psychology-based engagement copy.\n\nYou think like a storyteller, write like a human, and structure like a growth strategist.\n\n\ud83c\udfac INPUT:\n\nAnalyze the following transcript or text input:\n\n{{ $json.data }}\n\n\nExtract the core message, key insight, and emotional hook \u2014 then create content that makes people stop, feel, and respond.\n\n\u2699\ufe0f GLOBAL WRITING RULES (Apply to ALL platforms)\n\nHOOK PSYCHOLOGY:\n\nFirst 3 seconds must interrupt the scroll\n\nUse curiosity, emotion, or relatability (\u201cI wasted 5 hours before realizing this\u2026\u201d)\n\nNever start with \u201cHey guys\u201d or \u201cIn this video\u201d\n\nHUMAN VOICE:\n\nConversational, confident tone \u2014 like texting a smart friend\n\nUse contractions, rhetorical questions, and emotional contrast\n\nAvoid generic AI or corporate words like unlock, elevate, empower\n\nVALUE-FIRST:\n\nGive the reader something to learn, feel, or fix within 10 words\n\nUse numbers, results, or relatable pain points\n\nENGAGEMENT PSYCHOLOGY:\n\nAlways end with a comment question or reflection\n\nCreate emotional triggers: frustration \u2192 realization \u2192 relief\n\nHASHTAG SYSTEM (MANDATORY):\n\nEach platform must use realistic, trending, and context-matching hashtags\n\nHashtags should follow 2025 trends in AI, automation, marketing, productivity, or solopreneurship\n\nUse proper CamelCase (#AIAutomation not #aiautomation)\n\nNever output placeholders like [#YourTag]\n\nIMAGE PROMPT RULES (MANDATORY):\nFor every platform, write a detailed image prompt (to be used with image generation).\nEach should describe:\n\nMain visual concept\n\nEmotional tone\n\nColor scheme\n\nStyle (flat, 3D, realistic, etc.)\n\nText overlay (if any)\n\nFocal point and composition\n\nCONSISTENCY RULE:\n\nEach platform\u2019s post must feel complete, not shorter than others\n\nOutput must include both \u201cpost\u201d and \u201cimagePrompt\u201d sections\n\n\ud83d\udd35 FACEBOOK_POST\n\nAudience: 35\u201365, prefers longer story-driven, comment-based posts\nGoal: Emotional relatability + practical takeaway\nLength: 180\u2013250 words\nHashtags: 3\u20135 (broad + niche + branded)\n\nStructure:\n\nHook (emotion or curiosity)\n\nStory/problem\n\nLesson or insight\n\nReflection question\n\n3\u20135 relevant hashtags\n\nImagePrompt Example Style:\nExplain visual contrast, expression, and color (e.g., \u201cfrustrated person + clean workflow graphic, orange-blue tones, text overlay: \u2018Loop. Don\u2019t Repeat Mistakes.\u2019\u201d)\n\n\ud83d\udfe9 WHATSAPP_CHANNEL\n\nAudience: Mobile, personal, short attention span\nGoal: Quick value, emotional tone, conversational\nLength: 120\u2013180 words\nHashtags: None\nStructure:\n\n1-line hook\n\nShort story or value insight\n\n3\u20134 bullet takeaways\n\nQuestion ending\n\n2\u20133 emojis max\nImagePrompt: Simple, square, minimalist, high-contrast, emotionally expressive (e.g., \u201chalf chaos half clean automation flow, text overlay: \u2018From Chaos \u279c Flow\u2019\u201d).\n\n\ud83d\udd35 LINKEDIN_POST\n\nAudience: 25\u201355, professional, credibility + insight focused\nGoal: Teach + engage + open discussion\nLength: 150\u2013300 words\nHashtags: 6\u20139 (industry, professional, trending, branded)\n\nStructure:\n\nHook with stat, lesson, or contrarian take\n\nBrief personal or relatable context\n\nInsight or framework\n\nActionable conclusion + question\nImagePrompt: Clean, polished, corporate-friendly, subtle gradients or infographics. Text overlay under 5 words (e.g., \u201cFix Your Loops. Fix Your Workflow.\u201d)\n\n\ud83d\udfe3 INSTAGRAM_CAPTION\n\nAudience: 18\u201344, visual, story + aesthetics\nGoal: Relatable micro-story + strong hook before \u201c\u2026more\u201d cutoff\nLength: 120\u2013180 words\nHashtags: 12\u201318 (split between caption and first comment)\n\nStructure:\n\nHook line\n\nMicro-story or insight\n\nShort call-to-action question\n\nHashtag block (broad + niche + branded mix)\nImagePrompt: Reels cover or feed post \u2014 dynamic, aesthetic, bold typography, 3D gradients or split-scene visuals. Text overlay \u2264 5 words.\n\n\ud83e\udde1 REDDIT_POST\n\nAudience: Technical, community-driven, authenticity first\nGoal: Teach something useful + invite discussion\nLength: 200\u2013400 words\nHashtags: None\nStructure:\n\nHonest title (\u201cI [did X] and here\u2019s what happened\u201d)\n\nContext\n\nSteps or insights\n\nResult or reflection\n\nDiscussion question\nImagePrompt: Authentic diagram, screenshot-style, educational \u2014 no branding or polish.\n\n\ud83d\udea8 CRITICAL EXECUTION RULES\n\nMaintain delimiter and JSON format exactly like this:\n\n[\n  { \"platform\": \"Facebook\", \"post\": \"...\", \"imagePrompt\": \"...\" },\n  { \"platform\": \"WhatsApp\", \"post\": \"...\", \"imagePrompt\": \"...\" },\n  { \"platform\": \"LinkedIn\", \"post\": \"...\", \"imagePrompt\": \"...\" },\n  { \"platform\": \"Instagram\", \"post\": \"...\", \"imagePrompt\": \"...\" },\n  { \"platform\": \"Reddit\", \"post\": \"...\", \"imagePrompt\": \"...\" }\n]\n\n\nNever leave imagePrompt empty.\n\nEach post must feel human, emotional, and insightful.\n\nUse real trending hashtags \u2014 don\u2019t repeat across platforms unless natural.\n\nVary rhythm and tone (short + long sentences).\n\nAlways include a question at the end of each post.\n\nUse emotional storytelling + data-backed insight balance.\n\nEach post must feel ready to publish \u2014 not an outline.\n\nNow generate full-length, scroll-stopping posts for every platform (Facebook, WhatsApp, LinkedIn, Instagram, Reddit)\n\u2192 Each with real hashtags and image prompts that match the emotion, topic, and audience.\n\nEvery word should make the reader stop, feel, and act.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "9e42f6f9-ba4d-48aa-ab00-a074fe855ec8",
      "name": "Groq AI - Generate All Content",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        440,
        440
      ],
      "parameters": {
        "model": "qwen/qwen3-32b",
        "options": {
          "temperature": 0.8,
          "maxTokensToSample": 6000
        }
      },
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2bd22029-d536-4d7e-a1e8-9614c10d7298",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        140,
        220
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "00346c4d-be89-48d7-9177-164d0141e635",
              "name": "data",
              "type": "string",
              "value": "={{ $json.transcript }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "689b5823-81db-4c0f-9a5a-ad67908cefbf",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -400,
        220
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "22bac5ea-c623-4466-adc2-369320818476",
      "name": "SerpAPI",
      "type": "@n8n/n8n-nodes-langchain.toolSerpApi",
      "position": [
        620,
        440
      ],
      "parameters": {
        "options": {
          "gl": "us",
          "google_domain": "google.com"
        }
      },
      "credentials": {
        "serpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "59b57b89-d721-435f-b20f-fb9cdd4ba0f8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        80
      ],
      "parameters": {
        "color": 4,
        "width": 1640,
        "height": 520,
        "content": "# CONTENT WRITTING WORKFLOW THAT WORKS TOTALLY FREE USING GROQ\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a097d210-dc4e-43fd-ab1a-3369a9e28ecc",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -140
      ],
      "parameters": {
        "color": 6,
        "width": 540,
        "height": 1120,
        "content": "# \ud83d\udcda Content Writing Automation Workflow (AI + n8n)\n\n\ud83c\udfa5 **Watch the Full Tutorial**\n[![Watch on YouTube](https://img.youtube.com/vi/UoSDEUE8otg/hqdefault.jpg)](https://youtu.be/UoSDEUE8otg)\n\nThis workflow automatically transforms your **video transcripts** into ready-to-publish social media content across multiple platforms \u2014 Facebook, LinkedIn, Instagram, Reddit, and WhatsApp.\n\nIt uses **AI (Groq + LangChain Agent)** to understand your transcript, extract insights, and generate viral, platform-tailored posts \u2014 each with a unique image prompt ready for creative generation.\n\n\ud83d\udcc4 **Key Features**\n- Upload any transcript file \u2192 instantly generates complete social posts for 5 platforms  \n- Uses **Groq AI + LangChain Agent** for powerful and fast content generation  \n- Automatically creates platform-specific image prompts  \n- Saves all outputs to **Google Sheets** for easy publishing  \n- Integrates **SerpAPI** for trend-aware optimization  \n\n\ud83d\ude80 **Perfect For:** content creators, agencies, marketers, and automation builders who want to turn long-form video or transcript content into engaging, multi-platform social media posts \u2014 automatically.\n\n---\n\n\ud83d\udd17 **Created by:** Muhammad Shaheer  \n\ud83d\udca1 **YouTube Channel:** [https://www.youtube.com/@BOTNEXA](https://www.youtube.com/@ShaheerAutomation)  \n\ud83d\udce7 **For collaborations:** shaheerawan001@gmail.com\n\ud83d\udd17 **LINKEDIN:** www.linkedin.com/in/muhammad-shaheer-898513192"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6bd549d4-2c6d-4316-8415-fe2bd40e7dee",
  "connections": {
    "SerpAPI": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Parse Content by Platform",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to Text": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Transcript File": {
      "main": [
        [
          {
            "node": "Convert to Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Content by Platform": {
      "main": [
        [
          {
            "node": "Save to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq AI - Generate All Content": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Read Transcript File",
            "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 workflow automates the process of turning your video transcripts into platform-specific social media posts using AI. It reads any uploaded transcript file, analyzes the text, and automatically generates full-length, engaging posts with image prompts for Facebook, LinkedIn,…

Source: https://n8n.io/workflows/10656/ — 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

BoomerBobBot.TP. Uses agent, telegramTrigger, telegram, memoryBufferWindow. Event-driven trigger; 95 nodes.

Agent, Telegram Trigger, Telegram +10
AI & RAG

This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents. ​

Tool Http Request, Agent, HTTP Request +27
AI & RAG

How It Works Trigger: The workflow starts automatically when a new file (PDF, DOCX, or TXT) is uploaded to a specific Google Drive folder for client briefs. Configuration: The workflow sets up key var

Google Drive Trigger, Groq Chat, Output Parser Structured +6
AI & RAG

bot_telegram. Uses lmChatGroq, telegramTrigger, telegram, openAi. Event-driven trigger; 12 nodes.

Groq Chat, Telegram Trigger, Telegram +6
AI & RAG

This workflow creates a multi-talented AI assistant named Simran that interacts with users via Telegram. It can handle text and voice messages, understand the user's intent, and perform various tasks.

MongoDB, Chain Llm, Google Gemini Chat +11