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 maintaining consistent LinkedIn presence.
This workflow automates LinkedIn organization page posting with precise timing control and a centralized Google Sheets content calendar. It runs four times daily (9:45 AM, 10:45 AM, 11:45 AM, 12:45 PM) and reads your Google Sheet to find posts marked with Approval Status = "Good" and Platform = "LinkedIn" that are scheduled for today. Unlike batch processing workflows, this processes ONE post per run to prevent duplicate scheduling. Once it finds a post, it marks it as "Scheduled" in your sheet, then uses a Wait node to pause the workflow execution until the exact scheduled time (with automatic timezone conversion from Eastern to India time). At the scheduled moment, it either downloads an image from Google Drive and publishes a Creative Post, or publishes an Article link—depending on the Post Type. After successfully publishing to your LinkedIn organization page, it updates your Google Sheet with the live post URL and changes the Approval Status to "Published", creating a complete audit trail with precise timing control.
Perfect for social media managers maintaining consistent LinkedIn presence, marketing agencies scheduling client LinkedIn content with approval checkpoints, content creators batch-planning professional posts, and teams needing collaborative LinkedIn calendars with exact time control.
Precise time scheduling with Wait node: Unlike immediate publishing, this workflow uses n8n's Wait node to pause execution until the exact scheduled time—ensuring posts publish at 10:00 AM sharp, not 9:45 AM when the workflow runs.
Timezone conversion included: Automatically converts "Scheduled On" times from Eastern Time (content creator's timezone) to India Time (server timezone) using DateTime.fromFormat—no manual calculation needed.
One post per run: Processes only the first pending post each time the workflow runs, preventing duplicate scheduling if multiple posts share the same time slot—ensures clean execution and tracking.
Dual post type support: Handles both Creative Posts (image posts downloaded from Google Drive) and Articles (link posts with article URL)—automatically routes based on Post Type column.
LinkedIn organization posting: Posts directly to your LinkedIn organization/company page (not personal profile) using LinkedIn Community Management API with proper OAuth authentication.
Status progression tracking: Three-stage workflow: Good (approved) → Scheduled (waiting for time) → Published (live on LinkedIn)—always know what's queued vs. what's live.
Google Sheets content calendar: Manage LinkedIn posts in a familiar spreadsheet with columns for Scheduled On, Platform, Post Type, Caption, Media URL, and Approval Status—no complex tools needed.
Google Drive media integration: Stores images in Google Drive (centralized storage), then automatically downloads them when publishing Creative Posts—supports shared drives and private files.
Post URL tracking: After publishing, updates Google Sheet with the live LinkedIn post URL (https://www.linkedin.com/feed/update/{urn})—enables easy performance tracking and reporting.
Runs during business hours only: Schedule trigger fires at :45 minutes (9-12 AM) to catch morning posts—won't run at night or on weekends unless you modify the cron.
A cron trigger runs at 9:45 AM, 10:45 AM, 11:45 AM, and 12:45 PM every day. The :45 timing gives a 15-minute buffer before the hour to schedule posts for :00, :15, :30, or :45 times.
The workflow reads a separate ".env" sheet in your Google Sheets document containing:
This centralizes credentials so multiple workflows can share the same settings.
The workflow reads your main "Post URL" sheet and applies two filters:
This returns all approved LinkedIn posts regardless of date.
A Code node compares the "Scheduled On" column value against today's date (ignores time, just checks the date part). Only posts scheduled for today pass through.
Supported date format:
Critical difference from Facebook workflow: A Code node extracts only the FIRST item from the filtered posts.
Why only one post?
A Switch node checks the Post Type column:
Before waiting, the workflow updates the Google Sheet:
This prevents the same post from being picked up again in the next hourly run.
Most critical node: The Wait node pauses workflow execution until the exact scheduled time.
Timezone conversion logic:
DateTime.fromFormat(
$('Route by Post Type').item.json['Scheduled On'],
'yyyy-MM-dd HH-mm',
{ zone: 'America/New_York' } // Input timezone (Eastern)
)
.setZone('Asia/Kolkata') // Server timezone (India)
.toFormat("yyyy-MM-dd'T'HH:mm:ss")
Example:
Aggregate node (keeps data structure intact for next nodes).
Uses the Media URL (Google Drive sharing link) to download the image file. Supports:
The image is downloaded as binary data.
Uses n8n's LinkedIn node with these settings:
The LinkedIn API returns a URN (unique post identifier).
Constructs the LinkedIn post URL:
https://www.linkedin.com/feed/update/{urn}
Then updates the Google Sheet row:
Updates Google Sheet: Approval Status = "Scheduled"
Same Wait node logic as Creative Posts—pauses until exact scheduled time with timezone conversion.
Aggregate node.
Uses LinkedIn node with these settings:
LinkedIn scrapes the article URL and creates a rich preview card.
Same as Creative Posts—constructs post URL and updates sheet with "Published" status.
Tools you'll need:
Estimated setup time: 35–40 minutes
https://your-n8n-instance.com/rest/oauth2-credential/callbackMethod 1 (URL):
https://www.linkedin.com/company/{company-name}/Method 2 (API):
/v2/organizationalEntityAcls?q=roleAssigneeCreate two sheets in one Google Sheets document:
Sheet 1: ".env" (credentials)
| LinkedIn Organization ID |
|---|
| 56420402 |
Sheet 2: "Post URL" (content calendar)
| Scheduled On | Platform | Post Type | Caption | Media URL | Approval Status | Post URL | row_number |
|---|---|---|---|---|---|---|---|
| 2025-10-30 10:00 | Creative Post | Excited to announce our new product! | https://drive.google.com/file/d/xxx | Good | 1 | ||
| 2025-10-30 14:00 | Article | Check out our latest blog post | https://blog.example.com/post | Good | 2 |
Important column details:
Open these nodes and replace "56420402" with your organization ID:
If your content calendar uses a different timezone than Eastern:
{ zone: 'America/New_York' } to your timezoneIf your n8n server is not in India Time:
.setZone('Asia/Kolkata') to your server's timezoneSocial media managers: Schedule 15-20 LinkedIn posts per week from one Google Sheet. Team members add content, you approve, workflow handles precise timing and publishing—no manual LinkedIn.com logins.
B2B marketing teams: Maintain consistent LinkedIn company page presence with thought leadership articles, product updates, and team highlights. Schedule weeks in advance, let automation publish at optimal times.
Content creators: Batch-create LinkedIn content on Mondays, schedule throughout the week with precise timing. Focus on creation, not distribution—workflow handles publishing.
Agencies managing client pages: One Google Sheet per client, separate workflows per organization ID. Centralized content calendar with approval workflow before posting to client pages.
Recruiting teams: Schedule hiring posts, culture updates, and employee spotlights to maintain active company presence. Track all post URLs for performance analysis.
Personal brands using company pages: If you manage a LinkedIn company page for your personal brand or business, schedule promotional content, case studies, and announcements with professional timing control.
Change "Process First Post Only" node logic:
Edit the "Run Every Hour" cron expression:
45 9-12 * * * (9:45-12:45 AM hourly)45 * * * * (every hour at :45)45 9-17 * * 1-5 (9 AM-5 PM, Monday-Friday)0 9,15 * * * (9:00 AM and 3:00 PM)LinkedIn supports video posts via Community Management API:
If you want to post to personal profiles (not organization):
After publishing nodes, add:
Modify .env sheet to support multiple company pages:
| Organization Name | LinkedIn Organization ID |
|---|---|
| Main Brand | 56420402 |
| Sub Brand | 78901234 |
Add "Organization Name" column to Post URL sheet, then filter and route by organization.
row_number column auto-generated by formula: =ROW()-1Need help or custom development?
📧 Email: [email protected]
🌐 Website: https://isawow.com/