This workflow corresponds to n8n.io template #6217 — we link there as the canonical source.
This workflow follows the Google Drive → 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": "JEi8YuD1uPNaoepv",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "N0006_Schedule Instagram Reels (local timezone) with Google Sheets, Drive & Cloudinary",
"tags": [],
"nodes": [
{
"id": "0357178e-fb26-4964-8228-921f83aaef06",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-660,
200
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "8b542a21-1ee8-45d7-adbb-d1708b349355",
"name": "Get Execution for Instagram contents",
"type": "n8n-nodes-base.googleSheets",
"position": [
-420,
200
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Reel",
"lookupColumn": "Type"
},
{
"lookupValue": "Scheduled to post",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1315784118,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TjZL_eWbs01DdRYs8pJNDr5UMXzYe8u311o6rVUwjdg/edit#gid=1315784118",
"cachedResultName": "Execute "
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1TjZL_eWbs01DdRYs8pJNDr5UMXzYe8u311o6rVUwjdg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TjZL_eWbs01DdRYs8pJNDr5UMXzYe8u311o6rVUwjdg/edit?usp=drivesdk",
"cachedResultName": "0006_Master"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "f83b5a42-73b6-452a-998e-d7f47e73feb7",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-180,
60
],
"parameters": {
"width": 284,
"height": 354,
"content": "### Note: \nThe Google Drive folder needs to be shared publicly (Anyone with the link can view)"
},
"typeVersion": 1
},
{
"id": "32dc3be3-b6ba-41f4-af15-ac9e5f36ff58",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
340,
60
],
"parameters": {
"width": 304,
"height": 354,
"content": "After creating account and folder on Cloudinary, make sure to update the following:\n<your-cloud-name>\n<your_upload_preset>\nto match your settings"
},
"typeVersion": 1
},
{
"id": "288d81c8-3f6c-4404-9ad5-c70f28fae05f",
"name": "Setup for Instagram (access token, ig_business_id)",
"type": "n8n-nodes-base.set",
"position": [
780,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5b2dad43-2ec9-4bc0-8427-c9bab6a5fc2c",
"name": "access_token",
"type": "string",
"value": "<your-instagram-access-token>"
},
{
"id": "55b08009-fd62-44b8-b21e-6dde6aa9594f",
"name": "ig_user_id",
"type": "string",
"value": "<your-ig_user_id>"
},
{
"id": "53127a63-5583-4a5b-84bf-d2efd439af2b",
"name": "image_url",
"type": "string",
"value": "={{ $json.url }}"
},
{
"id": "90a680ca-49c2-4b83-bbf4-45614e882c01",
"name": "caption",
"type": "string",
"value": "={{ $('Get video list from a Google Drive folder').item.json['Expected content'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "68f4f02d-011b-42cd-937f-6f2aa55d5f04",
"name": "Update Execute to \"Processed\"",
"type": "n8n-nodes-base.googleSheets",
"position": [
1620,
200
],
"parameters": {
"columns": {
"value": {
"Status": "Processed",
"ExecuteId": "={{ $json.ExecuteId }}"
},
"schema": [
{
"id": "ExecuteId",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ExecuteId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Folder",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Folder",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Expected content",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Expected content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Language",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Language",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "schedule_at",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "schedule_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ExecuteId"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1315784118,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WEUHeQXFMYsWVAW3DykWwpANxxD3DxH-S6c0i06dW1g/edit#gid=1315784118",
"cachedResultName": "Execute "
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1vkawOzltRju_g313gM6ysbn-n2TkMrMtvwCfTizQU4Y",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vkawOzltRju_g313gM6ysbn-n2TkMrMtvwCfTizQU4Y/edit?usp=drivesdk",
"cachedResultName": "0005_Master"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "ccad3cfd-4158-4ba7-bfb9-0855c5286e6e",
"name": "Download Video (Reel) from Google Drive (Carousel)",
"type": "n8n-nodes-base.httpRequest",
"position": [
180,
200
],
"parameters": {
"url": "=https://drive.google.com/uc?export=download&id={{ $json.id }}",
"options": {
"response": {
"response": {
"fullResponse": true,
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "988c111d-38c8-4e97-b962-db65d9731f39",
"name": "Upload videos to Cloudinary",
"type": "n8n-nodes-base.httpRequest",
"position": [
440,
200
],
"parameters": {
"url": "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "=data"
},
{
"name": "upload_preset",
"value": "<your_upload_preset>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "fed72c81-9760-4349-ad6d-7571083ec69a",
"name": "Create Media Container (Reels)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
200
],
"parameters": {
"url": "=https://graph.instagram.com/v23.0/{{ $json.ig_user_id }}/media",
"method": "POST",
"options": {
"response": {
"response": {
"fullResponse": true
}
}
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "video_url",
"value": "={{ $json.video_url }}"
},
{
"name": "caption",
"value": "={{ $json.caption }}"
},
{
"name": "access_token",
"value": "={{ $json.access_token }}"
},
{
"name": "media_type",
"value": "REELS"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "ec04e6e4-b2ec-4d0b-9642-ac016778b711",
"name": "Publish Instagram Reels",
"type": "n8n-nodes-base.httpRequest",
"position": [
1400,
200
],
"parameters": {
"url": "=https://graph.instagram.com/v23.0/{{ $('Setup for Instagram (access token, ig_business_id)').first().json.ig_user_id }}/media_publish",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "creation_id",
"value": "={{ $json.body.id }}"
},
{
"name": "access_token",
"value": "={{ $('Setup for Instagram (access token, ig_business_id)').first().json.access_token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8dec47fa-58a6-43c3-89da-769acc7818dc",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
1220,
200
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "4d87caa0-01fd-45b0-a1fc-b0cfda42278c",
"name": "Get video list from a Google Drive folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
-80,
200
],
"parameters": {
"filter": {
"folderId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.Folder }}"
}
},
"options": {
"fields": [
"id",
"name",
"thumbnailLink",
"webViewLink"
]
},
"resource": "fileFolder",
"returnAll": true,
"queryString": "="
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "781d5f70-566f-4389-bac1-717fc41d3f14",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1620,
-220
],
"parameters": {
"width": 884,
"height": 1114,
"content": "# \ud83d\udcf9 Instagram Reels Auto-Posting Workflow\n\nThis n8n workflow automates the process of downloading a video from Google Drive, uploading it to Cloudinary, and posting it as a Reel to Instagram.\n\n## \ud83e\udded Flow Overview\n\n1. **Schedule Trigger** \n - Runs the workflow at regular intervals (e.g., hourly, daily).\n\n2. **Google Sheet: Get Scheduled Content** \n - Retrieves rows with Reel that are Scheduled to post. ([Sample link](https://docs.google.com/spreadsheets/d/1TjZL_eWbs01DdRYs8pJNDr5UMXzYe8u311o6rVUwjdg/edit?usp=sharing))\n\n3. **Google Drive: Get Video Info** \n - Note: The video folders need to be set as \"Anyone with the link can view\"\n\n4. **HTTP Request: Download Video** \n\n5. **HTTP Request: Upload to Cloudinary** \n\n6. **Set Instagram Post Data** \n - Prepares the following parameters:\n - `video_url`: from Cloudinary response\n - `caption`: from Google Sheet content\n - `access_token`, `ig_user_id`: from credentials or variables\n\n7. **HTTP Request: Create Media Container** \n\n8. **Wait** \n - Adds a short delay (e.g., 5 seconds) for media processing.\n\n9. **HTTP Request: Publish Reels** \n\n10. **Google Sheet: Update Status** \n - Marks the content as `Posted` or `Processed` in your spreadsheet.\n\n---\n\n## \u2699\ufe0f Example Setup\n\n- Google Drive: A shared folder with `.mp4` videos (The folders need to be set as \"Anyone with the link can view\"\n- Cloudinary: Active account with video upload preset\n- Instagram: Business account connected to Facebook Page\n- Sheets: A list of planned posts with columns like:\n - `Video Name`, `Type`, `Caption`, `Status`\n"
},
"typeVersion": 1
},
{
"id": "63c5ef3e-d582-4bc4-8ce5-d44d8cf57256",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
680,
60
],
"parameters": {
"width": 304,
"height": 354,
"content": "Update your Instagram's access token and user_id:\n<your-instagram-access-token>\n<your-ig_user_id>\nto match your settings"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "ce4fedad-e92f-4352-875e-6ca7044106ed",
"connections": {
"Wait": {
"main": [
[
{
"node": "Publish Instagram Reels",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Execution for Instagram contents",
"type": "main",
"index": 0
}
]
]
},
"Publish Instagram Reels": {
"main": [
[
{
"node": "Update Execute to \"Processed\"",
"type": "main",
"index": 0
}
]
]
},
"Upload videos to Cloudinary": {
"main": [
[
{
"node": "Setup for Instagram (access token, ig_business_id)",
"type": "main",
"index": 0
}
]
]
},
"Create Media Container (Reels)": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Get Execution for Instagram contents": {
"main": [
[
{
"node": "Get video list from a Google Drive folder",
"type": "main",
"index": 0
}
]
]
},
"Get video list from a Google Drive folder": {
"main": [
[
{
"node": "Download Video (Reel) from Google Drive (Carousel)",
"type": "main",
"index": 0
}
]
]
},
"Download Video (Reel) from Google Drive (Carousel)": {
"main": [
[
{
"node": "Upload videos to Cloudinary",
"type": "main",
"index": 0
}
]
]
},
"Setup for Instagram (access token, ig_business_id)": {
"main": [
[
{
"node": "Create Media Container (Reels)",
"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.
googleDriveOAuth2ApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is ideal for social media managers, content creators, marketing teams, and automation enthusiasts looking to streamline their Instagram Reels posting from Google Drive using n8n, Google Sheets, and Cloudinary.
Source: https://n8n.io/workflows/6217/ — 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.
How it works
Automate Facebook post scheduling from a Google Sheets content calendar. Runs 4 times daily, reads approved posts scheduled for today, downloads images from Google Drive, schedules via Facebook Graph
This workflow is ideal for social media managers, content creators, marketers, and small businesses who want to automate Instagram Carousel posts using Google Sheets and Google Drive. It is also suita
Content creators, digital marketers, and social media managers who want to automate the creation of short-form videos for platforms like TikTok, YouTube Shorts, and Instagram Reels without extensive v
This n8n workflow automates the process of uploading video and image advertisements to Meta Ads Manager via the Meta Graph API (Facebook Ads) directly from Google Sheets and Google Drive. The workflow