This workflow corresponds to n8n.io template #9652 — we link there as the canonical source.
This workflow follows the Chainllm → Emailsend 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": "dmoXmxoRl7IynHDc",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Instagram Daily Post",
"tags": [],
"nodes": [
{
"id": "fda4cf10-8bc2-490c-8412-eaef0dd637f4",
"name": "Send email",
"type": "n8n-nodes-base.emailSend",
"position": [
2128,
-288
],
"parameters": {
"text": "=Hello dear,\n\nDaily tips and guide has attached to this email.\n\n{{ $('Code-Split-LangChain').item.json.quote }}\n\n{{ $('Code-Split-LangChain').item.json.caption }}\n\n{{ $('Code-Split-LangChain').item.json.hashtags }}\n\nBest\nAI",
"options": {
"attachments": "=data"
},
"subject": "Daily Instagram Post",
"toEmail": "=",
"fromEmail": "user@example.com",
"emailFormat": "text"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "c17de175-e95e-4e88-bd42-52851656e3ba",
"name": "Read Text Files from Disk",
"type": "n8n-nodes-base.readWriteFile",
"position": [
432,
-288
],
"parameters": {
"options": {},
"fileSelector": "/home/node/instagram_posts.txt"
},
"typeVersion": 1
},
{
"id": "f1bf713b-05bb-4a19-a80f-fe201833f4fa",
"name": "Extract from Text File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
656,
-288
],
"parameters": {
"options": {
"keepSource": "json"
},
"operation": "text",
"destinationKey": "post_history"
},
"typeVersion": 1
},
{
"id": "6f59e757-00c4-4605-b54f-cb9808ea7528",
"name": "Convert Quote to File",
"type": "n8n-nodes-base.convertToFile",
"position": [
1456,
-288
],
"parameters": {
"options": {},
"operation": "toText",
"sourceProperty": "quote",
"binaryPropertyName": "quote_for_file"
},
"typeVersion": 1.1
},
{
"id": "df525ede-df99-49c2-a5e5-ae67b38ee9ff",
"name": "Generate an image",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1904,
-288
],
"parameters": {
"prompt": "=Draw a simple image for below quote and put the text in the image with bold and clear front and contrast color like red. This is the quote:{{ $('Code-Split-LangChain').item.json.quote}}",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.0-flash-preview-image-generation",
"cachedResultName": "models/gemini-2.0-flash-preview-image-generation"
},
"options": {},
"resource": "image"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2c3dedaa-9791-44c5-9b20-fcbada1f3658",
"name": "Write Text Files from Disk",
"type": "n8n-nodes-base.readWriteFile",
"position": [
1680,
-288
],
"parameters": {
"options": {
"append": true
},
"fileName": "/home/node/instagram_posts.txt",
"operation": "write",
"dataPropertyName": "quote_for_file"
},
"typeVersion": 1
},
{
"id": "9df5aee8-c071-4eea-885d-32efe21e1b67",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
-832
],
"parameters": {
"width": 624,
"height": 1120,
"content": "# \ud83d\udcf8 Instagram Post Automation Workflow\n\n## \u2139\ufe0f What is this workflow\nThis workflow automatically produces daily Instagram posts based on a user-provided prompt and sends them to your email inbox. \nSocial media creators can use it to generate content periodically and save time. \n\nThe email includes: \n- Picture \n- Title \n- Caption \n- Relevant hashtags \n\nYou can simply copy and paste the content from the email into Instagram, or go further by connecting it to the Facebook API for **full automation**.\n\n## \ud83d\udcbc Business Cases\n- Generating social media posts primarily for Instagram. \n- Integrating with other workflows (trend research, market studies, news feeds) to produce images, statistics, text, or data comparisons for social media.\n\n## \u2699\ufe0f How Does It Work\n1. The workflow runs periodically according to your schedule settings. \n2. Generates a new quote, avoiding duplicates of previously created ones. \n3. Creates an image. \n4. Sends all content by email.\n\n## \ud83d\udd17 Integrated Services\n- Local file storage on the hosted platform \n- OpenAI GPT model (customizable to any AI model you prefer) \n- Gemini model for image generation (replaceable with your preferred tool) \n- Email sending via SMTP\n\n## \ud83d\udee0 How to Set Up\n1. Install the workflow template. \n2. Configure AI models and set up SMTP credentials. \n3. Create a file on your local installation (`/home/node/instagram_posts.txt`). \n4. Set up the scheduler. \n5. Test and enjoy."
},
"typeVersion": 1
},
{
"id": "704ea445-c717-4adc-8211-3d7914d9d841",
"name": "Basic LLM Chain",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
880,
-288
],
"parameters": {
"text": "=Create an Instagram post about self-growth and partnership, inspired by Rumi, Khayam, or similar poets. Make sure dont generate these again as previsouly generated:\"\" {{ $json.post_history }}\"\"\n\nOUTPUT:\nNo additional text, explanations or title for sections and only provide below information:\n1. One short inspirational sentence between 5 to 25 words about self-growth or partnership, including quoting the poet\u2019s name.\n2. A suggested Instagram caption to accompany the post.\n3. A list of suitable hashtags.\n\n\n\n",
"batching": {},
"messages": {
"messageValues": [
{
"message": "you are a self growth and partnership mentor and coach and by giving inspirational quotes you will give insight and guidline to people for beeter life."
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "eae5a242-b569-4cd4-8b34-4e29efc763dd",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
880,
-64
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "9691f4f7-be6f-421a-adcc-60e2244a673b",
"name": "Code-Split-LangChain",
"type": "n8n-nodes-base.code",
"position": [
1232,
-288
],
"parameters": {
"jsCode": "const input = items[0].json.text.replace(/[\"\u201c]/g, ''); \n// const input = items[0].json.choices[0].message.content.replace(/[\"\u201c]/g, ''); \nconst lines = input.split('\\n').filter(line => line.trim() !== ''); \n\nreturn [\n {\n json: {\n quote: lines[0] || '',\n caption: lines[1] || '',\n hashtags: lines[2] || ''\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "65ea98d7-335b-449f-a176-6bb1842fe888",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
208,
-288
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "dc4cc876-bb3a-4615-9e0b-d51cde616046",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-512
],
"parameters": {
"color": 7,
"width": 560,
"height": 592,
"content": "# 2. Quote Generation\n\n* Use Model to generate a new quote\n* Split outcome to Quote, Caption and Hashtag for the next step"
},
"typeVersion": 1
},
{
"id": "20f471e4-32dd-4d07-bce6-52cef13320c8",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1392,
-512
],
"parameters": {
"color": 7,
"width": 432,
"height": 512,
"content": "# 3. Save new Quote\n\n* save new quote to the file for the next run"
},
"typeVersion": 1
},
{
"id": "fac18206-c76e-4045-8ccb-71b1640302cb",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1840,
-512
],
"parameters": {
"color": 7,
"width": 544,
"height": 512,
"content": "# 4. Image Generation and Send Email\n\n* Generate Image based on quote\n* Send email by attach the generated image and include Quote, Caption and Hashtag"
},
"typeVersion": 1
},
{
"id": "3104990d-c570-47d2-826a-68ec886bac28",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-512
],
"parameters": {
"color": 7,
"width": 672,
"height": 512,
"content": "# 1. Initial Stage\n\n* Schedule node is running the workflow periodically based on user configuration\n* Next node read all previous generated quotes and convert it to JSON format for the next step to avoid duplicate generation"
},
"typeVersion": 1
},
{
"id": "e7cc6bba-55d0-4b42-a26f-8a7ff84d6c1a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-144
],
"parameters": {
"color": 3,
"height": 80,
"content": "Update System and User Prompt Based on your needs"
},
"typeVersion": 1
},
{
"id": "9c1bc39c-4dec-413f-a37f-dddb0fb87a08",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1856,
-112
],
"parameters": {
"color": 3,
"width": 256,
"height": 80,
"content": "Update User Prompt if you need to change the image generation style"
},
"typeVersion": 1
},
{
"id": "781a8396-7098-4724-920c-d3258511862b",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2128,
-112
],
"parameters": {
"color": 3,
"width": 208,
"height": 80,
"content": "Update receiver email address field"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "9HH2EGZy0RsECzde",
"executionOrder": "v1"
},
"versionId": "dd9b6456-4d5a-4386-86f4-e8ace8cacd82",
"connections": {
"Basic LLM Chain": {
"main": [
[
{
"node": "Code-Split-LangChain",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Read Text Files from Disk",
"type": "main",
"index": 0
}
]
]
},
"Generate an image": {
"main": [
[
{
"node": "Send email",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code-Split-LangChain": {
"main": [
[
{
"node": "Convert Quote to File",
"type": "main",
"index": 0
}
]
]
},
"Convert Quote to File": {
"main": [
[
{
"node": "Write Text Files from Disk",
"type": "main",
"index": 0
}
]
]
},
"Extract from Text File": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Read Text Files from Disk": {
"main": [
[
{
"node": "Extract from Text File",
"type": "main",
"index": 0
}
]
]
},
"Write Text Files from Disk": {
"main": [
[
{
"node": "Generate an image",
"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.
googlePalmApiopenAiApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically produces daily Instagram posts based on a user-provided prompt and sends them to your email inbox. Social media creators can use it to generate content periodically and save time.
Source: https://n8n.io/workflows/9652/ — 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.
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.
An advanced AI-powered LinkedIn automation workflow built with n8n that generates high-engagement LinkedIn posts using GPT-4o-mini, optionally creates AI-generated visuals with Google Gemini, sends ev
[](https://www.youtube.com/watch?v=zBmFGT5Xlng) Never miss a vendor renewal again! This smart workflow automatically tracks expiring contracts, reminds your finance team via Slack, and helps initiate
Automate your daily AI news briefing: fetch AI-tagged stories from Hacker News, filter for the last 24 hours, scrape and summarize with GPT, then deliver a clean HTML email digest—no manual curation n