AutomationFlowsSocial Media › Create and Post Social Media Image Captions with Gpt-4.1-mini and Google Sheets

Create and Post Social Media Image Captions with Gpt-4.1-mini and Google Sheets

BySamyotech @samyotech on n8n.io

This AI-powered workflow streamlines your social media posting process, transforming hours of manual caption writing, image uploading, and scheduling into a fully automated system. You define the topic and image once, and the workflow handles caption generation, review,…

Event trigger★★★★☆ complexityAI-powered25 nodesGoogle SheetsTwitterFacebook Graph ApiHTTP RequestLinkedInOpenAI
Social Media Trigger: Event Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Facebookgraphapi → Google Sheets 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
{
  "nodes": [
    {
      "id": "86897bee-d217-46ec-8dbd-81ff6c8828d4",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        32,
        -192
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1d3cd9a6-1f6d-4289-abc4-a90790690282",
      "name": "get sheet data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -192,
        -192
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "post",
              "lookupColumn": "STATUS"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit#gid=0",
          "cachedResultName": "Video Content data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit?usp=drivesdk",
          "cachedResultName": "SocialPulse"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "446f2ec1-a8ed-45f1-aa08-d38c133f782e",
      "name": "Create Tweet",
      "type": "n8n-nodes-base.twitter",
      "position": [
        928,
        -288
      ],
      "parameters": {
        "text": "={{ $('get sheet data').item.json.Description }}",
        "additionalFields": {
          "attachments": "={{ $json.data.id }}"
        }
      },
      "credentials": {
        "twitterOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "800ab82f-b5f0-406f-9606-fb49b62d9fbe",
      "name": "Instagram IMG",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        480,
        -480
      ],
      "parameters": {
        "edge": "media",
        "node": "=17841460793685821",
        "options": {
          "queryParameters": {
            "parameter": [
              {
                "name": "image_url",
                "value": "={{ $json.URL }}"
              },
              {
                "name": "caption",
                "value": "=test"
              }
            ]
          }
        },
        "graphApiVersion": "v20.0",
        "httpRequestMethod": "POST"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1cae7c78-7708-42eb-a80c-728abceaf139",
      "name": "Instagram Post",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        928,
        -480
      ],
      "parameters": {
        "edge": "media_publish",
        "node": "=17841460793685821",
        "options": {
          "queryParameters": {
            "parameter": [
              {
                "name": "creation_id",
                "value": "={{ $json.id }}"
              }
            ]
          }
        },
        "graphApiVersion": "v20.0",
        "httpRequestMethod": "POST"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e1531fdd-0671-44d0-a59c-04b85c23a9f0",
      "name": "Update Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1152,
        -192
      ],
      "parameters": {
        "columns": {
          "value": {
            "STATUS": "posted",
            "Description": "={{ $('get sheet data').item.json.Description }}"
          },
          "schema": [
            {
              "id": "Sr. No.",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Sr. No.",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Publish date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Type",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "POST TYPE",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "POST TYPE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "STATUS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FB",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "FB",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "IG",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "IG",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "X",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "X",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "L-in",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "L-in",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Description"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit#gid=0",
          "cachedResultName": "Video Content data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit?usp=drivesdk",
          "cachedResultName": "SocialPulse"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "51edf78a-0bf0-4b57-b327-cc3cc92c2c27",
      "name": "Get Media",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        704,
        96
      ],
      "parameters": {
        "url": "={{ $json.URL }}",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "2fcb911d-fc10-4c47-ba7a-5fc83f91bf8f",
      "name": "Linkedin Post",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        928,
        96
      ],
      "parameters": {
        "text": "={{ $json.Description }}",
        "person": "UsSnS-LAtb",
        "additionalFields": {},
        "shareMediaCategory": "IMAGE"
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "993e75ee-37c6-4af9-b7a0-affc956e53e5",
      "name": "Route",
      "type": "n8n-nodes-base.switch",
      "position": [
        256,
        -224
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "INSTAGRAM_IMAGE",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "pt-img-ig",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json['POST TYPE'] }}",
                    "rightValue": "IMAGE"
                  },
                  {
                    "id": "pf-ig",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.IG }}"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "X_IMAGE",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "pt-img-x",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json['POST TYPE'] }}",
                    "rightValue": "IMAGE"
                  },
                  {
                    "id": "pf-x",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.X }}"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "FACEBOOK_IMAGE",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "pt-img-fb",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json['POST TYPE'] }}",
                    "rightValue": "IMAGE"
                  },
                  {
                    "id": "pf-fb",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.FB }}"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "LINKEDIN_IMAGE",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "3674e1cd-85e4-47d9-ba11-13054000f870",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json['L-in'] }}",
                    "rightValue": "IMAGE"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "allMatchingOutputs": true
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "95a11a65-61eb-4df8-baba-70d0daa1128a",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        704,
        -480
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "34919763-3bc4-4d1a-8d6b-c38baadad6fd",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -256,
        -848
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d4add22a-e3ff-4145-b68d-2b43f013200b",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        800,
        -848
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $('Post Topic').item.json.image_url }}",
            "POST TYPE": "IMAGE",
            "Description": "={{ $json.message.content }}"
          },
          "schema": [
            {
              "id": "Sr. No.",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Sr. No.",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Publish date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Type",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "POST TYPE",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "POST TYPE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "STATUS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FB",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "FB",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "IG",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "IG",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "X",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "X",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "L-in",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "L-in",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit#gid=0",
          "cachedResultName": "Video Content data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xCdabzPD1uh4XS9lAKJo_HbnWeZ6ZbP31jjoLmuSlXc/edit?usp=drivesdk",
          "cachedResultName": "SocialPulse"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "82fd0d12-0d95-4586-a684-a6665e5274b4",
      "name": "Post Topic",
      "type": "n8n-nodes-base.set",
      "position": [
        112,
        -848
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0b158ba1-5f00-4395-92a2-28431134088a",
              "name": "title",
              "type": "string",
              "value": "Ai Automation"
            },
            {
              "id": "ceaff0b0-8292-4618-8eb7-ceb763eb1ecc",
              "name": "image_url",
              "type": "string",
              "value": "https://res.cloudinary.com/dvg6qr9e8/image/upload/v1760419885/c0izgcdl9ar71zse4w7w.png"
            },
            {
              "id": "0ded1984-71f3-469b-b2df-487ee0a3d44b",
              "name": "phone",
              "type": "string",
              "value": "7745930380"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "85876f65-5cf4-4151-a830-8efd5e1021b0",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2048,
        -1264
      ],
      "parameters": {
        "color": 6,
        "width": 460,
        "height": 252,
        "content": "## \ud83d\udc68\u200d\ud83d\udcbb Creator Information\n\n**Created by:** Samyotech  \n\ud83d\udd17 **LinkedIn:** [Connect with me](https://www.linkedin.com/company/samyotech/posts/?feedView=all)\n\ud83d\udd17 **Youtube:** [Subscribe to my Channel](https://www.youtube.com/@samyotech)\n\n### \ud83d\udcde Need Help?\n- **Visit:** https://samyotech.com/\n- **Business Inquiries:** Connect via LinkedIn"
      },
      "typeVersion": 1
    },
    {
      "id": "1fe5e59e-757f-4cef-86aa-18af3c91fc0c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -944
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 240,
        "content": "Click to run workflow \u2013 Trigger the workflow manually\n- Set topic in the Set node \n- LLM generates caption\n- Store in the sheet"
      },
      "typeVersion": 1
    },
    {
      "id": "7b0e330f-130f-4aa0-885a-22474dde5087",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -944
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 240,
        "content": "Review the generated caption in the sheet, update its status to \u2018Approved\u2019, and select the platform(s) where you want to post."
      },
      "typeVersion": 1
    },
    {
      "id": "31443a99-f29d-4e72-93a4-a6fda758c74c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -944
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 240,
        "content": "Update the title with the topic you want to post and add the image URL in the Set node."
      },
      "typeVersion": 1
    },
    {
      "id": "4c5c3671-39ae-46de-91a6-ae8636ba934b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 240,
        "content": "Once reviewed, update the status to \u2018Approved\u2019 in the sheet. Then the workflow will run and post on the respective platform(s) you selected."
      },
      "typeVersion": 1
    },
    {
      "id": "a3abb341-687b-490c-a332-7d8766fa9334",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        -1264
      ],
      "parameters": {
        "width": 720,
        "height": 496,
        "content": "# Social media posting automation with images and captions\n\n## How it works\nThis workflow automates the creation and publishing of social media posts. An AI model generates captions based on a provided topic and image. The content is stored in Google Sheets for review and approval. Once approved, the workflow automatically publishes the post to the selected social media platform.\n\n## Setup steps\n1. Configure the trigger and define the post topic and image source.\n2. Add your OpenAI API key to enable caption generation.\n3. Connect your Google account to store and review posts in Google Sheets.\n4. Connect your social media platform credentials.\n5. Run the workflow once to create the spreadsheet and test posting.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "39bb6395-f058-4ba5-94f3-2d68bbbb76f6",
      "name": "Schedule social media posts",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -416,
        -192
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "seconds"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e1e4a603-3628-403f-a59f-c77d368b6719",
      "name": "Generate Caption",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        368,
        -848
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=### GOAL:\nCreate social media captions that drive **high engagement** (comments, saves, shares) and **generate qualified leads** for an AI Agent & n8n automation agency.\n\n### CONTEXT:\nThe posts target **tech-savvy professionals**, founders, and operations managers interested in **automation, AI Agents, and workflow optimization**.\n\nTone: **Energetic, Professional, and Solution-Focused**  \nVoice: **Authoritative yet conversational**  \nPlatform: **LinkedIn / X (Twitter)**\n\n### TASK:\nGenerate ONE compelling social media caption based on the provided topic.\n\n### STRUCTURE:\n1. **The Hook (1st Line):**  \n   Start with an attention-grabbing question or bold statement addressing a pain point.\n\n2. **The Value Proposition:**  \n   Introduce **n8n or AI Agents** as the solution, highlighting ONE key benefit.\n\n3. **The Breakdown:**  \n   breakdown into bullet points to highlight key features, advantages, or transformations.\n\n4. **The Call-to-Action (CTA):**  \n   End with a clear, action-oriented instruction that encourages engagement or conversion (e.g., \"Start building smarter workflows today!\").\n\n### \ud83e\uddfe CONSTRAINTS:\n- Entire caption must be **under 1000 characters**  \n- Include **4\u20136 relevant emojis** (\ud83d\ude80\ud83d\udca1\u2705\ud83e\udde0\u2699\ufe0f etc.)  \n- Include **3\u20135 relevant hashtags** at the end (must include `#n8n` and `#AI`)  \n- Use **line breaks** for easy readability  \n- Keep it **value-driven**, not salesy  "
            },
            {
              "content": "=Topic for Today's Post: {{ $json.title }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "42b000f5-444b-40f4-86bd-2121b2a9fcd8",
      "name": "Get Media2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        -288
      ],
      "parameters": {
        "url": "={{ $json.URL }}",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "f7d79242-a34e-4720-9946-bad6edac9160",
      "name": "Facebook Post",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        928,
        -96
      ],
      "parameters": {
        "edge": "photos",
        "node": "=/824769547395395/photos",
        "options": {
          "queryParameters": {
            "parameter": [
              {
                "name": "message",
                "value": "=hey there"
              }
            ]
          }
        },
        "sendBinaryData": true,
        "graphApiVersion": "v20.0",
        "httpRequestMethod": "POST",
        "binaryPropertyName": "data"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "443d39e7-a6b4-4957-86e1-feb28cc59cb1",
      "name": "Post Facebook Img",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        704,
        -96
      ],
      "parameters": {
        "url": "=https://res.cloudinary.com/dvg6qr9e8/image/upload/v1761807380/xcqmblnssjwodlmv6xb5.png",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "eb157cd5-deab-4d5f-8f4b-3cf720099719",
      "name": "Post  X Img",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        704,
        -288
      ],
      "parameters": {
        "url": "https://api.x.com/2/media/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "media",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            },
            {
              "name": "media_category",
              "value": "tweet_image"
            }
          ]
        },
        "nodeCredentialType": "twitterOAuth2Api"
      },
      "credentials": {
        "twitterOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Instagram Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route": {
      "main": [
        [
          {
            "node": "Instagram IMG",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Media2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Post Facebook Img",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Media",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Media": {
      "main": [
        [
          {
            "node": "Linkedin Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Media2": {
      "main": [
        [
          {
            "node": "Post  X Img",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Topic": {
      "main": [
        [
          {
            "node": "Generate Caption",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post  X Img": {
      "main": [
        [
          {
            "node": "Create Tweet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Tweet": {
      "main": [
        [
          {
            "node": "Update Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Facebook Post": {
      "main": [
        [
          {
            "node": "Update Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Instagram IMG": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Linkedin Post": {
      "main": [
        [
          {
            "node": "Update Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Instagram Post": {
      "main": [
        [
          {
            "node": "Update Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get sheet data": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Route",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Caption": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Facebook Img": {
      "main": [
        [
          {
            "node": "Facebook Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule social media posts": {
      "main": [
        [
          {
            "node": "get sheet data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Post Topic",
            "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

This AI-powered workflow streamlines your social media posting process, transforming hours of manual caption writing, image uploading, and scheduling into a fully automated system. You define the topic and image once, and the workflow handles caption generation, review,…

Source: https://n8n.io/workflows/12596/ — 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

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

AI Social Media Publisher from WordPress. Uses manualTrigger, googleSheets, lmChatOpenRouter, outputParserStructured. Event-driven trigger; 20 nodes.

Google Sheets, OpenRouter Chat, Output Parser Structured +7
Social Media

This workflow automates the process of creating and publishing social media posts across multiple platforms (Twitter/X, Facebook, LinkedIn, and Instagram) based on content from a WordPress post. It us

Google Sheets, OpenRouter Chat, Output Parser Structured +7
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

✨🤖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