Gmail + Google Sheets: approve LinkedIn posts by reply
Your LinkedIn posting process probably isn’t “hard.” It’s just messy. Ideas live in notes, drafts live in docs, approvals happen in DMs, and somehow you still end up rewriting the same post three times.
This Gmail approvals setup hits marketing managers first, honestly, but founders and agency leads feel it too. You get a clean approval loop by email, plus a Google Sheets log that tracks ideas, drafts, and what actually got posted.
Below, you’ll see how the workflow runs end-to-end, what it automates, and what the “reply with a number” approval experience looks like in real life.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Gmail + Google Sheets: approve LinkedIn posts by reply
flowchart LR
subgraph sg0["Gmail Flow"]
direction LR
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code1"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code2"]
n9@{ icon: "mdi:robot", form: "rounded", label: "AI Agent1", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code3"]
n14@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet", pos: "b", h: 48 }
n15@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message1", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code4"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/linkedin.svg' width='40' height='40' /></div><br/>Create a post"]
n18@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet1", pos: "b", h: 48 }
n19@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message2", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n7 --> n20
n8 --> n9
n13 --> n14
n16 --> n17
n12 --> n8
n12 --> n16
n9 --> n13
n17 --> n18
n6 --> n7
n20 --> n12
n14 --> n15
n18 --> n19
n10 -.-> n9
end
subgraph sg1["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n4 --> n11
n2 --> n4
n1 --> n2
n11 --> n5
n3 -.-> n2
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n6,n0 trigger
class n9,n2 ai
class n10,n3 aiModel
class n12 decision
class n14,n18,n20,n11 database
class n7,n8,n13,n16,n4 code
classDef customIcon fill:none,stroke:none
class n7,n8,n13,n16,n17,n4 customIcon
The Problem: LinkedIn approvals are scattered and slow
Most LinkedIn workflows break in the same place: approval. Someone writes a draft, someone else “sort of” approves it in a chat, and then the final version gets tweaked again right before posting. Now you’ve got no single source of truth, no record of why a post changed, and no reliable cadence. And if you’re managing multiple stakeholders or clients, it gets worse. The mental load is sneaky. You spend your best focus time chasing a simple “yes,” instead of writing better hooks and sharper positioning.
It adds up fast. Here’s where it usually breaks down.
- You lose about 20 minutes per post just hunting for the latest version.
- Approvals come back as vague feedback, so the draft turns into endless rewrites.
- There’s no consistent log of ideas → drafts → posted, which makes “posting consistently” feel like starting over every week.
- If you miss a window, the post sits in limbo because nobody knows what’s next.
The Solution: Approve posts by replying to Gmail (Sheets tracks everything)
This workflow turns your inbox into a lightweight approval console. You start it in n8n, it generates 10 LinkedIn post ideas tailored to your niche using an AI agent (powered by a Gemini chat model), then logs those ideas into Google Sheets. Next, it emails you the options. You reply with a number to approve your favorite idea. The same loop happens again for drafting: the workflow generates 3 full drafts for the chosen idea, updates the same sheet row, and emails the draft options back to you. Reply with the number you want, and n8n publishes the selected draft to LinkedIn, marks the post as “posted” in Google Sheets, and sends a confirmation email with a preview.
The workflow starts with an internal trigger, then uses AI to create and format ideas and drafts. Gmail replies act as approvals, and Google Sheets becomes the timeline you can trust. Finally, the LinkedIn API publishes the post and closes the loop with a confirmation email.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 4 LinkedIn posts a week. Manually, a typical cycle looks like 30 minutes to brainstorm, about 45 minutes to draft, then another 20 minutes chasing approval and updating “where it’s at” in a sheet or doc. That’s roughly 6 hours a week. With this workflow, you spend maybe 10 minutes giving the AI good context and replying to two emails (one for the idea, one for the draft). The rest runs in the background, and the sheet stays updated automatically.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to send approvals and capture replies.
- Google Sheets to track ideas, drafts, and posted status.
- Google Gemini (API access) (get it from Google AI Studio/Cloud console).
- LinkedIn API access (enable posting for your account/app).
Skill level: Intermediate. You’ll connect accounts, set permissions, and adjust a few prompts and sheet columns.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You kick it off with a manual launch (or schedule it). The workflow starts from a manual trigger in n8n, and you can also run it on a schedule if you want a weekly idea batch.
AI generates ideas, then the workflow logs them. An AI agent uses your niche and audience inputs to produce 10 ideas, a short script parses the output, and Google Sheets appends a new row so everything is tied together.
Gmail becomes the approval step. n8n sends you an “ideas” email and waits for a reply. When you respond with a number, the workflow extracts the number, fetches the correct sheet row, and routes to the right stage using a switch (ideas vs drafts).
The chosen draft gets published and tracked. After you pick a draft via email reply, n8n publishes it through the LinkedIn node, marks the same row as posted in Google Sheets, and emails you a confirmation so you’re not guessing.
You can easily modify the prompt and the Google Sheets columns to match your brand voice and reporting needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts with a manual run so you can generate LinkedIn ideas on demand.
- Add and open Manual Launch Trigger to keep the start point as a manual execution.
- Connect Manual Launch Trigger to Assign Input Fields to follow the execution flow
"Manual Launch Trigger" → "Assign Input Fields".
Step 2: Connect Google Sheets
These nodes store ideas, drafts, and posting status in your spreadsheet.
- Open Append Ideas Row and set the document to
[YOUR_ID]and sheet toSheet1(gid=0). - Ensure the column mappings in Append Ideas Row include stage set to
"ideas"and correlationId set to{{ $json.correlationId }}. - In Retrieve Sheet Row, set the filter correlationId to
{{ $json.correlationId }}to fetch the correct row. - In Update Drafts Row, set stage to
"drafts"and map drafts to{{ $json.drafts }}and selectedTopic to{{ $json.selectedTopic }}. - In Mark Posted Row, map linkedinUrn to
{{ $json.urn }}and correlationId to{{ $('Retrieve Sheet Row').item.json['correlationId '] }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Ideas Row, Retrieve Sheet Row, Update Drafts Row, and Mark Posted Row.
correlationId with a trailing space in the sheet and expressions. Keep it exactly as shown to avoid mismatches.Step 3: Set Up the AI Idea and Draft Generation
Two AI agents create ideas and drafts, each backed by a Gemini chat engine.
- In Assign Input Fields, set niche to
startup founders in SaaSand audience togrowth-focused professionals. - Open Idea Strategy Agent and keep the prompt with expressions
{{$json.niche}}and{{$json.audience}}. - Open Draft Generation Agent and keep the prompt fields for
{{$json.selectedTopic}},{{$json.audience}}, and{{$json.niche}}. - Confirm Gemini Chat Engine is connected as the language model for Idea Strategy Agent.
- Confirm Gemini Chat Engine 2 is connected as the language model for Draft Generation Agent.
- Credential Required: Connect your googlePalmApi credentials in Gemini Chat Engine and Gemini Chat Engine 2 (credentials are added to these parent model nodes, not the agent nodes).
Step 4: Configure Email Delivery and Reply Intake
The workflow emails ideas and drafts, then reads reply emails to select the next step.
- In Email Ideas Notice, set sendTo to
[YOUR_EMAIL], message to{{ $('Parse Ideas Script').item.json.emailBody }}, and subject toYour 10 LinkedIn Ideas [CID: {{ $json['correlationId '] }}]. - In Email Draft Options, set sendTo to
[YOUR_EMAIL], message to{{ $('Format Drafts Script').item.json.emailBody }}, and subject toDrafts for "{{$json.selectedTopic}}" [CID: {{ $json['correlationId '] }}]. - In Inbox Reply Trigger, keep the filter query
to:me subject:"[CID:" is:inbox -category:promotionsand set sender to[YOUR_EMAIL]. - Credential Required: Connect your gmailOAuth2 credentials in Email Ideas Notice, Inbox Reply Trigger, Email Draft Options, and Send Posting Confirmation.
[CID: ...] subject tag; otherwise Extract Reply Number returns kind: 'unknown' and downstream steps won’t run.Step 5: Configure Routing, Publishing, and Status Updates
Replies are routed to draft creation or publishing, and LinkedIn posting updates the sheet and sends confirmation.
- In Stage Routing, keep the rules that check stage using expressions like
{{ $json.stage }}for"ideas"and"drafts". - Ensure the flow follows
"Stage Routing" → "Match Chosen Idea"for ideas and"Stage Routing" → "Select Final Draft"for drafts. - In Publish LinkedIn Post, set text to
{{ $json.finalPost }}, postAs toorganization, and organization to[YOUR_ID]. - Credential Required: Connect your linkedInCommunityManagementOAuth2Api credentials in Publish LinkedIn Post.
- In Send Posting Confirmation, verify the subject
Posted ✅ “{{ $('Select Final Draft').item.json.selectedTopic }}” [CID: {{ $json['correlationId '] }}]and message preview expression{{($('Select Final Draft').item.json.finalPost).slice(0, 200) }}.
Step 6: Test and Activate Your Workflow
Run the workflow end-to-end to confirm ideas, drafts, and publishing work as expected.
- Click Execute Workflow on Manual Launch Trigger to generate ideas and verify Email Ideas Notice is sent.
- Reply to the ideas email with a number (1–10) and confirm Inbox Reply Trigger fires, Update Drafts Row updates the sheet, and Email Draft Options is sent.
- Reply again with a draft number (1–3) and verify Publish LinkedIn Post posts successfully, Mark Posted Row updates the sheet, and Send Posting Confirmation arrives.
- When the full flow succeeds, toggle the workflow to Active to use it in production.
Common Gotchas
- Gmail credentials can expire or need specific permissions. If things break, check the connected Gmail account in n8n’s Credentials and confirm the right inbox is authorized 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.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 45 minutes if your Gmail, Sheets, and LinkedIn access are ready.
No. You will connect accounts and adjust a few fields and prompts.
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 Gemini/OpenAI-style API costs, which are usually a few cents per run depending on prompt size.
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.
Yes, but you’ll want to separate tracking by account in Google Sheets first. Most people add an “Account” column, then duplicate the LinkedIn publish node for each destination (or route through a Switch based on the sheet value). You can also tweak the “ideas” and “drafts” email templates so the approver knows which brand they’re approving. If you’re managing clients, adding a client name to the email subject line saves headaches later.
Usually it’s expired OAuth permission or the wrong Google account connected in n8n. Reconnect the Gmail credential, then confirm the workflow is watching the inbox you actually reply from (the Gmail Trigger is picky). If replies aren’t being detected, check threading: reply to the same email thread the workflow sent, not a forwarded copy. Rate limits can also show up if you blast lots of approval emails at once.
Plenty for a typical small team: think dozens of posts a week without stress. On n8n Cloud, your limit is mostly about monthly executions (Starter handles a few thousand), while self-hosting depends on your server. Each post run uses multiple steps (ideas, drafts, publish), so plan for more than “one execution per post.”
Often, yes. This workflow relies on branching logic (ideas stage vs drafts stage), message parsing, and state tracking in Google Sheets, which is easier to control in n8n without turning it into a spaghetti scenario. Self-hosting is also a big deal if you don’t want your costs to climb as volume grows. Zapier and Make can work, but you may hit limits once you add the “wait for reply, extract a number, route based on stage” behavior. If you’re torn, Talk to an automation expert and you’ll get an honest recommendation.
Once this is running, approvals stop being a bottleneck and start being a quick reply. The workflow handles the repetitive stuff, and your Google Sheet finally tells the truth.
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.