AutomationFlowsSocial Media › Auto-publish YouTube Videos to Facebook & Instagram with AI Captions

Auto-publish YouTube Videos to Facebook & Instagram with AI Captions

Original n8n title: Auto-publish Youtube Videos to Facebook & Instagram with Ai-generated Captions

ByYaron Been @yaron-nofluff on n8n.io

Automatically turn your YouTube videos into engaging Facebook and Instagram posts with AI-generated captions.

Event trigger★★★★☆ complexityAI-powered13 nodesAgentOpenAI ChatHTTP RequestRss Feed Read Trigger
Social Media Trigger: Event Nodes: 13 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4478 — we link there as the canonical source.

This workflow follows the Agent → HTTP Request 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 →

Download .json
{
  "id": "kPBvBnjidCFr5v69",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Youtube to Instagram_Facebook",
  "tags": [],
  "nodes": [
    {
      "id": "workflow-overview-social",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1300,
        -320
      ],
      "parameters": {
        "color": 2,
        "width": 350,
        "height": 380,
        "content": "# \ud83d\udcf1 YouTube to Social Media Automation\n\n**Purpose:** Auto-publish YouTube videos to Facebook & Instagram\n\n**Schedule:** Checks for new videos every hour\n\n**Required Setup:**\n1. YouTube channel RSS feed\n2. OpenAI API key (GPT-4o-mini)\n3. Meta App with permissions\n4. Long-lived access token\n\n## Workflow Steps:\n1. **Monitor** - RSS feed for new videos\n2. **Generate** - AI creates social caption\n3. **Publish** - Posts to FB & Instagram\n\n\ud83d\udca1 Update all `<Access_Token>` and `<Facebook_PageID>` placeholders"
      },
      "typeVersion": 1
    },
    {
      "id": "rss-trigger-note",
      "name": "RSS Trigger Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -320
      ],
      "parameters": {
        "color": 3,
        "width": 280,
        "height": 220,
        "content": "## \ud83c\udfa5 YouTube RSS Trigger\n\n**Monitors your YouTube channel:**\n- Checks every hour for new uploads\n- Uses YouTube RSS feed format\n\n**To find your channel ID:**\n1. Go to your YouTube channel\n2. View page source\n3. Search for \"channelId\"\n\n\u26a0\ufe0f Replace channel_id in RSS URL"
      },
      "typeVersion": 1
    },
    {
      "id": "ai-caption-note",
      "name": "AI Caption Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -740,
        -320
      ],
      "parameters": {
        "color": 5,
        "width": 280,
        "height": 200,
        "content": "## \ud83e\udd16 AI Caption Generation\n\n**OpenAI GPT-4o-mini:**\n- Generates engaging social media captions\n- Includes emojis automatically\n- Adds call-to-action\n\n**Customize the prompt to:**\n- Match your brand voice\n- Include specific hashtags\n- Target your audience"
      },
      "typeVersion": 1
    },
    {
      "id": "facebook-post-note",
      "name": "Facebook Publishing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -390,
        -440
      ],
      "parameters": {
        "color": 4,
        "width": 250,
        "height": 180,
        "content": "## \ud83d\udcd8 Facebook Publishing\n\n**Direct post to Facebook Page**\n\n\u26a0\ufe0f **Required updates:**\n- Replace `<Facebook_PageID>`\n- Replace `<Access_Token>`\n\n**Note:** Uses error handling to continue workflow even if Facebook fails"
      },
      "typeVersion": 1
    },
    {
      "id": "instagram-flow-note",
      "name": "Instagram Publishing Flow",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -120,
        -180
      ],
      "parameters": {
        "color": 6,
        "width": 300,
        "height": 220,
        "content": "## \ud83d\udcf8 Instagram Publishing Flow\n\n**3-step process:**\n1. Get Business Account ID\n2. Create media container with thumbnail\n3. Publish the post\n\n**Automatic thumbnail:**\nPulls YouTube video thumbnail as Instagram image\n\n\u26a0\ufe0f Requires Instagram Business Account linked to Facebook Page"
      },
      "typeVersion": 1
    },
    {
      "id": "api-requirements-note",
      "name": "API Requirements",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -440,
        280
      ],
      "parameters": {
        "color": 1,
        "width": 250,
        "height": 200,
        "content": "\u26a0\ufe0f **Meta API Requirements**\n\n**Required Permissions:**\n- pages_manage_posts\n- pages_read_engagement\n- pages_show_list\n- instagram_content_publish\n- instagram_basic\n\n**Token Type:** Long-lived access token\n**API Version:** v22.0"
      },
      "typeVersion": 1
    },
    {
      "id": "cda123c2-21a3-421d-918e-5a6973002aa3",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "Formats post caption using video metadata. Customize prompt for your brand voice and hashtags",
      "position": [
        -740,
        -80
      ],
      "parameters": {
        "text": "=Write a short, engaging social media post about this new YouTube video:\n\nTitle: {{ $json.title }}\nURL: {{ $json.link }}\n\nInclude emojis and a call to action.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "d215f6c3-f9d7-4103-8c26-419f468cf74b",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "notes": "Uses GPT-4o-mini to generate the caption text",
      "position": [
        -740,
        160
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fbf6f102-1f8d-4e22-a850-1f5f163b94d5",
      "name": "Post on Facebook",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Publishes the caption using Facebook Graph API. Replace <Facebook_PageID> and <Access_Token>",
      "onError": "continueErrorOutput",
      "position": [
        -340,
        -240
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v22.0/<Facebook_PageID>/feed\n",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "message",
              "value": "={{ $json.output }}"
            },
            {
              "name": "access_token",
              "value": "<Access_Token>"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "000891de-e3e2-4de8-8742-ad45a2a958db",
      "name": "Publish Post On Instagram",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Publishes post to Instagram feed using the media container ID",
      "position": [
        180,
        60
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v22.0/{{ $('Get IG Business Account ID').item.json.instagram_business_account.id }}/media_publish\n",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "creation_id",
              "value": "={{ $json.id }}"
            },
            {
              "name": "access_token",
              "value": "<Access_Token>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2e65dd2e-7f9e-4abd-b6c7-e811b3a86349",
      "name": "Get IG Business Account ID",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Retrieves Instagram Business account ID linked to Facebook Page",
      "onError": "continueErrorOutput",
      "position": [
        -340,
        80
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v22.0/<Facebook_PageID>",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "fields",
              "value": "instagram_business_account"
            },
            {
              "name": "access_token",
              "value": "<Access_Token>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c2d089b9-754c-49fe-aa4d-976072340a0e",
      "name": "Create Media Container",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Uploads YouTube thumbnail as Instagram image with AI-generated caption",
      "position": [
        -80,
        60
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v22.0/{{ $json.instagram_business_account.id }}/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "image_url",
              "value": "=https://img.youtube.com/vi/{{ $('Pull Youtube Video From Channel').item.json.link.split(\"=\")[1] }}/maxresdefault.jpg"
            },
            {
              "name": "caption",
              "value": "={{ $('AI Agent').item.json.output }}"
            },
            {
              "name": "access_token",
              "value": "<Access_Token>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "29656ae1-d60e-4f4d-9326-17801ddcbb65",
      "name": "Pull Youtube Video From Channel",
      "type": "n8n-nodes-base.rssFeedReadTrigger",
      "notes": "Monitors new uploads from your YouTube channel. Replace channel_id in RSS URL",
      "position": [
        -1000,
        -80
      ],
      "parameters": {
        "feedUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC2Tf8MGUzFX-GPkuBEBSKMg",
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour"
            }
          ]
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a459b777-6ecf-46d2-9543-061a888393a6",
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Get IG Business Account ID",
            "type": "main",
            "index": 0
          },
          {
            "node": "Post on Facebook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post on Facebook": {
      "main": [
        []
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Create Media Container": {
      "main": [
        [
          {
            "node": "Publish Post On Instagram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish Post On Instagram": {
      "main": [
        []
      ]
    },
    "Get IG Business Account ID": {
      "main": [
        [
          {
            "node": "Create Media Container",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pull Youtube Video From Channel": {
      "main": [
        [
          {
            "node": "AI Agent",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automatically turn your YouTube videos into engaging Facebook and Instagram posts with AI-generated captions.

Source: https://n8n.io/workflows/4478/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

AI Social Media Promoter – Automated Blog Sharing Workflow This workflow is built for bloggers, creators, and marketing teams who want to automatically promote new blog content across Instagram, Faceb

Output Parser Structured, Rss Feed Read Trigger, OpenAI Chat +6
Social Media

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

Execute Workflow Trigger, Notion, OpenAI Chat +13
Social Media

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

OpenAI Chat, Tool Workflow, Agent +15
Social Media

✨🤖Automated AI Powered Social Media Content Factory for X + Facebook + Instagram + LinkedIn. Uses outputParserStructured, lmChatGoogleGemini, lmChatOpenAi, httpRequest. Event-driven trigger; 57 nodes

Output Parser Structured, Google Gemini Chat, OpenAI Chat +11
Social Media

Social Media Managers and Digital Marketers seeking to streamline content production across 7+ platforms (X/Twitter, Instagram, LinkedIn, Facebook, TikTok, Threads, YouTube Shorts) using AI-powered au

Output Parser Structured, Google Gemini Chat, OpenAI Chat +11