This workflow corresponds to n8n.io template #9386 — we link there as the canonical source.
This workflow follows the Apifyn8N Nodes Apify → 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 →
{
"id": "XzUP6yumql5XeBG0",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "YouTube to LinkedIn Content Engine",
"tags": [],
"nodes": [
{
"id": "f0406549-bb99-45b9-86dc-6ea2e5426fab",
"name": "RSS Feed Trigger",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
208,
368
],
"parameters": {
"feedUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=REPLACE_THIS_ID",
"pollTimes": {
"item": [
{
"hour": 9
}
]
}
},
"typeVersion": 1
},
{
"id": "6f912873-c9de-493c-9d9a-a50a896fe4cb",
"name": "Run an Actor and get dataset",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
624,
368
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "list",
"value": "ACirYOwWR3EeEmcqc",
"cachedResultUrl": "https://console.apify.com/actors/ACirYOwWR3EeEmcqc/input",
"cachedResultName": "YouTube video to Transcript (scrapingxpert/youtube-video-to-transcript)"
},
"operation": "Run actor and get dataset",
"customBody": "={\n \"start_urls\": [\n {\n \"url\": \"{{ $json.link }}\"\n }\n ]\n}",
"actorSource": "store",
"authentication": "apifyOAuth2Api"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "92edb466-0034-43c4-a937-d35c7f62aa77",
"name": "Message a model",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
928,
368
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "assistant",
"content": "=**Persona:** You are a respected thought leader and subject matter expert. Your expertise is in synthesizing complex information and presenting it as clear, factual, and authoritative insights for a professional LinkedIn audience.\n\n**Context:** You will be given the full transcript of a video. Your goal is to distill the key messages and present them as your own core insights.\n\n<TASK_DEFINITION>\nYour primary task is to analyze the provided transcript and generate a JSON array containing **exactly 2 distinct LinkedIn posts**. Each post must be a standalone piece of valuable content derived from a core theme in the transcript.\n</TASK_DEFINITION>\n\n<JSON_OUTPUT_SPECIFICATION>\nYour entire response WILL be a single, valid JSON array `[]`. NO other text, explanations, or markdown formatting will precede or follow the JSON array. The array must contain exactly 2 post objects. Each object MUST strictly adhere to the following schema:\n{\n \"theme\": \"(String) A brief 2-5 word description of the main topic of this specific post.\",\n \"hook\": \"(String) A compelling, attention-grabbing opening sentence. This can be a provocative question, a surprising statistic, or a bold statement.\",\n \"body\": \"(String) The main content of the post. This should be 3-5 short paragraphs. Use bullet points (using the '\\\\n\\\\u2022 ' format) for lists of takeaways or key points.\",\n \"cta\": \"(String) An engaging call-to-action that is a question posed to the reader to encourage comments.\",\n \"hashtags\": \"(Array of Strings) An array of 3-5 specific, lowercase, and relevant hashtags.\"\n}\n</JSON_OUTPUT_SPECIFICATION>\n\n<CONTENT_RULES>\n1. **Direct & Factual Tone:** You MUST present the information directly. Do not refer to the source material (e.g., \"the video explains...\"). You are the expert presenting the insight.\n2. **Synthesize, Don't Summarize:** Do not simply restate what was said. Extract the core ideas and present them as a coherent, valuable insight.\n3. **Prioritize Data:** If the transcript contains specific facts, figures, statistics, or data points, you MUST include them in the `body` of the post to add credibility and value.\n4. **Generate Two Distinct Posts:** **You MUST generate exactly two posts. The second post must analyze a different theme, perspective, or section of the transcript than the first post. They should not be simple variations of each other.**\n</CONTENT_RULES>\n\nAdhere strictly to all rules. Analyze the following transcript. Your final and ONLY output will be the JSON array containing two post objects.\n\n<TRANSCRIPT>\n{{ $json.transcript }}\n</TRANSCRIPT>"
}
]
},
"simplify": false
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "e35b7e6e-8aee-4cf3-b858-ac7701f33caf",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
1344,
368
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const response = $input.item.json.choices[0].message.content;\nconst parsedData = JSON.parse(response);\n\n// Wrap the array in an object with a key, for example, 'posts'\n// n8n will correctly handle this structured output.\nreturn { posts: parsedData };"
},
"typeVersion": 2
},
{
"id": "d6e75636-0e5d-4699-a9a4-da0bca62d1d4",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1584,
640
],
"parameters": {
"columns": {
"value": {
"CTA": "={{ $json.cta }}",
"Body": "={{ $json.body }}",
"Hook": "={{ $json.hook }}",
"Theme": "={{ $json.theme }}",
"Hashtags": "={{ $json.hashtags }}",
"Video Link": "={{ $('RSS Feed Trigger').item.json.link }}"
},
"schema": [
{
"id": "Video Link",
"type": "string",
"display": true,
"required": false,
"displayName": "Video Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Theme",
"type": "string",
"display": true,
"required": false,
"displayName": "Theme",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Hook",
"type": "string",
"display": true,
"required": false,
"displayName": "Hook",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Body",
"type": "string",
"display": true,
"required": false,
"displayName": "Body",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CTA",
"type": "string",
"display": true,
"required": false,
"displayName": "CTA",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Hashtags",
"type": "string",
"display": true,
"required": false,
"displayName": "Hashtags",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
}
},
"typeVersion": 4.7
},
{
"id": "ad264b8d-a481-4d95-9cf9-39083f101aec",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
1584,
368
],
"parameters": {
"options": {},
"fieldToSplitOut": "posts"
},
"typeVersion": 1
},
{
"id": "d940b31e-9844-4c00-bef3-5b32d3a03567",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-192
],
"parameters": {
"color": 3,
"width": 1072,
"height": 128,
"content": "## YouTube to LinkedIn Content Engine\n\nThis automation monitors a YouTube channel for new videos, automatically extracts the transcript, uses AI to generate two distinct, ready-to-publish LinkedIn posts, and saves them to a Google Sheet for review and scheduling."
},
"typeVersion": 1
},
{
"id": "8bff5219-9818-4bc3-8639-9436ab98e2c5",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
288
],
"parameters": {
"width": 368,
"height": 432,
"content": "## 1. \ud83d\udcf0 RSS Feed (Trigger)\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Description:** \nThe workflow's starting point. This node watches a YouTube channel for new video uploads using its unique RSS feed URL and triggers the automation whenever a new video is detected.\n\n**Configuration:** \nThe URL is set to the specific channel's feed: https://www.youtube.com/feeds/videos.xml?channel_id="
},
"typeVersion": 1
},
{
"id": "b947839f-cd2a-4ec4-ad68-d920e0483bf0",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
80
],
"parameters": {
"color": 7,
"width": 336,
"height": 256,
"content": "## 2. \ud83d\udd77\ufe0f Apify\n\n**Description:** \nThis node executes an Apify \u201cactor\u201d to scrape the full text transcript from the new video URL provided by the RSS trigger.\n\n**Configuration:** \nSet to **Run an Actor and get dataset**, using the actor ID:\nscrapingxpert/youtube-video-to-transcript"
},
"typeVersion": 1
},
{
"id": "e8945fc8-610a-41df-8f12-3cf18bc1e824",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
576
],
"parameters": {
"color": 5,
"width": 336,
"height": 304,
"content": "## 3. \ud83e\udd16 OpenAI Chat Model \n\n\n**Description:** \nThis AI content generator node sends the full transcript to an advanced model (like `gpt-4o`) along with a highly specific prompt.\n\n**Configuration:** \n- **JSON Mode:** Enabled \n- **Prompt:** Instructs the AI to act as a thought leader and generate *exactly two distinct LinkedIn posts*, formatting the output as a strict JSON array."
},
"typeVersion": 1
},
{
"id": "81951797-3890-4504-97e9-f09124b296e7",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1152,
16
],
"parameters": {
"color": 4,
"width": 464,
"height": 304,
"content": "## 4. \ud83d\udcbb Code\n\n**Description:** \nThe OpenAI node outputs its JSON as a single text string. This node converts that string into a structured array of post objects.\n\nIt uses the following logic:\n\n```javascript\nconst posts = JSON.parse($json[\"data\"]);\nreturn { posts };\n```\nThis wraps the result as { posts: ... } to fit n8n\u2019s data structure."
},
"typeVersion": 1
},
{
"id": "5a568cde-c21d-4783-a40a-16c039248639",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1776,
384
],
"parameters": {
"color": 6,
"width": 368,
"height": 192,
"content": "## 5. \ud83d\udd00\ud83d\udcca Split & Save (Google Sheets)\n\n**Description:**\nThese two nodes take the array of AI-generated posts, process each one individually, and append it as a new row in Google Sheets."
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "907ed0a1-6c18-494e-9ea2-b6b848617560",
"connections": {
"Split Out": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Message a model": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed Trigger": {
"main": [
[
{
"node": "Run an Actor and get dataset",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Run an Actor and get dataset": {
"main": [
[
{
"node": "Message a model",
"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.
openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow transforms new YouTube videos from any channel into high-quality, ready-to-publish LinkedIn posts and saves them directly to a Google Sheet, creating a powerful, automated content repurposing engine.
Source: https://n8n.io/workflows/9386/ — 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.
This workflow is ideal for individuals, marketers, agencies, and brands who want to effortlessly automate the entire blogging and social media process—from idea generation to promotion. Its primary go
This workflow is built for creators, solopreneurs, SaaS founders, and agencies looking to automate their social media content process from idea to publication. It combines the power of OpenAI, Google
A production-ready n8n workflow that generates AI avatar videos from images and text using VEED Fabric 1.0, with flexible multi-platform publishing capabilities. Process any number of videos: Sequenti
Content creators, social media managers, and solopreneurs who want to automate carousel post creation and multi-platform publishing from a single Telegram message.
Create & Share AI Photos with Telegram, Gemini & Post to Facebook, Instagram & X