This workflow corresponds to n8n.io template #7601 — we link there as the canonical source.
This workflow follows the Facebookgraphapi → HTTP Request 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c390b5ce-28f0-4371-af0a-50e9f3ba7f7b",
"name": "Collect Media IDs",
"type": "n8n-nodes-base.code",
"position": [
-4080,
2816
],
"parameters": {
"jsCode": "// Collect all media IDs from the loop\nconst items = $input.all();\n\n// Extract media IDs and other data\nconst mediaIds = [];\nlet commonData = {};\n\nfor (const item of items) {\n if (item.json.media_id) {\n mediaIds.push(item.json.media_id);\n }\n \n // Store common data from first item\n if (Object.keys(commonData).length === 0) {\n commonData = {\n model: item.json.model,\n instagram_content: item.json.instagram_content,\n \"Instagram Account ID\": item.json[\"Instagram Account ID\"],\n \"Facebook Graph\": item.json[\"Facebook Graph\"],\n \"airtable id\": item.json[\"airtable id\"]\n };\n }\n}\n\n// Return collected data\nreturn [{\n json: {\n ...commonData,\n media_ids: mediaIds,\n total_media_count: mediaIds.length\n }\n}];"
},
"typeVersion": 2
},
{
"id": "b525ffe9-f92d-42ec-8e61-edea35ac01a0",
"name": "Download file1",
"type": "n8n-nodes-base.googleDrive",
"onError": "continueRegularOutput",
"position": [
-4016,
3136
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.item_url }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3,
"alwaysOutputData": false
},
{
"id": "192bcaf1-dc0c-477f-9c10-66e53172b9f8",
"name": "Upload images to Cloudinary",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
-3680,
3136
],
"parameters": {
"url": "https://api.cloudinary.com/v1_1/dd4rbdyco/image/upload",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
},
{
"name": "upload_preset",
"value": "N8N Upload"
}
]
},
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
},
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "bd8b16ef-6730-4ac8-9161-d6e5ca524b22",
"name": "Edit Fields1",
"type": "n8n-nodes-base.set",
"onError": "continueRegularOutput",
"position": [
-3248,
3216
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a699442d-a08f-48e3-8125-ff9550cef688",
"name": "media_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "b7aa553e-b09f-49f4-9236-006661def799",
"name": "pose_number",
"type": "number",
"value": "={{ $('Download file1').item.json.pose_number }}"
},
{
"id": "d9cc775g-d2b1-6bg6-b458-228883fgg9bb",
"name": "instagram_content",
"type": "string",
"value": "={{ $('Download file1').item.json.instagram_content }}"
},
{
"id": "eadd886h-e3c2-7ch7-c569-339994ghhacc",
"name": "Instagram Account ID",
"type": "string",
"value": "={{ $('Download file1').item.json['node (Instagram Account ID)'] }}"
},
{
"id": "d3e0804b-fe7a-4e1b-a7b0-4127a59e81db",
"name": "airtable id",
"type": "string",
"value": "={{ $('Download file1').item.json['airtable id'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "00815309-85ec-4b32-a589-19255c5b5a3f",
"name": "Loop Over Items1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-4304,
3136
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "3607eedf-8d83-429b-b02a-f8ce2bec7045",
"name": "Send Update Message",
"type": "n8n-nodes-base.telegram",
"position": [
-2960,
2816
],
"parameters": {
"text": "=The Carousel post {{ $json.instagram_content }} has been successfully uploaded to Instagram.",
"chatId": "123456789",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "9775cd2a-5048-4ed6-a120-252bbd95a61f",
"name": "Edit Carousel",
"type": "n8n-nodes-base.facebookGraphApi",
"position": [
-3632,
2816
],
"parameters": {
"edge": "=media",
"node": "={{ $json['Instagram Account ID'] }}",
"options": {
"queryParameters": {
"parameter": [
{
"name": "media_type",
"value": "CAROUSEL"
},
{
"name": "children",
"value": "={{ $json.media_ids }}"
},
{
"name": "caption",
"value": "={{ $json.instagram_content }}"
}
]
}
},
"graphApiVersion": "v22.0",
"httpRequestMethod": "POST"
},
"credentials": {
"facebookGraphApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "1205b4bd-ac30-4559-b2ae-23ce5fd85db4",
"name": "Create each Carousel Picture",
"type": "n8n-nodes-base.facebookGraphApi",
"onError": "continueRegularOutput",
"position": [
-3488,
3168
],
"parameters": {
"edge": "media",
"node": "={{ $('Download file1').item.json['node (Instagram Account ID)'] }}",
"options": {
"queryParameters": {
"parameter": [
{
"name": "=image_url",
"value": "={{ $json.url }}"
},
{
"name": "is_carousel_item",
"value": "true"
}
]
}
},
"graphApiVersion": "v22.0",
"httpRequestMethod": "POST"
},
"credentials": {
"facebookGraphApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e63172b8-812c-4489-9c51-447346c6b751",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-4752,
3136
],
"parameters": {},
"typeVersion": 1
},
{
"id": "1ec7461c-8d0b-4f4d-8e84-872b8ebff0cc",
"name": "Prepare Data",
"type": "n8n-nodes-base.set",
"position": [
-4528,
3136
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8b6339f9-f5a5-4f77-ba88-9c5e7a0e9421",
"name": "instagram_content",
"type": "string",
"value": "="
},
{
"id": "d811f293-3ec5-494f-97c4-c76b457029e1",
"name": "node (Instagram Account ID)",
"type": "string",
"value": "="
},
{
"id": "daca9119-e5a8-454c-9180-65558a7a32c7",
"name": "pose_1_drive_fotolink",
"type": "string",
"value": "="
},
{
"id": "616f8862-92fd-4aa1-98e0-a38981fa83d8",
"name": "pose_2_drive_fotolink",
"type": "string",
"value": "="
},
{
"id": "f9c57f27-3f6b-4f4d-91fc-9c331b04c29f",
"name": "pose_3_drive_fotolink",
"type": "string",
"value": "="
},
{
"id": "f8ce5994-d0c5-4546-b51c-21c06c72ec07",
"name": "Facebook Graph",
"type": "string",
"value": "="
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1017bf09-2e5f-4bcd-9df6-68e96f970b39",
"name": "Wait before Carousel",
"type": "n8n-nodes-base.wait",
"position": [
-3856,
2816
],
"parameters": {
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "d15cc5bc-9010-45cc-9749-ba01b372f5ae",
"name": "Wait before Upload to Instagram",
"type": "n8n-nodes-base.wait",
"position": [
-3408,
2816
],
"parameters": {
"amount": 15
},
"typeVersion": 1.1
},
{
"id": "b4047815-5361-4b75-b5a4-63d9036f2f0d",
"name": "Publish Carousel to Instagram",
"type": "n8n-nodes-base.facebookGraphApi",
"onError": "continueRegularOutput",
"position": [
-3184,
2816
],
"parameters": {
"edge": "media_publish",
"node": "={{ $('Collect Media IDs').item.json['Instagram Account ID'] }}",
"options": {
"queryParameters": {
"parameter": [
{
"name": "creation_id",
"value": "={{ $json.id }}"
}
]
}
},
"graphApiVersion": "v22.0",
"httpRequestMethod": "POST"
},
"credentials": {
"facebookGraphApi": {
"name": "<your credential>"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "2564f356-047c-4395-a622-f3143a1d3b5c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-4592,
2928
],
"parameters": {
"height": 496,
"content": "## Prepare Data\nPlease insert:\n1. Instagram Account ID\n2. Google drive Links from the Posts zu upload\n3. Add Instagram Content (The Text to Post)"
},
"typeVersion": 1
},
{
"id": "8fb94935-bc6f-4426-8ccd-33bc51d33d31",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3760,
3056
],
"parameters": {
"height": 256,
"content": "## Add Cloudinary Account\n"
},
"typeVersion": 1
},
{
"id": "5d6dec77-7874-432d-aeac-003debd712bc",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-4096,
3056
],
"parameters": {
"height": 256,
"content": "## Add Gdrive Account"
},
"typeVersion": 1
},
{
"id": "b915d053-703a-412f-954e-d603ef61d9da",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3024,
2736
],
"parameters": {
"height": 256,
"content": "## Add Telegram Bot ID\n"
},
"typeVersion": 1
}
],
"connections": {
"Edit Fields1": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Prepare Data": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Edit Carousel": {
"main": [
[
{
"node": "Wait before Upload to Instagram",
"type": "main",
"index": 0
}
]
]
},
"Download file1": {
"main": [
[
{
"node": "Upload images to Cloudinary",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items1": {
"main": [
[
{
"node": "Collect Media IDs",
"type": "main",
"index": 0
}
],
[
{
"node": "Download file1",
"type": "main",
"index": 0
}
]
]
},
"Collect Media IDs": {
"main": [
[
{
"node": "Wait before Carousel",
"type": "main",
"index": 0
}
]
]
},
"Wait before Carousel": {
"main": [
[
{
"node": "Edit Carousel",
"type": "main",
"index": 0
}
]
]
},
"Upload images to Cloudinary": {
"main": [
[
{
"node": "Create each Carousel Picture",
"type": "main",
"index": 0
}
]
]
},
"Create each Carousel Picture": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"Publish Carousel to Instagram": {
"main": [
[
{
"node": "Send Update Message",
"type": "main",
"index": 0
}
]
]
},
"Wait before Upload to Instagram": {
"main": [
[
{
"node": "Publish Carousel to Instagram",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Prepare Data",
"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.
facebookGraphApigoogleDriveOAuth2ApihttpBasicAuthhttpBearerAuthtelegramApi
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 creation and publishing of Instagram carousel posts by downloading images from Google Drive, uploading them to Cloudinary for hosting, and publishing them as a coordinated carousel post via Facebook Graph API.
Source: https://n8n.io/workflows/7601/ — 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.
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
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
AI Automation Mentor TikTok Pipeline. Uses telegramTrigger, perplexity, openAi, httpRequest. Event-driven trigger; 32 nodes.
Anubis TikTok Videos with VEED.io AI Avatars, ElevenLabs & GPT-4. Uses telegramTrigger, perplexity, openAi, httpRequest. Event-driven trigger; 31 nodes.
This automation template is designed for content creators, social media managers, and influencers who want to streamline their video publishing workflow. It automatically detects new videos uploaded t