How to Automate Social Media Posting With n8n

Build one n8n workflow that reads a Google Sheets queue and posts to X, LinkedIn, Facebook, and Instagram on a schedule. Step-by-step guide.

By Galactic News Editorial · Published 2026-11-10T22:28:24+00:00 · Updated 2026-11-10T22:28:24+00:00

Automate social media posting with n8n: schedule trigger workflow with Google Sheets queue

You can automate social media posting with n8n by building one workflow that reads a content queue and posts to each platform on a schedule. The workflow uses a Schedule Trigger, a Google Sheet, and one node per platform. This tutorial walks through the full build, including the Instagram setup that trips most people up.

n8n is a workflow automation tool. You build workflows on a canvas by connecting nodes. Each node does one job. It can run in the cloud or on your own server. The free self-hosted Community Edition has no execution limit. Cloud plans start with a 14-day trial. Starter costs $20 a month for 2,500 executions. Pro costs $50 a month for 10,000 executions.

What You Need to Automate Social Media Posting With n8n

Before you build, gather four things. First, an n8n account or a self-hosted instance. The Community Edition is free and runs on your own server. Cloud is easier if you do not want to manage a server.

Second, a Google account for the content queue. The queue is a Google Sheet. It holds every post you plan to publish. Third, accounts on the platforms you want to post to. Fourth, developer credentials for each platform. X needs your own developer app, and write access needs a paid X API tier. LinkedIn and Facebook use OAuth, which you connect inside n8n.

Know the limits before you start. n8n ships built-in nodes for LinkedIn, X, Facebook, YouTube, and Reddit. It has no built-in node for Instagram or TikTok. Those need HTTP calls to the platform's API. That is covered in step 6.

How to Automate Social Media Posting With n8n: The Build

Step 1: Create the content queue. Open Google Sheets and create a spreadsheet called Social Queue. Add these columns: Post Text, Image URL, Platforms, Status, Publish At, and Posted At. Fill in a few test rows. Set Status to "ready" for the ones you want to post. Leave Posted At blank.

Step 2: Create the workflow and add a Schedule Trigger. In n8n, create a new workflow and name it Social Media Poster. Add a Schedule Trigger node as the first node. Set it to run every day at your chosen time. You can also use a cron expression, such as 0 9,18 * * * for 9 a.m. and 6 p.m. Set the timezone explicitly. n8n runs on the server timezone by default, and a wrong timezone is the most common scheduling bug.

Step 3: Read the queue. Add a Google Sheets node after the trigger. Set the operation to read rows from your Social Queue sheet. Connect your Google credentials. The node pulls every row into the workflow each time the trigger fires.

Step 4: Filter for the next ready post. Add a Code node or a Filter node. It should pick the first row where Status is "ready" and Publish At is in the past. Without this filter, the first run would publish your whole calendar at once. Add an IF node after it if you want an alert when the queue runs dry.

Step 5: Post to X, LinkedIn, and Facebook. Branch the workflow by platform. For X, add the X node and choose the create-a-post operation. Map the Post Text field to your sheet column. For LinkedIn, add the LinkedIn node and choose Post, then Create. You can post as a person or an organisation. For Facebook, add the Facebook node and post to your Page. Each branch uses its own credentials. Run the workflow once by hand and check that each post lands correctly.

Step 6: Handle Instagram through the Graph API. Instagram has no built-in n8n node. It also needs an image or video for every post. Text-only posts are not accepted. Use two HTTP Request nodes in sequence. The first creates a media container by calling the /me/media endpoint with your image URL and caption. The second publishes it by calling /me/media_publish with the container ID. Both calls use the same Meta access token.

Use a long-lived token. The token from the Graph API Explorer lasts about an hour. A short-lived token will make the workflow fail silently the next morning. Exchange it for a long-lived token, which lasts about 60 days. Set a reminder to refresh it.

Step 7: Mark the post as published. Add a Google Sheets node at the end of each branch. Set it to update the same row. Change Status to "posted" and fill Posted At with the current time. This stops the workflow from posting the same row again.

Step 8: Test, then activate. Run the workflow manually with a test row first. Check each platform. Fix any mapping errors. Then switch the workflow to Active. The Schedule Trigger only fires on active workflows.

Step 9: Add error handling. Connect an Error Trigger node to a Slack or email node. It fires whenever any node in the workflow throws an error. You will know about a failed post within minutes instead of finding out days later.

Platform Coverage at a Glance

PlatformBuilt-in n8n nodeHow to postKey gotcha
X (Twitter)YesX node, create postNeeds your own X developer app and a paid API tier for write access
LinkedInYesLinkedIn node, Post then CreateOrganisation posts need the organisation URN
FacebookYesFacebook node, post to PageNeeds Page access, not a personal profile
InstagramNoTwo HTTP Request nodes via the Graph APIImage or video required; long-lived token needed
TikTokNoHTTP Request nodes via the TikTok APINo built-in node; API setup is manual

Common Problems and Fixes

Posts publish at the wrong time. Check the Schedule Trigger timezone. Set it to your own timezone, not the server default. Use IANA timezone names such as Europe/London. Fixed offsets do not adjust for daylight saving time.

The same post goes out twice. Polling triggers can fire twice on the same row. Add an idempotency check. Mark the row as posted in the same run, and filter for Status "ready" before posting. A Filter node on the Publish At field also helps.

Instagram posts fail. Check three things. The image URL must be publicly accessible. The token must be long-lived. The container must be created before the publish call runs. Wait a few seconds between the two calls if the publish fails.

The workflow stops working after two months. Your Meta token expired. Long-lived tokens last about 60 days. Refresh the token and update the credential in n8n.

Executions run out. Each scheduled run counts as one execution, whatever the node count. A workflow that runs twice a day uses about 60 executions a month. The Starter plan covers 2,500. You will not hit the limit with one posting workflow.

When to Use a Scheduler Instead

n8n is the right tool when you want control. You own the queue, the logic, and the credentials. You can add AI drafting, image generation, or approval steps later. It is also the right tool when you post to several platforms from one queue.

A dedicated scheduler is better when you want zero setup. Tools such as Buffer handle tokens, retries, and platform quirks for you. They cost more per month. They save hours of setup. If you only post to one platform, use its native scheduler.

Bottom Line

Automating social media posting with n8n takes about an hour to set up. A Google Sheet holds the queue. A Schedule Trigger fires the workflow. Built-in nodes post to X, LinkedIn, and Facebook. Instagram needs two HTTP calls to the Graph API. Mark each row as posted, add error alerts, and refresh your Meta token every 60 days. After that, the workflow runs itself.