This workflow corresponds to n8n.io template #5856 — we link there as the canonical source.
This workflow follows the Form Trigger → 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 →
{
"id": "oJXYeAsW2fEXu2CM",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "LinkedIn Post To Personalized Opener",
"tags": [],
"nodes": [
{
"id": "4cc7a4e7-aeb1-4eae-a73e-a6106d8a126b",
"name": "Try This Example",
"type": "n8n-nodes-base.stickyNote",
"position": [
580,
580
],
"parameters": {
"width": 480,
"height": 600,
"content": "**Test with this (Copy & Paste):**\n\nAuthor: Shakira Johhson\n\nCompany: Apple\n\nPost:\n\nJust closed our Series B! \ud83d\ude80 \n\nHonestly didn't think we'd get here 2 years ago when we were bootstrapping in my garage. Now we're scaling our AI workflow automation to help 10,000+ businesses.\n\nShoutout to the team who believed in the vision when it was just sketches on a whiteboard. This is just the beginning.\n\n#TechCorp #SeriesB #AI #Automation\n\n**You'll get something like this:**\n\n\"Came across your post on LinkedIn - from garage sketches to Series B is incredible, and the 10,000+ businesses you're helping with AI automation shows the real impact.\"\n\n**Pro tips:**\n- Use recent posts (last 30 days)\n- Longer posts = better personalization\n- Company updates work best\n- Achievement posts are gold"
},
"typeVersion": 1
},
{
"id": "8f299bd9-fbee-4933-8646-a9c654eb8ffd",
"name": "What This Does",
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
140
],
"parameters": {
"width": 400,
"height": 560,
"content": "**What this does:**\n\n1. Fill out the form with LinkedIn post\n2. AI reads it like a human would\n3. Creates personalized opener\n4. You get copy-ready result\n\n**Why it works:**\n- References specific details\n- Sounds natural, not robotic\n- Shows you actually read their content\n- Builds instant credibility\n\n**Perfect for:**\n- Sales reps\n- Business development\n- Agency outreach\n- Partnership building\n\n**Setup:**\n1. Add OpenAI API key (Or, just use free n8n OpenAI credits)\n2. Test with example\n3. Start personalizing\n\nThat's it."
},
"typeVersion": 1
},
{
"id": "538a0c40-6292-460b-a12c-914ad5443e4b",
"name": "Output & Next Steps",
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
980
],
"parameters": {
"width": 400,
"height": 280,
"content": "**Where to find your output:**\n\nClick on \"Format Output\" node after running the workflow.\n\nYou'll see:\n- **opener**: Your personalized email opener\n- **prospect**: The person's name\n- **company**: Their company name\n- **next_steps**: What to do next\n- **tips**: Email best practices\n\n**Save your results:**\n- Connect Google Sheets node\n- Add to your CRM\n- Send to email tool\n- Log in database\n\n**Make it yours:**\n- Edit the AI prompt for your industry\n- Add more form fields\n- Connect to your tools\n- Batch process multiple posts\n\n**Pro tip:** The output is structured JSON - easy to connect to any tool you use."
},
"typeVersion": 1
},
{
"id": "1f9660c3-8a4d-4b0a-b0cb-0fb9335f236f",
"name": "Why This Works",
"type": "n8n-nodes-base.stickyNote",
"position": [
2060,
740
],
"parameters": {
"width": 400,
"height": 140,
"content": "** Further connect to your tools:**\n- Google Sheets for logging\n- CRM for prospect data\n- Email tools for sending\n- Slack for notifications"
},
"typeVersion": 1
},
{
"id": "4e7c2e84-5451-4946-9a37-cf98db194729",
"name": "Format Output",
"type": "n8n-nodes-base.code",
"position": [
1840,
760
],
"parameters": {
"jsCode": "// Get AI response and original data\nconst aiResponse = $input.first().json;\nconst originalData = $('Process Input').first().json;\n\n// Extract the personalized opener\nconst opener = aiResponse.message?.content || aiResponse.text || \"Something went wrong. Try again.\";\n\n// Clean up the opener\nconst cleanOpener = opener\n .replace(/^\"|\"$/g, '')\n .replace(/^'|'$/g, '')\n .trim();\n\n// Create final response\nconst response = {\n success: true,\n opener: cleanOpener,\n prospect: originalData.first_name,\n company: originalData.company_name,\n next_steps: [\n \"1. Copy the opener above\",\n \"2. Add your value prop (2-3 sentences max)\",\n \"3. Include clear CTA\",\n \"4. Send it\"\n ],\n tips: [\n \"Keep total email under 100 words\",\n \"Send Tuesday-Thursday, 8-10am\",\n \"Follow up in 3-5 days if no response\",\n \"Personalize the subject line too\"\n ]\n};\n\nreturn { json: response };"
},
"typeVersion": 2
},
{
"id": "7470a3f6-f7cb-455c-b8c1-82a87d2a0e05",
"name": "AI Magic",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1500,
760
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {
"maxTokens": 150,
"temperature": 0.8
},
"messages": {
"values": [
{
"content": "You are an elite B2B sales expert who crafts personalized cold email openers that get responses.\n\nYour specialty: Taking LinkedIn posts and creating openers that feel like they came from someone who actually READ and UNDERSTOOD the content.\n\nRules:\n- Reference specific details, metrics, or insights from the post\n- Sound like a human, not a bot\n- Show genuine interest in their work/achievement\n- Avoid generic praise (\"great post\", \"inspiring\", \"amazing\")\n- Be conversational but professional\n- Focus on what makes this post unique\n\nComplete this sentence: \"Came across your post on LinkedIn - \"\n\nMake it feel like you're genuinely interested in what they shared, not just trying to sell them something.\n\nExamples of what works:\n- \"Came across your post on LinkedIn - going from 5 to 50 employees in 18 months while maintaining 98% customer satisfaction is seriously impressive execution.\"\n- \"Came across your post on LinkedIn - the insight about AI replacing tasks, not jobs, really resonates with what we're seeing in manufacturing right now.\"\n- \"Came across your post on LinkedIn - bootstrapping to $2M ARR without external funding while building a distributed team is exactly the kind of scrappy growth I respect.\"\n\nOutput ONLY the completed sentence."
},
{
"content": "=LinkedIn Post:\n{{ $json.post_content }}\n\nAuthor: {{ $json.first_name }}\nCompany: {{ $json.company_name }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "7948c914-c9c3-4675-993c-51cb0c7f8979",
"name": "LinkedIn Post Form",
"type": "n8n-nodes-base.formTrigger",
"position": [
1140,
760
],
"parameters": {
"path": "6fbe076d-b99c-4dea-8575-ec53ad0a6e0a",
"options": {},
"formTitle": "LinkedIn Post Opener Generator",
"formFields": {
"values": [
{
"fieldLabel": "Author's First Name",
"requiredField": true
},
{
"fieldLabel": "Company Name",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "LinkedIn Post Content",
"requiredField": true
}
]
},
"formDescription": "Paste any LinkedIn post and get a personalized cold email opener that actually sounds human."
},
"typeVersion": 2.1
},
{
"id": "506fae22-1567-46be-8e74-263a5b4a1f84",
"name": "Process Input",
"type": "n8n-nodes-base.code",
"position": [
1320,
760
],
"parameters": {
"jsCode": "// Get form data\nconst firstName = $json['Author\\'s First Name']?.trim();\nconst companyName = $json['Company Name']?.trim();\nconst postContent = $json['LinkedIn Post Content']?.trim();\n\n// Validate input\nif (!firstName || !companyName || !postContent) {\n throw new Error('All fields are required');\n}\n\nif (postContent.length < 50) {\n throw new Error('Post too short. Need at least 50 characters for good personalization.');\n}\n\n// Clean the post content\nconst cleanedPost = postContent\n .replace(/\\s+/g, ' ')\n .replace(/[\\r\\n]+/g, ' ')\n .trim();\n\nreturn {\n json: {\n first_name: firstName,\n company_name: companyName,\n post_content: cleanedPost,\n timestamp: new Date().toISOString()\n }\n};"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c2d342d7-3f02-41e5-95bd-cea679b53bee",
"connections": {
"AI Magic": {
"main": [
[
{
"node": "Format Output",
"type": "main",
"index": 0
}
]
]
},
"Process Input": {
"main": [
[
{
"node": "AI Magic",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Post Form": {
"main": [
[
{
"node": "Process Input",
"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.
openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Turn any LinkedIn post into a personalized cold email opener that sounds like a human wrote it in seconds.
Source: https://n8n.io/workflows/5856/ — 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.
Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP
This system automates LinkedIn lead generation and enrichment in six clear stages: Lead Collection (via Apollo.io) Automatically pulls leads based on keywords, roles, or industries using Apollo’s API.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Goal: This workflow demonstrates the full fluidX THE EYE integration — starting a live session, inviting both the customer (via SMS) and the service agent (via email), and then accessing the media (ph
This workflow is ideal for content creators, training providers, agencies, and businesses that need to quickly turn raw videos into polished, captioned, or narrated content — without hiring editors or