N
n8n Store
Workflow Market
Transform Blog Posts to Multi-Platform Content with GPT-4o, Unsplash and Airtable

Transform Blog Posts to Multi-Platform Content with GPT-4o, Unsplash and Airtable

by greypillarβ€’0 views

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
PriceGratis
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
          }
        ]
      ]
    }
  }
}

η›Έε…³ε·₯作桁