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 →
{
"name": "Auto-Instagram-post",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 13,
"triggerAtMinute": 10
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
208,
0
],
"id": "2287160e-776d-42ea-8f76-98c3bfb15bfd",
"name": "Schedule Trigger"
},
{
"parameters": {
"resource": "image",
"modelId": {
"__rl": true,
"value": "models/gemini-2.5-flash-image",
"mode": "list",
"cachedResultName": "models/gemini-2.5-flash-image (Nano Banana)"
},
"prompt": "={{ Object.values(JSON.parse($node[\"Generate-Prompt-and-Caption\"].json.text))[0] }}",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"typeVersion": 1.1,
"position": [
1008,
0
],
"id": "e0776d1b-e888-46ea-8799-846854b1ad73",
"name": "Generate an image",
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "n8n-nodes-uploadtourl.uploadToUrl",
"typeVersion": 1,
"position": [
1264,
0
],
"id": "c4f13b1d-e038-40d8-9921-50c28c7a5542",
"name": "Upload a File",
"credentials": {
"uploadToUrlApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"node": "17841477181716596",
"imageUrl": "={{ $json.url }}",
"caption": "={{ Object.values(JSON.parse($node[\"Generate-Prompt-and-Caption\"].json.text))[1] }}",
"additionalFields": {}
},
"type": "@mookielianhd/n8n-nodes-instagram.instagram",
"typeVersion": 1,
"position": [
1504,
0
],
"id": "e5762c2b-ec6f-43b4-a60e-9b753d02a55f",
"name": "Publish",
"credentials": {
"instagramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "update",
"documentId": {
"__rl": true,
"value": "1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo",
"mode": "list",
"cachedResultName": "Instagram Posting",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"row_number": "={{ $('Get-Ideas').item.json.row_number }}",
"Caption": "={{ Object.values(JSON.parse($node[\"Generate-Prompt-and-Caption\"].json.text))[1] }}",
"Prompt": "={{ Object.values(JSON.parse($node[\"Generate-Prompt-and-Caption\"].json.text))[0] }}",
"Image_URL": "={{ $('Upload a File').item.json.url }}",
"Status": "Posted"
},
"matchingColumns": [
"row_number"
],
"schema": [
{
"id": "Idea/Niche",
"displayName": "Idea/Niche",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Prompt",
"displayName": "Prompt",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Caption",
"displayName": "Caption",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Image_URL",
"displayName": "Image_URL",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Status",
"displayName": "Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "row_number",
"displayName": "row_number",
"required": false,
"defaultMatch": false,
"display": true,
"type": "number",
"canBeUsedToMatch": true,
"readOnly": true,
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
1728,
0
],
"id": "2062a43c-d9e2-470b-8598-dacbf446a229",
"name": "Update row in sheet",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"documentId": {
"__rl": true,
"value": "1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo",
"mode": "list",
"cachedResultName": "Instagram Posting",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1db8d4y_pxKDWg7YIpC4qaHEzu9WmhvHJuagK8ou_UNo/edit#gid=0"
},
"filtersUI": {
"values": [
{
"lookupColumn": "Status",
"lookupValue": "Ready"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
448,
0
],
"id": "05f9851e-a36c-439a-b8e1-1178049658e5",
"name": "Get-Ideas",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "**Workflow Overview**\n**This n8n workflow automatically runs daily at **1:10 PM IST**, picks an idea from a Google Sheet, generates an AI image prompt + Instagram caption, creates the image using Gemini, uploads it, posts it to Instagram, and updates the sheet with the result.**",
"width": 448,
"color": "#E6E6E6"
},
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
-368
],
"typeVersion": 1,
"id": "8b25a3fe-37a7-4b26-bdc3-19ba06dd96ed",
"name": "Sticky Note"
},
{
"parameters": {
"promptType": "define",
"text": "=You are a Content Generator. Based on the niche provided, return a flat JSON object.\n\nIdea/Niche: {{ $json['Idea/Niche'] }}\n\nEnsure the prompt is visually distinct for this specific topic and the caption uses relevant emojis and hashtags. Return only the JSON.\n\nDIRECTIONS:\n1. Analyze the 'Idea/Niche' to determine the appropriate aesthetic (e.g., Luxury, Gritty, Minimalist, or Vibrant).\n2. Generate an 'Image Prompt' optimized for high-end AI generators. Include specific camera settings (e.g., 35mm lens), lighting (e.g., volumetric lighting), and textures relevant to that specific niche.\n3. Generate a 'Caption' that matches the tone of the niche (e.g., professional for business, poetic for travel, energetic for fitness).",
"messages": {
"messageValues": []
},
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.9,
"position": [
672,
0
],
"id": "05785c5e-4408-48d6-8ffb-12393dae31d7",
"name": "Generate-Prompt-and-Caption"
},
{
"parameters": {
"content": "## Step 1: Schedule Trigger\n\nFires the entire workflow automatically every day at **1:10 PM IST (13:10)**. No manual trigger is needed.\n",
"height": 336,
"width": 224,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-176
],
"typeVersion": 1,
"id": "beb6c797-f4a0-45ab-a511-9511a2dd353b",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "\n## Step 2: Get-Ideas\n\n### What it does\nReads rows from the **\"Instagram Posting\"** Google Sheet where the `Status` column equals `\"Ready\"`.\n\n\n### Sheet Columns Read\n- `Idea/Niche` \u2014 The niche topic entered manually by the user (e.g., *Minimalist Home*)\n- `row_number` \u2014 Used later to update the correct row after posting\n\n",
"height": 528,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"position": [
384,
-368
],
"typeVersion": 1,
"id": "3d7b0421-46ba-4f82-93a4-040fdea5f62d",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## Step 3: Generate-Prompt-and-Caption\n### What it does\nProvides the **GPT-4.1 Nano** language model as the brain for the `Generate-Prompt-and-Caption` Basic LLM node.\nIt Takes the `Idea/Niche` from the Google Sheet and generates two things: **An image prompt** , **An Instagram caption**\n\n",
"height": 464,
"width": 288,
"color": 2
},
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-304
],
"typeVersion": 1,
"id": "04427449-a3bf-4ec2-a7b3-ad1bf1977a14",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## Step 4: Generate an image\n\n### What it does\nTakes the **Image Prompt** generated by the LLM and uses **Google Gemini 2.5 Flash Image** model to generate the actual image.\n\n",
"height": 400
},
"type": "n8n-nodes-base.stickyNote",
"position": [
944,
-240
],
"typeVersion": 1,
"id": "1e3e29c4-1525-49c8-9c6d-3bfce2e59a00",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "## Step 5: Upload to URL\n\n### What it does\nUploads the **generated image binary** to a public CDN via the `uploadtourl` service, and returns a **public URL** for the image. This URL is needed for both Instagram publishing and saving to the sheet.\n\n",
"height": 432,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
-272
],
"typeVersion": 1,
"id": "c3e5356f-47c4-4c5f-bfdc-02fb85087132",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "## Step 7: Update row in sheet\n\n### What it does\nUpdates the original row in the **Google Sheet** with all the auto-generated data after a successful post, marking the workflow cycle as complete.\n\n",
"height": 400,
"width": 224,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-240
],
"typeVersion": 1,
"id": "6a7a0fd8-af33-40be-b0c0-7abc8421995d",
"name": "Sticky Note6"
},
{
"parameters": {
"content": "## Step 6: Publish\n\n### What it does\nPosts the generated image to **Instagram** as a feed post with the AI-generated caption.\n\n",
"height": 352,
"width": 208,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1456,
-192
],
"typeVersion": 1,
"id": "8943dcb5-2e22-4d66-9d78-11bf6c600236",
"name": "Sticky Note7"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1-nano",
"mode": "list",
"cachedResultName": "gpt-4.1-nano"
},
"builtInTools": {},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
640,
176
],
"id": "7118efda-d59f-479b-8278-18f1568e06da",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Get-Ideas",
"type": "main",
"index": 0
}
]
]
},
"Generate an image": {
"main": [
[
{
"node": "Upload a File",
"type": "main",
"index": 0
}
]
]
},
"Upload a File": {
"main": [
[
{
"node": "Publish",
"type": "main",
"index": 0
}
]
]
},
"Publish": {
"main": [
[
{
"node": "Update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Get-Ideas": {
"main": [
[
{
"node": "Generate-Prompt-and-Caption",
"type": "main",
"index": 0
}
]
]
},
"Generate-Prompt-and-Caption": {
"main": [
[
{
"node": "Generate an image",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate-Prompt-and-Caption",
"type": "ai_languageModel",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"versionId": "b7b18580-c992-4fc7-b878-d7035ace2237",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "YSNgbFkI26v0HR3w",
"tags": []
}
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.
googlePalmApigoogleSheetsOAuth2ApiinstagramApiopenAiApiuploadToUrlApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Effortlessly maintain a consistent Instagram presence by automating the creation and posting of engaging content, saving hours of manual effort for busy creators and small business owners. This workflow generates fresh image ideas from a Google Sheet, uses Google Gemini to create custom visuals based on those ideas, and then uploads and publishes them directly to Instagram via a dedicated node. The key step involves the AI-driven image generation, which ensures each post feels unique and tailored, while updating your sheet tracks everything seamlessly.
Use this workflow for regular, low-effort social media scheduling, such as daily inspirational quotes or weekly product highlights, especially if you already manage content in Google Sheets. Avoid it for high-volume posting or when needing advanced editing, as it focuses on simple automation rather than complex customisation. Common variations include swapping Gemini for OpenAI's chat model to refine captions or adjusting the cron trigger for less frequent posts like bi-weekly updates.
About this workflow
Auto-Instagram-post. Uses googleGemini, n8n-nodes-uploadtourl, @mookielianhd/n8n-nodes-instagram, googleSheets. Scheduled trigger; 16 nodes.
Source: https://github.com/jiteshdugar/n8n-workflows/blob/main/Auto-Instagram-post.json — 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.
Youtube Video Creator. Uses googleSheets, chainLlm, lmChatOpenAi, outputParserStructured. Scheduled trigger; 21 nodes.
YouTube AI analys. Uses youTube, httpRequest, googleSheets, lmChatOpenRouter. Scheduled trigger; 55 nodes.
What It Does
3-Generate_AI_Viral_Videos_with_Seedance_and_Upload_to_TikTok__YouTube___Instagram. Uses agent, toolThink, lmChatOpenAi, outputParserStructured. Scheduled trigger; 41 nodes.
This template is ideal for creators, content marketers, social media managers, and AI enthusiasts who want to automate the production of short-form, visually captivating videos for platforms like TikT