AutomationFlowsAI & RAG › Generate and Publish Approved Employee Linkedin Posts with Openai and Linkedin

Generate and Publish Approved Employee Linkedin Posts with Openai and Linkedin

ByWeblineIndia @weblineindia on n8n.io

This workflow scans an RSS blog feed on a schedule, logs newly found posts to Google Sheets, uses OpenAI to generate role-based LinkedIn drafts, and emails approval links via Gmail; approved drafts are then published to LinkedIn and tracked in Google Sheets, with Slack alerts on…

Event trigger★★★★★ complexityAI-powered51 nodesExecute Workflow TriggerGmailRSS Feed ReadGoogle SheetsOpenAIHTTP RequestSlack
AI & RAG Trigger: Event Nodes: 51 Complexity: ★★★★★ AI nodes: yes Added:

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

This workflow follows the Execute Workflow Trigger → Gmail 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": "4G89g82fj0jzOsZQ",
  "name": "AI-Powered Employee Advocacy System",
  "tags": [],
  "nodes": [
    {
      "id": "f100825a-2b35-47a7-89bb-d65d4e22283e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 80,
        "content": "## Blog Detection Flow\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4e248390-8aa0-4b3c-9667-15bab99d9f02",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        736
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 80,
        "content": "## AI Content Personalization Engine"
      },
      "typeVersion": 1
    },
    {
      "id": "9a74512c-6ef0-47f9-ac88-43e3e6d49cef",
      "name": " AI Content Personalization Engine",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        1472,
        480
      ],
      "parameters": {
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "Q5qXCxL06b2Q6aOK",
          "cachedResultUrl": "/workflow/Q5qXCxL06b2Q6aOK",
          "cachedResultName": "AI Content Personalization Engine"
        },
        "workflowInputs": {
          "value": {},
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "901aa993-8095-42a7-bf3d-b3ef9369c053",
      "name": "Blog Detection flow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -16,
        992
      ],
      "parameters": {
        "inputSource": "passthrough"
      },
      "typeVersion": 1.1
    },
    {
      "id": "d35cac95-4b5f-48dd-b361-1bb5b9aaacdd",
      "name": "Send request for approval & reject",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1664,
        992
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=<h2>LinkedIn Draft Approval</h2>  <p><strong>Role:</strong> {{ $('Blog Detection flow').item.json.role }} </p>  <p><strong>Blog:</strong> {{ $('Blog Detection flow').item.json.blog_title }} </p>  <p> {{ $('Blog Detection flow').item.json.generated_post }} </p>  <br>  <a href=\"{{$json.approveUrl}}\"> Approve Post </a>  <br><br>  <a href=\"{{$json.rejectUrl}}\"> Reject Post </a>",
        "options": {},
        "subject": "=Approval Required {{ $('Blog Detection flow').item.json.role }} -  LinkedIn Post"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1ea1191c-a48c-4b5a-8ae7-3e75dbd4f79d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        1440
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 80,
        "content": "## Content Approval Engine & LinkedIn Auto Post Publishing "
      },
      "typeVersion": 1
    },
    {
      "id": "92ff2582-c10b-4e3d-8fed-6408111d7d49",
      "name": "Blog Scan Scheduler",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        48,
        288
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "3e0924d3-c2a0-4c39-b2e7-35194feceb60",
      "name": "Fetch Latest Blogs",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        240,
        288
      ],
      "parameters": {
        "url": "YOUR_BLOG_URL_HERE",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "e4055f33-9c1f-4a1e-a588-109c53c914dc",
      "name": "Limit Latest Blog",
      "type": "n8n-nodes-base.limit",
      "position": [
        512,
        288
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86b9730c-a1a2-437c-b26f-4f2cafc36bf2",
      "name": "Check Existing Blog",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueRegularOutput",
      "position": [
        704,
        288
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.link }}",
              "lookupColumn": "url"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1814987066,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=1814987066",
          "cachedResultName": "processed_blogs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": false,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "156592b4-a600-4e20-9466-c50eb6cbe70a",
      "name": "Is New Blog?",
      "type": "n8n-nodes-base.if",
      "position": [
        896,
        288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "22573076-f2e7-423a-aaf6-cf5232caf22c",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8d6c79c9-6ee7-490a-998a-433bb5cd8f99",
      "name": "Format Blog Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1168,
        272
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "2a39eead-a14e-4796-a58e-8df1769a1c42",
              "name": "title",
              "type": "string",
              "value": "={{ $('Limit Latest Blog').item.json.title }}"
            },
            {
              "id": "7292db5e-07cd-41d5-bf91-fa3be9fa7b6f",
              "name": "link",
              "type": "string",
              "value": "={{ $('Limit Latest Blog').item.json.link }}"
            },
            {
              "id": "973a678b-5a8e-4a96-bb89-8e8322fb8bdd",
              "name": "content",
              "type": "string",
              "value": "={{ $('Limit Latest Blog').item.json.content }}"
            },
            {
              "id": "f102cd1e-c101-44fc-a567-e2f6c821b665",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $('Limit Latest Blog').item.json.pubDate }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "87b89529-826b-498a-b47e-83e5defd0732",
      "name": "Save Processed Blog",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1456,
        64
      ],
      "parameters": {
        "columns": {
          "value": {
            "url": "={{ $json.link }}",
            "title": "={{ $json.title }}",
            "processed_at": "={{ $json.pubDate }}"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "processed_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "processed_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1814987066,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=1814987066",
          "cachedResultName": "processed_blogs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c48eb7d1-bfd0-4e05-b229-466879832ad9",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        176
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 272,
        "content": "## Blog scanner\n\nThis section checks for new blogs automatically and fetches the latest blog from the RSS feed."
      },
      "typeVersion": 1
    },
    {
      "id": "39fba245-2074-416f-90f5-af54f6b28f92",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        176
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 272,
        "content": "## Blog Validation\n\nThis section checks whether the blog is already processed or new. Only new blogs will continue in the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "f9a410a2-baac-4b5f-8b17-47b4e06bbc87",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        176
      ],
      "parameters": {
        "color": 7,
        "height": 272,
        "content": "This section cleans and organizes the blog data into a proper format for the next workflow steps."
      },
      "typeVersion": 1
    },
    {
      "id": "8fa65e65-b36e-4171-82cc-8ae146cbfc3a",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 272,
        "content": "This section saves the processed blog into Google Sheets to avoid duplicate processing in future runs."
      },
      "typeVersion": 1
    },
    {
      "id": "f00e2f42-d3be-406d-a7fe-ff8844af565d",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        384
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 272,
        "content": "This is execute the sub workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "05d51385-8882-4412-b98e-8ded06be273d",
      "name": "Create Employee Personas",
      "type": "n8n-nodes-base.code",
      "position": [
        256,
        992
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      employees: [\n        {\n          role: \"CEO\",\n          tone: \"Visionary and leadership-focused\"\n        },\n        {\n          role: \"HR\",\n          tone: \"Culture and people-focused\"\n        },\n        {\n          role: \"Developer\",\n          tone: \"Technical and engineering-focused\"\n        },\n        {\n          role: \"Marketing\",\n          tone: \"Growth and audience-focused\"\n        }\n      ]\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "5309d133-b876-48b7-965d-863e6d33d829",
      "name": "Split Employee Roles",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        432,
        992
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "employees"
      },
      "typeVersion": 1
    },
    {
      "id": "c6df584a-7780-4e8c-9f30-f056874aea80",
      "name": "Generate AI LinkedIn Posts",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        672,
        992
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "You are an expert LinkedIn content writer.\nCreate engaging professional LinkedIn posts.\nKeep the tone aligned with the employee role.\nMaximum 150 words.\nUse concise formatting.\nDo not use emojis excessively."
            },
            {
              "content": "=Create a LinkedIn post for a {{$json.role}}.\n\nTone:\n{{$json.tone}}\n\nBlog Title:\n{{ $('Blog Detection flow').item.json.title }}\nBlog Content:\n{{ $('Blog Detection flow').item.json.content }}\n\nRequirements:\n- Professional tone\n- Human sounding\n- Engaging hook\n- No hashtags\n- 150 words max"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9f23ec2d-f67c-456b-80b2-7f53b101997e",
      "name": "Format AI Content",
      "type": "n8n-nodes-base.set",
      "position": [
        976,
        992
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4a63b848-9c7e-4fef-bbbe-3bc686263752",
              "name": "generatedPost",
              "type": "string",
              "value": "={{ $json.output[0].content[0].text }}"
            },
            {
              "id": "b9b8003d-2082-4ad9-ac8d-fa415129b698",
              "name": "aiRole",
              "type": "string",
              "value": "={{ $json.output[0].role }}"
            },
            {
              "id": "1752fe05-df56-4cf2-bea8-9d3e0ea0f92f",
              "name": "role",
              "type": "string",
              "value": "={{ $('Split Employee Roles').item.json.role }}"
            },
            {
              "id": "f1e69bbe-d5b7-41c8-a741-ea38ccacbccc",
              "name": "tone",
              "type": "string",
              "value": "={{ $('Split Employee Roles').item.json.tone }}"
            },
            {
              "id": "8d9abc8d-f20a-494f-9087-cb2d7d8a359c",
              "name": "blogTitle",
              "type": "string",
              "value": "={{ $('Blog Detection flow').item.json.title }}"
            },
            {
              "id": "3b554949-7a0d-4f39-8c5f-d4be35068e66",
              "name": "blogUrl",
              "type": "string",
              "value": "={{ $('Blog Detection flow').item.json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b4c20f3f-1113-4deb-9767-8c78b09423c8",
      "name": "Save Generated Posts",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1216,
        992
      ],
      "parameters": {
        "columns": {
          "value": {
            "role": "={{ $json.role }}",
            "tone": "={{ $json.tone }}",
            "status": "Pending",
            "blog_title": "={{ $json.blogTitle }}",
            "created_at": "={{$now}}",
            "generated_post": "={{ $json.generatedPost }}"
          },
          "schema": [
            {
              "id": "role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "blog_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "blog_title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "generated_post",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "generated_post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a34e5310-4b0f-46d0-a038-080c53631370",
      "name": "Create Approval Links",
      "type": "n8n-nodes-base.set",
      "position": [
        1472,
        992
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "bb92c410-e5f2-411b-88f7-ce027b9ae32b",
              "name": "approveUrl",
              "type": "string",
              "value": "={{\"YOUR_N8N_URL_HERE/webhook-test/approve-post?postId=\" + $json.postId + \"&action=approve\"}}\n\n"
            },
            {
              "id": "fa38e39f-0deb-42d4-9acb-91459e8d1db8",
              "name": "rejectUrl",
              "type": "string",
              "value": "={{\"YOUR_N8N_URL_HERE/webhook-test/approve-post?postId=\" + $json.postId + \"&action=reject\"}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c490320f-3d9f-4c65-8d2c-37f971e8e146",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        880
      ],
      "parameters": {
        "color": 7,
        "height": 304,
        "content": "This workflow receives blog content from the Blog Detection workflow for AI content generation."
      },
      "typeVersion": 1
    },
    {
      "id": "54db8439-efdb-4d87-ab8a-d6db69835b01",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        880
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 304,
        "content": "## Employee Persona Setup\n\nThis section creates different employee roles and prepares personalized content generation for each role."
      },
      "typeVersion": 1
    },
    {
      "id": "05910fc5-7569-4184-946b-101cdd449a29",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        880
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 304,
        "content": "## AI Content Generation\n\nThis section uses AI to generate personalized LinkedIn posts based on employee role and blog content."
      },
      "typeVersion": 1
    },
    {
      "id": "74d88a23-105d-4a25-98f9-5f8fab493838",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        880
      ],
      "parameters": {
        "color": 7,
        "height": 304,
        "content": "This section stores all generated LinkedIn posts into Google Sheets for approval tracking."
      },
      "typeVersion": 1
    },
    {
      "id": "3fc8df43-1c08-4775-91ed-3b82452292ae",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        880
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 304,
        "content": "## Approval or Rejection Process\n\nThis section sends approval and rejection links through email for manual review before LinkedIn publishing."
      },
      "typeVersion": 1
    },
    {
      "id": "f5932593-2ed9-4589-a364-411b64bacf2e",
      "name": "Receive Approval or Reject Decision",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -48,
        1952
      ],
      "parameters": {
        "path": "approve-post",
        "options": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "9951ba24-1c1a-4fa7-a763-502e0708d7e9",
      "name": "Fetch Selected Post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        144,
        1952
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.query.postId }}",
              "lookupColumn": "postId"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "ffa3e3c0-d17f-49a6-bbaf-fdcb4b2fad15",
      "name": "Check Approval Status",
      "type": "n8n-nodes-base.if",
      "position": [
        384,
        1952
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "62454f02-a735-4784-b555-b18d999266ad",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('Receive Approval or Reject Decision').item.json.query.action }}",
              "rightValue": "approve"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1d171ec8-f926-4c45-a823-ea14f31c41f4",
      "name": "Update Approved Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        608,
        1856
      ],
      "parameters": {
        "columns": {
          "value": {
            "role": "={{ $json.role }}",
            "tone": "={{ $json.tone }}",
            "postId": "={{ $('Receive Approval or Reject Decision').item.json.query.postId }}",
            "status": "={{ $('Receive Approval or Reject Decision').item.json.query.action }}",
            "blog_title": "={{ $json.blog_title }}",
            "created_at": "={{ $json.created_at }}",
            "generated_post": "={{ $json.generated_post }}"
          },
          "schema": [
            {
              "id": "role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "blog_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "blog_title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "generated_post",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "generated_post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "postId",
              "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": [
            "postId"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "dc98c372-7b09-4f9a-a9f2-93fea2ce0a37",
      "name": "Update Rejected Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        608,
        2048
      ],
      "parameters": {
        "columns": {
          "value": {
            "role": "={{ $json.role }}",
            "tone": "={{ $json.tone }}",
            "postId": "={{ $('Receive Approval or Reject Decision').item.json.query.postId }}",
            "status": "={{ $('Receive Approval or Reject Decision').item.json.query.action }}",
            "blog_title": "={{ $json.blog_title }}",
            "created_at": "={{ $json.created_at }}",
            "generated_post": "={{ $json.generated_post }}"
          },
          "schema": [
            {
              "id": "role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "blog_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "blog_title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "generated_post",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "generated_post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "postId",
              "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": [
            "postId"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0483be86-d625-433d-bb7a-d054cb037ef7",
      "name": "Send Approval Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        880,
        1952
      ],
      "parameters": {
        "options": {},
        "respondWith": "text",
        "responseBody": "Decision Saved Successfully"
      },
      "typeVersion": 1.5
    },
    {
      "id": "ab828085-39e8-45ff-b23c-fa2df18ae126",
      "name": "Fetch Approved LinkedIn Post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1152,
        1952
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "approve",
              "lookupColumn": "status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "8574bdfb-881f-4016-ab17-a3d4ccec04c2",
      "name": "Check Already Published",
      "type": "n8n-nodes-base.if",
      "position": [
        1360,
        1952
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e849634d-e51f-46a3-ab23-ea3f64d77fa7",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.published }}",
              "rightValue": "Yes"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "70e1e709-8935-48de-a60c-20169d748b96",
      "name": "Prepare LinkedIn Content",
      "type": "n8n-nodes-base.set",
      "position": [
        1584,
        1856
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0bbde15c-9094-4e42-a5e1-7ba8bd20331d",
              "name": "generated_post",
              "type": "string",
              "value": "={{ $json.generated_post }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "432400ff-6ad2-402c-b22a-aed38fb6128c",
      "name": "Fetch LinkedIn Profile",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1792,
        1856
      ],
      "parameters": {
        "url": "https://api.linkedin.com/v2/userinfo",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "linkedInOAuth2Api"
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "09f675f8-a9be-4bba-b72f-3d04bf7d31ed",
      "name": "Publish LinkedIn Post",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2016,
        1856
      ],
      "parameters": {
        "url": "https://api.linkedin.com/rest/posts",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true,
              "fullResponse": true
            }
          }
        },
        "jsonBody": "={\n  \"author\": \"urn:li:person:{{ $json.sub }}\",\n  \"commentary\": \"{{ $('Prepare LinkedIn Content').item.json.generated_post \n  .replace(/\"/g, '\\\\\"')\n  .replace(/\\n/g, '\\\\n')\n}}\",\n  \"visibility\": \"PUBLIC\",\n  \"distribution\": {\n    \"feedDistribution\": \"MAIN_FEED\",\n    \"targetEntities\": [],\n    \"thirdPartyDistributionChannels\": []\n  },\n  \"lifecycleState\": \"PUBLISHED\",\n  \"isReshareDisabledByAuthor\": false\n}",
        "sendBody": true,
        "jsonHeaders": "{\n  \"LinkedIn-Version\": \"202505\",\n  \"X-Restli-Protocol-Version\": \"2.0.0\",\n  \"Content-Type\": \"application/json\"\n}",
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "specifyHeaders": "json",
        "nodeCredentialType": "linkedInOAuth2Api"
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "b390da72-03ca-4027-9abb-af500224d4fa",
      "name": "Verify LinkedIn Post Status",
      "type": "n8n-nodes-base.if",
      "position": [
        2208,
        1856
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "63a9092f-380e-43dc-acfc-cba585fdf3b3",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.statusMessage }}",
              "rightValue": "Created"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "6cdd4e05-0661-4808-9236-d754bd8e431a",
      "name": "Mark Post As Published",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2496,
        1696
      ],
      "parameters": {
        "columns": {
          "value": {
            "published": "YES",
            "generated_post": "={{ $('Prepare LinkedIn Content').item.json.generated_post }}"
          },
          "schema": [
            {
              "id": "role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "blog_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "blog_title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "generated_post",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "generated_post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postId",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "postId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "published",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "published",
              "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": [
            "generated_post"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 564615397,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit#gid=564615397",
          "cachedResultName": "generated_posts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0/edit?usp=drivesdk",
          "cachedResultName": "New Order Track"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "4984f16a-0630-4086-93d4-761b4d451976",
      "name": "Send Failure Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        2512,
        2000
      ],
      "parameters": {
        "text": "Alert Post is not created due to some error",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09S57E2JQ2",
          "cachedResultName": "n8n"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "67bfc3ca-cd7f-4af3-951f-04c08e64c5a6",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        1840
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 288,
        "content": "Receives approve or reject action from email links.\nFetches the selected LinkedIn post data from Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "6e6262b3-3a70-48ca-9357-f2f20d81a66a",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        1760
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 464,
        "content": "Checks whether the post is approved or rejected.\nUpdates the approval status inside Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "e3f090d1-70e7-4e1e-8bec-f4d8987c49ba",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1872
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 256,
        "content": "Sends a success response back to the browser after decision is saved."
      },
      "typeVersion": 1
    },
    {
      "id": "0c2a39c1-1045-4186-ba88-2417bae3a19c",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1088,
        1760
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 400,
        "content": "Fetches approved posts and checks whether they were already published.\nPrepares the final LinkedIn post content."
      },
      "typeVersion": 1
    },
    {
      "id": "e0097d91-04d5-4096-839e-766c4c4aceb1",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        1760
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 384,
        "content": "Connects with LinkedIn API and publishes the approved content automatically.\nVerifies whether the post was successfully created."
      },
      "typeVersion": 1
    },
    {
      "id": "3f273d61-bcb4-4143-b1cd-bb8500a0a398",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        1600
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 288,
        "content": "Updates Google Sheets after successful publishing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d7717939-2938-4b9a-9d1d-b125435f4912",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        1920
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 288,
        "content": "Sends Slack alert if LinkedIn posting fails."
      },
      "typeVersion": 1
    },
    {
      "id": "6ea6b2b5-0703-4e19-8444-966a7e5298d9",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -304
      ],
      "parameters": {
        "width": 464,
        "height": 720,
        "content": "## How it works\n\nThis automation system helps manage the complete LinkedIn content workflow automatically.\nFirst, the workflow scans Medium blogs at scheduled intervals and detects new blog posts. New blog details are stored in Google Sheets for tracking.\n\nNext, AI generates personalized LinkedIn posts for different employee roles like CEO, HR, Developer, and Marketing using different tones and writing styles. The generated posts are saved with Pending status and approval emails are sent automatically.\n\nWhen the user clicks Approve or Reject from the email, the workflow updates the status in Google Sheets. If approved, the system checks whether the post is already published and then automatically publishes it on LinkedIn using the LinkedIn API.\n\nAfter successful posting, the workflow updates the published status. If any issue occurs during publishing, a Slack alert is sent for monitoring.\n\n\n## Setup steps\n**1.** Configure the Schedule Trigger and RSS Feed nodes for blog detection.\n**2.** Connect Google Sheets to save processed blogs and generated posts.\n**3.** Configure OpenAI credentials for AI-based LinkedIn content generation.\n**4.** Create employee role-based AI prompts for personalized posts.\n**5.** Configure Gmail to send approval and rejection emails.\n**6.** Setup Webhook nodes to receive approval actions from email links.\n**7.** Configure LinkedIn OAuth credentials for automatic LinkedIn posting.\n**8.** Add Slack integration for failure alerts and workflow monitoring."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "54f5aa5f-1098-4375-8e98-b4e654ad14f0",
  "connections": {
    "Is New Blog?": {
      "main": [
        [
          {
            "node": "Format Blog Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Blog Data": {
      "main": [
        [
          {
            "node": "Save Processed Blog",
            "type": "main",
            "index": 0
          },
          {
            "node": " AI Content Personalization Engine",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format AI Content": {
      "main": [
        [
          {
            "node": "Save Generated Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit Latest Blog": {
      "main": [
        [
          {
            "node": "Check Existing Blog",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Latest Blogs": {
      "main": [
        [
          {
            "node": "Limit Latest Blog",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Blog Detection flow": {
      "main": [
        [
          {
            "node": "Create Employee Personas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Blog Scan Scheduler": {
      "main": [
        [
          {
            "node": "Fetch Latest Blogs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Existing Blog": {
      "main": [
        [
          {
            "node": "Is New Blog?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Selected Post": {
      "main": [
        [
          {
            "node": "Check Approval Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Generated Posts": {
      "main": [
        [
          {
            "node": "Create Approval Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Employee Roles": {
      "main": [
        [
          {
            "node": "Generate AI LinkedIn Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Approval Status": {
      "main": [
        [
          {
            "node": "Update Approved Status",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Rejected Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Approval Links": {
      "main": [
        [
          {
            "node": "Send request for approval & reject",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish LinkedIn Post": {
      "main": [
        [
          {
            "node": "Verify LinkedIn Post Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch LinkedIn Profile": {
      "main": [
        [
          {
            "node": "Publish LinkedIn Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Approval Response": {
      "main": [
        [
          {
            "node": "Fetch Approved LinkedIn Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Approved Status": {
      "main": [
        [
          {
            "node": "Send Approval Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Rejected Status": {
      "main": [
        [
          {
            "node": "Send Approval Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Already Published": {
      "main": [
        [
          {
            "node": "Prepare LinkedIn Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Employee Personas": {
      "main": [
        [
          {
            "node": "Split Employee Roles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare LinkedIn Content": {
      "main": [
        [
          {
            "node": "Fetch LinkedIn Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate AI LinkedIn Posts": {
      "main": [
        [
          {
            "node": "Format AI Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify LinkedIn Post Status": {
      "main": [
        [
          {
            "node": "Mark Post As Published",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Failure Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Approved LinkedIn Post": {
      "main": [
        [
          {
            "node": "Check Already Published",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Approval or Reject Decision": {
      "main": [
        [
          {
            "node": "Fetch Selected Post",
            "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 scans an RSS blog feed on a schedule, logs newly found posts to Google Sheets, uses OpenAI to generate role-based LinkedIn drafts, and emails approval links via Gmail; approved drafts are then published to LinkedIn and tracked in Google Sheets, with Slack alerts on…

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

Whether you’re a product manager, developer, or simply curious about workflow automation, you’re in the right place. This n8n workflow is designed to help you streamline and automate your social media

Output Parser Structured, OpenAI Chat, LinkedIn +8
AI & RAG

Revolutionize your recruitment process with intelligent AI-driven candidate screening that evaluates resumes, scores applicants, and automatically routes them based on fit - saving 10-15 hours per wee

HTTP Request, OpenAI, Agent +6
AI & RAG

Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.

Tool Think, Tool Calculator, Agent Tool +18
AI & RAG

Inbox Guardian. Uses gmailTrigger, lmChatOpenAi, agent, textClassifier. Event-driven trigger; 66 nodes.

Gmail Trigger, OpenAI Chat, Agent +12
AI & RAG

YouTube Strategist. Uses formTrigger, splitOut, splitInBatches, agent. Event-driven trigger; 50 nodes.

Form Trigger, Agent, OpenRouter Chat +5