AutomationFlowsAI & RAG › Schedule Linkedin Posts with AI Content Generation and Telegram Approval

Schedule Linkedin Posts with AI Content Generation and Telegram Approval

ByChad McGreanor @cmcgreanor on n8n.io

This workflow automates LinkedIn posts using OpenAI. The prompts are stored in the workflow and can be customized as needed to fit your needs. The workflow uses a combination of a Schedule Trigger, some code that determines what day of the week it is (no posting Friday -…

Cron / scheduled trigger★★★★☆ complexityAI-powered18 nodesOpenAITelegramLinkedIn
AI & RAG Trigger: Cron / scheduled Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the LinkedIn → OpenAI 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": "7WwPC5OOORokn8IZ",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "LinkedIn Automation",
  "tags": [],
  "nodes": [
    {
      "id": "c75ea360-ed01-4aee-bbce-d44889c1105b",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1024,
        -240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1-4"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b839fc4f-66db-48dc-ad14-61a28b245753",
      "name": "Prompts",
      "type": "n8n-nodes-base.set",
      "position": [
        -464,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5a22e09b-59ba-4c9d-98a4-1558025fe417",
              "name": "prompt1",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Do not use Markdown or any formatting symbols (such as ** for bold or _ for italics). Write plain text only.\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nWrite a thought leadership post about the future of AI in CX. Keep it under 150 words."
            },
            {
              "id": "5e4a38a3-9ab6-4eaa-a670-e0403d1f5593",
              "name": "prompt2",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Do not use Markdown or any formatting symbols (such as ** for bold or _ for italics). Write plain text only.\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nCreate a LinkedIn post about how AI is transforming customer support. Make it conversational."
            },
            {
              "id": "26a18c26-dd92-4288-90ba-2b6c0ec239a0",
              "name": "prompt3",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nDraft a short, engaging post about the importance of integrating AI platforms for better CX insights."
            },
            {
              "id": "f1f1c721-2e48-4243-9094-3b9b264ed680",
              "name": "prompt4",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Do not use Markdown or any formatting symbols (such as ** for bold or _ for italics). Write plain text only.\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nWrite a professional yet informal post about AI trends for customer engagement."
            },
            {
              "id": "3f5c12e4-769b-4be7-ba32-a88f9f714325",
              "name": "prompt5",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Do not use Markdown or any formatting symbols (such as ** for bold or _ for italics). Write plain text only.\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nShare insights on why AI-driven data is becoming critical for CX leaders in 2025."
            },
            {
              "id": "0d689205-46d9-46de-b296-056c7c5832f0",
              "name": "Prompt6",
              "type": "string",
              "value": "Create engaging, thought-provoking LinkedIn posts that drive engagement, increase followers, and establish authority in UCaaS, AI, Contact Center, and tech business spaces.\n\nTone & Style:\n- Conversational, but professional\n- Human\u2014not robotic or overly polished\n- Incorporates strategic questions to drive comments\n- Uses emojis thoughtfully to add personality, not clutter\n- Mixes storytelling, insights, trends, and opinions\n- Do not use Markdown or any formatting symbols (such as ** for bold or _ for italics). Write plain text only.\n- Don't summarize the type of post; this is going straight to LinkedIn, and I won't be editing it. Don't add \"post format\", \"tone\", \"focus\", etc.\n- Remember prior articles and focus on not reusing similar topics frequently\n\n1.Start with a strong hook or bold statement\n2.Share insight, observation, or story (1-3 short paragraphs max)\n3.End with a question or call-to-engage\n4.Rotate between formats: POV, predictions, lessons, thought-starters, fun/engagement posts\n\nContextual Guidance:\n-Emphasize trends shaping the industry (AI, CX, UCaaS)\n-Show awareness of how AI is changing work but balance hype with practicality\n-Encourage industry peers to comment by asking reflective or polarizing questions\n\nAvoid sounding AI-generated or generic\u2014write like someone who\u2019s been in the meetings, in the trenches.\nIncorporate emojis to keep it visually engaging but not juvenile.\n\nThe post should feel like it's written by a tech-savvy executive or thought leader who understands current trends in AI, contact centers, and unified communications.\n\nWrite a post around the CX, CX AI, and UCaaS industry from a business perspective. Use knowledge from the web to stay up to date."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b1949530-230f-4fad-9c51-cd0e300ad1f5",
      "name": "Random Prompt",
      "type": "n8n-nodes-base.code",
      "position": [
        -320,
        -240
      ],
      "parameters": {
        "jsCode": "const prompts = [\n  $json.prompt1,\n  $json.prompt2,\n  $json.prompt3,\n  $json.prompt4,\n  $json.prompt5,\n  $json.prompt6\n];\nconst randomIndex = Math.floor(Math.random() * prompts.length);\nreturn [{ json: { selectedPrompt: prompts[randomIndex] } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "3a95e7c1-471d-46a9-8c96-71e83ce06499",
      "name": "OpenAI Message",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -160,
        -64
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "={{ $('Random Prompt').item.json.selectedPrompt }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "62715d75-82de-47b9-96fd-663cdc52558f",
      "name": "Telegram Approved",
      "type": "n8n-nodes-base.if",
      "position": [
        544,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c668e57a-7239-4ba5-94e3-b988ba801a5e",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2acda2bb-4a00-453a-8b17-b2ea1777b0c9",
      "name": "Random Time",
      "type": "n8n-nodes-base.code",
      "position": [
        208,
        -64
      ],
      "parameters": {
        "jsCode": "const times = ['09:00', '11:00', '15:00']; // Central Time Options\nconst selectedTime = times[Math.floor(Math.random() * times.length)];\n\n// Extract hours and minutes\nconst [hour, minute] = selectedTime.split(':').map(Number);\n\n// Get current date\nconst now = new Date();\n\n// Create a UTC Date corresponding to selected Central Time\n// Central is UTC-5\nconst postDateUTC = new Date(Date.UTC(\n    now.getFullYear(),\n    now.getMonth(),\n    now.getDate(),\n    hour + 5, // Convert from Central to UTC\n    minute,\n    0,\n    0\n));\n\nreturn [{\n    json: {\n        postTimeCentral: selectedTime,\n        postTimeUTC_ISO: postDateUTC.toISOString()\n    }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "cb914251-dc4a-48b5-af92-6b91e2259304",
      "name": "Send message and wait for response",
      "type": "n8n-nodes-base.telegram",
      "notes": "Here is your AI-generated LinkedIn post draft:\n\n{{ $('OpenAI Message').item.json.message.content }}\n\nApprove?",
      "position": [
        368,
        -288
      ],
      "parameters": {
        "chatId": "",
        "message": "=Here is your AI-generated LinkedIn post draft:\n\n{{ $('OpenAI Message').item.json.message.content }}\n\nScheduled Post Time (Central Time): {{ $json.postTimeCentral }}\n\nApprove?\n",
        "options": {},
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c770a05a-41bf-4934-89d5-490cb0636d37",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -800,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f132e39a-d6e8-43ab-a476-41a0b1c7bba4",
      "name": "Create a post",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        1104,
        -96
      ],
      "parameters": {
        "text": "={{ $('OpenAI Message').item.json.message.content }}",
        "person": "nDVoCxt9jH",
        "additionalFields": {}
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "acec4d48-7d0b-4867-b0ed-a59128b1184a",
      "name": "Notify Post Active",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1312,
        -96
      ],
      "parameters": {
        "text": "Personal LinkedIn Post Active",
        "chatId": "123456789",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6231c53d-97df-4f81-8a2f-7a3cf1709fc5",
      "name": "Check Day",
      "type": "n8n-nodes-base.if",
      "position": [
        -576,
        -240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a347036c-523f-44a1-ba1b-01b5fa002018",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{$json[\"skipToday\"]}}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ca54dec2-58cd-4d29-a18a-6300eeccc367",
      "name": "Wait for Time Selected",
      "type": "n8n-nodes-base.wait",
      "notes": "At Specified Time expression\n\n{{ new Date().toISOString().split('T')[0] + 'T' + $('Random Time').item.json.postTime + ':00Z' }}\n\nTo test change to wait for 5 seconds then revert back",
      "position": [
        832,
        -96
      ],
      "parameters": {
        "resume": "specificTime",
        "dateTime": "={{ $('Random Time').item.json.postTimeUTC_ISO }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7f8e996d-15c8-4696-8020-53d93cf44eb0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -112
      ],
      "parameters": {
        "content": "The schdule trigger checks to see if the time is 8AM"
      },
      "typeVersion": 1
    },
    {
      "id": "3df48a12-094f-4b27-9ef3-7730846e8781",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        -432
      ],
      "parameters": {
        "content": "Check to see if this is a day we want to run the workflow. We are set to avoid Friday-Sunday. We also convert UTC to Central Time"
      },
      "typeVersion": 1
    },
    {
      "id": "f78ec2b0-8a6d-471b-8e34-21c9ddd3112f",
      "name": "Get Day",
      "type": "n8n-nodes-base.code",
      "position": [
        -800,
        -240
      ],
      "parameters": {
        "jsCode": "const now = new Date();\nconst utcDay = now.getUTCDay(); // Sunday = 0, Saturday = 6\n\n// Convert UTC day to Central time (-5 hours)\nconst utcHour = now.getUTCHours();\nconst centralHour = utcHour - 5;\n\n// If converting to previous day (before midnight Central)\nlet centralDay = utcDay;\nif (centralHour < 0) {\n  centralDay = utcDay - 1;\n  if (centralDay < 0) centralDay = 6; // Wrap Sunday (0) back to Saturday (6)\n}\n\nconst skipDays = [0, 5, 6]; // Sunday, Friday, Saturday\nconsole.log('UTC Day:', utcDay);\nconsole.log('Central Day:', centralDay);\nreturn [{ json: { skipToday: skipDays.includes(centralDay) } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "2a0683bd-5082-43ef-941e-3917b64fd698",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        176
      ],
      "parameters": {
        "content": "Set your OpenAI prompts to set your LinkedIn post."
      },
      "typeVersion": 1
    },
    {
      "id": "6e56c087-40ad-45d8-a9da-d215bf75994b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -416
      ],
      "parameters": {
        "content": "Select a random prompt so that the posts look unique."
      },
      "typeVersion": 1
    },
    {
      "id": "c4964528-aab1-4f5a-a715-b96ef7df15aa",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        96
      ],
      "parameters": {
        "content": "Select a Random Time"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ad415e52-4c10-4d59-a26e-b4fb09f4897b",
  "connections": {
    "Get Day": {
      "main": [
        [
          {
            "node": "Check Day",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prompts": {
      "main": [
        [
          {
            "node": "Random Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Day": {
      "main": [
        [],
        [
          {
            "node": "Prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Random Time": {
      "main": [
        [
          {
            "node": "Send message and wait for response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a post": {
      "main": [
        [
          {
            "node": "Notify Post Active",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Random Prompt": {
      "main": [
        [
          {
            "node": "OpenAI Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Message": {
      "main": [
        [
          {
            "node": "Random Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Day",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Approved": {
      "main": [
        [
          {
            "node": "Wait for Time Selected",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Wait for Time Selected": {
      "main": [
        [
          {
            "node": "Create a post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message and wait for response": {
      "main": [
        [
          {
            "node": "Telegram Approved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get Day",
            "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 automates LinkedIn posts using OpenAI. The prompts are stored in the workflow and can be customized as needed to fit your needs. The workflow uses a combination of a Schedule Trigger, some code that determines what day of the week it is (no posting Friday -…

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

AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets

Google Sheets, XML, HTTP Request +3
AI & RAG

Overview This is a production-grade, fully automated stock analysis system built entirely in n8n. It combines institutional-level financial analysis, dual AI model consensus, and a self-improving back

Google Sheets, XML, HTTP Request +3
AI & RAG

This workflow enables the automatic and regular tracking of competitors' Instagram Reels, providing rich insights for each video (summary, topic, hook, angles, tags, etc) through ChatGPT, and storing

Google Sheets, Telegram, @Apify/N8N Nodes Apify +1
AI & RAG

A professional AI equity analysis automation built on n8n that transforms structured financial data and real-time news into disciplined, risk-adjusted price targets and actionable BUY/HOLD/SELL signal

Google Sheets, OpenAI, XML +3
AI & RAG

AI Animated Shorts Factory (9:16) - 10/day - 5 Characters - TG Approve - YT Upload. Uses dataStore, httpRequest, openAi, telegram. Scheduled trigger; 40 nodes.

Data Store, HTTP Request, OpenAI +3