This workflow corresponds to n8n.io template #17089 — we link there as the canonical source.
This workflow follows the Chainllm → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "BrbXWicDCXaU3EYW",
"meta": {
"builderVariant": "mcp",
"aiBuilderAssisted": true
},
"name": "Turn LinkedIn post reactions into AI content ideas in Google Sheets",
"tags": [],
"nodes": [
{
"id": "6ee3245c-51cb-4258-b40f-b5b7b18c4f1b",
"name": "Daily Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-320,
-272
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.3
},
{
"id": "0478c8e7-d48d-4e06-b78a-992147db2135",
"name": "Configuration",
"type": "n8n-nodes-base.set",
"position": [
-96,
-272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c1",
"name": "linkedin_username",
"type": "string",
"value": "your-linkedin-username"
},
{
"id": "c2",
"name": "reaction_filter",
"type": "string",
"value": ""
},
{
"id": "c3",
"name": "recency_days",
"type": "number",
"value": 7
},
{
"id": "c4",
"name": "max_ai_posts",
"type": "number",
"value": 10
},
{
"id": "c5",
"name": "ai_model",
"type": "string",
"value": "gpt-5-mini"
},
{
"id": "c6",
"name": "content_language",
"type": "string",
"value": "English"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1f6ad101-9093-493c-857e-d962a1b8f8e0",
"name": "Fetch LinkedIn Reactions",
"type": "n8n-nodes-base.httpRequest",
"maxTries": 3,
"position": [
256,
-272
],
"parameters": {
"url": "https://linkedin-api8.p.rapidapi.com/get-profile-likes",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "username",
"value": "={{ $('Configuration').item.json.linkedin_username }}"
},
{
"name": "start",
"value": "0"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "linkedin-api8.p.rapidapi.com"
}
]
}
},
"retryOnFail": true,
"typeVersion": 4.4,
"waitBetweenTries": 2000
},
{
"id": "90c5f164-b63b-4b1c-92bf-15ad6aac8f2f",
"name": "Split Reactions",
"type": "n8n-nodes-base.splitOut",
"position": [
448,
-272
],
"parameters": {
"options": {},
"fieldToSplitOut": "data.items"
},
"typeVersion": 1
},
{
"id": "a5dea033-a628-4c04-8916-4d38d8578e5d",
"name": "Filter Recent Reactions",
"type": "n8n-nodes-base.filter",
"position": [
624,
-272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "f1",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.action }}",
"rightValue": "={{ $('Configuration').item.json.reaction_filter }}"
},
{
"id": "f2",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ new Date($json.postedDate).getTime() }}",
"rightValue": "={{ $now.minus({ days: $('Configuration').item.json.recency_days }).toMillis() }}"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "8cfe3c02-a932-40cd-b81d-e9d467a54253",
"name": "Limit AI Analysis",
"type": "n8n-nodes-base.limit",
"position": [
848,
-272
],
"parameters": {
"maxItems": "={{ $('Configuration').item.json.max_ai_posts }}"
},
"typeVersion": 1
},
{
"id": "1b95e4d7-873c-4dbc-8aff-446a4d08c423",
"name": "AI Content Strategist",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1088,
-272
],
"parameters": {
"text": "=You are a senior LinkedIn content strategist for a personal brand.\n\nThe user reacted to the LinkedIn post below. Turn it into ONE reusable, original content idea the user can publish on their own profile. Do not copy the post: extract the underlying insight and reframe it in the user's own angle.\n\nWrite every field in {{ $('Configuration').item.json.content_language }}.\n\n--- SOURCE POST ---\nAuthor: {{ $json.author.username }}\nReaction: {{ $json.action }}\nPost text: {{ $json.text }}\nPost URL: {{ $json.postUrl }}\n--- END ---\n\nReturn a short category, a punchy content angle, a scroll-stopping hook (max 12 words), one key takeaway, a suggested content format (e.g. carousel, text post, video, poll), and 3 relevant hashtags as a single space-separated string.",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "74c85410-bebe-46c3-9d22-b1e2cb89b24f",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1088,
-128
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "={{ $('Configuration').item.json.ai_model }}"
},
"options": {
"temperature": 0.7
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "1323a0a1-00c7-421f-9775-34ccb569d4c1",
"name": "Content Idea Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1232,
-80
],
"parameters": {
"jsonSchemaExample": "{\n \"category\": \"AI & Automation\",\n \"content_angle\": \"How solopreneurs can turn saved posts into a content engine\",\n \"hook\": \"You are sitting on a goldmine of content ideas.\",\n \"key_takeaway\": \"Your reactions reveal exactly what your audience values.\",\n \"suggested_format\": \"Carousel\",\n \"hashtags\": \"#AI #ContentStrategy #LinkedIn\"\n}"
},
"typeVersion": 1.3
},
{
"id": "d490f73a-69c9-4813-8c09-9aa9f19fb01d",
"name": "Format Idea Row",
"type": "n8n-nodes-base.set",
"position": [
1440,
-272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "r1",
"name": "Captured At",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "r2",
"name": "Reaction",
"type": "string",
"value": "={{ $('Limit AI Analysis').item.json.action }}"
},
{
"id": "r3",
"name": "Author",
"type": "string",
"value": "={{ $('Limit AI Analysis').item.json.author.username }}"
},
{
"id": "r4",
"name": "Post Excerpt",
"type": "string",
"value": "={{ $('Limit AI Analysis').item.json.text }}"
},
{
"id": "r5",
"name": "Post URL",
"type": "string",
"value": "={{ $('Limit AI Analysis').item.json.postUrl }}"
},
{
"id": "r6",
"name": "Category",
"type": "string",
"value": "={{ $json.output.category }}"
},
{
"id": "r7",
"name": "Content Angle",
"type": "string",
"value": "={{ $json.output.content_angle }}"
},
{
"id": "r8",
"name": "Hook",
"type": "string",
"value": "={{ $json.output.hook }}"
},
{
"id": "r9",
"name": "Key Takeaway",
"type": "string",
"value": "={{ $json.output.key_takeaway }}"
},
{
"id": "r10",
"name": "Suggested Format",
"type": "string",
"value": "={{ $json.output.suggested_format }}"
},
{
"id": "r11",
"name": "Hashtags",
"type": "string",
"value": "={{ $json.output.hashtags }}"
},
{
"id": "r12",
"name": "Status",
"type": "string",
"value": "To review"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d2511d17-3350-4546-a5c3-c93f4defdeb4",
"name": "Save to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1728,
-272
],
"parameters": {
"columns": {
"value": {
"Hook": "={{ $json.Hook }}",
"Author": "={{ $json.Author }}",
"Status": "={{ $json.Status }}",
"Category": "={{ $json.Category }}",
"Hashtags": "={{ $json.Hashtags }}",
"Post URL": "={{ $json[\"Post URL\"] }}",
"Reaction": "={{ $json.Reaction }}",
"Captured At": "={{ $json[\"Captured At\"] }}",
"Key Takeaway": "={{ $json[\"Key Takeaway\"] }}",
"Post Excerpt": "={{ $json[\"Post Excerpt\"] }}",
"Content Angle": "={{ $json[\"Content Angle\"] }}",
"Suggested Format": "={{ $json[\"Suggested Format\"] }}"
},
"schema": [
{
"id": "Captured At",
"type": "string",
"display": true,
"required": false,
"displayName": "Captured At",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Reaction",
"type": "string",
"display": true,
"required": false,
"displayName": "Reaction",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Author",
"type": "string",
"display": true,
"required": false,
"displayName": "Author",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Post Excerpt",
"type": "string",
"display": true,
"required": false,
"displayName": "Post Excerpt",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Post URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Post URL",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Content Angle",
"type": "string",
"display": true,
"required": false,
"displayName": "Content Angle",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Hook",
"type": "string",
"display": true,
"required": false,
"displayName": "Hook",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Key Takeaway",
"type": "string",
"display": true,
"required": false,
"displayName": "Key Takeaway",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Suggested Format",
"type": "string",
"display": true,
"required": false,
"displayName": "Suggested Format",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Hashtags",
"type": "string",
"display": true,
"required": false,
"displayName": "Hashtags",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Post URL"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "0",
"cachedResultName": "Ideas"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "1px_dAGdYd3cFOD9_8ammmSvEunQbrKW1lXgyCXGEFwo"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "dcdabf30-5b2a-4beb-b3a3-7dc6925ffda0",
"name": "Sticky Note 23d42ab3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1168,
-624
],
"parameters": {
"color": 5,
"width": 640,
"height": 2040,
"content": "# Turn LinkedIn post reactions into AI content ideas in Google Sheets\n\n# \ud83d\udce5 [Open full documentation on Notion](https://automatisation.notion.site/Turn-LinkedIn-post-reactions-into-AI-content-ideas-in-Google-Sheets-Course-39c3d6550fd98181bf84d1827e88543c)\n\nTurn the LinkedIn posts you react to into a structured, AI-enriched content idea vault in Google Sheets. On a schedule, the workflow pulls your latest reactions, keeps only the recent ones you care about, asks GPT to reframe each into an original content angle (hook, takeaway, format, hashtags), and upserts everything into a spreadsheet \u2014 no duplicates.\n\n## How it works\n- A Schedule Trigger runs the workflow daily.\n- The Configuration node holds every setting you can tune in one place.\n- Fetch LinkedIn Reactions calls a LinkedIn data API and returns your latest reacted posts.\n- Split + Filter keep only recent reactions matching the type you chose.\n- Limit caps how many posts are sent to the AI (cost control).\n- The AI Content Strategist (GPT) reframes each post into an original idea with structured output.\n- Format + Google Sheets upsert each idea as a row, matching on Post URL to avoid duplicates.\n\n## Setup\n1. Create a RapidAPI credential (Header Auth): header name `x-rapidapi-key`, value = your RapidAPI key. Subscribe to a LinkedIn data API (linkedin-api8) on RapidAPI.\n2. Open Configuration and set `linkedin_username` (your public LinkedIn handle), then adjust the other fields.\n3. On Fetch LinkedIn Reactions, select your RapidAPI credential.\n4. On OpenAI Chat Model, select your OpenAI credential.\n5. On Save to Google Sheets, select your Google account, then pick the spreadsheet and tab.\n6. Activate the workflow.\n\n## Requirements\n- n8n (cloud or self-hosted).\n- A RapidAPI account subscribed to a LinkedIn profile API (Header Auth key).\n- An OpenAI API key.\n- A Google account with a spreadsheet using these headers: Captured At, Reaction, Author, Post Excerpt, Post URL, Category, Content Angle, Hook, Key Takeaway, Suggested Format, Hashtags, Status.\n\n## Customization\n- `reaction_filter`: leave empty for all reactions, or set to like / appreciation / praise / empathy / interest / entertainment.\n- `recency_days`: how far back to look.\n- `max_ai_posts`: how many posts to enrich per run.\n- `ai_model` and `content_language`: swap the GPT model or the output language.\n- Change the Schedule Trigger to run more or less often.\n\nNeed help customizing?\nContact me for consulting and support : [Linkedin](https://www.linkedin.com/in/doctor-firass/)\n\n# MY NEW YOUTUBE CHANNEL\n\ud83d\udc49 [Subscribe to my new YouTube channel](https://www.youtube.com/@DrFiras_AI). Here I'll share videos and Shorts with practical tutorials and FREE templates for n8n.\n\n[](https://www.youtube.com/@DrFiras_AI)"
},
"typeVersion": 1
},
{
"id": "0861828c-b395-4c4e-a4cf-ba85c62b7d8f",
"name": "Sticky Note b3f19b12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
-576
],
"parameters": {
"color": 7,
"width": 520,
"height": 472,
"content": "## 1. Trigger & configuration\nRun on a schedule and set every option in one place (Configuration)."
},
"typeVersion": 1
},
{
"id": "e68d1c4e-caad-4807-8571-45d316ca0955",
"name": "Sticky Note 3a03fb4b",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
-576
],
"parameters": {
"color": 7,
"width": 816,
"height": 472,
"content": "## 2. Fetch & filter reactions\nPull your latest LinkedIn reactions, then keep only recent ones matching your chosen type."
},
"typeVersion": 1
},
{
"id": "91cbc756-2ada-45ba-bddd-1438cacd8a22",
"name": "Sticky Note fbb5dd05",
"type": "n8n-nodes-base.stickyNote",
"position": [
1072,
-576
],
"parameters": {
"color": 7,
"width": 520,
"height": 472,
"content": "## 3. AI content strategist\nGPT reframes each post into an original idea: angle, hook, takeaway, format, hashtags."
},
"typeVersion": 1
},
{
"id": "910dfe01-1fcf-476f-99e5-30f662100339",
"name": "Sticky Note db3e98c4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1632,
-576
],
"parameters": {
"color": 7,
"width": 300,
"height": 472,
"content": "## 4. Save to Google Sheets\nUpsert each idea as a row, matching on Post URL to avoid duplicates."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": true,
"executionOrder": "v1"
},
"versionId": "8ca9879b-db89-45c7-8f27-2d921e277298",
"nodeGroups": [],
"connections": {
"Configuration": {
"main": [
[
{
"node": "Fetch LinkedIn Reactions",
"type": "main",
"index": 0
}
]
]
},
"Daily Trigger": {
"main": [
[
{
"node": "Configuration",
"type": "main",
"index": 0
}
]
]
},
"Format Idea Row": {
"main": [
[
{
"node": "Save to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Split Reactions": {
"main": [
[
{
"node": "Filter Recent Reactions",
"type": "main",
"index": 0
}
]
]
},
"Limit AI Analysis": {
"main": [
[
{
"node": "AI Content Strategist",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Content Strategist",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Content Idea Parser": {
"ai_outputParser": [
[
{
"node": "AI Content Strategist",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"AI Content Strategist": {
"main": [
[
{
"node": "Format Idea Row",
"type": "main",
"index": 0
}
]
]
},
"Filter Recent Reactions": {
"main": [
[
{
"node": "Limit AI Analysis",
"type": "main",
"index": 0
}
]
]
},
"Fetch LinkedIn Reactions": {
"main": [
[
{
"node": "Split Reactions",
"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.
googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow runs daily to fetch your recent LinkedIn post reactions via a RapidAPI LinkedIn endpoint, uses OpenAI to turn each reacted post into a structured original content idea, and appends or updates the results in a Google Sheets idea vault without duplicates. Runs every…
Source: https://n8n.io/workflows/17089/ — 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.
Most blogs publish words. This system publishes experiences.
[](https://youtu.be/sKJAypXDTLA)
Longform Youtube Automation. Uses googleSheets, chainLlm, lmChatOpenAi, outputParserStructured. Scheduled trigger; 16 nodes.
⚠️ DISCLAIMER: This workflow uses the AnySite LinkedIn community node, which is only available on self-hosted n8n instances. It will not work on n8n.cloud.
Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing