🔓 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 Docs to LinkedIn, approved posts ready to publish

Lisa Granqvist Partner Workflow Automation Expert

Your “final” LinkedIn post is never final. It’s scattered notes in a doc, a half-edited draft in someone’s inbox, and a last-minute rewrite because the tone feels off.

If you run content for a brand, marketing managers feel this weekly. Founders doing their own posting get pulled into it too. And agencies managing multiple voices? Docs LinkedIn automation becomes the difference between shipping and stalling.

This n8n workflow turns your Google Docs guidelines into LinkedIn-ready posts, routes drafts through Gmail approval, then publishes and archives everything cleanly. You’ll see how it works, what you need, and where teams usually trip up.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Docs to LinkedIn, approved posts ready to publish

The Problem: LinkedIn Drafts Drift Off-Brand

Most teams don’t struggle to “write a post.” They struggle to write the right post, consistently, while approvals drag on. Brand rules live in a Google Doc, but the draft gets created somewhere else. Someone paraphrases the guidelines from memory, a reviewer asks for “more punch,” and suddenly you’re in round three with no clear source of truth. Multiply that by a few posts a week and it quietly eats about 2 hours you thought you’d spend on strategy, not rewriting intros and fixing tone.

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

  • Guidelines and schemas sit in Google Docs, but writers still guess what “on brand” means on Tuesday afternoon.
  • Approvals happen in email threads that don’t match the final post, so you can’t tell what was actually approved.
  • Publishing is manual, which means missed windows and “we’ll post it tomorrow” more often than you’d like.
  • There’s no reliable archive of the final copy and asset, so repurposing later becomes another scavenger hunt.

The Solution: Google Docs Rules In, Approved LinkedIn Posts Out

This workflow runs like a small content factory inside n8n. It starts with a prompt (your post idea) and immediately pulls your system prompt and platform schema from Google Docs, so the “rules” are always current and shared. Then an AI agent generates a LinkedIn-optimized draft using those guidelines, with optional web research via SerpAPI when you need fact-checking or fresher context. It can also generate a matching image, upload it for hosting, and save the assets to Google Drive. Before anything publishes, the draft gets sent through Gmail for approval, and only then does the workflow post to LinkedIn and log the outcome.

The workflow kicks off on a schedule or a chat-style trigger, routes the request to the right platform, and composes a dynamic prompt from your Google Docs. After content and assets are generated, Gmail becomes the gatekeeper. Approved posts publish to LinkedIn, and the final JSON plus image get archived to Drive for traceability and reuse.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you publish 3 LinkedIn posts per week and each one takes about 40 minutes of “process” work: pulling brand rules, rewriting to fit tone, sending a draft, chasing approval, and formatting for LinkedIn. That’s roughly 2 hours weekly before you even count new ideas. With this workflow, you drop the idea once, wait for the draft and image to generate (often around 10–20 minutes), then approve from Gmail. The human time becomes closer to 10 minutes per post, not 40.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Docs to store your system prompt and schema.
  • Gmail to send and capture approvals.
  • LinkedIn to publish approved posts.
  • Google Drive to archive final copy and images.
  • OpenAI API key (get it from your OpenAI dashboard).
  • SerpAPI key (get it from your SerpAPI account) for research.
  • ImgBB API key (get it from imgbb.com API settings) for image hosting.

Skill level: Intermediate. You’ll mostly connect accounts and paste IDs/keys, but you should be comfortable testing runs and reading execution logs.

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

How It Works

A prompt kicks things off. A schedule trigger can run this on a cadence, or you can start it from a chat-style message when you want a new draft on demand.

Google Docs becomes the source of truth. The workflow fetches two Docs: your system prompt (brand voice, rules, examples) and your platform schema (the required output format for LinkedIn and other channels). It parses those Docs and assembles a “fresh” instruction set every run.

AI generates the draft and optional research. The content agent writes the post using your rules, and it can call a web search tool (SerpAPI) to sanity-check claims or add timely context. This is where your brand consistency is won or lost, so the prompt quality matters.

Approval, publishing, and archiving happen automatically. A Gmail approval email is sent, the workflow waits for the decision, and an “approved” path routes to the LinkedIn publish node. At the same time, the final post JSON plus the image file get saved in Google Drive so you always know what shipped.

You can easily modify the approval rules to support multiple reviewers or stricter checks based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Chat Trigger

Set up the entry point so chat input can drive the platform routing and content creation.

  1. Add the Chat Message Trigger node and keep default options.
  2. Connect Chat Message Trigger to 🤖Platform Router Agent as shown in the workflow.
  3. Ensure Windowed Chat Memory is connected as memory to 🤖Platform Router Agent (AI memory connection).

Tip: The trigger expects chat input in $json.chatInput, which is referenced by 🤖Platform Router Agent.

Step 2: Configure AI Routing and Tooling

Route the chat prompt to the correct platform tool and prepare the AI context for generation.

  1. Open 🤖Platform Router Agent and verify the Text field includes User prompt: {{ $json.chatInput }}.
  2. Connect GPT Router Model as the language model for 🤖Platform Router Agent. Credential Required: Connect your openAiApi credentials.
  3. Attach the tool workflows: X/Twitter Tool, Instagram Tool, Facebook Tool, LinkedIn Tool, Threads Tool, and YouTube Shorts Tool to 🤖Platform Router Agent via AI Tool connections.
  4. For each tool workflow, confirm the route field is set to the correct value (e.g., =xtwitter, =instagram, =facebook, =linkedin, =threads, =youtube_short).

⚠️ Common Pitfall: Tool workflows do not store credentials themselves. Add any required credentials to the parent agents (like 🤖Platform Router Agent) or the downstream action nodes.

Step 3: Connect Prompt Sources and Parse Configuration

Load system instructions and platform schemas from Google Docs, then parse them to build the prompt payload.

  1. Configure Triggered by Sub-Workflow with inputs user_prompt and route.
  2. In Fetch Social Schema Doc, set Document URL to =[YOUR_ID]. Credential Required: Connect your googleDocsOAuth2Api credentials.
  3. In Fetch System Prompt Doc, set Document URL to =[YOUR_ID]. Credential Required: Connect your googleDocsOAuth2Api credentials.
  4. Confirm Assign Schema Fields maps schema to {{$json.content}} and platform to {{$('Triggered by Sub-Workflow').item.json.route}}.
  5. Confirm Assign System Prompt maps system_prompt to {{$json.content}}.
  6. Verify parsing nodes: Assign Schema FieldsParse Schema XML and Assign System PromptParse Prompt XML.
  7. Ensure Combine Prompt Inputs is set to Mode combine and Combine By combineByPosition with Number of Inputs 3.

Parallel Execution: Triggered by Sub-Workflow outputs to Fetch System Prompt Doc, Fetch Social Schema Doc, and Combine Prompt Inputs in parallel to build the prompt inputs quickly.

Step 4: Configure AI Content Generation

Assemble prompt data and generate platform-specific social content with the AI agent and web search tool.

  1. In Assemble Prompt Data, verify it maps route, user prompt, system config, and schema objects using expressions like {{$json.system_config.system}} and {{$json.schema}}.
  2. Connect GPT Content Model as the language model for Social Content Agent. Credential Required: Connect your openAiApi credentials.
  3. Attach Web Search Tool to Social Content Agent as an AI tool. Credential Required: Connect your serpApi credentials. Add credentials to the Web Search Tool node (not the agent).
  4. Confirm Social Content Agent text includes Social Media Platform: {{ $json.route }} and User Prompt: {{ $json.user_prompt }}.
  5. Set Store Social Output to capture output as {{$json.output}}.

Step 5: Generate and Store Media Assets

Generate an image, upload it, and store metadata and content to Google Drive for approvals and publishing.

  1. In Image Generation Request, set URL to =https://image.pollinations.ai/prompt/{{ $json.output.common_schema.image_suggestion.replaceAll(' ','-').replaceAll(',','').replaceAll('.','').slice(0,100) }}.
  2. Configure Upload Image to ImgBB with URL https://api.imgbb.com/1/upload, Method POST, and Content Type multipart-form-data. Use query parameter key={{ $env.IMGBB_API_KEY}}.
  3. In Save Image to Drive, set Name to {{$json.output.root_schema.name.replaceAll(' ','-').replaceAll(',','').replaceAll('.','')}}, and choose your Drive and Folder IDs. Credential Required: Connect your googleDriveOAuth2Api credentials.
  4. Ensure Merge Assets combines the outputs with Mode combine, Combine By combineByPosition, and Number of Inputs 3.
  5. Verify Drive Image Metadata maps thumbnailLink, webViewLink, and webContentLink from the Drive file output.
  6. In Build Post JSON, ensure response is set to the full JSON object using { "route": "{{ $('Triggered by Sub-Workflow').item.json.route }}", "social_image": {{ $('Merge Assets').item.json.data.toJsonString() }}, "social_content": {{ $('Store Social Output').item.json.output.toJsonString() }}, "google_drive_image": {{ $json.toJsonString() }} }.
  7. Configure Archive Post to Drive with Operation createFromText, Name {{$json.response.google_drive_image.id}}, and Content {{$json.response.toJsonString()}}. Credential Required: Connect your googleDriveOAuth2Api credentials.

Parallel Execution: Image Generation Request outputs to Telegram Success Notice, Upload Image to ImgBB, Save Image to Drive, and Merge Assets in parallel. Merge Assets outputs to both Prepare Report Email and Drive Image Metadata in parallel.

Step 6: Configure Approval Email and Routing for Publishing

Create approval emails, wait for approval, then route the approved content to the correct platform publishing action.

  1. In Parse JSON File, set Operation to fromJson, then ensure it splits to both Combine Image and Post and Prepare Approval Email in parallel.
  2. Connect Mini GPT for Email as the language model to Prepare Approval Email. Credential Required: Connect your openAiApi credentials.
  3. In Gmail Approval Request, set Operation to sendAndWait, Subject to =🔥FOR APPROVAL🔥 {{$('Parse JSON File').item.json.data.social_content.root_schema.name }}, and Send To to {{$env.TELEGRAM_CHAT_ID}}. Credential Required: Connect your gmailOAuth2 credentials.
  4. Verify Approval Check evaluates {{$json.data.approved}} and continues to Download Post Image when true.
  5. Ensure Combine Image and Post receives inputs from both Parse JSON File and Download Post Image, then routes to Route to Platform.

⚠️ Common Pitfall: The Route to Platform LinkedIn rule uses rightValue of =linkedin. Make sure the incoming route matches exactly, or update the rule to linkedin to avoid misrouting.

Step 7: Configure Platform Publishing Actions

Send the final post to the correct social platform and generate output summaries.

  1. In Post to X, set Text to {{$json.data.social_content.schema.post}}. Credential Required: Connect your twitterOAuth2Api credentials.
  2. For Instagram, configure Create IG Media with URL https://graph.facebook.com/v20.0/[your-unique-id]/media and query parameters image_url={{ $json.output.social_image.medium.url }} and caption={{ $json.output.caption }}. Credential Required: Connect your facebookGraphApi credentials.
  3. Configure Publish IG Media to publish the created media using Edge media_publish and Node [your-unique-id]. Credential Required: Connect your facebookGraphApi credentials.
  4. Configure Publish Facebook Photo with Edge photos, Node [your-unique-id], and Binary Property Name data. Credential Required: Connect your facebookGraphApi credentials.
  5. Configure Publish LinkedIn Post with Text {{$json.data.social_content.schema.post}} {{$json.data.social_content.schema.call_to_action}} {{$json.data.social_content.common_schema.hashtags}} and Organization [YOUR_ID]. Credential Required: Connect your linkedInOAuth2Api credentials.
  6. Leave Threads Placeholder and YouTube Shorts Placeholder as no-op nodes for future expansion.
  7. Confirm output summaries are captured by X Output Summary, Instagram Output Summary, Facebook Output Summary, and LinkedIn Output Summary.

Step 8: Configure Reporting and Notifications

Send reporting emails and Telegram notifications once assets are generated and posts are published.

  1. Connect Compact GPT Model as the language model to Prepare Report Email. Credential Required: Connect your openAiApi credentials.
  2. In Prepare Report Email, keep the template intact and ensure it references {{$('Image Generation Request').item.json.output.toJsonString()}} and {{$('Assemble Prompt Data').item.json.route}}.
  3. In Send Gmail Summary, set Send To to {{$env.TELEGRAM_CHAT_ID}}, Message to {{$json.output}}, and Subject to =Social Media Content - {{ $('Store Social Output').item.json.output.title }}. Credential Required: Connect your gmailOAuth2 credentials.
  4. Configure Telegram Success Notice and Telegram Error Notice with Chat ID {{$env.TELEGRAM_CHAT_ID}}. Credential Required: Connect your telegramApi credentials.

Step 9: Test and Activate Your Workflow

Validate the end-to-end workflow with a manual test and then activate it for production use.

  1. Manually execute Chat Message Trigger and provide a sample prompt (e.g., “Create a LinkedIn post about product launch”).
  2. Confirm 🤖Platform Router Agent outputs a route and Extract File Identifier passes the response to Download Post from Drive.
  3. Verify successful parallel operations: Parse JSON File outputs to both Combine Image and Post and Prepare Approval Email in parallel.
  4. Approve the email from Gmail Approval Request and confirm a platform node (like Post to X or Publish LinkedIn Post) runs.
  5. Check that Send Gmail Summary is delivered and Google Drive contains the archived JSON file from Archive Post to Drive.
  6. When everything works, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Docs access can fail if the Doc isn’t shared correctly or the token loses permissions. If a fetch node errors, check the Google connection in n8n and confirm the Doc is accessible to that account.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

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

Plan on about 45 minutes if your Google and LinkedIn accounts are ready.

Do I need coding skills to automate Docs LinkedIn automation?

No. You’ll paste API keys, connect accounts, and update the Google Doc IDs in the right nodes.

Is n8n free to use for this Docs LinkedIn 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 usage, SerpAPI usage, and your image hosting costs from ImgBB.

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 Docs LinkedIn automation workflow for multi-step approvals?

Yes, but you’ll want to adjust the Gmail approval path and the “Approval Check” logic so it waits for the right signal. Many teams add a second approver email, require an “APPROVE” keyword, or route “needs edits” back to a draft folder in Google Drive. You can also tweak the Google Docs system prompt to enforce different voices for executives vs. brand accounts. If you publish to other platforms too, the platform router can be extended so LinkedIn is just one destination.

Why is my LinkedIn connection failing in this workflow?

Usually it’s an expired OAuth connection or a missing permission on the LinkedIn app. Reconnect the LinkedIn credential in n8n, then confirm the account has access to post on the selected company page or profile. If it fails only on some runs, rate limits or blocked media URLs can also be the culprit, especially when the image host changes.

How many posts can this Docs LinkedIn automation automation handle?

A lot, as long as your plan and APIs can keep up.

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

For this specific setup, n8n is usually the better fit because the workflow logic is more branching-heavy and you’re composing prompts from Google Docs, running an AI agent, generating images, and waiting on approvals. Zapier and Make can do parts of it, but long approval waits and multi-step routing tend to get awkward (and pricey) at scale. n8n also gives you the option to self-host, which matters when you start running this daily. If you only need “Doc changes → send email,” Zapier is fine. If you want the full factory with archiving and publishing, n8n wins more often than not. Talk to an automation expert if you want a quick recommendation based on volume.

Once your rules live in Google Docs and approvals happen the same way every time, LinkedIn publishing stops being a recurring scramble. Set it up, run it, and keep your creative energy for the ideas that actually move the needle.

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