This workflow corresponds to n8n.io template #13304 — 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 →
{
"nodes": [
{
"id": "c3e34a88-f780-405c-9f56-e6a609d394ef",
"name": "Run Every Hour",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1312,
16
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "45 9-12 * * *"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "30d3dec6-7680-4018-bca6-be912c72d5cb",
"name": "Load LinkedIn Organization Credentials",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1104,
16
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "313dc714-48f6-462b-9a86-a4b010dd4932",
"name": "Fetch Approved LinkedIn Posts",
"type": "n8n-nodes-base.googleSheets",
"position": [
-896,
16
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "d08ff1e5-0996-49a3-b2d1-d355fc50e347",
"name": "Filter Posts Scheduled for Today",
"type": "n8n-nodes-base.code",
"position": [
-688,
16
],
"parameters": {
"jsCode": "// Get today's date (just the date part, no time)\nconst today = new Date();\nconst todayDateString = today.toISOString().split('T')[0]; // Format: 2025-10-30\n\n// Filter items where Scheduled On matches today\nconst filteredItems = [];\n\nfor (const item of $input.all()) {\n // Try different possible field names\n const scheduledOn = item.json['Scheduled On'] || item.json['scheduled_on'] || item.json.scheduledOn;\n \n console.log(\"Scheduled On value:\", scheduledOn);\n console.log(\"Type:\", typeof scheduledOn);\n \n if (scheduledOn) {\n // Extract just the date part from the scheduled value\n let scheduledDateString = '';\n \n if (typeof scheduledOn === 'string') {\n // Extract YYYY-MM-DD from string like \"2025-10-30 10:00\" or \"2025-10-30 06-42\"\n const dateMatch = scheduledOn.match(/(\\d{4}-\\d{2}-\\d{2})/);\n if (dateMatch) {\n scheduledDateString = dateMatch[1];\n }\n } else if (scheduledOn instanceof Date) {\n scheduledDateString = scheduledOn.toISOString().split('T')[0];\n }\n \n console.log(\"Extracted date:\", scheduledDateString);\n console.log(\"Matches today?\", scheduledDateString === todayDateString);\n \n // If dates match, keep this item\n if (scheduledDateString === todayDateString) {\n filteredItems.push(item);\n }\n }\n}\n\nreturn filteredItems;"
},
"typeVersion": 2
},
{
"id": "0e655bcd-51ca-4504-911a-a976bf997e8b",
"name": "Process First Post Only",
"type": "n8n-nodes-base.code",
"position": [
-480,
16
],
"parameters": {
"jsCode": "// Get all incoming items\nconst items = $input.all();\n\n// Return only the first item\nreturn [\n items[0]\n];\n"
},
"typeVersion": 2
},
{
"id": "d4d889cc-29fd-452e-8edf-f765db5ac590",
"name": "Route by Post Type",
"type": "n8n-nodes-base.switch",
"position": [
-272,
16
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "62af730b-67b8-43a6-ad2d-3bc19807ae31",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Post Type'] }}",
"rightValue": "=Creative Post"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "77d31a46-40e7-4a8b-9757-657f8e957c64",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Post Type'] }}",
"rightValue": "Article"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "f868aab4-b455-413e-8973-55255732bb7c",
"name": "Mark as Scheduled in Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
0,
0
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('Route by Post Type').item.json.row_number }}",
"Approval Status": "Scheduled"
},
"schema": [
{
"id": "Scheduled On",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Scheduled On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Platform",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Platform",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Media URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Media URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Approval Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Approval Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post URL",
"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": 98565607,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rpCJPyjTumUaJ3oH71cHxIq2m3jY8RQB0YCsZGaxMKg/edit#gid=98565607",
"cachedResultName": "Post URL"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "e9a9ffc0-6bbb-45dc-a1ab-528fbc9ba61d",
"name": "Wait Until Scheduled Time",
"type": "n8n-nodes-base.wait",
"position": [
192,
0
],
"parameters": {
"resume": "specificTime",
"dateTime": "={{ DateTime.fromFormat($('Route by Post Type').item.json['Scheduled On'], 'yyyy-MM-dd HH-mm', { zone: 'America/New_York' }).setZone('Asia/Kolkata').toFormat(\"yyyy-MM-dd'T'HH:mm:ss\") }}"
},
"typeVersion": 1.1
},
{
"id": "00e87b7f-873e-4061-8e09-ee101e3e5f04",
"name": "Prepare Post Data",
"type": "n8n-nodes-base.aggregate",
"position": [
400,
0
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{}
]
}
},
"typeVersion": 1
},
{
"id": "bd94dd58-f3f1-415c-9192-efd08f3a5a3c",
"name": "Download Image from Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
608,
0
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $node['Route by Post Type'].json['Media URL'] }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "00b7c4b1-8d89-484d-87d5-283b7be98c01",
"name": "Publish Creative Post to LinkedIn",
"type": "n8n-nodes-base.linkedIn",
"position": [
880,
0
],
"parameters": {
"text": "={{ $node['Route by Post Type'].json.Caption }}",
"postAs": "organization",
"organization": "56420402",
"additionalFields": {},
"shareMediaCategory": "IMAGE"
},
"credentials": {
"linkedInOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "aaaa6703-293b-483d-b13c-b0dfe1e71bfd",
"name": "Save Post URL & Mark Published",
"type": "n8n-nodes-base.googleSheets",
"position": [
1168,
0
],
"parameters": {
"columns": {
"value": {
"Post URL": "={{ \"https://www.linkedin.com/feed/update/\" + $json.urn }}",
"row_number": "={{ $node['Route by Post Type'].json.row_number }}",
"Approval Status": "Published"
},
"schema": [
{
"id": "Scheduled On",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Scheduled On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Platform",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Platform",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Media URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Media URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Approval Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Approval Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Post URL",
"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": 98565607,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rpCJPyjTumUaJ3oH71cHxIq2m3jY8RQB0YCsZGaxMKg/edit#gid=98565607",
"cachedResultName": "Post URL"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "0f1d3405-1bc5-4803-9b11-f175140a9ea5",
"name": "Mark Article as Scheduled",
"type": "n8n-nodes-base.googleSheets",
"position": [
64,
544
],
"parameters": {
"columns": {
"value": {
"row_number": "={{ $('Route by Post Type').item.json.row_number }}",
"Approval Status": "Scheduled"
},
"schema": [
{
"id": "Scheduled On",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Scheduled On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Platform",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Platform",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Media URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Media URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Approval Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Approval Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post URL",
"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": 98565607,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rpCJPyjTumUaJ3oH71cHxIq2m3jY8RQB0YCsZGaxMKg/edit#gid=98565607",
"cachedResultName": "Post URL"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "4f41f744-eee1-47d7-adc2-5dce7035e2cc",
"name": "Wait Until Article Scheduled Time",
"type": "n8n-nodes-base.wait",
"position": [
256,
544
],
"parameters": {
"resume": "specificTime",
"dateTime": "={{ DateTime.fromFormat($('Route by Post Type').item.json['Scheduled On'], 'yyyy-MM-dd HH-mm', { zone: 'America/New_York' }).setZone('Asia/Kolkata').toFormat(\"yyyy-MM-dd'T'HH:mm:ss\") }}"
},
"typeVersion": 1.1
},
{
"id": "3c53407e-0d38-4317-843d-c2df3907ca5f",
"name": "Prepare Article Data",
"type": "n8n-nodes-base.aggregate",
"position": [
464,
544
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{}
]
}
},
"typeVersion": 1
},
{
"id": "8543dd4c-ec1c-45f2-a1cd-55a1dfbcb2e1",
"name": "Publish Article Link to LinkedIn",
"type": "n8n-nodes-base.linkedIn",
"position": [
688,
544
],
"parameters": {
"text": "={{ $node['Route by Post Type'].json.Caption }}",
"postAs": "organization",
"organization": "56420402",
"additionalFields": {
"originalUrl": "={{ $node['Route by Post Type'].json['Media URL'] }}"
},
"shareMediaCategory": "ARTICLE"
},
"credentials": {
"linkedInOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a02fadd8-013f-4ac4-a674-863398cb8bb6",
"name": "Save Article URL & Mark Published",
"type": "n8n-nodes-base.googleSheets",
"position": [
944,
544
],
"parameters": {
"columns": {
"value": {
"Post URL": "={{ \"https://www.linkedin.com/feed/update/\" + $json.urn }}",
"row_number": "={{ $node['Route by Post Type'].json.row_number }}",
"Approval Status": "Published"
},
"schema": [
{
"id": "Scheduled On",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Scheduled On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Platform",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Platform",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Media URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Media URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Approval Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Approval Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes: ADD SYBAL LOGO TO EACH IMAGE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Post URL",
"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": 98565607,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rpCJPyjTumUaJ3oH71cHxIq2m3jY8RQB0YCsZGaxMKg/edit#gid=98565607",
"cachedResultName": "Post URL"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "=YOUR_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "b542a43b-5ca7-46ca-a888-95a299a6678f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1792,
-400
],
"parameters": {
"width": 432,
"height": 976,
"content": "# Schedule and auto-publish LinkedIn posts from Google Sheets\n\nAutomate LinkedIn organization page posting with precise time scheduling, Google Drive media management, and smart status tracking. Runs hourly during business hours, processes approved posts scheduled for today, waits until exact time, publishes to LinkedIn, and updates tracking sheet automatically.\n\n## How it works\n\nThe workflow triggers 4 times daily (9-12 AM) and loads your LinkedIn credentials from a Google Sheet. It fetches all posts marked \"Good\" for approval and \"LinkedIn\" as platform, then filters only those scheduled for today's date. For Creative Posts with images, it marks the post as \"Scheduled\", waits until the exact scheduled time (with timezone conversion from Eastern to India time), downloads the image from Google Drive, publishes to your LinkedIn organization page, and saves the live post URL back to the sheet with \"Published\" status. For Article posts with links, it follows the same flow but publishes as article type instead of image.\n\n## Setup steps\n\n1. **Add credentials**: Google Sheets OAuth, LinkedIn Community Management OAuth, Google Drive OAuth\n2. **Prepare tracking sheet**: Create columns for Scheduled On, Platform, Post Type, Caption, Media URL, Approval Status, Post URL, and row_number\n3. **Set credentials sheet**: Create a separate \".env\" sheet tab with LinkedIn organization ID and other config\n4. **Configure organization ID**: Update organization ID in both LinkedIn post nodes (currently: 56420402)\n5. **Set timezone**: Adjust timezone conversion in Wait nodes if not using Eastern \u2192 India conversion\n6. **Test workflow**: Add a test post scheduled for current time and verify it publishes correctly"
},
"typeVersion": 1
},
{
"id": "4ad19b59-37e8-47cc-b52c-c2212cb7bf86",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1296,
-160
],
"parameters": {
"color": 7,
"width": 496,
"height": 224,
"content": "## Trigger & Data Loading\n\nRuns 4 times daily at :45 minutes (9-12 AM), loads LinkedIn credentials, fetches approved posts filtered by platform and approval status, then filters for today's scheduled posts only"
},
"typeVersion": 1
},
{
"id": "b56fde7b-08ca-4f5d-a556-0b229a95e383",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-688,
-160
],
"parameters": {
"color": 7,
"width": 304,
"height": 224,
"content": "## Post Type Routing\n\nProcesses first pending post and routes to appropriate publishing branch based on post type (Creative Post with image or Article with link)"
},
"typeVersion": 1
},
{
"id": "3b2cdc27-c567-44ca-81ef-5ef92a8e58ec",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-192
],
"parameters": {
"color": 7,
"width": 400,
"height": 240,
"content": "## Creative Post Publishing (Image)\n\nMarks as scheduled, waits until exact time, downloads image from Google Drive, publishes to LinkedIn organization page, saves live URL and updates status to Published"
},
"typeVersion": 1
},
{
"id": "57f75d04-2020-4dda-afb6-3209e62e4259",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
352
],
"parameters": {
"color": 7,
"width": 304,
"height": 240,
"content": "## Article Post Publishing (Link)\n\nMarks article as scheduled, waits until exact time, publishes article link to LinkedIn organization page, saves post URL and marks as Published"
},
"typeVersion": 1
}
],
"connections": {
"Run Every Hour": {
"main": [
[
{
"node": "Load LinkedIn Organization Credentials",
"type": "main",
"index": 0
}
]
]
},
"Prepare Post Data": {
"main": [
[
{
"node": "Download Image from Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Route by Post Type": {
"main": [
[
{
"node": "Mark as Scheduled in Sheet",
"type": "main",
"index": 0
}
],
[
{
"node": "Mark Article as Scheduled",
"type": "main",
"index": 0
}
]
]
},
"Prepare Article Data": {
"main": [
[
{
"node": "Publish Article Link to LinkedIn",
"type": "main",
"index": 0
}
]
]
},
"Process First Post Only": {
"main": [
[
{
"node": "Route by Post Type",
"type": "main",
"index": 0
}
]
]
},
"Mark Article as Scheduled": {
"main": [
[
{
"node": "Wait Until Article Scheduled Time",
"type": "main",
"index": 0
}
]
]
},
"Wait Until Scheduled Time": {
"main": [
[
{
"node": "Prepare Post Data",
"type": "main",
"index": 0
}
]
]
},
"Mark as Scheduled in Sheet": {
"main": [
[
{
"node": "Wait Until Scheduled Time",
"type": "main",
"index": 0
}
]
]
},
"Fetch Approved LinkedIn Posts": {
"main": [
[
{
"node": "Filter Posts Scheduled for Today",
"type": "main",
"index": 0
}
]
]
},
"Download Image from Google Drive": {
"main": [
[
{
"node": "Publish Creative Post to LinkedIn",
"type": "main",
"index": 0
}
]
]
},
"Filter Posts Scheduled for Today": {
"main": [
[
{
"node": "Process First Post Only",
"type": "main",
"index": 0
}
]
]
},
"Publish Article Link to LinkedIn": {
"main": [
[
{
"node": "Save Article URL & Mark Published",
"type": "main",
"index": 0
}
]
]
},
"Publish Creative Post to LinkedIn": {
"main": [
[
{
"node": "Save Post URL & Mark Published",
"type": "main",
"index": 0
}
]
]
},
"Wait Until Article Scheduled Time": {
"main": [
[
{
"node": "Prepare Article Data",
"type": "main",
"index": 0
}
]
]
},
"Load LinkedIn Organization Credentials": {
"main": [
[
{
"node": "Fetch Approved LinkedIn Posts",
"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.
googleDriveOAuth2ApigoogleSheetsOAuth2ApilinkedInOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automate LinkedIn organization page posting with precise time scheduling and Google Drive media management. Runs hourly during business hours, processes approved posts scheduled for today, waits until exact time, publishes to LinkedIn, and updates tracking sheet—perfect for…
Source: https://n8n.io/workflows/13304/ — 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.
AI Posts Content Machine. Uses agent, stickyNote, outputParserStructured, lmChatAnthropic. Scheduled trigger; 28 nodes.
How it works
Save time - Eliminate manual LinkedIn posting and content scheduling tasks Stay consistent - Automated daily posting keeps your LinkedIn profile active and engaging Keep control - Preview every post b
> Set up n8n self-hosted instance using https://tino.vn/vps-n8n?affid=388 > Use the code ==VPSN8N== for up to 39% off.
> Recommended: Self-hosted via tino.vn/vps-n8n?affid=388 — use code VPSN8N for up to 39% off.