This workflow follows the Chainllm → 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 →
{
"name": "My workflow 14",
"nodes": [
{
"parameters": {
"content": "# \ud83d\udcda [Join our Skool community for support, premium content and more!](https://www.skool.com/ai-agents-az/about?w3)\n\n## Be part of a growing community and help us create more content like this",
"height": 220,
"width": 860,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
760,
-300
],
"id": "44f740f1-7849-4d41-bf55-57bb89ad4c08",
"name": "Sticky Note6"
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
20,
200
],
"id": "fa71cf61-6295-4c9e-a3da-3cb97eb1702a",
"name": "When clicking \u2018Test workflow\u2019"
},
{
"parameters": {
"url": "https://www.artificialintelligence-news.com/feed/",
"options": {}
},
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.1,
"position": [
760,
200
],
"id": "044501f8-aab3-4e4f-8fe0-083a933539ce",
"name": "RSS Read"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c5321485-5348-4ca3-83af-3daf61b150d0",
"name": "title",
"value": "={{ $json.title }}",
"type": "string"
},
{
"id": "705a2b08-41fa-4764-b533-c855249eac53",
"name": "link",
"value": "={{ $json.link }}",
"type": "string"
},
{
"id": "b56b4d7d-9b6d-468f-a8c6-2ba9f2b13414",
"name": "contentSnippet",
"value": "={{ $json.contentSnippet }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
980,
200
],
"id": "d7042c29-2cb2-4edf-9522-749481418d35",
"name": "Edit Fields"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "news",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
1200,
200
],
"id": "fa734fc9-a226-47ad-8564-e026354c60f3",
"name": "Aggregate"
},
{
"parameters": {
"promptType": "define",
"text": "=I'm creating a weekly digest from the latest AI articles for SMB executives. \nHelp me to pick 5 articles worth reading for these executives.\nOnly pick the ones that would be interesting for small and medium business owners.\n\n```\n{{ JSON.stringify($json.news) }}\n```",
"hasOutputParser": true
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.5,
"position": [
1420,
200
],
"id": "b954ac22-fc5f-402d-a5bc-3e819488d07b",
"name": "Basic LLM Chain"
},
{
"parameters": {
"jsonSchemaExample": "{\n\t\"articles\": [{\n \"title\": \"\",\n \"link\": \"\"\n }]\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
1700,
440
],
"id": "434fe5dc-6a92-4289-b32d-9af01447849a",
"name": "Structured Output Parser"
},
{
"parameters": {
"fieldToSplitOut": "output.articles",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
760,
660
],
"id": "7d133cb6-89b5-45ac-b7f2-659ae023da0a",
"name": "Split Out"
},
{
"parameters": {
"url": "={{ $json.link }}",
"options": {
"redirect": {
"redirect": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
980,
660
],
"id": "2b83631b-fbce-4196-b19d-130cc7fadceb",
"name": "HTTP Request"
},
{
"parameters": {
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "article",
"cssSelector": ".elementor-widget-theme-post-content"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.html",
"typeVersion": 1.2,
"position": [
1200,
660
],
"id": "1768254d-cff9-4e7b-9be6-1e903a412f18",
"name": "HTML"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "articles",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
1420,
660
],
"id": "d2bc9444-75c7-49ac-bac0-1be960774bbf",
"name": "Aggregate1"
},
{
"parameters": {
"promptType": "define",
"text": "=Create a LinkedIn post with the title \"Here is everything that happened in AI this week\" and use the articles below to create an engaging content for SMB business owners.\n\n<instructions>\n- Don't use any markdown for the LinkedIn post as it's not supported (no bold, heading etc.) Use clear text for formatting.\n- Make sure to add the link to the article under its summary.\n- Add a summary of the post (hook) to the beginning of the post. It should consist of 2 short sentences, and needs to grab the attention. Make sure to mention AI in it.\n- also make sure the news summaries explains why it's important for SMB business owners, make it one sentence.\n</instructions>\n\n<articles>\n{{ JSON.stringify($json.articles) }}\n</articles>"
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.5,
"position": [
1000,
1120
],
"id": "49d34a49-4cd6-4ea8-a4f4-e734284e2d25",
"name": "Basic LLM Chain1"
},
{
"parameters": {
"promptType": "define",
"text": "=Rewrite the following linkedin post to match the style of the example post.\nMake sure to keep it as plain text.\n\n<ExamplePost>\n{{ $('Writing style').item.json.your_style }}\n</ExamplePost>\n\n<Article>\n{{ $json.text }}\n</Article>"
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.5,
"position": [
1360,
1120
],
"id": "ec4bd9df-ebaf-4149-b37d-2d56a4fb6f01",
"name": "Basic LLM Chain2"
},
{
"parameters": {
"operation": "sendAndWait",
"subject": "[action required] LinkedIn post approval is needed",
"message": "={{ $json.linkedin_post }}",
"responseType": "customForm",
"formFields": {
"values": [
{
"fieldLabel": "Do you approve the post?",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "yes"
},
{
"option": "no - I'll add my change requests below"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Change requests",
"fieldType": "textarea",
"placeholder": "Add your change requests here"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
1580,
1600
],
"id": "bc901fdb-d236-472b-a599-a529b594848d",
"name": "Gmail",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "298e856c-87fa-4751-a235-eabed33f0f43",
"leftValue": "={{ $json.data['Do you approve the post?'] }}",
"rightValue": "yes",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
1880,
1600
],
"id": "acaae32d-9f9c-44e1-85db-f5762113904e",
"name": "If"
},
{
"parameters": {
"promptType": "define",
"text": "=Apply the modification requests on the following LinkedIn post. Besides applying the reqested modifications, return the same linkedin post.\n\nLinkedIn post:\n```\n{{ $('Edit Fields1').item.json.linkedin_post }}\n```\n\nChange requests:\n{{ $json.data['Change requests'] }}",
"hasOutputParser": true
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.5,
"position": [
1500,
1960
],
"id": "7610541d-8dd4-482f-87c2-9057414e8741",
"name": "Basic LLM Chain3"
},
{
"parameters": {
"jsonSchemaExample": "{\n\t\"modified_post\": \"\"\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
1740,
2200
],
"id": "2bc3be9f-9be4-49b6-8011-e9fa30106d19",
"name": "Structured Output Parser1"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a593cd1a-0603-4b52-9d1f-2f2f717651ff",
"name": "linkedin_post",
"value": "={{ $json.text }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1340,
1600
],
"id": "fe4b7db0-643e-4dfa-9356-d1d339eb4b0e",
"name": "Edit Fields1"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "f2075dc4-d6b0-46d9-aad8-247c054432ec",
"name": "text",
"value": "={{ $json.output.modified_post }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1880,
1960
],
"id": "6585ca7f-d75b-479b-b3a3-c3c47a8a8d1d",
"name": "Edit Fields2"
},
{
"parameters": {
"person": "F_0mve6gG0",
"text": "={{ $('Edit Fields1').item.json.linkedin_post }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.linkedIn",
"typeVersion": 1,
"position": [
2460,
1580
],
"id": "39032942-25e7-453a-b507-f1c08799a8d8",
"name": "LinkedIn",
"credentials": {
"linkedInOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4o",
"mode": "list",
"cachedResultName": "gpt-4o"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
980,
1620
],
"id": "b3829abf-008d-4703-9376-e39cea58767e",
"name": "gpt-4o",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
660,
1600
],
"id": "324c2030-346b-40d0-8162-e3b9cf0ff123",
"name": "gpt-4o-mini",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "# Gather news articles",
"height": 80,
"width": 920
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
760,
80
],
"id": "6d341009-6e49-4453-8b03-fcb50d015629",
"name": "Sticky Note"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "3474133c-bf58-4e48-aa50-bcebd919dc5b",
"name": "your_style",
"value": "=Dude... Firecrawl is amazing. Turn any website into LLM-ready data? Yes please. I just made a llms-full.txt of my website (all 80 blog posts! \ud83e\udd75) using a free account.\n\nI then threw that 250k token .txt file into Gemini for some analysis to...\n- review the ontology of my work and see the big picture\n- psychoanalyze myself (lol of course)\n\namazing, after that I was both feeling proud of myself (\ud83e\udd29) and self-conscious of how obvious my psychological profile is from my published work (\ud83d\ude05) so I figured I better make some real progress while I had all this data and an open chat with plenty of headroom in Gemini's sweet sweet 2m context window.\n\nSo I exported my google search console data for the past 3 months to add some analytical context to the content, and threw that into gemini too. Now we're up to ~300k tokens.\n\nI asked it to analyze my SEO and deliver a prioritized plan for improving my strategy.\n\nAnd not only did it give me a really thoughtful overview of my content map, it also was ready to give me an operational plan for improving the overall footprint, my linking strategies, etc. it also gave me some great non-obvious recommendations.\n\nFrankly, this has proven to be extremely effective. Just a year or two ago, this level of SEO analysis & strategic planning would easily have cost me a couple thousand bucks.\n\nBut now... I can do it for free with Claude Desktop + Firecrawl's MCP server, and Gemini 2.0 for 2M context window. \n\nNow... I just need to implement the 2 week plan it wrote for capitalizing on my top performing blogs it affectionately titled \"Stop The Bleeding\" lol, I appreciate Gemini's sense of urgency for improving my funnel.\n\nIt's a pity Squarespace is so poorly positioned for AI augmentation. I 100% have to move away from this platform to something that I can power agentically. \n\nI've thought about Ghost CMS, or building something myself with Lovable. But it's hard to prioritize that at the moment. It's a big lift to migrate a website to a new platform, even in this day and age. There's an opportunity in there somewhere for a hustler.\n\nAnyways, go play with Firecrawl. Well worth it. And if you\u2019ve got this far and you don\u2019t follow me yet\u2026 well\u2026 you know what to do",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
340,
200
],
"id": "d1cd7039-78a1-4af4-a8d6-47be39f06b95",
"name": "Writing style"
},
{
"parameters": {
"content": "# Edit your writing style",
"height": 340,
"width": 190,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
300,
20
],
"id": "f0ff21a2-fcc1-4496-b96b-88b343b8e5cf",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "# Download article content",
"height": 80,
"width": 760
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
760,
540
],
"id": "78d8b4bf-b3e9-4782-a698-5622384f5a70",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "# Create LinkedIn post content",
"height": 80,
"width": 620
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1000,
1000
],
"id": "1e656e73-13c3-43f3-b9a2-7cd41cd10502",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "# Approval process",
"height": 80,
"width": 640
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1340,
1480
],
"id": "f89384ea-5216-4263-a008-a484943fc101",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "# Edit the post",
"height": 80,
"width": 480
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1500,
1840
],
"id": "8d29fc25-cd86-4d1e-ab0a-ce5bf505403e",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "# Post to LinkedIn",
"height": 260,
"width": 320,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2420,
1500
],
"id": "6d7c6281-71c8-4e3b-b9db-714472aedc34",
"name": "Sticky Note7"
}
],
"connections": {
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Writing style",
"type": "main",
"index": 0
}
]
]
},
"RSS Read": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Basic LLM Chain",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Basic LLM Chain": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "HTML",
"type": "main",
"index": 0
}
]
]
},
"HTML": {
"main": [
[
{
"node": "Aggregate1",
"type": "main",
"index": 0
}
]
]
},
"Aggregate1": {
"main": [
[
{
"node": "Basic LLM Chain1",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain1": {
"main": [
[
{
"node": "Basic LLM Chain2",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain2": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"Gmail": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "LinkedIn",
"type": "main",
"index": 0
}
],
[
{
"node": "Basic LLM Chain3",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Basic LLM Chain3",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Edit Fields1": {
"main": [
[
{
"node": "Gmail",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain3": {
"main": [
[
{
"node": "Edit Fields2",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields2": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"gpt-4o": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain2",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Basic LLM Chain3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"gpt-4o-mini": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain1",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Writing style": {
"main": [
[
{
"node": "RSS Read",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "0aaa24f5-4101-4c5f-8857-427722e96007",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "ucEHSGg73IPzhX1n",
"tags": []
}
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.
gmailOAuth2linkedInOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
My workflow 14. Uses rssFeedRead, chainLlm, outputParserStructured, httpRequest. Event-driven trigger; 30 nodes.
Source: https://github.com/Ker102/Kaelux-Automate/blob/main/data/workflows/episodes/episode_3_linkedin_hitl.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
My workflow 14. Uses lmChatOpenAi, outputParserStructured, rssFeedRead, httpRequest. Event-driven trigger; 63 nodes.
Typeform IA - YT. Uses typeformTrigger, agent, lmChatOpenAi, toolWorkflow. Event-driven trigger; 75 nodes.
Ultimate Blogblizt is a powerhouse workflow that solves the tedious task of crafting and publishing SEO-optimized tech blog posts. It integrates AI models (OpenAI, Google Gemini), WordPress, and multi
This workflow is perfect for: Agile development teams and project managers who need to quickly set up Jira projects Product managers who want to convert feature ideas into structured user stories and
This workflow creates an automated system for monitoring and receiving notifications about new videos from your favorite YouTube channels through RSS feeds, with customizable email and Telegram notifi