AutomationFlowsSocial Media › Automate Video Story Publishing to Facebook Page Using Google Drive and Sheets

Automate Video Story Publishing to Facebook Page Using Google Drive and Sheets

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

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

Cron / scheduled trigger★★★★☆ complexity17 nodesGoogle DriveGoogle SheetsHTTP Request
Social Media Trigger: Cron / scheduled Nodes: 17 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #10067 — 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": "6610905b-a452-4271-b201-c78efb25371c",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1664,
        96
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2,
              "triggerAtMinute": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c0ba59ab-53b3-441a-a830-775dde0f4b41",
      "name": "Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1344,
        416
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('If').first().json[\"File ID\"] }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "5e527ed0-ddc1-450a-b655-127954c89fbb",
      "name": "info",
      "type": "n8n-nodes-base.set",
      "position": [
        -1440,
        96
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0fc539bd-e223-4f1a-86b2-15e4b2a34df6",
              "name": "ID Page",
              "type": "string",
              "value": "115432036514099"
            },
            {
              "id": "5ca53588-a5fd-47fe-a9db-5e8b42e88a19",
              "name": "Token",
              "type": "string",
              "value": "EAAJQeT0qhu8BO7iHI2a7ZBNGmI2iLo1SJ6hUdhlyUoJe1dCZBAZC0wkVa9gyF6AUiG4fxfc36qvTyZBeJLR60EL0FRHBYdImZC6o6PZAvdj9ZAQUbGCNJfpEZC0MCuFYxU5XlHrVrTYaqcbjtkionualjCyPxHgAdBBVvsvTrKUcu8rh4Qb0yKe5JyfTCFqpyNstZBiPnSVw35wavyowusyh5rhMZD"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d441d79f-4dcf-4142-8397-b433a5f8bf38",
      "name": "Search files and folders",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1376,
        -256
      ],
      "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": "6a4a9d0e-6e90-409e-9d75-2666edaad284",
      "name": "Schedule Trigger1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1664,
        -256
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8242c54c-0100-40ab-9ef3-10eee0587e40",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1024,
        -256
      ],
      "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": "0e173c5f-d33a-4b6e-ba29-89b815c1e26c",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -1040,
        96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e9464670-2642-4a70-9ec2-90211044bb72",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"File ID\"] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "48727079-929a-49ec-9370-a327609c3d94",
      "name": "Step 1: Initialize session",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1648,
        416
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['ID Page'] }}/video_stories",
        "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": "5a0bf363-f623-4010-be5c-430fb107d814",
      "name": "Set to the total size in bytes",
      "type": "n8n-nodes-base.code",
      "position": [
        -1040,
        416
      ],
      "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": "49bcfba4-e00b-4297-8ce8-92418531eb34",
      "name": "Step 2: Upload the stored file",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1680,
        656
      ],
      "parameters": {
        "url": "={{ $('Step 1: Initialize 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": "={{ $('Set to the total size in bytes').first().json.actualSize }}"
            },
            {
              "name": "Authorization",
              "value": "=OAuth {{ $('info').first().json.Token }}"
            }
          ]
        },
        "inputDataFieldName": "=data"
      },
      "typeVersion": 4.2
    },
    {
      "id": "d2e56376-e073-4a69-92be-002690c363c7",
      "name": "Step 3. Post video",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1456,
        656
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['Id Page'] }}/video_stories",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "video_id",
              "value": "={{ $('Step 1: Initialize session').item.json.body.video_id }}"
            },
            {
              "name": "upload_phase",
              "value": "finish"
            },
            {
              "name": "access_token",
              "value": "=EAAJQeT0qhu8BO7iHI2a7ZBNGmI2iLo1SJ6hUdhlyUoJe1dCZBAZC0wkVa9gyF6AUiG4fxfc36qvTyZBeJLR60EL0FRHBYdImZC6o6PZAvdj9ZAQUbGCNJfpEZC0MCuFYxU5XlHrVrTYaqcbjtkionualjCyPxHgAdBBVvsvTrKUcu8rh4Qb0yKe5JyfTCFqpyNstZBiPnSVw35wavyowusyh5rhMZD"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4e5360d8-184b-42c7-b21c-6179ede6f2ff",
      "name": "Get upload status",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1264,
        656
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('Step 1: Initialize session').first().json.body.video_id }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3d0876ac-b2e2-4813-862d-c1f544482787",
      "name": "Update upload status in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1056,
        656
      ],
      "parameters": {
        "columns": {
          "value": {
            "row_number": "={{ $('If').first().json.row_number }}"
          },
          "schema": [
            {
              "id": "Stories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File ID",
              "type": "string",
              "display": true,
              "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
            },
            {
              "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/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": "139aa6d4-a7fb-49e8-afa4-2b83a1c2937d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2352,
        -304
      ],
      "parameters": {
        "color": 4,
        "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** \nin a specific Google Drive folder and **update the file details** \n(Name, File ID, Share Link) into a Google Sheet.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "6dd1a5f7-d7d1-45c0-8cc0-b93950d4df97",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2352,
        48
      ],
      "parameters": {
        "color": 3,
        "width": 1536,
        "height": 816,
        "content": "\n## Automated Video Posting\n to Facebook (3-Step Upload)\n\nThis advanced workflow is designed to\n **automatically upload a video to Facebook \nPage Stories** by following the platform's \nmulti-step uploading process, based on data pulled from a Google Sheet.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "644cfefc-9786-4c56-96ac-4c9bcb7907bc",
      "name": "Get Row Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueRegularOutput",
      "position": [
        -1248,
        96
      ],
      "parameters": {
        "options": {
          "returnFirstMatch": true
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Stories"
            }
          ]
        },
        "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>"
        }
      },
      "executeOnce": false,
      "typeVersion": 4.5,
      "alwaysOutputData": true
    },
    {
      "id": "520a4585-f1a0-48ee-9dbe-eec32a2a990a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2912,
        -304
      ],
      "parameters": {
        "width": 544,
        "height": 1168,
        "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\n\n### [Template on n8n](https://n8n.io/workflows/10067-automate-video-story-publishing-to-facebook-page-using-google-drive-and-sheets/)"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Step 1: Initialize session",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "info": {
      "main": [
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "Set to the total size in bytes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Row Sheet": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get upload status": {
      "main": [
        [
          {
            "node": "Update upload status in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger1": {
      "main": [
        [
          {
            "node": "Search files and folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 3. Post video": {
      "main": [
        [
          {
            "node": "Get upload status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search files and folders": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 1: Initialize session": {
      "main": [
        [
          {
            "node": "Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set to the total size in bytes": {
      "main": [
        [
          {
            "node": "Step 2: Upload the stored file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 2: Upload the stored file": {
      "main": [
        [
          {
            "node": "Step 3. Post video",
            "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; Recommended: Self-hosted via tino.vn/vps-n8n?affid=388 — use code VPSN8N for up to 39% off.

Source: https://n8n.io/workflows/10067/ — 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; Set up n8n self-hosted instance using https://tino.vn/vps-n8n?affid=388 &gt; Use the code ==VPSN8N== for up to 39% off.

Google Drive, HTTP Request, Google Sheets
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