🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets + OpenAI: LinkedIn posts done for you

Lisa Granqvist Partner Workflow Automation Expert

You sit down to “just post on LinkedIn,” and suddenly you’re rewriting captions, hunting for last week’s draft, and realizing today’s idea was never even picked. It’s messy. And it’s exactly why LinkedIn post automation is so appealing.

Marketing managers feel it when consistency slips. A solo founder feels it when posting steals selling time. And agencies? They feel it every time a client asks, “Did we post today?” This workflow gives you daily drafts, a human approval step, and hands-free publishing.

You’ll see how a simple Google Sheets calendar turns into approved, on-brand LinkedIn posts generated with OpenAI, reviewed by a human in GoToHuman, then published automatically through Blotato.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets + OpenAI: LinkedIn posts done for you

The Problem: LinkedIn Consistency Dies in the Drafts Folder

Most LinkedIn posting workflows break in the same boring place: between “I had an idea” and “it actually got published.” Ideas live in a spreadsheet, a notes app, a Slack message to yourself, or some half-finished doc. Then the day gets busy. The post doesn’t happen. Or worse, it happens fast and sloppy, which means you spend the next hour tweaking phrasing, deleting awkward emojis, and second-guessing your tone. Multiply that by every weekday and it becomes a quiet tax on your time and attention.

It adds up fast. Here’s where it breaks down in real life.

  • Content calendars get created, but nobody turns them into publish-ready captions on the day they’re due.
  • AI tools help, but without review you end up posting drafts that feel slightly “off” for your brand.
  • Copy-pasting from Sheets to LinkedIn invites mistakes, like wrong links, missing line breaks, or posting the wrong draft.
  • When you skip a few days, catching up becomes a mini project instead of a quick task.

The Solution: Google Sheets → OpenAI Draft → Human Approval → Auto-Post

This workflow turns your Google Sheets content calendar into a daily publishing engine, without letting AI run wild. Each day (or whenever you run it), n8n finds the row in your sheet that matches today’s date and pulls the topic you planned. That topic is handed to OpenAI through an AI Agent node, which generates a short LinkedIn caption in the style you want (the default is concise and emoji-friendly). The draft is saved back into your sheet so your calendar becomes a real system of record, not just a list of hopes. Then GoToHuman sends the caption to a reviewer for approval or rejection. Only approved drafts get published to LinkedIn through Blotato’s API.

The workflow starts with a schedule trigger, so posting doesn’t rely on memory. OpenAI generates the copy, GoToHuman controls quality, and Blotato handles publishing to LinkedIn. After approval, it’s hands-off.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you post 5 times a week. Manually, a typical cycle looks like: 20 minutes to write or rewrite, 10 minutes to clean it up, then another 10 minutes to paste, format, and double-check before publishing. That’s about 40 minutes a day, or roughly 3 hours a week. With this workflow, you spend maybe 5 minutes dropping ideas into Google Sheets up front, then the daily run generates the caption and sends it for approval. Your “day-of” work becomes a quick review, usually a couple minutes.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store your dated content calendar
  • OpenAI to generate LinkedIn caption drafts
  • GoToHuman API key (get it from your GoToHuman account settings)
  • Blotato API key and Account ID (get both from your Blotato dashboard)

Skill level: Beginner. You’ll connect accounts, paste a few API keys, and confirm which sheet columns map to your workflow.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A daily trigger runs the check. The workflow can run on a schedule (most people do once each morning), and there’s also a manual test trigger for debugging or one-off posts.

Google Sheets provides the “source of truth.” n8n fetches rows from your content calendar and generates the current date, then matches today’s date to the correct topic so you’re not guessing which idea to use.

OpenAI writes the caption draft. The AI Agent sends the topic to GPT-4 (via the OpenAI Chat Model), then parses the response into clean fields so the caption can be stored and reused. This is also where you bake in your voice so the drafts don’t sound generic.

GoToHuman decides what’s allowed to post. The draft is sent to a GoToHuman review template. If the reviewer approves, the workflow continues. If they reject it, publishing stops and nothing goes live.

Blotato publishes to LinkedIn. An HTTP request posts the approved caption to your LinkedIn account through Blotato’s API, so you’re not logging in just to paste text.

You can easily modify the caption style to match your brand voice based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Schedule Trigger

Set the workflow to run on a daily schedule, and keep the manual trigger for quick testing.

  1. Open Daily Schedule Trigger and define the schedule rule under Rule to match your preferred daily timing.
  2. Keep Manual Test Start in the workflow for ad-hoc runs during setup and debugging.

Use Manual Test Start while configuring your Google Sheets and AI nodes to avoid waiting for the schedule.

Step 2: Connect Google Sheets

Configure the spreadsheet nodes that fetch the daily topic and store the generated captions.

  1. In Fetch Today's Topic, set Document to [YOUR_ID] and Sheet to gid=0 (Sheet1).
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Fetch Today's Topic.
  3. In Store Caption in Sheet, set Operation to appendOrUpdate and map Date to {{ $('Fetch Today\'s Topic').item.json.Date }} and caption to {{ $json.output[0].Caption }}.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Store Caption in Sheet.
  5. In Update Sheet Completion, set Operation to update and map Date to {{ $('Fetch Today\'s Topic').item.json.Date }} and complete to Yes.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials in Update Sheet Completion.

⚠️ Common Pitfall: The Match Today's Topic merge relies on matching Date with today. Ensure your sheet has a Date column formatted as YYYY-MM-DD.

Step 3: Set Up Date Matching and AI Caption Generation

Create the daily match between the sheet topic and the current date, then generate a LinkedIn caption using the AI agent.

  1. In Generate Current Date, keep the provided JavaScript Code to output today as YYYY-MM-DD.
  2. In Match Today's Topic, set Mode to combine, enable Advanced, and match field1 Date to field2 today.
  3. In Compose LinkedIn Caption, set Text to =Idea: {{ $json.idea }} and keep the system message that specifies a two-sentence, emoji-friendly output.
  4. Credential Required: Connect your openAiApi credentials in OpenAI Chat Model (this model powers Compose LinkedIn Caption).
  5. Ensure Creativity Booster Tool and Parse Caption JSON remain connected to Compose LinkedIn Caption as AI tool and output parser. Add any needed AI credentials to OpenAI Chat Model, not these sub-nodes.

Compose LinkedIn Caption outputs to both Store Caption in Sheet and Update Sheet Completion in parallel.

Step 4: Configure Approval and LinkedIn Publishing

Route the generated caption to human review, then publish only approved posts to LinkedIn.

  1. In Request Human Approval, confirm the text field is mapped to {{ $json.caption }} and select your Review Template.
  2. Credential Required: Connect your gotoHumanApi credentials in Request Human Approval.
  3. In Filter Approved Only, set the condition to compare {{ $json.response }} equals approved.
  4. In Publish to LinkedIn, set Method to POST, URL to https://backend.blotato.com/v2/posts, and JSON Body to the provided payload, including {{ $('Request Human Approval').item.json.responseValues.text.value }} for the caption.
  5. Add the header blotato-api-key with value [CONFIGURE_YOUR_API_KEY] in Publish to LinkedIn.

⚠️ Common Pitfall: If Publish to LinkedIn fails, verify the API key header and that the approval text exists at {{ $('Request Human Approval').item.json.responseValues.text.value }}.

Step 5: Test and Activate Your Workflow

Run a manual test to verify data flow, AI output, approval routing, and LinkedIn publishing.

  1. Click Execute Workflow with Manual Test Start to trigger Fetch Today's Topic and Generate Current Date in parallel.
  2. Confirm that Match Today's Topic combines the topic with the current date and that Compose LinkedIn Caption returns a structured JSON array.
  3. Verify Store Caption in Sheet writes the caption and Update Sheet Completion marks the row as complete.
  4. Approve the request in Request Human Approval and confirm Filter Approved Only allows the execution to reach Publish to LinkedIn.
  5. Once successful, activate the workflow and let Daily Schedule Trigger run it in production.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check your n8n Google Sheets OAuth connection first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • GoToHuman approvals depend on the correct reviewTemplateId and valid API credentials. If approvals never arrive, confirm the template exists and that the reviewer is assigned in GoToHuman.

Frequently Asked Questions

How long does it take to set up this LinkedIn post automation automation?

About 30 minutes if your accounts and keys are ready.

Do I need coding skills to automate LinkedIn post automation?

No. You’ll mostly connect accounts and paste API keys. The only “technical” part is mapping your sheet columns to the right fields.

Is n8n free to use for this LinkedIn post automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs for caption generation.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this LinkedIn post automation workflow for a different caption style and review process?

Yes, and you probably should. You can adjust the tone and format inside the Compose LinkedIn Caption (AI Agent) prompt, then keep the Parse Caption JSON step aligned so your fields still save cleanly. Many teams also customize the GoToHuman Request Human Approval template so reviewers can choose “approve,” “reject,” or “needs edits,” plus add quick notes. If you want the workflow to notify you, add a Slack message right after approval (there’s already a Slack integration available in the workflow).

Why is my Blotato connection failing in this workflow?

Usually it’s a bad API key or Account ID in the HTTP Request that publishes the post. Double-check the credentials in your Blotato dashboard, then confirm the request in n8n is hitting the right endpoint. If it works once and fails later, you may be running into permissions changes or rate limits when you publish too frequently.

How many posts can this LinkedIn post automation automation handle?

As many as your n8n plan and your approval capacity allow.

Is this LinkedIn post automation automation better than using Zapier or Make?

It depends on how strict you are about quality control. This workflow benefits from n8n’s flexibility: you can store drafts back into Google Sheets, parse structured AI output, and enforce an approval gate without paying extra for branching logic. Zapier or Make can absolutely do parts of this, but the approval loop plus the “write back to the calendar” piece often gets fiddly. If you’re already using GoToHuman and want a reliable review step, n8n is a comfortable fit. Talk to an automation expert if you want help choosing.

Once this is running, your content calendar stops being a “plan” and starts being output. The workflow handles the repetitive parts, so you can focus on ideas, positioning, and real conversations.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal