AutomationFlowsAI & RAG › Create Linkedin Content From Workflows Using Gemini & Cloudflare AI

Create Linkedin Content From Workflows Using Gemini & Cloudflare AI

ByAnirudh Aeran @anirudhaeran on n8n.io

This workflow is a complete, AI-powered content engine designed to help automation experts build their personal brand on LinkedIn. It transforms a technical n8n workflow (in JSON format) into a polished, engaging LinkedIn post, complete with a custom-generated AI image and a…

Event trigger★★★★☆ complexityAI-powered21 nodesStop And ErrorTelegram TriggerTelegramGoogle GeminiGoogle SheetsHTTP RequestLinkedIn
AI & RAG Trigger: Event Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Googlegemini → 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "23e32b78-14fb-49d9-88ee-fde24f34d751",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -128
      ],
      "parameters": {
        "color": 5,
        "width": 2432,
        "height": 624,
        "content": "## LinkedIn Post Content and Image Generator"
      },
      "typeVersion": 1
    },
    {
      "id": "ae5e66ae-319c-445d-ab16-071186195544",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        512
      ],
      "parameters": {
        "color": 4,
        "width": 752,
        "height": 368,
        "content": "## Finalized Post Content and Image is Posted in LinkedIn"
      },
      "typeVersion": 1
    },
    {
      "id": "18081731-dc14-4c27-9cf0-a74aa3ad30cd",
      "name": "Image > 1 megapixel",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1600,
        0
      ],
      "parameters": {
        "errorMessage": "The size of the image (width x height) is larger than 1 megapixel"
      },
      "typeVersion": 1
    },
    {
      "id": "b25d96d7-04ad-4098-910d-055bbca77caf",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -768,
        -240
      ],
      "parameters": {
        "width": 544,
        "height": 416,
        "content": "=========================\n Turn Your n8n Workflows to LinkedIn Post with a suitable Image. \n=======================================\nFor any questions or support, please contact:\n    anirudh.n.aeran@gmail.com\n\nExplore more tips here:\n    - LinkedIn: https://www.linkedin.com/in/anirudh-narayan-a-/\n\nHappy learning! -- Anirudh Aeran\n\n\n======================================="
      },
      "typeVersion": 1
    },
    {
      "id": "3ba01fe1-5a05-4046-96bf-677f4b029848",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -768,
        224
      ],
      "parameters": {
        "color": 5,
        "width": 544,
        "height": 848,
        "content": "## Try It Out!\n\nThis workflow is your personal AI ghostwriter and designer for LinkedIn. It turns your n8n workflows into stunning content in minutes.\n\n**To get started:**\n\n1. **Connect Your Brains:** This workflow uses multiple AIs and services. First, add your credentials in n8n for **Google Gemini**, **Cloudflare**, **LinkedIn**, **Google Sheets**, and create **two separate Telegram bots** (Bot A for generating, Bot B for posting). For Cloudflare credentials: [Watch](https://youtu.be/2tycZNP5_IA?t=75)\n\n2. **Configure the Workflow:**\n- In the **Cloudflare HTTP Request nodes**, add your Cloudflare Account ID to the URL.\n- Select the correct credentials in all **Telegram, Gemini, LinkedIn, and Sheets** nodes.\n- Add your Google Sheet ID to the **\"Append row in sheet\"** node.\n\n3. **Generate Your First Post:**\n- Find an n8n workflow you want to post about and download it as a JSON file.\n- Send this JSON file to **Bot A (your generator bot)**.\n- Wait a moment. The bot will send you back a newly generated AI image, The post content and the detailed image prompt in the caption.\n\n4. **Publish to LinkedIn:**\n- Go to your **Bot B (your publisher bot)**.\n- **Forward the image** you just received from Bot A to this bot (After verification) or create a new image and send it to BOT B.\n- Now, **reply** to that forwarded image with the final text (Post Content from BOT A) you want for your LinkedIn post. You can use the text generated by Gemini or write your own.\n- The workflow will trigger and automatically post the image and your reply text to your LinkedIn profile!\n\n5. **Go Live:** Keep the workflow active. Now you have a content creation pipeline ready to go anytime you build something new!"
      },
      "typeVersion": 1
    },
    {
      "id": "8c9aa345-6cde-4f50-b886-bb4e05df0d8f",
      "name": "Receive n8n JSON",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        96,
        192
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "32db6359-fcf5-4b5c-aa53-abf8c6298efd",
      "name": "Get JSON File from Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        304,
        192
      ],
      "parameters": {
        "fileId": "={{ $json.message.document.file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dda73ea8-6f9c-4a1a-8cbe-a5403986728e",
      "name": "Parse Workflow JSON",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        480,
        192
      ],
      "parameters": {
        "options": {},
        "operation": "fromJson"
      },
      "typeVersion": 1
    },
    {
      "id": "dd2d0e0b-fe4b-4b1a-b821-565cf6a42e50",
      "name": "Gemini: Generate Post & Image Prompt",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        640,
        192
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "## PERSONA AND CORE RULES ##\nYou are 'FlowArchitect', a world-class automation expert and LinkedIn content strategist specializing in n8n. Your mission is to analyze complex n8n workflow JSON and transform it into a compelling LinkedIn post that is insightful, engaging, and drives comments.\n\nYour secondary tasks are:\n1. Create a detailed, professional prompt for an AI image generation model (like Stable Diffusion or Midjourney). The prompt must describe a high-quality, conceptual graphic that acts as a visual hook and matches the content of the LinkedIn post.\n    * Crucially, the prompt MUST include a specific headline/hook to be integrated seamlessly into the image. This headline should be short, impactful, and directly relevant to the post's main benefit.\n    * The prompt must specify exact placement for this headline (e.g., \"prominently displayed in the top left,\" \"centered at the bottom\").\n    * The prompt must specify the use of a modern, bold, easily readable, professional-grade sans-serif font for any text in the image (e.g., 'Inter', 'Montserrat', 'Lato', 'Open Sans').\n2. Generate a unique, URL-safe filename for the image.\n3. Generate a `dm_message` which contains the exact keyword mentioned in the Call To Action, ready to be sent in a direct message.\n\nYour tone is expert, confident, and value-driven. You use emojis (like \u2192, \u2705, \u274c, \ud83d\udd25, \ud83d\udea8, \ud83d\udc80) to add personality and improve readability.\n\nYour response MUST ALWAYS be a single, valid JSON object. Do not include any text, notes, or explanations outside of the JSON structure. The JSON object must have four keys: \"post_text\", \"image_prompt\", \"style_used\", \"image_filename\", and \"dm_message\". The \"image_filename\" should be a unique, URL-safe slug based on the content of the post, ending with .png (e.g., automated-review-system.png).\n\n## LINKEDIN POST STYLES ##\nYou are an expert in two distinct, high-engagement LinkedIn post styles.\n\n### Style 1: The 'Builder' Post (Direct & Detailed)\nThis style is for showcasing technical prowess and clear results.\n- **Hook:** Start with a bold, direct claim like \"I Built an Automated System That...\"\n- **Problem:** State the common problem the workflow solves.\n- **Solution Actions:** Use \"\u2192\" to list the specific actions the automation performs.\n- **Results:** Use \"\u2705\" to list 3-4 quantifiable, impressive outcomes.\n- **How It Works:** Provide a clear \"Step 1, Step 2...\" breakdown of the workflow logic.\n- **Comparison:** Briefly contrast the automated approach with the inefficient manual way.\n- **Tech Stack:** List the key technologies used.\n- **Call to Action (CTA):** End with \"Like + Comment '[KEYWORD]' and I'll DM you the ready-to-import template \ud83d\udc47\"\n\n### Style 2: The 'Strategist' Post (Contrarian & Psychological)\nThis style is for showcasing strategic thinking and hooking the reader with a unique angle.\n- **Hook:** Start with a provocative, contrarian opinion like \"Unpopular Opinion: [Common Practice] is Killing Your Business \ud83d\udc80\"\n- **The Secret:** Reveal the \"secret\" or the core principle behind your method (e.g., Timing + Value Exchange).\n- **Psychology:** Explain the \"why\" behind your strategy, focusing on customer perception and behavior.\n- **Solution Functions:** Use \"\u2705\" to list the high-level functions the automation handles.\n- **Key Result:** State the single most impressive metric or outcome.\n- **The Best Part:** Mention that it's fully automatic and saves time/effort.\n- **Call to Action (CTA):** End with \"Comment '[KEYWORD]' and I'll share the complete system \ud83d\udd25\"\n\n## EXAMPLES ##\nHere is an example of how to apply these styles to a workflow that automates Google Review collection.\n\n### Example Input:\n{\n  \"workflow_summary\": \"An n8n workflow that triggers on a new WhatsApp message, checks if the customer exists in Google Sheets, sends a discount offer, waits 6 hours, then sends a Google Review link and follows up if the link is not clicked.\",\n  \"tools\": [\"n8n\", \"WhatsApp Business API\", \"Google Sheets\", \"Webhook\"],\n  \"results\": {\n    \"review_rate_before\": \"2%\",\n    \"review_rate_after\": \"15%\",\n    \"hours_saved_weekly\": 25\n  }\n}\n\n### Example Output for Style 1 ('Builder'):\n{\n  \"post_text\": \"I Built an Automated Google Review System That Turns Every Customer Into a 5-Star Review \ud83d\udea8\\nMost businesses lose 90% of potential reviews because they never follow up.\\nMeanwhile, I built a WhatsApp automation that:\\n\u2192 Captures every customer interaction automatically\\n\u2192 Sends personalized discount offers instantly\\n\u2192 Follows up with review requests at the perfect timing\\n\u2192 Tracks everything in Google Sheets without manual work\\nThe result?\\n\u2705 300% increase in review collection rates\\n\u2705 Zero manual follow-up work required\\n\u2705 Automatic customer segmentation\\n\u2705 Smart duplicate prevention system\\nHow the automation works:\\nStep 1: Customer Detection\\nWhatsApp trigger captures incoming messages\\nAutomatically checks Google Sheets for existing customers\\nSegments new vs returning customers instantly\\nStep 2: Smart Offer System\\nNew customers \u2192 Instant 5% discount message\\nReturning customers \u2192 \\\"Already claimed\\\" prevention\\nAll interactions logged with timestamps\\nStep 3: Intelligent Follow-Up\\n6-hour delay before review request (perfect timing psychology)\\nPersonalized WhatsApp template messages\\nClick tracking for review link engagement\\nScheduled hourly follow-ups for non-responders\\nStep 4: Data Intelligence\\nGoogle Sheets integration tracks every touchpoint\\nStatus updates: pending \u2192 contacted \u2192 clicked \u2192 reviewed\\nFeedback collection and storage\\nCustomer journey analytics\\nWhy this beats manual review requests:\\n\u274c Manual approach: 2% review rate, 20+ hours weekly\\n\u2705 My automation: 15% review rate, 0 hours weekly\\nThe tech stack:\\nn8n for workflow orchestration\\nWhatsApp Business API for messaging\\nGoogle Sheets for customer database\\nWebhook triggers for real-time updates\\nSmart conditional logic for customer segmentation\\nThis system has generated 500+ authentic reviews for my clients while saving 25+ hours weekly per business.\\nWant the complete n8n workflow JSON?\\nLike + Comment \\\"REVIEW SYSTEM\\\" and I'll DM you the ready-to-import template \ud83d\udc47\",\n  \"image_prompt\": \"Professional graphic for a LinkedIn post about automation. A central glowing 5-star icon, with data streams connecting icons for WhatsApp, Google Sheets, and a clock. Clean, technical, dark background with orange and blue highlights. Integrate the bold white text 'AUTOMATED 5-STAR REVIEWS' prominently in the top center, using a modern sans-serif font like 'Inter' or 'Montserrat'. High-detail, corporate tech aesthetic, digital art, high resolution.\",\n  \"style_used\": \"Builder\",\n  \"image_filename\": \"automated-google-review-system.png\",\n  \"dm_message\": \"REVIEW SYSTEM\"\n}\n\n### Example Output for Style 2 ('Strategist'):\n{\n  \"post_text\": \"Unpopular Opinion: Asking for Google Reviews is Killing Your Business \ud83d\udc80\\nEveryone's begging customers for reviews.\\nBut here's what actually works:\\nGive value FIRST, then ask.\\nI built a WhatsApp automation that turns every customer interaction into a review opportunity WITHOUT being pushy.\\nThe secret? Timing + Value Exchange\\nInstead of: \\\"Please leave us a review \ud83d\ude4f\\\"\\nI do this: \\\"Here's your exclusive 5% discount \u2192 [6 hours later] \u2192 How was your experience?\\\"\\nThe psychology behind it:\\nCustomers feel valued (discount first)\\nPerfect timing (6-hour delay = peak satisfaction)\\nNon-intrusive (WhatsApp vs email spam)\\nReciprocity principle (they got value, want to give back)\\nMy n8n workflow handles:\\n\u2705 Automatic customer detection\\n\u2705 Smart duplicate prevention\\n\u2705 Personalized discount delivery\\n\u2705 Perfectly timed review requests\\n\u2705 Follow-up for non-responders\\n\u2705 Complete analytics tracking\\nResult: 15% review rate vs industry average of 2%\\nThe best part? It runs completely automatically.\\nNo manual work. No pushy sales tactics. No spam.\\nJust value-first automation that customers actually appreciate.\\nReady to stop begging for reviews?\\nComment \\\"VALUE FIRST\\\" and I'll share the complete system \ud83d\udd25\",\n  \"image_prompt\": \"Conceptual digital art for a business strategy post. A balanced scale. On one side, a small glowing gift box icon labeled 'Value First'. On the other side, a much larger pile of 5-star review icons. The theme is reciprocity and smart business. Minimalist, professional, sophisticated color palette, dark background. Integrate the bold white text 'GIVE VALUE, GET REVIEWS' prominently centered at the top, using an elegant, clean sans-serif font. High resolution.\",\n  \"style_used\": \"Strategist\",\n  \"image_filename\": \"value-first-review-strategy.png\",\n  \"dm_message\": \"VALUE FIRST\"\n}\n\n## FINAL TASK ##\nNow, analyze the following real n8n workflow JSON. Choose one of the two post styles ('Builder' or 'Strategist') to write the post. **Alternate which style you use for each new request to test which performs better.** Generate the final JSON output, including the detailed image prompt, a unique filename, and the `dm_message`.\n\n\n## Important Note: The CTA or the keyword should always be a relevant single word and not complex ones with multiple words or special characters of any type. "
            },
            {
              "content": "=n8n workflow in JSON:\n{{ JSON.stringify($json.data) }}"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    },
    {
      "id": "51910b8c-f726-462d-8b33-9233a0196cad",
      "name": "Parse Gemini Output",
      "type": "n8n-nodes-base.code",
      "position": [
        944,
        192
      ],
      "parameters": {
        "jsCode": "// This new code outputs ONE item with all the data combined.\n\nconst aiNodeOutput = items[0].json;\nconst rawText = aiNodeOutput.content.parts[0].text;\nconst cleanedJsonString = rawText.replace(/^```json\\n/, '').replace(/\\n```$/, '').trim();\nconst parsedData = JSON.parse(cleanedJsonString);\n\n// Return a single item containing the post_text, image_headline, and style_used\nreturn [{\n  json: parsedData\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "d6cfe1a0-d9e6-4aa9-8e03-e945782c3aea",
      "name": "Log Content to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1136,
        368
      ],
      "parameters": {
        "columns": {
          "value": {
            "Keyword": "={{ $json.dm_message }}",
            "Style Used": "={{ $json.style_used }}",
            "Image Prompt": "={{ $json.image_prompt }}"
          },
          "schema": [
            {
              "id": "Keyword",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Github Repo Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Github Repo Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image Prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Image Prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Style Used",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Style Used",
              "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/15mWZ28bis89i-7mLY8EU39OxoYPQ0L7LeY4eqwq01Cs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "15mWZ28bis89i-7mLY8EU39OxoYPQ0L7LeY4eqwq01Cs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15mWZ28bis89i-7mLY8EU39OxoYPQ0L7LeY4eqwq01Cs/edit?usp=drivesdk",
          "cachedResultName": "LinkedIn Keywords for DM Automation"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "19a6fc45-55f1-4870-b6f7-220c7bcd77b9",
      "name": "Set Image Generation Parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        1136,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3f7d5020-0710-4f3c-858f-0485a2bd2963",
              "name": "width",
              "type": "number",
              "value": "={{ $json.width || 1024 }}"
            },
            {
              "id": "39b906fa-3e0b-45b9-9c1b-95cbc51e195d",
              "name": "prompt",
              "type": "string",
              "value": "={{ $json.image_prompt }}"
            },
            {
              "id": "3f8593d2-cfb3-437a-a9fc-4430995cb78f",
              "name": "height",
              "type": "number",
              "value": "={{ $json.height || 1024 }}"
            },
            {
              "id": "065181ef-404a-4860-9019-976e6e8391e0",
              "name": "seed",
              "type": "number",
              "value": "={{ Math.floor(Math.random() * 100000000) }}"
            },
            {
              "id": "2c131da3-e708-4468-bb09-d400e7e5f28c",
              "name": "steps",
              "type": "number",
              "value": 4
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "75c3d30b-3444-4cc2-82fa-29c4dc2607a0",
      "name": "Validate Image Dimensions",
      "type": "n8n-nodes-base.if",
      "position": [
        1344,
        192
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f6e30a82-76cd-4bfd-9bc5-b7fffb15e35c",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.width * $json.height > 1048576 }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e8a67bda-7a40-402a-9b0f-8c8b69abb40c",
      "name": "Cloudflare: Get Account ID",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1600,
        192
      ],
      "parameters": {
        "url": "https://api.cloudflare.com/client/v4/accounts",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6bcebec4-2f24-4d50-b6b1-f25db62cb765",
      "name": "Cloudflare: Generate Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1792,
        192
      ],
      "parameters": {
        "url": "=https://api.cloudflare.com/client/v4/accounts/{{ $json.result[0].id }}/ai/run/@cf/black-forest-labs/flux-1-schnell",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ \n\nJSON.stringify(\n  {\n    prompt: $('Set Image Generation Parameters').item.json.prompt,\n    seed: $('Set Image Generation Parameters').item.json.seed,\n    \"width\": $('Set Image Generation Parameters').item.json.width,\n    \"height\": $('Set Image Generation Parameters').item.json.height,\n    \"steps\": $('Set Image Generation Parameters').item.json.steps\n  }\n) \n\n}}",
        "sendBody": true,
        "specifyBody": "=json",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {}
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "27cfe056-9e2a-410c-8cad-d12d47f088e0",
      "name": "Convert Image to Binary",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        1984,
        192
      ],
      "parameters": {
        "options": {},
        "operation": "toBinary",
        "sourceProperty": "result.image"
      },
      "typeVersion": 1.1
    },
    {
      "id": "4a701ff4-6dec-4e90-b2d1-b228c701a97f",
      "name": "Send Post Content For Verification",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1136,
        0
      ],
      "parameters": {
        "text": "={{ $json.post_text }}",
        "chatId": "={{ $('Receive n8n JSON').item.json.message.chat.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4a7204b9-4a8e-4fa4-97c1-a682e5c31a8b",
      "name": "Send Image & Prompt to User",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2192,
        192
      ],
      "parameters": {
        "chatId": "={{ $('Receive n8n JSON').item.json.message.chat.id }}",
        "operation": "sendPhoto",
        "binaryData": true,
        "additionalFields": {
          "caption": "={{ $('Parse Gemini Output').item.json.image_prompt }}"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "decd0dc3-5f3d-4c25-9df7-ece684c25d7e",
      "name": "Trigger: Reply to Post Image",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        960,
        640
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c82cb7dd-f097-4942-be23-3faf7dd19a2d",
      "name": "Get Image from Reply",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1168,
        640
      ],
      "parameters": {
        "fileId": "={{ $json.message.reply_to_message.photo[$json.message.reply_to_message.photo.length - 1].file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "223e88f1-85d3-4f33-b2cc-01f1a022a41f",
      "name": "Publish Post to LinkedIn",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        1376,
        640
      ],
      "parameters": {
        "text": "={{ $('Trigger: Reply to Post Image').item.json.message.text }}",
        "person": "-vNmfGJ-HL",
        "additionalFields": {
          "title": "Instagram DM Automation",
          "visibility": "CONNECTIONS"
        },
        "shareMediaCategory": "IMAGE"
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Receive n8n JSON": {
      "main": [
        [
          {
            "node": "Get JSON File from Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Gemini Output": {
      "main": [
        [
          {
            "node": "Log Content to Google Sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "Set Image Generation Parameters",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Post Content For Verification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Workflow JSON": {
      "main": [
        [
          {
            "node": "Gemini: Generate Post & Image Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Image from Reply": {
      "main": [
        [
          {
            "node": "Publish Post to LinkedIn",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Image to Binary": {
      "main": [
        [
          {
            "node": "Send Image & Prompt to User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Image Dimensions": {
      "main": [
        [
          {
            "node": "Image > 1 megapixel",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Cloudflare: Get Account ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cloudflare: Generate Image": {
      "main": [
        [
          {
            "node": "Convert Image to Binary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cloudflare: Get Account ID": {
      "main": [
        [
          {
            "node": "Cloudflare: Generate Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get JSON File from Telegram": {
      "main": [
        [
          {
            "node": "Parse Workflow JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger: Reply to Post Image": {
      "main": [
        [
          {
            "node": "Get Image from Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Image Generation Parameters": {
      "main": [
        [
          {
            "node": "Validate Image Dimensions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini: Generate Post & Image Prompt": {
      "main": [
        [
          {
            "node": "Parse Gemini Output",
            "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 workflow is a complete, AI-powered content engine designed to help automation experts build their personal brand on LinkedIn. It transforms a technical n8n workflow (in JSON format) into a polished, engaging LinkedIn post, complete with a custom-generated AI image and a…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Ask questions like “How much did I spend on food last month?” and get instant answers from your financial data — directly in Telegram.

Telegram Trigger, OpenAI, Google Sheets +2
AI & RAG

Most expense tracker apps (like Money Lover, Spendee, or Wallet) have a common friction point: Data Entry. You have to unlock your phone, find the app, wait for it to load, navigate menus, and manuall

Google Sheets, Google Gemini, Telegram +2
AI & RAG

&gt; ⚠️ Disclaimer: This workflow uses Community Nodes and must be run on a self-hosted instance of n8n.

HTTP Request, Telegram Trigger, Telegram +2
AI & RAG

Viral Tik Tok Clone Finder. Uses httpRequest, telegramTrigger, openAi, googleSheets. Event-driven trigger; 41 nodes.

HTTP Request, Telegram Trigger, OpenAI +2
AI & RAG

This workflow is designed for content creators, agencies, influencers, and automation builders who want to transform viral videos into personalized avatar-based edits — and automatically publish them

Telegram Trigger, Telegram, HTTP Request +3