This workflow corresponds to n8n.io template #9185 — 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": "sKnOz9WV5ZdJIZ2k",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate LinkedIn Ideas",
"tags": [],
"nodes": [
{
"id": "d876c18a-aa3c-42ea-8cba-aff8b36bb2ec",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
0
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 6
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f49bbcde-f09c-4799-a3de-7823e50fae0b",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
912,
224
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {
"topP": 0.9,
"temperature": 1,
"presencePenalty": 0.8,
"frequencyPenalty": 0.3
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "25888890-2ac4-4363-a2b8-325302e53c99",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1040,
224
],
"parameters": {
"jsonSchemaExample": "[{\n \"idea\": \"Lovable's $4B Moment: Vibe Coding Goes Big\",\n \"details\": \"Lovable, a Swedish AI startup specializing in 'vibe coding', just scored funding offers valuing it at over $4 billion after showing rapid growth\u2014$100 million ARR and 10 million projects built\u2014highlighting how natural-language app building is capturing serious investor attention. This signals that vibe coding is no longer fringe\u2014it\u2019s a headline trend reshaping how we build software in 2025.\",\n \"style\": \"Trend Analysis\",\n \"image\": \"A futuristic startup office glowing with neon lights, where developers use holographic keyboards and AI assistants generate entire apps from voice commands. A giant $4B valuation sign hovers above the scene to symbolize investor hype.\"\n }]"
},
"typeVersion": 1.3
},
{
"id": "91a1b4be-c03e-45f1-aab3-5c55236f67ff",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1824,
0
],
"parameters": {
"columns": {
"value": {
"id": "==ROW()-1",
"idea": "={{ $('Code').item.json.idea }}",
"image": "=",
"style": "={{ $('Code').item.json.style }}",
"output": "={{ $json.output.post }}",
"status": "New",
"details": "={{ $('Code').item.json.details }}",
"imagePrompt": "={{ $('Code').item.json.image }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "idea",
"type": "string",
"display": true,
"required": false,
"displayName": "idea",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "details",
"type": "string",
"display": true,
"required": false,
"displayName": "details",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "style",
"type": "string",
"display": true,
"required": false,
"displayName": "style",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "output",
"type": "string",
"display": true,
"required": false,
"displayName": "output",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "imagePrompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "imagePrompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "image",
"type": "string",
"display": true,
"required": false,
"displayName": "image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7,
"alwaysOutputData": false
},
{
"id": "f7bf234c-7b90-45cf-b454-ad246042e960",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
1248,
0
],
"parameters": {
"jsCode": "return $input.first().json.output.flat(1)"
},
"typeVersion": 2
},
{
"id": "c22f0a87-85dc-4d6a-89ef-41212a3b2e24",
"name": "Message a model",
"type": "n8n-nodes-base.perplexity",
"position": [
672,
0
],
"parameters": {
"model": "sonar-pro",
"options": {},
"messages": {
"message": [
{
"role": "system",
"content": "=You are an AI content researcher and strategist. Your job is to identify fresh, non-obvious ideas for LinkedIn posts at the intersection of Generative AI, AI agents, vibe coding, automation, no-code tools and product management.\n\nThese ideas should help professionals stay ahead of the curve, think differently, or take action. Your job is not just to summarize trends \u2014 it\u2019s to remix, combine, and provoke.\n\nSearch across a wide range of sources (Reddit, Hacker News, Twitter/X, TechCrunch, FT, Axios, arXiv, personal blogs, and indie tools). Look for:\n- Real-world frictions or bottlenecks\n- Emerging tools and automations people are starting to use\n- \u201cTop X\u201d style insights\n- Signals of shifting norms in how people work, code, or build\n\nAvoid repeating or closely mirroring the following recent search results:\n- {{ $('Limit').all()[0].json.idea }}\n- {{ $('Limit').all()[1].json.idea }}\n- {{ $('Limit').all()[2].json.idea }}\n- {{ $('Limit').all()[3].json.idea }}\n- {{ $('Limit').all()[4].json.idea }}\n\nGenerate 3 LinkedIn-style post ideas. You can include posts that are:\n- Tactical: \u201cTop X tools,\u201d \u201cHow I automated Y,\u201d \u201cWhy you should try this workflow\u201d\n- Strategic: \u201cWhat this trend means,\u201d \u201cWhy most people miss this,\u201d \u201cWhat we\u2019re not talking about\u201d\n- Visual/Philosophical: \u201cWeird UI trends,\u201d \u201cWhat \u2018vibe coding\u2019 actually means\u201d\n\nFor each idea, return a structured JSON object with the following format:\n{\n \"idea\": \"Clickbait headline that would grab attention on LinkedIn. A bold, intriguing, or contrarian sentence that grabs attention.\",\n \"details\": \"4\u20136 sentence post draft explaining the insight, why it matters now, and what the professional takeaway is. Highlight any opportunity, risk, or shift in mindset.\",\n \"style\": \"One of: [Hot take, Provocative, Explainer, Practical Tips, Hot take, Personal Insight, Provocative, Framework, Case Study].\n \"image\": \"A GPT-image-1 visual prompt describing a creative image to accompany the post. Be specific and detailed, describe the mood and atmosphere, use descriptive adjectives, consider perspective and composition, specify lighting and time of day, specify the style or theme. Do not overload the prompt.\n}\n\nReturn the final output as a JSON array of 3 objects.\nDo not return article summaries or plain news.\nBe bold. Cross disciplines. Surprise me."
},
{
"content": "Do a new search"
}
]
},
"requestOptions": {}
},
"credentials": {
"perplexityApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "bfd24297-5345-44ec-ae53-ebbd6ab62377",
"name": "Send a text message",
"type": "n8n-nodes-base.telegram",
"position": [
2048,
0
],
"parameters": {
"text": "New ideas for LinkedIn have been generated!",
"chatId": "123456789",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {},
"executeOnce": true,
"typeVersion": 1.2
},
{
"id": "64e63f93-dd9c-4971-8db9-14d215f77964",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1552,
224
],
"parameters": {
"jsonSchemaExample": "{\n\t\"post\": \"\"\n}"
},
"typeVersion": 1.3
},
{
"id": "c4518e27-cc07-44f0-9dfc-defb186fc2ee",
"name": "Post Generator",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1472,
0
],
"parameters": {
"text": "=Generate a post based on this:\nIdea: {{ $json.idea }}\nDetails: {{ $json.details }}\nStyle: {{ $json.style }}\n\nYour output must always be in the following JSON format:\n{ \"post\": \"\" }",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=You are an expert LinkedIn content writer for tech and startup professionals.\nYour job is to turn raw ideas about Generative AI, automation, and emerging tech culture into scroll-stopping, human, original posts for LinkedIn that feel human, unpolished and worth reading, like they were written by a real person with a sharp brain and a strong opinion.\n\nYour tone should be thoughtful, curious, and informal \u2014 like someone reflecting out loud, sharing something they noticed, or offering a bold take. No corporate speak.\n\nGiven an idea, some details and a style, write a LinkedIn post that:\n- Starts with a scroll-stopping, clickbaity , catchy and bold hook \u2014 an intriguing or contrarian sentence that grabs attention and makes you want to click \"see more\"\n- Is click-baity and generates an emotion on the reader\n- Is made up of short paragraphs (1\u20132 lines max each \u2014 keep it skimmable)\n- Feels like it was written by a human who thinks deeply, who is raw and flawed and messy, not an AI trying to summarize things\n- Has voice: real human tone, like someone reflecting out loud or texting a smart friend\n- Includes emotion \u2014 frustration, awe, curiosity, skepticism, joy, etc.\n- Uses a varied format and post length: things like short paragraphs, lists, emojis, bold statements, rhetorical questions, etc. are all viable\n- Breaks the structure if needed \u2014 lists, line breaks, emojis, sentence fragments\n- Delivers value \u2014 either an original insight, clear framework, opinion, lesson learned, or cultural observation\n- Shares a clear POV \u2014 not a summary, not neutral, but a real take\n- Ends with a soft CTA (a question, opinion, or open-ended line to spark engagement)\n\nAlso:\n- Do not write long blocks of text.\n- Avoid robotic or over-polished phrasing.\n- Let it feel casual, smart, and maybe even a bit messy.\n- Each post should feel like it was written in 3 minutes by someone with a sharp POV.\n- Do not make it sound safe or over-polished.\n- Do not write like a content marketer.\n\nThe voice should sometimes feel raw and messy, like someone wrote it fast because they had something worth saying."
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "0a5a5942-0fd4-484b-a215-10d88913f456",
"name": "Idea Parser",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
896,
0
],
"parameters": {
"text": "={{ $json.choices[0].message.content }}",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "60e5ed21-49e6-47c9-8d00-cdb62a1a5c97",
"name": "Get row(s) in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
224,
0
],
"parameters": {
"options": {}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "c35fe905-d818-4540-91b2-bffcaf49a59b",
"name": "Limit",
"type": "n8n-nodes-base.limit",
"position": [
448,
0
],
"parameters": {
"keep": "lastItems",
"maxItems": 5
},
"typeVersion": 1
},
{
"id": "8b9f9e4a-8f63-4a35-aee2-d14459b2d5e7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-128
],
"parameters": {
"width": 672,
"height": 288,
"content": "## Trigger daily\n\nThe workflow triggers on a daily basis and gets the last 3 posts that were generated."
},
"typeVersion": 1
},
{
"id": "21cd2941-0b9e-4f73-a015-5fb26bf8f920",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
624,
-128
],
"parameters": {
"width": 768,
"height": 528,
"content": "## Search for ideas\n\nIt then uses Perpexlity to find ideas based on the niche selected and parses them into a structured output"
},
"typeVersion": 1
},
{
"id": "28241419-68e0-4cf2-a857-65c91da0156e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1408,
-128
],
"parameters": {
"width": 768,
"height": 528,
"content": "## Create and save ideas\n\nFinally, the workflow creates the ideas with an image prompt to generate later, saves them to Google Sheets and sends a notification via Telegram"
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"timezone": "Europe/Lisbon",
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "Egdhew5Scau0oU43",
"executionOrder": "v1"
},
"versionId": "0e9fad64-2b28-458a-ad7f-c8f3f7ca5b61",
"connections": {
"Code": {
"main": [
[
{
"node": "Post Generator",
"type": "main",
"index": 0
}
]
]
},
"Limit": {
"main": [
[
{
"node": "Message a model",
"type": "main",
"index": 0
}
]
]
},
"Idea Parser": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Post Generator": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Message a model": {
"main": [
[
{
"node": "Idea Parser",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Idea Parser",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Post Generator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Append row in sheet": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Idea Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Post Generator",
"type": "ai_outputParser",
"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.
googleSheetsOAuth2ApiopenAiApiperplexityApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n workflow automates the process of creating high-quality, scroll-stopping LinkedIn posts based on live research, AI insight generation, and Google Sheets storage.
Source: https://n8n.io/workflows/9185/ — 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.
⚠️ 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
System Architecture Two integrated N8N workflows providing automated US stock portfolio management through Telegram:
leads. Uses supabase, gmail, formTrigger, httpRequest. Webhook trigger; 62 nodes.
staying consistent with personal brand content is hard when you're running everything yourself. you know what you want to say — but turning raw thoughts into polished posts takes hours.