
Transform Blog Posts to Multi-Platform Content with GPT-4o, Unsplash and Airtable
Description
Categories
π€ AI & Machine Learning
Nodes Used
n8n-nodes-base.coden8n-nodes-base.coden8n-nodes-base.coden8n-nodes-base.slackn8n-nodes-base.twittern8n-nodes-base.airtablen8n-nodes-base.linkedInn8n-nodes-base.stickyNoten8n-nodes-base.httpRequestn8n-nodes-base.httpRequest
PriceKostenlos
Views0
Last Updated11/28/2025
workflow.json
{
"meta": {
"instanceId": "d23ca638a83fba54c06ee57ee6430730afe25e4177b234d2a702bd83cbe8f349"
},
"nodes": [
{
"id": "573faa7c-5f37-404c-b02d-7bc722a5ec1b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
11168,
11216
],
"parameters": {
"width": 912,
"height": 1056,
"content": "## π€ AI Content Repurposing Engine\n\n### π Setup Instructions\n\n**Step 1: Configure RSS Feed**\n1. Open \"New Blog Post\" trigger\n2. Replace `https://yourblog.com/feed` with your RSS URL\n β’ Common: `/feed`, `/rss`, `/feed.xml`\n3. Test in browser to verify XML loads\n\n**Step 2: Configure Integrations**\nπΉ **Slack Channel**\n β’ Right-click channel β View details β Copy Channel ID\n β’ Replace `REPLACE_WITH_SLACK_CONTENT_CHANNEL_ID`\n\nπΉ **Airtable Setup**\n β’ Base ID: Copy from URL β `appXXXXXXXXXXXXXX`\n β’ Table ID: Copy from URL β `tblYYYYYYYYYYYY`\n β’ Create columns: Original_Title, Original_URL, Published_Date, LinkedIn_Post, LinkedIn_Hashtags, Twitter_Thread, Twitter_Hashtags, Instagram_Caption, Instagram_Hashtags, Email_Subject, Email_Body, Video_Script, Suggested_Images, Status\n\n**Step 3: Add Credentials**\nβ OpenAI (GPT-4o)\nβ Unsplash API\nβ Slack OAuth2\nβ Airtable Token\n\n**Step 4: Optional Auto-Posting**\nπΉ **LinkedIn** (disabled by default)\n β’ Enable \"Post to LinkedIn\" node\n β’ Organization ID: linkedin.com/company/YOUR-ORG β Copy from URL\n β’ Replace `REPLACE_WITH_LINKEDIN_ORG_ID`\n\nπΉ **Twitter** (disabled by default)\n β’ Enable \"Post to Twitter\" node\n β’ Add Twitter OAuth2 credential\n\n---\n\n### βοΈ How It Works\n**RSS** β **Extract** β **AI Repurpose** β **Images** β **Slack** β **Airtable** β **Auto-Post**\nβ’ LinkedIn: 1300 chars, professional\nβ’ Twitter: 4-tweet thread\nβ’ Instagram: Storytelling format\nβ’ Email: Newsletter snippet\nβ’ Video: TikTok/Shorts script"
},
"typeVersion": 1
},
{
"id": "dfd2b2e0-b0c5-4d35-9fe4-b57e8d29d60f",
"name": "New Blog Post4",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
12336,
11552
],
"parameters": {
"url": "https://yourblog.com/feed",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "c874f911-4d0d-4c79-8f52-6171f4bec485",
"name": "Fetch Full Content4",
"type": "n8n-nodes-base.httpRequest",
"position": [
12544,
11552
],
"parameters": {
"url": "={{ $json.link }}",
"options": {
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "239ce056-5b8e-4207-8935-f00a656b55df",
"name": "Clean & Extract Content4",
"type": "n8n-nodes-base.code",
"position": [
12768,
11552
],
"parameters": {
"jsCode": "// Extract and clean blog content\nconst html = $input.first().json.data;\nconst blogData = $('New Blog Post4').first().json;\n\n// Remove HTML tags\nconst cleanText = html\n .replace(/<script[^>]*>.*?<\\/script>/gi, '')\n .replace(/<style[^>]*>.*?<\\/style>/gi, '')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n// Extract first 2000 chars for AI processing\nconst contentPreview = cleanText.substring(0, 2000);\n\nreturn {\n json: {\n title: blogData.title,\n url: blogData.link,\n author: blogData.creator || 'Unknown',\n published_date: blogData.pubDate,\n content: contentPreview,\n full_content: cleanText,\n excerpt: cleanText.substring(0, 300) + '...'\n }\n};"
},
"typeVersion": 2
},
{
"id": "9004171e-7be2-4010-82f9-0ebe2061b7f3",
"name": "AI Content Repurposing Chain4",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
12992,
11552
],
"parameters": {
"text": "=You are a professional content marketer. Repurpose this blog post into 5 different formats optimized for social media platforms.\n\nBlog Title: {{ $json.title }}\nContent: {{ $json.content }}\nURL: {{ $json.url }}\n\nCreate the following in JSON format:\n\n{\n \"linkedin_post\": {\n \"text\": \"Professional LinkedIn post (1300 chars max, engaging hook, 3 key insights, CTA)\",\n \"hashtags\": [\"5 relevant hashtags\"]\n },\n \"twitter_thread\": {\n \"tweets\": [\n \"Tweet 1: Hook (280 chars)\",\n \"Tweet 2: Key point 1 (280 chars)\",\n \"Tweet 3: Key point 2 (280 chars)\",\n \"Tweet 4: Conclusion + link (280 chars)\"\n ],\n \"hashtags\": [\"3 trending hashtags\"]\n },\n \"instagram_caption\": {\n \"text\": \"Engaging Instagram caption (2000 chars max, storytelling format, emoji-friendly)\",\n \"hashtags\": [\"10 relevant hashtags\"],\n \"cta\": \"Call-to-action\"\n },\n \"email_snippet\": {\n \"subject\": \"Compelling email subject line\",\n \"preview_text\": \"Email preview text (100 chars)\",\n \"body\": \"Email newsletter section (300 words, conversational tone)\"\n },\n \"video_script\": {\n \"hook\": \"First 5 seconds hook for TikTok/YouTube Shorts\",\n \"main_points\": [\"3 key talking points\"],\n \"cta\": \"Ending call-to-action\",\n \"duration\": \"30-60 seconds\"\n }\n}\n\nEnsure each format:\n- Maintains the core message\n- Optimized for platform-specific best practices\n- Includes engaging hooks and CTAs\n- Uses appropriate tone for each platform",
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.4
},
{
"id": "6d293490-a188-4471-ad80-9ecd0567ce54",
"name": "OpenAI Chat Model5",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
13008,
11824
],
"parameters": {
"model": "gpt-4o",
"options": {
"maxTokens": 3000,
"temperature": 0.7,
"responseFormat": "json_object"
}
},
"typeVersion": 1
},
{
"id": "b295aa4c-5df9-4f1a-a0aa-4b6bba6c3fe2",
"name": "Structured Output Parser5",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
13120,
11744
],
"parameters": {
"autoFix": true,
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"linkedin_post\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\",\n \"description\": \"Professional LinkedIn post (1300 chars max)\"\n },\n \"hashtags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"5 relevant hashtags\"\n }\n },\n \"required\": [\"text\", \"hashtags\"]\n },\n \"twitter_thread\": {\n \"type\": \"object\",\n \"properties\": {\n \"tweets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"4 tweets, 280 chars each\"\n },\n \"hashtags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"3 trending hashtags\"\n }\n },\n \"required\": [\"tweets\", \"hashtags\"]\n },\n \"instagram_caption\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\",\n \"description\": \"Engaging Instagram caption (2000 chars max)\"\n },\n \"hashtags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"10 relevant hashtags\"\n },\n \"cta\": {\n \"type\": \"string\",\n \"description\": \"Call-to-action\"\n }\n },\n \"required\": [\"text\", \"hashtags\", \"cta\"]\n },\n \"email_snippet\": {\n \"type\": \"object\",\n \"properties\": {\n \"subject\": {\n \"type\": \"string\",\n \"description\": \"Compelling email subject line\"\n },\n \"preview_text\": {\n \"type\": \"string\",\n \"description\": \"Email preview text (100 chars)\"\n },\n \"body\": {\n \"type\": \"string\",\n \"description\": \"Email newsletter section (300 words)\"\n }\n },\n \"required\": [\"subject\", \"preview_text\", \"body\"]\n },\n \"video_script\": {\n \"type\": \"object\",\n \"properties\": {\n \"hook\": {\n \"type\": \"string\",\n \"description\": \"First 5 seconds hook\"\n },\n \"main_points\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"3 key talking points\"\n },\n \"cta\": {\n \"type\": \"string\",\n \"description\": \"Ending call-to-action\"\n },\n \"duration\": {\n \"type\": \"string\",\n \"description\": \"Video duration (30-60 seconds)\"\n }\n },\n \"required\": [\"hook\", \"main_points\", \"cta\", \"duration\"]\n }\n },\n \"required\": [\"linkedin_post\", \"twitter_thread\", \"instagram_caption\", \"email_snippet\", \"video_script\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "6cc0265d-5c0f-491b-b575-7373e44fdca1",
"name": "Structure Output4",
"type": "n8n-nodes-base.code",
"position": [
13344,
11552
],
"parameters": {
"jsCode": "// Parse AI-generated content\nconst aiResponse = JSON.parse($input.first().json.text);\nconst blogData = $('Clean & Extract Content4').first().json;\n\nreturn {\n json: {\n // Original content\n original_title: blogData.title,\n original_url: blogData.url,\n published_date: blogData.published_date,\n \n // Repurposed content\n linkedin: aiResponse.linkedin_post,\n twitter: aiResponse.twitter_thread,\n instagram: aiResponse.instagram_caption,\n email: aiResponse.email_snippet,\n video: aiResponse.video_script,\n \n // Metadata\n repurposed_date: new Date().toISOString(),\n status: 'ready_for_review'\n }\n};"
},
"typeVersion": 2
},
{
"id": "f931e171-820d-46c9-95a6-c7d1c7d954d4",
"name": "Fetch Images (Unsplash)4",
"type": "n8n-nodes-base.httpRequest",
"position": [
13552,
11552
],
"parameters": {
"url": "=https://api.unsplash.com/search/photos?query={{ $json.original_title.split(' ').slice(0, 3).join(' ') }}&per_page=3",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "exVxOWDpxBu7XVql",
"name": "nithichote.com header auth key"
}
},
"typeVersion": 4.2
},
{
"id": "e24a03c0-4cf6-4b89-aedf-17d6c26c8be3",
"name": "Add Image Suggestions4",
"type": "n8n-nodes-base.code",
"position": [
13776,
11552
],
"parameters": {
"jsCode": "// Add image suggestions to content\nconst content = $('Structure Output4').first().json;\nconst images = $input.first().json.results || [];\n\nreturn {\n json: {\n ...content,\n suggested_images: images.slice(0, 3).map(img => ({\n url: img.urls.regular,\n thumb: img.urls.thumb,\n alt: img.alt_description,\n photographer: img.user.name,\n download_url: img.links.download\n }))\n }\n};"
},
"typeVersion": 2
},
{
"id": "b72f9a26-60e3-4764-8f92-9499481ac249",
"name": "Notify Content Team4",
"type": "n8n-nodes-base.slack",
"position": [
14000,
11552
],
"webhookId": "347a6932-5b69-4a86-b033-6a591c84b0da",
"parameters": {
"text": "=π *New Content Ready for Multi-Platform Publishing*\n\n*Original Article:*\nβ’ Title: {{ $json.original_title }}\nβ’ URL: {{ $json.original_url }}\nβ’ Published: {{ new Date($json.published_date).toLocaleDateString() }}\n\n*Repurposed Formats Ready:*\nβ
LinkedIn Post ({{ $json.linkedin.text.length }} chars)\nβ
Twitter Thread ({{ $json.twitter.tweets.length }} tweets)\nβ
Instagram Caption ({{ $json.instagram.text.length }} chars)\nβ
Email Newsletter Snippet\nβ
Video Script ({{ $json.video.duration }})\n\n*Preview - LinkedIn:*\n{{ $json.linkedin.text.substring(0, 200) }}...\n\n*Hashtags:* {{ $json.linkedin.hashtags.join(' ') }}\n\n*Suggested Images:* {{ $json.suggested_images.length }} options available\n\nπ Review and approve to publish β",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "REPLACE_WITH_SLACK_CONTENT_CHANNEL_ID"
},
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "AziwZo3O6NXOdbLM",
"name": "x-agent"
}
},
"typeVersion": 2.2
},
{
"id": "7f8ab89a-16f4-4084-9b26-7ae26aa74d94",
"name": "Save to Content Library4",
"type": "n8n-nodes-base.airtable",
"position": [
14224,
11552
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "REPLACE_WITH_AIRTABLE_BASE_ID"
},
"table": {
"__rl": true,
"mode": "id",
"value": "REPLACE_WITH_AIRTABLE_TABLE_ID"
},
"columns": {
"value": {
"Status": "Pending Review",
"Email_Body": "={{ $json.email.body }}",
"Created_Date": "={{ $json.repurposed_date }}",
"Original_URL": "={{ $json.original_url }}",
"Video_Script": "={{ $json.video.main_points.join('\\n') }}",
"Email_Subject": "={{ $json.email.subject }}",
"LinkedIn_Post": "={{ $json.linkedin.text }}",
"Original_Title": "={{ $json.original_title }}",
"Twitter_Thread": "={{ $json.twitter.tweets.join('\\n\\n') }}",
"Instagram_Caption": "={{ $json.instagram.text }}",
"LinkedIn_Hashtags": "={{ $json.linkedin.hashtags.join(', ') }}",
"Instagram_Hashtags": "={{ $json.instagram.hashtags.join(', ') }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "create"
},
"typeVersion": 2
},
{
"id": "1b3f2deb-15af-47d3-8ab2-5015142950ce",
"name": "Post to LinkedIn (Optional)4",
"type": "n8n-nodes-base.linkedIn",
"disabled": true,
"position": [
14432,
11456
],
"parameters": {
"text": "={{ $json.linkedin.text }}\\n\\n{{ $json.linkedin.hashtags.map(h => '#' + h).join(' ') }}\\n\\nRead more: {{ $json.original_url }}",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "1105860e-c1cd-41ff-916e-7a7fff417d62",
"name": "Post to Twitter (Optional)4",
"type": "n8n-nodes-base.twitter",
"disabled": true,
"position": [
14432,
11664
],
"parameters": {
"text": "={{ $json.twitter.tweets[0] }}",
"additionalFields": {}
},
"typeVersion": 2
}
],
"pinData": {},
"connections": {
"New Blog Post4": {
"main": [
[
{
"node": "Fetch Full Content4",
"type": "main",
"index": 0
}
]
]
},
"Structure Output4": {
"main": [
[
{
"node": "Fetch Images (Unsplash)4",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model5": {
"ai_languageModel": [
[
{
"node": "AI Content Repurposing Chain4",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Structured Output Parser5",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Fetch Full Content4": {
"main": [
[
{
"node": "Clean & Extract Content4",
"type": "main",
"index": 0
}
]
]
},
"Notify Content Team4": {
"main": [
[
{
"node": "Save to Content Library4",
"type": "main",
"index": 0
}
]
]
},
"Add Image Suggestions4": {
"main": [
[
{
"node": "Notify Content Team4",
"type": "main",
"index": 0
}
]
]
},
"Clean & Extract Content4": {
"main": [
[
{
"node": "AI Content Repurposing Chain4",
"type": "main",
"index": 0
}
]
]
},
"Fetch Images (Unsplash)4": {
"main": [
[
{
"node": "Add Image Suggestions4",
"type": "main",
"index": 0
}
]
]
},
"Save to Content Library4": {
"main": [
[
{
"node": "Post to LinkedIn (Optional)4",
"type": "main",
"index": 0
},
{
"node": "Post to Twitter (Optional)4",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser5": {
"ai_outputParser": [
[
{
"node": "AI Content Repurposing Chain4",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"AI Content Repurposing Chain4": {
"main": [
[
{
"node": "Structure Output4",
"type": "main",
"index": 0
}
]
]
}
}
}