Transform YouTube videos into SEO-optimized blog posts with transcription and AI-powered content generation.
Turn your YouTube videos into engaging blog content automatically. This workflow downloads audio from YouTube videos, transcribes them using OpenAI Whisper, and uses GPT-4 to transform the transcript into a well-structured, SEO-optimized blog post. Includes automatic headline generation, meta descriptions, and formatting for your CMS. Perfect for content creators who want to maximize their video content.
{
"name": "YouTube to Blog Post Converter",
"nodes": [
{
"parameters": {
"content": "## Template by Harshith Vaddiparthy\n\n\n**Learn to Build AI Automations**\nMaster n8n, AI agents, and no-code automation in my comprehensive course.\n→ harshith.com/vibecode\n\n\n**Content Automation Consulting**\nI help businesses automate video creation, social media, blogs, and newsletters.\n→ harshith.com/meet\n\n\n**Connect with me**\n→ linkedin.com/in/harshith-vaddiparthy",
"height": 420,
"width": 400,
"color": 4
},
"id": "promo-sticky",
"name": "Sticky Note - Credits",
"type": "n8n-nodes-base.stickyNote",
"position": [
-500,
-200
],
"typeVersion": 1
},
{
"parameters": {
"path": "youtube-to-blog",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"id": "webhook",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
0,
100
],
"webhookId": "youtube-blog-webhook",
"typeVersion": 2
},
{
"parameters": {
"url": "=https://www.youtube.com/watch?v={{ $json.body.videoId }}",
"options": {}
},
"id": "get-video-info",
"name": "Get Video Info",
"type": "n8n-nodes-base.httpRequest",
"position": [
200,
100
],
"typeVersion": 4.2
},
{
"parameters": {
"command": "=yt-dlp -x --audio-format mp3 -o '/tmp/{{ $json.body.videoId }}.%(ext)s' 'https://www.youtube.com/watch?v={{ $json.body.videoId }}'"
},
"id": "download-audio",
"name": "Download Audio",
"type": "n8n-nodes-base.executeCommand",
"position": [
400,
100
],
"typeVersion": 1
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"binaryPropertyName": "={{ $json.body.videoId }}.mp3",
"options": {}
},
"id": "transcribe",
"name": "Transcribe with Whisper",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
600,
100
],
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CREDENTIAL_ID",
"name": "OpenAI"
}
},
"typeVersion": 1.8
},
{
"parameters": {
"text": "=Transform this video transcript into a well-structured, SEO-optimized blog post.\n\nVideo Title: {{ $('Webhook').item.json.body.videoTitle }}\n\nTranscript:\n{{ $json.text }}\n\nCreate:\n1. An engaging headline (H1)\n2. A meta description (160 characters max)\n3. 3-5 subheadings (H2) with content\n4. A conclusion with call-to-action\n5. 5 relevant tags/keywords\n\nFormat the output as JSON with these fields: title, metaDescription, content (HTML), tags (array)",
"modelId": {
"__rl": true,
"value": "gpt-4o",
"mode": "list"
},
"options": {
"temperature": 0.7,
"responseFormat": "json_object"
}
},
"id": "generate-blog",
"name": "Generate Blog Post",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
800,
100
],
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CREDENTIAL_ID",
"name": "OpenAI"
}
},
"typeVersion": 1.8
},
{
"parameters": {
"options": {}
},
"id": "respond-webhook",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1000,
100
],
"typeVersion": 1.1
},
{
"parameters": {
"content": "## YouTube to Blog Converter\n\n### Setup:\n1. Install yt-dlp on your n8n server\n2. Configure OpenAI credentials\n3. Send POST request with videoId and videoTitle\n\n### Flow:\n1. Receives video ID via webhook\n2. Downloads audio using yt-dlp\n3. Transcribes with Whisper\n4. Generates blog post with GPT-4\n5. Returns JSON with blog content\n\n### Integration:\n- Connect to WordPress, Ghost, or Notion\n- Add scheduling for automatic posting\n- Include featured image generation",
"height": 360,
"width": 400,
"color": 7
},
"id": "info-sticky",
"name": "Info",
"type": "n8n-nodes-base.stickyNote",
"position": [
-500,
40
],
"typeVersion": 1
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Get Video Info",
"type": "main",
"index": 0
}
]
]
},
"Get Video Info": {
"main": [
[
{
"node": "Download Audio",
"type": "main",
"index": 0
}
]
]
},
"Download Audio": {
"main": [
[
{
"node": "Transcribe with Whisper",
"type": "main",
"index": 0
}
]
]
},
"Transcribe with Whisper": {
"main": [
[
{
"node": "Generate Blog Post",
"type": "main",
"index": 0
}
]
]
},
"Generate Blog Post": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"pinData": {},
"meta": {
"instanceId": "template-youtube-blog"
}
}Copy this JSON and import it into n8n via Settings → Import from File/URL → Paste JSON