This workflow corresponds to n8n.io template #7310 — we link there as the canonical source.
This workflow follows the Chainllm → HTTP Request 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 →
{
"nodes": [
{
"id": "2cda8e96-8faf-4a48-8758-0798b7d5214d",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-688,
-48
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "6a713237-fa9f-43b8-a141-7214fc0967d0",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
0,
-48
],
"parameters": {
"options": {
"destinationFieldName": "post"
},
"fieldToSplitOut": "posts"
},
"typeVersion": 1
},
{
"id": "4e96a2f8-8e0e-4796-a95c-b203a24a7935",
"name": "Fetch feed item HTML",
"type": "n8n-nodes-base.html",
"position": [
-272,
-48
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "posts",
"cssSelector": "article.item",
"returnArray": true,
"returnValue": "html"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4f8730da-4796-43d4-b2db-742cf59de1a1",
"name": "Fetch n8n blog feed",
"type": "n8n-nodes-base.httpRequest",
"position": [
-480,
-48
],
"parameters": {
"url": "https://blog.n8n.io/",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "308446a4-b9eb-4fee-b722-bb1e5830def5",
"name": "Extract Title,Link+Tag",
"type": "n8n-nodes-base.html",
"position": [
208,
-48
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"dataPropertyName": "post",
"extractionValues": {
"values": [
{
"key": "link",
"attribute": "href",
"cssSelector": ".item-title a",
"returnValue": "attribute"
},
{
"key": "title",
"cssSelector": ".item-title a"
},
{
"key": "tags",
"cssSelector": ".item-tags a"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "ae3ffdda-fc62-47c0-95e7-d582d0689ca0",
"name": "Fetch Article HTML",
"type": "n8n-nodes-base.httpRequest",
"position": [
624,
-48
],
"parameters": {
"url": "={{ $json.articleUrl }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "21cf0d92-ea1e-41d7-9a25-87cd54f30e6e",
"name": "Extract publishing datetime",
"type": "n8n-nodes-base.html",
"position": [
832,
-48
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "published",
"attribute": "content",
"cssSelector": "meta[property=\"article:published_time\"]",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "2c42b3fc-dcd8-4a9d-ad87-569bfe9a442f",
"name": "Post from last 24hrs?",
"type": "n8n-nodes-base.if",
"position": [
1040,
-48
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "778c01e9-a6f4-442f-ad27-301ba91ad0f1",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ (new Date($('Schedule Trigger').item.json.timestamp) - new Date($json.published)) / (1000 * 60 * 60) <= 480 }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a5ce91f5-f19f-4b18-bfc9-3d5208b61234",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1536,
96
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {},
"typeVersion": 1.2
},
{
"id": "8d77d4d4-3f70-43fb-9b29-5e44a05b32f1",
"name": "Summarize Article",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1472,
-48
],
"parameters": {
"text": "={{ $json.data }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "You will be passed a scraped article from a company blog. Please summarize it to highlight key topics, news, trends, or best practices. Make sure to use markdown format in your response!"
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "6748104e-d2e5-433d-92a5-8fa4655e2130",
"name": "Draft LinkedIn Post",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-128,
576
],
"parameters": {
"text": "={{ $('Fetch Article (LLM-friendly)').item.json.data }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "={{ $json.prompt }}"
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "92674731-aaba-4b22-bc40-d92f1e14ef49",
"name": "Article link",
"type": "n8n-nodes-base.set",
"position": [
416,
-48
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c1797d7f-2a80-438a-8e87-2c6ebce0c3cf",
"name": "articleUrl",
"type": "string",
"value": "=https://blog.n8n.io{{ $json.link }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "ad0e92d0-3b01-4868-af5c-4934f35ee2e5",
"name": "Create a post",
"type": "n8n-nodes-base.linkedIn",
"position": [
1712,
976
],
"parameters": {
"text": "={{ $json.responseValues.postDraft.value }}",
"person": "=",
"additionalFields": {
"title": "={{ $('Extract Title,Link+Tag').item.json.title }}",
"originalUrl": "={{ $('Article link').item.json.articleUrl }}"
},
"shareMediaCategory": "ARTICLE"
},
"credentials": {},
"typeVersion": 1
},
{
"id": "1cff8341-9cde-4230-9741-c245996bdd58",
"name": "Set Initial Prompt",
"type": "n8n-nodes-base.set",
"position": [
-336,
576
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0a995978-dc24-47d9-82d7-9e8b6cff072b",
"name": "prompt",
"type": "string",
"value": "You will be passed a scraped article from a company blog. I'm an influencer for their product and will write a LinkedIn post for every news that is coming out. Please write an engaging post based on the article."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d3378b04-c420-4b8b-a858-ee5dc24efc9c",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-96,
736
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {},
"typeVersion": 1.2
},
{
"id": "9919b3b0-fb0b-4127-81c5-9ae5b016ffb7",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-704,
960
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "ba163d4f-6ce9-4406-b724-b91c325056aa",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
464,
560
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Approved",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "eb5d8644-4523-45b1-bda0-4864b9818805",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.response }}",
"rightValue": "approved"
}
]
},
"renameOutput": true
},
{
"outputKey": "Rejected",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2f338ad5-ae15-4750-b41d-5864640999c9",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.response }}",
"rightValue": "rejected"
}
]
},
"renameOutput": true
},
{
"outputKey": "Retry",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "746224d7-8a61-412e-8d83-8ff15d895857",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.type }}",
"rightValue": "chat"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "81bbc886-1298-4f59-bbcd-63ce4fb79e4c",
"name": "Retry",
"type": "n8n-nodes-base.set",
"position": [
608,
816
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "622c3ac0-d1e4-4a3f-aff2-3636eb1af992",
"name": "prompt",
"type": "string",
"value": "={{ $json.messages[0].content }}"
},
{
"id": "4ed769bf-cf03-4d5c-b582-fd0bd601e4a3",
"name": "reviewToUpdate",
"type": "string",
"value": "={{ $json.reviewId }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f7b67b9c-0899-4861-b6fb-8c12f474aeb7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-192
],
"parameters": {
"width": 256,
"height": 128,
"content": "### ToDo\nChange to `<=24`\nSet to `480` only for testing so you see posts"
},
"typeVersion": 1
},
{
"id": "e5ce456f-045a-4431-8f13-75b6fc5b2562",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-752,
-256
],
"parameters": {
"color": 7,
"width": 640,
"height": 464,
"content": "## Fetch n8n blog feed\nReads the n8n blog page every day and extracts the HTML of the article items"
},
"typeVersion": 1
},
{
"id": "a807957f-a767-4997-8212-6a0f114a3c96",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-256
],
"parameters": {
"color": 7,
"width": 1824,
"height": 464,
"content": "## Fetch each article\nSplit out the article list into multiple items. Extracts the title, link and tags from an article's HTML snippet.\nAlso check if the publishing time is within the last 24 hours so that our daily workflow run only picks up each article once.\nFinally, we use an LLM to summarize the article based on a more LLM-friendly version of the page that we get from a free Jina.ai scraping service."
},
"typeVersion": 1
},
{
"id": "0e4293a5-5d0d-430d-a263-0550911f84e6",
"name": "Fetch Article (LLM-friendly)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1296,
-48
],
"parameters": {
"url": "=https://r.jina.ai/{{ $('Article link').item.json.articleUrl }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "296b4ffa-1cce-4c37-bc6e-d5ebf6e23cff",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-736,
336
],
"parameters": {
"color": 7,
"width": 288,
"height": 880,
"content": "## Loop over items\nIn case there are multiple new articles picked up, we need to process them one-by-one in a loop since we can always only wait for a single human review at a time ([Read about alternative approaches here](https://docs.gotohuman.com/Integrations/n8n#multiple-items-input))"
},
"typeVersion": 1
},
{
"id": "04e39ab4-deee-42ce-b276-ee6b51a79940",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
336
],
"parameters": {
"color": 7,
"width": 1200,
"height": 880,
"content": "## Create LinkedIn Post with a Human in the Loop\nWe let the LLM draft a post based on the article and send it to **gotoHuman** for human review together with all relevant context.\nIn gotoHuman, the reviewer can manually edit the draft or ask for a retry / edit the prompt (Retries loop back to the AI draft node)."
},
"typeVersion": 1
},
{
"id": "2836897f-3121-43d0-a0a3-17dfcff72dd0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1632,
768
],
"parameters": {
"color": 7,
"width": 288,
"height": 448,
"content": "## Publish approved post\nAfter human approval, submit to LinkedIn"
},
"typeVersion": 1
},
{
"id": "6690f132-c386-4086-bc11-766be70548e5",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
480
],
"parameters": {
"color": 7,
"width": 256,
"height": 288,
"content": ""
},
"typeVersion": 1
},
{
"id": "bf63d446-2691-4b0e-bfb6-3550169e925d",
"name": "Human approval",
"type": "@gotohuman/n8n-nodes-gotohuman.gotoHuman",
"position": [
224,
576
],
"parameters": {
"fields": {
"value": {
"link": "={{ [{url: $('Article link').item.json.articleUrl, label: $('Article link').item.json.title }] }}",
"summary": "={{ $('Summarize Article').item.json.text }}",
"postDraft": "={{ {ai:{prompt: $('Set Initial Prompt').item.json.prompt }, content: $json.text} }}",
"timestamp": "={{ new Date($('Extract publishing datetime').item.json.published).toDateTime().toRelative() }}"
},
"schema": [
{
"id": "link",
"type": "array",
"display": true,
"required": false,
"displayName": "link (urlLinks)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "timestamp (label)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "summary",
"type": "string",
"display": true,
"required": false,
"displayName": "summary (markdown)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postDraft",
"type": "string",
"display": true,
"required": false,
"displayName": "postDraft (text)",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"additionalFields": {
"updateForReviewId": "={{ $('Retry').isExecuted ? $('Retry').item.json.reviewToUpdate : null }}"
},
"reviewTemplateID": {
"__rl": true,
"mode": "list"
}
},
"credentials": {},
"typeVersion": 1
},
{
"id": "3f76a477-140b-433f-a811-6c7ec5a9d208",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
272
],
"parameters": {
"width": 672,
"height": 752,
"content": ""
},
"typeVersion": 1
},
{
"id": "d5a9011e-7612-4807-987d-2fd91cc6e4c2",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1504,
-256
],
"parameters": {
"width": 672,
"height": 912,
"content": "## n8n News Assistant\n### Auto-detect news from n8n and turn into a human-approved LinkedIn post\n\nThis workflow monitors n8n's official blog. If it finds any newly published articles, it drafts a related post for LinkedIn, gets human approval via **gotoHuman** and then publishes accepted posts.\n\n### \u26a0\ufe0f How to set up\n[ ] In n8n, install gotoHuman node **before** importing this template or some settings will be missing (Just add the node to a blank canvas before importing)\n\n[ ] Create gotoHuman account, copy API key\n\n[ ] In gotoHuman, select and create the pre-built review template **Blog scraper agent** or import the ID: `sMxevC9tSAgdfWsr6XIW`\n[ ] In the gotoHuman node, set up the credentials using your API key and select the review template \"n8n news to post\" from the list (This is the one you just imported)\n[ ] Connect OpenAI and LinkedIn account\n\n### Requirements\n- gotoHuman account for human supervision\n- OpenAI account for post draft\n- LinkedIn account"
},
"typeVersion": 1
}
],
"connections": {
"Retry": {
"main": [
[
{
"node": "Draft LinkedIn Post",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Create a post",
"type": "main",
"index": 0
}
],
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
],
[
{
"node": "Retry",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Extract Title,Link+Tag",
"type": "main",
"index": 0
}
]
]
},
"Article link": {
"main": [
[
{
"node": "Fetch Article HTML",
"type": "main",
"index": 0
}
]
]
},
"Create a post": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Human approval": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Set Initial Prompt",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Fetch n8n blog feed",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Summarize Article",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Summarize Article": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Fetch Article HTML": {
"main": [
[
{
"node": "Extract publishing datetime",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Draft LinkedIn Post",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set Initial Prompt": {
"main": [
[
{
"node": "Draft LinkedIn Post",
"type": "main",
"index": 0
}
]
]
},
"Draft LinkedIn Post": {
"main": [
[
{
"node": "Human approval",
"type": "main",
"index": 0
}
]
]
},
"Fetch n8n blog feed": {
"main": [
[
{
"node": "Fetch feed item HTML",
"type": "main",
"index": 0
}
]
]
},
"Fetch feed item HTML": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Post from last 24hrs?": {
"main": [
[
{
"node": "Fetch Article (LLM-friendly)",
"type": "main",
"index": 0
}
],
[]
]
},
"Extract Title,Link+Tag": {
"main": [
[
{
"node": "Article link",
"type": "main",
"index": 0
}
]
]
},
"Extract publishing datetime": {
"main": [
[
{
"node": "Post from last 24hrs?",
"type": "main",
"index": 0
}
]
]
},
"Fetch Article (LLM-friendly)": {
"main": [
[
{
"node": "Summarize Article",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Auto-detect news from n8n and turn into a human-approved LinkedIn post. gotoHuman is used to keep a human in the loop. There you can manually edit the AI draft of the post or request to regenerate it. The workflow is triggered each day to fetch the latest version of . It then…
Source: https://n8n.io/workflows/7310/ — 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.
Linkedin Automation. Uses httpRequest, lmChatOpenAi, googleSheets, chainLlm. Scheduled trigger; 18 nodes.
This workflow automates the process of creating, approving, and optionally posting LinkedIn content from a Google Sheet. Here's a high-level overview: Scheduled Trigger: Runs automatically based on yo
Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing
Generate AI video clips to promote products, services or events on social media. Use gotoHuman as an interface to control and supervise each step of the workflow to create content that's actually wort
What this workflow does