AutomationFlowsSocial Media › Automate Facebook Reels Publishing with Google Sheets and Drive

Automate Facebook Reels Publishing with Google Sheets and Drive

ByĐỗ Thành Nguyên @nathando on n8n.io

> Set up n8n self-hosted instance using https://tino.vn/vps-n8n?affid=388 > Use the code ==VPSN8N== for up to 39% off.

Cron / scheduled trigger★★★★☆ complexity18 nodesGoogle DriveHTTP RequestGoogle Sheets
Social Media Trigger: Cron / scheduled Nodes: 18 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #10122 — 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 →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c98f4dee-831a-4de6-b2df-d44cf320a7f4",
      "name": "info",
      "type": "n8n-nodes-base.set",
      "position": [
        -1472,
        48
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5ca53588-a5fd-47fe-a9db-5e8b42e88a19",
              "name": "Token",
              "type": "string",
              "value": "<token>"
            },
            {
              "id": "0fc539bd-e223-4f1a-86b2-15e4b2a34df6",
              "name": "Id Page",
              "type": "string",
              "value": "<id page>"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5dee332a-6319-419c-9fe2-2ed3f4b7639b",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1696,
        48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f0a8f95d-88f8-41b6-8a38-2ae55a4ce3ec",
      "name": "Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1456,
        384
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Get Row Sheet').first().json['File ID'] }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "4424daa9-14d9-47d5-b78b-2b2fda283540",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1360,
        656
      ],
      "parameters": {
        "unit": "minutes"
      },
      "typeVersion": 1.1
    },
    {
      "id": "e8db21a1-9a82-4c4b-a50e-af406a12bb8d",
      "name": "Step 1: Initialize an Upload Session",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1664,
        384
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['Id Page'] }}/video_reels\n",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "upload_phase",
              "value": "start"
            },
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "62cef400-c3fb-439e-a0ab-3c8f77e4c158",
      "name": "Step 2: Upload the Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1040,
        384
      ],
      "parameters": {
        "url": "={{ $('Step 1: Initialize an Upload Session').first().json.body.upload_url }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "offset",
              "value": "0"
            },
            {
              "name": "file_size",
              "value": "={{ $('Get the size file').first().json.actualSize }}"
            },
            {
              "name": "=Authorization",
              "value": "=OAuth {{ $('info').first().json.Token }}"
            }
          ]
        },
        "inputDataFieldName": "=data"
      },
      "typeVersion": 4.2
    },
    {
      "id": "547c52ee-7883-432d-8485-2a7c1f3b92c9",
      "name": "Step 3: Publish the Reel",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1664,
        752
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['Id Page'] }}/video_reels",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "video_id",
              "value": "={{ $('Step 1: Initialize an Upload Session').first().json.body.video_id }}"
            },
            {
              "name": "upload_phase",
              "value": "finish"
            },
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            },
            {
              "name": "video_state",
              "value": "PUBLISHED"
            },
            {
              "name": "description",
              "value": "={{ $('Get Row Sheet').first().json['Caption'] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "91e05176-b3a8-44de-a819-32a0575e288a",
      "name": "Get Row Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1248,
        48
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=drivesdk",
          "cachedResultName": "Publish a reel on a Facebook Page"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.5
    },
    {
      "id": "ea72e8eb-6685-4e91-93cd-a9bdf276ad95",
      "name": "Get the size file",
      "type": "n8n-nodes-base.code",
      "position": [
        -1248,
        384
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const size = item.binary.data.fileSize;\n  const contentLength = Buffer.from(item.binary.data.data, 'base64').length;\n\n  item.json = {\n    declaredSize: size,\n    actualSize: contentLength\n  };\n\n  return item;\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bfb4edf0-3c25-4e88-9bf6-16657f977d59",
      "name": "Update status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1360,
        832
      ],
      "parameters": {
        "columns": {
          "value": {
            "Link post": "x",
            "row_number": "={{ $('Get Row Sheet').first().json.row_number }}"
          },
          "schema": [
            {
              "id": "File ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "File ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "File name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Caption",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Share",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Link Share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link post",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Link post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=drivesdk",
          "cachedResultName": "Publish a reel on a Facebook Page"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "ac97c446-241f-4306-bdb8-5d6768fcffa5",
      "name": "Create comment post",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1040,
        656
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/115432036514099_{{ $('Step 1: Initialize an Upload Session').first().json.body.video_id }}/comments",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            },
            {
              "name": "message",
              "value": "=Mua h\u00e0ng t\u1ea1i Shopee: {{ $('Get Row Sheet').item.json['Link Aff 1'] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d6e2986d-25da-47aa-b73e-6766b0ac6ba1",
      "name": "Search files and folders",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1424,
        -288
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "16tm-jSUaz4B4Xk8Dc0h-jxxKVydzwHKJ",
            "cachedResultUrl": "https://drive.google.com/drive/folders/16tm-jSUaz4B4Xk8Dc0h-jxxKVydzwHKJ",
            "cachedResultName": "n8n creator"
          }
        },
        "options": {
          "fields": [
            "id",
            "name"
          ]
        },
        "resource": "fileFolder",
        "returnAll": true,
        "queryString": "mimeType = 'video/mp4'",
        "searchMethod": "query"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "74566e2f-e8b3-408b-8b7b-b4f6aa5907b4",
      "name": "Schedule Trigger1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1712,
        -288
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "162ef463-3032-4744-bfea-60a02b441dc9",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1072,
        -288
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.name }}",
            "File ID": "={{ $json.id }}",
            "Link Share": "=https://drive.google.com/uc?id={{ $json.id }}&export=download"
          },
          "schema": [
            {
              "id": "Stories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "File ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Share",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link Share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "File ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE-EZ3OE-Uc3OWFbDohYI/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RnE5O06l7W6TLCLKkwEH5Oyl-EZ3OE-Uc3OWFbDohYI",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE-EZ3OE-Uc3OWFbDohYI/edit?usp=drivesdk",
          "cachedResultName": "Video stories facebook"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "33b6589f-a47e-45e1-a914-2796db631b35",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2400,
        -336
      ],
      "parameters": {
        "color": 3,
        "width": 1536,
        "height": 272,
        "content": "## Automated Google Drive Video List Update to Google Sheet\n\nThis workflow is designed to **periodically search for new MP4 video files** \n\nin a specific Google Drive folder and **update the file details** \n\n(Name, File ID, Share Link) into a Google Sheet.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e715160f-c6be-4daf-a27b-addcfe315b63",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -1040,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "960b3395-7df1-4cdd-ac7a-2a738c812cc9",
              "operator": {
                "type": "number",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"File ID\"] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9b3751d2-558e-46f7-991a-474279e09b50",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2400,
        16
      ],
      "parameters": {
        "color": 4,
        "width": 1536,
        "height": 992,
        "content": "## Publish a Reel on a Facebook Page\n\nThis advanced workflow is designed to\n\n **automatically publish a Reel on a Facebook Page** by following the platform's \n\nmulti-step uploading process, based on data pulled from a Google Sheet.\n\n#### 1. Google Sheets (required)\n\nYou can also duplicate this ready-to-use template:\n\ud83d\udc49 [Google Sheet example](https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=sharing)\n\n#### 2. Google Drive\n\nThe uploaded video must:\n\n* Be in **.mp4 format**\n* Be stored inside a **shared folder** (accessible to your connected Google account in n8n)\n\n#### 3. Facebook Page & Token\n\nYou\u2019ll need:\n\n* Your **Page ID**\n* A valid **Page Access Token** with permissions to manage and publish Reels\n\nFor detailed instructions on obtaining the Page ID and access token, see:\n\ud83d\udc49 [n8n workflow example \u2013 Publish a Reel on a Facebook Page](https://n8n.io/workflows/10038)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d54a3372-22ce-4802-80eb-3616fc0d91c2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2992,
        -336
      ],
      "parameters": {
        "width": 544,
        "height": 1344,
        "content": "# \ud83d\ude80 **About the Creator**: \n## This workflow is crafted by [**\u0110\u1ed7 Th\u00e0nh Nguy\u00ean**](https://hub.dothanhnguyen.com), \n### an automation architect and creator behind [**hub.dothanhnguyen.com**](https://hub.dothanhnguyen.com) \u2014 a space dedicated to smart workflows, content automation, and no-code productivity systems.\n\n## \ud83d\udca1 Passionate about connecting ideas with execution, Nguy\u00ean builds practical automations that bridge **Airtable, Telegram, n8n, and AI tools** into seamless ecosystems.\n\n# \ud83e\udde9 Deploy your own n8n instance via [**Tino.vn VPS**](https://tino.vn/vps-n8n?affid=388) \u2014 around **$65/year**, use code **VPSN8N** for up to **39% off** *(affiliate link)*.\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Step 1: Initialize an Upload Session",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Create comment post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "info": {
      "main": [
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "Get the size file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Row Sheet": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get the size file": {
      "main": [
        [
          {
            "node": "Step 2: Upload the Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger1": {
      "main": [
        [
          {
            "node": "Search files and folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search files and folders": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 2: Upload the Video": {
      "main": [
        [
          {
            "node": "Step 3: Publish the Reel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 3: Publish the Reel": {
      "main": [
        [
          {
            "node": "Update status",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 1: Initialize an Upload Session": {
      "main": [
        [
          {
            "node": "Google Drive",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

&gt; Set up n8n self-hosted instance using https://tino.vn/vps-n8n?affid=388 &gt; Use the code ==VPSN8N== for up to 39% off.

Source: https://n8n.io/workflows/10122/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

&gt; Recommended: Self-hosted via tino.vn/vps-n8n?affid=388 — use code VPSN8N for up to 39% off.

Google Drive, Google Sheets, HTTP Request
Social Media

AI Posts Content Machine. Uses agent, stickyNote, outputParserStructured, lmChatAnthropic. Scheduled trigger; 28 nodes.

Agent, Output Parser Structured, Anthropic Chat +7
Social Media

How it works

Agent, Output Parser Structured, Anthropic Chat +7
Social Media

More workflow: https://aitool.wiki/

Google Sheets, Google Drive, Read Write File +3
Social Media

This template is ideal for sales teams, recruiters, business development professionals, and relationship managers who need to monitor changes in their network's LinkedIn profiles. Perfect for agencies

Google Sheets, HTTP Request, Slack