This workflow corresponds to n8n.io template #15618 — 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "7ff80c30-73a6-4225-9f7f-18d27aa151e2",
"name": "Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-896,
-416
],
"parameters": {
"color": 4,
"width": 524,
"height": 1124,
"content": "## Video to Multi-Platform Content Engine \u2014 Twitter Thread + LinkedIn Post + Blog Post \u2014 WayinVideo Transcription + GPT-4o-mini + Sheets\n\nFor content marketers, solo creators, agencies, and social media managers who record podcasts, webinars, interviews, or YouTube videos and want to repurpose each one into three platform-specific content pieces in one run. Submit any video URL via the form. WayinVideo Transcription API transcribes the full recording with speaker labels and timestamps. GPT-4o-mini reads the transcript and generates all three content pieces in a single call: a 10-tweet Twitter thread (numbered 1/ to 10/, hook first, CTA last), a 200\u2013300 word LinkedIn thought leadership post with numbered insights and a closing question, and a 600\u2013800 word SEO blog post with HTML H2 structure, meta description, and focus keyword. Word counts are tracked for all three pieces. Everything is saved as one row in Google Sheets with 18 columns \u2014 all three pieces as Draft, ready to review and publish.\n\n## How it works\n- **1. Form \u2014 Video URL + Content Details** collects the video URL, title, creator name, niche, target audience, and content tone\n- **2. WayinVideo \u2014 Submit Transcription** submits the URL to the Transcription API\n- **3. Wait \u2014 90 Seconds** gives the API initial processing time\n- **4. WayinVideo \u2014 Get Transcript Results** polls the transcripts results endpoint\n- **5. IF \u2014 Transcription Complete?** checks for SUCCEEDED \u2014 if not, retries via 30-second wait\n- **7. Code \u2014 Format Transcript** formats each segment with speaker label and timestamp, computes duration and word count\n- **8. AI Agent \u2014 Generate All 3 Content Pieces** uses GPT-4o-mini to produce all three platform-specific pieces in one call with 8 labeled output sections\n- **10. Code \u2014 Parse All Content Outputs** extracts all 8 sections via regex, combines thread and hashtags, and computes word counts for each piece\n- **11. Google Sheets \u2014 Save Content Engine** appends one row with all 18 fields and Status set to Draft\n\n## Set up steps\n1. In **2** and **4** \u2014 replace `YOUR_WAYINVIDEO_API_KEY`\n2. In **9. OpenAI \u2014 GPT-4o-mini Model** \u2014 connect your OpenAI credential\n3. In **11. Google Sheets \u2014 Save Content Engine** \u2014 connect your Google Sheets OAuth2 credential and replace `YOUR_GOOGLE_SHEET_ID`\n4. Create a Google Sheet tab named Content Engine with columns: Video URL, Video Title, Creator Name, Niche, Target Audience, Duration (min), Twitter Thread, Twitter Word Count, LinkedIn Post, LinkedIn Word Count, Blog Title, Blog Meta Description, Focus Keyword, Blog Content, Blog Word Count, Hashtags, Generated On, Status"
},
"typeVersion": 1
},
{
"id": "be8055d2-8e0f-4f68-9b52-6ca41bdfde81",
"name": "Section \u2014 Form Input",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
-176
],
"parameters": {
"color": 5,
"width": 276,
"height": 484,
"content": "## Form Input\nUser submits the video URL, title, creator name, content niche, target audience, and content tone. All six fields feed into the transcript formatter and the multi-platform AI generation prompt."
},
"typeVersion": 1
},
{
"id": "ef91bbca-6ba1-472f-9939-00330fa262a5",
"name": "Section \u2014 WayinVideo Transcription Submit and Poll",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
-96
],
"parameters": {
"color": 6,
"width": 676,
"height": 388,
"content": "## WayinVideo Transcription Submit and Poll\nSubmits the video URL to the Transcription API. Waits 90 seconds for initial processing. Polls the results endpoint until status equals SUCCEEDED."
},
"typeVersion": 1
},
{
"id": "1bbb2ad9-e5ab-4619-a26e-9015ce0bcb42",
"name": "Section \u2014 Transcription Status Check and Retry Loop",
"type": "n8n-nodes-base.stickyNote",
"position": [
688,
-224
],
"parameters": {
"color": 6,
"width": 292,
"height": 660,
"content": "## Transcription Status Check and Retry Loop\nIF checks for SUCCEEDED status. TRUE proceeds to transcript formatting. FALSE waits 30 seconds and polls again. Loop continues until transcript is ready."
},
"typeVersion": 1
},
{
"id": "4fc7ced2-da2f-49bf-8027-3767d5b6581a",
"name": "Section \u2014 Transcript Formatting and All-Platform AI Content Generation",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
-176
],
"parameters": {
"color": 6,
"width": 564,
"height": 548,
"content": "## Transcript Formatting and All-Platform AI Content Generation\nFormats transcript with speaker labels and timestamps. GPT-4o-mini generates all three content pieces in one call \u2014 10-tweet Twitter thread, 200\u2013300 word LinkedIn post, and 600\u2013800 word SEO blog post with HTML structure."
},
"typeVersion": 1
},
{
"id": "da1ef1ce-8d5f-4410-8a6b-0b3a97fa4e02",
"name": "Section \u2014 Content Parse and Google Sheets Save",
"type": "n8n-nodes-base.stickyNote",
"position": [
1616,
-144
],
"parameters": {
"color": 4,
"width": 548,
"height": 372,
"content": "## Content Parse and Google Sheets Save\nRegex extracts all 8 labeled sections. Combines thread and hashtags. Computes word counts for all three pieces. Appends one row to Google Sheets with 18 fields and Status set to Draft."
},
"typeVersion": 1
},
{
"id": "a8c9bd0c-971e-41f9-8a51-b044c0918bab",
"name": "1. Form \u2014 Video URL + Content Details",
"type": "n8n-nodes-base.formTrigger",
"position": [
-256,
16
],
"parameters": {
"options": {},
"formTitle": "Video to Multi-Platform Content Engine",
"formFields": {
"values": [
{
"fieldLabel": "Video URL",
"placeholder": "https://www.youtube.com/watch?v=xxxxxxx or Zoom/Vimeo/Loom link",
"requiredField": true
},
{
"fieldLabel": "Video / Episode Title",
"placeholder": "e.g. How I Grew My Agency to $1M Using SEO",
"requiredField": true
},
{
"fieldLabel": "Creator / Brand Name",
"placeholder": "e.g. John Smith, Incrementors, The Marketing Lab",
"requiredField": true
},
{
"fieldLabel": "Content Niche",
"placeholder": "e.g. Digital Marketing, SaaS, Finance, Health, Real Estate",
"requiredField": true
},
{
"fieldLabel": "Target Audience",
"placeholder": "e.g. Freelancers, startup founders, digital marketers, developers",
"requiredField": true
},
{
"fieldLabel": "Content Tone",
"placeholder": "e.g. Professional / Casual and friendly / Educational / Inspirational",
"requiredField": true
}
]
},
"formDescription": "Paste your video URL. AI will transcribe the full content and generate a Twitter thread, LinkedIn post, and SEO blog post \u2014 all in one run."
},
"typeVersion": 2.2
},
{
"id": "7ca7cb31-28d0-47e2-9a50-13f1590537bc",
"name": "2. WayinVideo \u2014 Submit Transcription",
"type": "n8n-nodes-base.httpRequest",
"position": [
48,
16
],
"parameters": {
"url": "https://wayinvideo-api.wayin.ai/api/v2/transcripts",
"method": "POST",
"options": {},
"jsonBody": "={\n \"video_url\": \"{{ $json['Video URL'] }}\",\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": "2dedb4f9-8619-4770-9047-3107a10c5a69",
"name": "3. Wait \u2014 90 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
288,
16
],
"parameters": {
"amount": 90
},
"typeVersion": 1.1
},
{
"id": "35942669-fdb1-4c39-966f-2a1a6722445a",
"name": "4. WayinVideo \u2014 Get Transcript Results",
"type": "n8n-nodes-base.httpRequest",
"position": [
528,
16
],
"parameters": {
"url": "=https://wayinvideo-api.wayin.ai/api/v2/transcripts/results/{{ $('2. WayinVideo \u2014 Submit Transcription').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": "be7c2e29-09f7-4317-9819-2bacf0a98c50",
"name": "5. IF \u2014 Transcription Complete?",
"type": "n8n-nodes-base.if",
"position": [
768,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "status-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "SUCCEEDED"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "d4a8f119-1158-4816-8859-3a12808f188b",
"name": "6. Wait \u2014 30 Seconds Retry",
"type": "n8n-nodes-base.wait",
"position": [
768,
224
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "d4d4c99a-6252-421c-b5d5-06d84a26a1c0",
"name": "7. Code \u2014 Format Transcript",
"type": "n8n-nodes-base.code",
"position": [
1072,
0
],
"parameters": {
"jsCode": "// Get transcript segments from WayinVideo\nconst segments = $('4. WayinVideo \u2014 Get Transcript Results').item.json.data.transcript || [];\n\nif (segments.length === 0) {\n throw new Error('Transcript is empty \u2014 check if the video URL is valid and publicly accessible.');\n}\n\n// Format transcript with speaker labels and timestamps\nconst formattedTranscript = segments\n .map(s => {\n const timeInSeconds = Math.floor(s.start / 1000);\n const minutes = Math.floor(timeInSeconds / 60);\n const seconds = timeInSeconds % 60;\n const timestamp = `${minutes}:${seconds.toString().padStart(2, '0')}`;\n return `[${s.speaker} | ${timestamp}] ${s.text.trim()}`;\n })\n .join('\\n');\n\n// Duration\nconst lastSegment = segments[segments.length - 1];\nconst totalDurationMs = lastSegment?.end || 0;\nconst totalMinutes = Math.round(totalDurationMs / 60000);\n\n// Word count\nconst wordCount = segments.map(s => s.text).join(' ').split(/\\s+/).length;\n\n// Speakers\nconst speakers = [...new Set(segments.map(s => s.speaker))];\n\n// Form data\nconst videoTitle = $('1. Form \u2014 Video URL + Content Details').item.json['Video / Episode Title'];\nconst creatorName = $('1. Form \u2014 Video URL + Content Details').item.json['Creator / Brand Name'];\nconst niche = $('1. Form \u2014 Video URL + Content Details').item.json['Content Niche'];\nconst targetAudience = $('1. Form \u2014 Video URL + Content Details').item.json['Target Audience'];\nconst contentTone = $('1. Form \u2014 Video URL + Content Details').item.json['Content Tone'];\nconst videoUrl = $('1. Form \u2014 Video URL + Content Details').item.json['Video URL'];\n\nreturn [{\n json: {\n formattedTranscript,\n totalMinutes,\n wordCount,\n speakerCount: speakers.length,\n videoTitle,\n creatorName,\n niche,\n targetAudience,\n contentTone,\n videoUrl\n }\n}];"
},
"typeVersion": 2
},
{
"id": "77c8889d-be6b-437f-88dd-e02cc71a1143",
"name": "8. AI Agent \u2014 Generate All 3 Content Pieces",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1312,
0
],
"parameters": {
"text": "={{ $json.formattedTranscript }}",
"options": {
"systemMessage": "=You are an expert multi-platform content strategist who repurposes video transcripts into platform-specific content.\n\nRead this video transcript and create THREE different content pieces from it \u2014 a Twitter/X thread, a LinkedIn post, and an SEO blog post.\n\n---\n\n## VIDEO DETAILS\n- Title: {{ $json.videoTitle }}\n- Creator: {{ $json.creatorName }}\n- Niche: {{ $json.niche }}\n- Target Audience: {{ $json.targetAudience }}\n- Tone: {{ $json.contentTone }}\n- Duration: {{ $json.totalMinutes }} minutes\n- Video URL: {{ $json.videoUrl }}\n\n---\n\n## CONTENT CREATION RULES\n1. Base ALL content ONLY on what was said in the transcript \u2014 no invented content\n2. Match the specified tone throughout all three pieces\n3. Each piece must be complete and platform-appropriate\n4. Extract the most compelling insights \u2014 not generic summaries\n\n---\n\n## PIECE 1 \u2014 TWITTER/X THREAD RULES\n- Exactly 10 tweets\n- Tweet 1 = hook \u2014 bold statement or surprising fact that stops the scroll\n- Tweets 2-9 = one insight per tweet from the transcript \u2014 short, punchy, standalone\n- Tweet 10 = CTA \u2014 follow for more + reference the video\n- Each tweet max 280 characters including spaces\n- Number format: 1/ 2/ 3/ etc.\n- No hashtags inside thread \u2014 add 3-5 at the very end as a separate line\n\n## PIECE 2 \u2014 LINKEDIN POST RULES\n- 200-300 words total\n- First line = hook \u2014 no preamble, no greeting\n- Short paragraphs \u2014 1-2 sentences each\n- 3-5 key insights as a numbered or bullet list in the middle\n- End with a question that invites comments\n- 4-6 hashtags at the end on a separate line\n- Professional but human tone \u2014 no corporate speak\n\n## PIECE 3 \u2014 SEO BLOG POST RULES\n- SEO title: 55-60 characters including focus keyword\n- Meta description: 150-155 characters\n- Blog content: 600-800 words\n- Structure: Hook paragraph \u2192 H2 section 1 \u2192 H2 section 2 \u2192 H2 section 3 \u2192 Conclusion\n- Use HTML H2 tags for headings\n- Include focus keyword naturally in title, first paragraph, and at least one H2\n- End with a thought-provoking conclusion\n\n---\n\n## OUTPUT FORMAT\nReturn in this exact structure:\n\nTWITTER_THREAD:\n1/ [Tweet 1 text]\n\n2/ [Tweet 2 text]\n\n3/ [Tweet 3 text]\n\n4/ [Tweet 4 text]\n\n5/ [Tweet 5 text]\n\n6/ [Tweet 6 text]\n\n7/ [Tweet 7 text]\n\n8/ [Tweet 8 text]\n\n9/ [Tweet 9 text]\n\n10/ [Tweet 10 text]\n\nTHREAD_HASHTAGS:\n[3-5 hashtags]\n\nLINKEDIN_POST:\n[Full LinkedIn post with hashtags at end]\n\nBLOG_TITLE:\n[SEO blog title \u2014 55-60 characters]\n\nBLOG_META_DESCRIPTION:\n[Meta description \u2014 150-155 characters]\n\nBLOG_CONTENT:\n[Full HTML blog post \u2014 600-800 words]\n\nFOCUS_KEYWORD:\n[Primary SEO keyword]\n\nHASHTAGS:\n[5-8 universal hashtags \u2014 lowercase \u2014 for all platforms]\n\n---\n\nNow read the transcript and create all three content pieces:"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "dcb293af-6d15-49c5-b187-b90631b9d066",
"name": "9. OpenAI \u2014 GPT-4o-mini Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1312,
208
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {},
"builtInTools": {}
},
"typeVersion": 1.3
},
{
"id": "37931972-51ff-4fd1-a6c7-978251cf988c",
"name": "10. Code \u2014 Parse All Content Outputs",
"type": "n8n-nodes-base.code",
"position": [
1664,
0
],
"parameters": {
"jsCode": "// Parse AI output into structured fields\nconst output = $input.first().json.output || '';\n\n// Extract Twitter thread\nconst twitterMatch = output.match(/TWITTER_THREAD:\\s*([\\s\\S]*?)(?=\\nTHREAD_HASHTAGS:|$)/);\nconst threadHashtagsMatch = output.match(/THREAD_HASHTAGS:\\s*([\\s\\S]*?)(?=\\nLINKEDIN_POST:|$)/);\nconst linkedinMatch = output.match(/LINKEDIN_POST:\\s*([\\s\\S]*?)(?=\\nBLOG_TITLE:|$)/);\nconst blogTitleMatch = output.match(/BLOG_TITLE:\\s*([\\s\\S]*?)(?=\\nBLOG_META_DESCRIPTION:|$)/);\nconst blogMetaMatch = output.match(/BLOG_META_DESCRIPTION:\\s*([\\s\\S]*?)(?=\\nBLOG_CONTENT:|$)/);\nconst blogContentMatch = output.match(/BLOG_CONTENT:\\s*([\\s\\S]*?)(?=\\nFOCUS_KEYWORD:|$)/);\nconst focusKeywordMatch = output.match(/FOCUS_KEYWORD:\\s*([\\s\\S]*?)(?=\\nHASHTAGS:|$)/);\nconst hashtagsMatch = output.match(/HASHTAGS:\\s*([\\s\\S]*)$/);\n\nconst twitterThread = twitterMatch ? twitterMatch[1].trim() : '';\nconst threadHashtags = threadHashtagsMatch ? threadHashtagsMatch[1].trim() : '';\nconst linkedinPost = linkedinMatch ? linkedinMatch[1].trim() : '';\nconst blogTitle = blogTitleMatch ? blogTitleMatch[1].trim() : '';\nconst blogMeta = blogMetaMatch ? blogMetaMatch[1].trim() : '';\nconst blogContent = blogContentMatch ? blogContentMatch[1].trim() : '';\nconst focusKeyword = focusKeywordMatch ? focusKeywordMatch[1].trim() : '';\nconst hashtags = hashtagsMatch ? hashtagsMatch[1].trim() : '';\n\n// Word counts\nconst twitterWordCount = twitterThread.split(/\\s+/).length;\nconst linkedinWordCount = linkedinPost.replace(/<[^>]*>/g, ' ').split(/\\s+/).filter(w => w.length > 0).length;\nconst blogWordCount = blogContent.replace(/<[^>]*>/g, ' ').split(/\\s+/).filter(w => w.length > 0).length;\n\n// Get video data\nconst videoData = $('7. Code \u2014 Format Transcript').item.json;\n\nif (!twitterThread || !linkedinPost || !blogContent) {\n throw new Error('Could not parse one or more content pieces from AI output. Check the AI prompt output format.');\n}\n\nreturn [{\n json: {\n twitterThread: twitterThread + '\\n\\n' + threadHashtags,\n linkedinPost,\n blogTitle,\n blogMeta,\n blogContent,\n focusKeyword,\n hashtags,\n twitterWordCount,\n linkedinWordCount,\n blogWordCount,\n videoTitle: videoData.videoTitle,\n creatorName: videoData.creatorName,\n niche: videoData.niche,\n targetAudience: videoData.targetAudience,\n videoUrl: videoData.videoUrl,\n totalMinutes: videoData.totalMinutes\n }\n}];"
},
"typeVersion": 2
},
{
"id": "751ef0a6-a6ab-40a4-b7be-543a594b13da",
"name": "11. Google Sheets \u2014 Save Content Engine",
"type": "n8n-nodes-base.googleSheets",
"position": [
1904,
0
],
"parameters": {
"columns": {
"value": {
"Niche": "={{ $json.niche }}",
"Status": "Draft",
"Hashtags": "={{ $json.hashtags }}",
"Video URL": "={{ $json.videoUrl }}",
"Blog Title": "={{ $json.blogTitle }}",
"Video Title": "={{ $json.videoTitle }}",
"Blog Content": "={{ $json.blogContent }}",
"Creator Name": "={{ $json.creatorName }}",
"Generated On": "={{ $now.toFormat('dd MMMM yyyy HH:mm') }}",
"Focus Keyword": "={{ $json.focusKeyword }}",
"LinkedIn Post": "={{ $json.linkedinPost }}",
"Duration (min)": "={{ $json.totalMinutes }}",
"Twitter Thread": "={{ $json.twitterThread }}",
"Blog Word Count": "={{ $json.blogWordCount }}",
"Target Audience": "={{ $json.targetAudience }}",
"Twitter Word Count": "={{ $json.twitterWordCount }}",
"LinkedIn Word Count": "={{ $json.linkedinWordCount }}",
"Blog Meta Description": "={{ $json.blogMeta }}"
},
"schema": [],
"mappingMode": "defineBelow",
"matchingColumns": []
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Content Engine"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.5
}
],
"connections": {
"3. Wait \u2014 90 Seconds": {
"main": [
[
{
"node": "4. WayinVideo \u2014 Get Transcript Results",
"type": "main",
"index": 0
}
]
]
},
"6. Wait \u2014 30 Seconds Retry": {
"main": [
[
{
"node": "4. WayinVideo \u2014 Get Transcript Results",
"type": "main",
"index": 0
}
]
]
},
"7. Code \u2014 Format Transcript": {
"main": [
[
{
"node": "8. AI Agent \u2014 Generate All 3 Content Pieces",
"type": "main",
"index": 0
}
]
]
},
"9. OpenAI \u2014 GPT-4o-mini Model": {
"ai_languageModel": [
[
{
"node": "8. AI Agent \u2014 Generate All 3 Content Pieces",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"5. IF \u2014 Transcription Complete?": {
"main": [
[
{
"node": "7. Code \u2014 Format Transcript",
"type": "main",
"index": 0
}
],
[
{
"node": "6. Wait \u2014 30 Seconds Retry",
"type": "main",
"index": 0
}
]
]
},
"10. Code \u2014 Parse All Content Outputs": {
"main": [
[
{
"node": "11. Google Sheets \u2014 Save Content Engine",
"type": "main",
"index": 0
}
]
]
},
"2. WayinVideo \u2014 Submit Transcription": {
"main": [
[
{
"node": "3. Wait \u2014 90 Seconds",
"type": "main",
"index": 0
}
]
]
},
"1. Form \u2014 Video URL + Content Details": {
"main": [
[
{
"node": "2. WayinVideo \u2014 Submit Transcription",
"type": "main",
"index": 0
}
]
]
},
"4. WayinVideo \u2014 Get Transcript Results": {
"main": [
[
{
"node": "5. IF \u2014 Transcription Complete?",
"type": "main",
"index": 0
}
]
]
},
"8. AI Agent \u2014 Generate All 3 Content Pieces": {
"main": [
[
{
"node": "10. Code \u2014 Parse All Content Outputs",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Submit any video URL — podcast, webinar, interview, or YouTube video — along with the title, creator name, niche, target audience, and tone and the workflow transcribes the full recording automatically. WayinVideo's Transcription API returns a speaker-labeled, timestamped…
Source: https://n8n.io/workflows/15618/ — 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.
🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.
Digistars - Scrape & Crawl. Uses httpRequest, n8n-nodes-firecrawl-scraper, googleSheets, lmChatOpenAi. Event-driven trigger; 63 nodes.
🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.
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
This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL