Google Sheets + Slack: approve LinkedIn drafts fast
LinkedIn content review breaks down in the boring places. Drafts get lost in DMs, someone “approves” a version that isn’t the latest, and posting day turns into a last-minute scramble.
This hits marketing leads first, but founders and client-facing agency owners feel it too. With this Sheets Slack approval automation, drafts land in one place and the right people get pinged to review them. Faster approvals. Fewer mistakes.
Below, you’ll see how the workflow generates drafts, logs them to Google Sheets, alerts reviewers in Slack, and can publish to LinkedIn (and X) once you’re ready.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Slack: approve LinkedIn drafts fast
flowchart LR
subgraph sg0["Receive Post Title Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n1["<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/form.svg' width='40' height='40' /></div><br/>Receive Post Title"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Generate AI Content", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Format AI Output", 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/x.dark.svg' width='40' height='40' /></div><br/>Post to X"]
n5["<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/>Post to LinkedIn"]
n6["<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/merge.svg' width='40' height='40' /></div><br/>Append Linkedin And X Publis.."]
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/form.svg' width='40' height='40' /></div><br/>Show Confirmation"]
n4 --> n6
n3 -.-> n2
n5 --> n6
n1 --> n2
n2 --> n4
n2 --> n5
n0 -.-> n2
n6 --> n7
end
subgraph sg1["Schedule Flow"]
direction LR
n8@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n9["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch LinkedIn Posts"]
n10@{ icon: "mdi:code-braces", form: "rounded", label: "Filter High Engagement Posts", pos: "b", h: 48 }
n11["<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/openAi.dark.svg' width='40' height='40' /></div><br/>Generate Post Ideas (OpenAI)"]
n12@{ icon: "mdi:database", form: "rounded", label: "Save Drafts to Google Sheets", 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/slack.svg' width='40' height='40' /></div><br/>Notify Reviewer (Slack)"]
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
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 n1,n8 trigger
class n2,n3 ai
class n0 aiModel
class n12 database
class n9 api
class n10 code
classDef customIcon fill:none,stroke:none
class n1,n4,n5,n6,n7,n9,n11,n13 customIcon
The Problem: LinkedIn drafts get reviewed too late
Draft approvals should be quick. In reality, you write a post, paste it into Slack, wait, then rewrite it again because feedback came back out of context. If you’re pulling inspiration from high-performing posts, that’s another tab, another copy-paste, another “which version are we using?” moment. And once you start posting consistently, the mental load ramps up. You’re not just writing. You’re tracking status, chasing approvals, and trying not to publish the wrong copy from last Tuesday.
The friction compounds. Here’s where it breaks down most often.
- Reviewers comment in Slack, but the draft lives somewhere else, so edits get missed or applied to the wrong version.
- High-performing post research is manual, which means you either skip it or waste about an hour when you finally do it.
- Publishing gets delayed because “approval” is a vague message, not a clear status you can trust.
- You can’t scale output when every post needs hand-holding from idea to publish.
The Solution: Generate drafts, log them, and notify reviewers automatically
This workflow turns your LinkedIn draft process into a simple pipeline. It can start from a scheduled run that pulls strong LinkedIn posts for inspiration, or from a manual topic submission via a form. From there, AI (Google Gemini or OpenAI) generates draft copy in a consistent structure, then the workflow cleans and formats the response so it’s easy to review. Next, it logs the draft into Google Sheets, which becomes your single source of truth. Finally, Slack notifies the reviewer that new drafts are ready, so approvals happen where your team already lives.
In practice, it’s a loop you can rely on. Ideas come in, drafts come out, and each one is stored and trackable. When you decide to publish, the same workflow can post directly to LinkedIn and X, then merge the results into a success confirmation.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 5 LinkedIn posts a week, and each one needs review. Manually, you might spend 20 minutes generating a draft, 10 minutes formatting it, then another 15 minutes chasing feedback across Slack threads, so roughly 45 minutes per post (about 4 hours a week). With this workflow, you submit a topic in about 2 minutes, wait a few minutes for AI to generate and structure the draft, and reviewers get notified automatically. You still review and polish, but you’re no longer spending hours on coordination.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for draft logging and status tracking
- Slack to notify reviewers when drafts are ready
- Gemini or OpenAI API key (get it from Google AI Studio or OpenAI dashboard)
Skill level: Intermediate. You will connect accounts, paste API keys, and tweak prompts/fields to match your review process.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A topic or schedule kicks things off. You can trigger the workflow by submitting a post topic in a form, or let the schedule run to pull recent LinkedIn posts for inspiration.
Content inspiration is gathered and filtered. n8n retrieves LinkedIn posts via an HTTP request, then a small filtering step keeps only the ones with real engagement so your idea list isn’t junk.
AI drafts are generated and cleaned up. Gemini or OpenAI produces the draft, and the workflow structures the response into predictable fields (hook, body, CTA, hashtags), which makes review easier and faster.
Drafts get logged and reviewers get pinged. Google Sheets stores the draft and any metadata, then Slack alerts the reviewer that something is ready to approve. If you’re auto-publishing, the workflow can also post to LinkedIn and X and then merge the publish results into one success message.
You can easily modify the review status fields in Google Sheets to match your process (for example, “Needs edits” vs. “Approved”). See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the form submission that captures a post topic and starts the AI drafting flow.
- Add and open Capture Post Topic.
- Set Form Title to
postand Form Description topost. - Under Form Fields, ensure the field label is
post title. - Set Authentication to
basicAuthand configure the basic auth users in n8n. - Keep the connection from Capture Post Topic to Compose AI Drafts.
Step 2: Configure the Schedule Trigger and LinkedIn Fetch
Schedule a periodic fetch of LinkedIn posts and filter them for engagement.
- Open Scheduled Launch Trigger and set your desired schedule under Rule.
- Open Retrieve LinkedIn Posts and set URL to
https://api.apify.com/v2/actor-tasks/your-task-[CONFIGURE_YOUR_API_KEY]/runs/last/dataset/items?token=[CONFIGURE_YOUR_TOKEN]. - Enable JSON Parameters in Retrieve LinkedIn Posts.
- Open Filter Engaged Posts and set Function Code to
return items.filter(item => item.json.engagement && item.json.engagement.likes > 10);.
[CONFIGURE_YOUR_API_KEY] and [CONFIGURE_YOUR_TOKEN] before testing.Step 3: Set Up AI Drafting and Parsing
Configure the AI generation pipeline that drafts separate posts for LinkedIn and X and structures the output.
- Open Gemini Chat Engine and keep Model Name set to
models/gemini-2.0-flash. - In Compose AI Drafts, set Text to
= write min 50 word about this topic '{{ $json["post title"] }}' for Linkedin and X platform separately. - Confirm Prompt Type is
defineand Has Output Parser is enabled in Compose AI Drafts. - Open Structure AI Response and keep Schema Type set to
manual, with the provided JSON schema. - Ensure Structure AI Response is connected as the output parser for Compose AI Drafts, and Gemini Chat Engine is connected as the language model.
Credential Required: Connect your Google Gemini credentials in Gemini Chat Engine.
Credential Required: For AI tool nodes like Structure AI Response, add credentials to the parent Compose AI Drafts connection (the language model is provided by Gemini Chat Engine).
Step 4: Configure Publishing Outputs
Publish generated posts to X and LinkedIn in parallel, then show a completion message to the form user.
- Open Publish to X Network and set Text to
={{ $json.output.platform_posts.Twitter.post }}. - Open Publish to LinkedIn and set Text to
={{ $json.output.platform_posts.LinkedIn.post }}and Person to[YOUR_ID]. - Note the parallel execution: Compose AI Drafts outputs to both Publish to X Network and Publish to LinkedIn in parallel.
- Open Combine Publish Results and keep Mode set to
combineand Combine By set tocombineAll. - Open Display Success Notice and set Completion Title to
Your post has been successfully sharedand Completion Message to=🔗 View your posts: X (Twitter): [https://x.com/x/status/{{ $json.id }}] LinkedIn: [https://www.linkedin.com/feed/update/{{ $json.urn }}].
Credential Required: Connect your X (Twitter) credentials in Publish to X Network.
Credential Required: Connect your LinkedIn credentials in Publish to LinkedIn.
Step 5: Configure Idea Suggestions, Logging, and Reviewer Alerts
Generate new ideas from engaged LinkedIn posts, log them in Google Sheets, and notify a reviewer in Slack.
- Open Generate Idea Suggestions and set Model to
gpt-4o-mini. - Open Log Drafts in Sheets and set Operation to
append, Sheet ID to[YOUR_ID], and Range toSheet1!A:B. - Open Alert Reviewer in Slack and set Channel to
[YOUR_ID]and Text toNew LinkedIn post ideas are ready for review: {{$json["choices"][0].message.content}}. - Verify the flow: Filter Engaged Posts → Generate Idea Suggestions → Log Drafts in Sheets → Alert Reviewer in Slack.
Credential Required: Connect your OpenAI credentials in Generate Idea Suggestions.
Credential Required: Connect your Google Sheets credentials in Log Drafts in Sheets.
Credential Required: Connect your Slack credentials in Alert Reviewer in Slack.
Step 6: Test and Activate Your Workflow
Validate both the form-driven publishing path and the scheduled idea-generation path before turning the workflow on.
- Use Execute Workflow and submit a test value via Capture Post Topic to generate drafts and publish posts.
- Confirm successful publishing when Display Success Notice renders links using
{{ $json.id }}and{{ $json.urn }}. - Manually trigger Scheduled Launch Trigger to test the LinkedIn fetch, filtering, idea generation, Google Sheets logging, and Slack alert.
- When both paths succeed, toggle Active to enable production runs.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the connected Google account access and the sheet sharing settings 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 30 minutes if your accounts and API keys are ready.
No. You’ll connect your accounts and paste API keys into n8n. The only “technical” part is mapping a few fields into your Google Sheet columns.
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 or OpenAI API usage, which is usually low per draft.
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, and it’s a common tweak. You can disable the “Publish to X Network” step and keep “Publish to LinkedIn” active, then update the merge step so it doesn’t expect results from X. Many teams also add an “Approved?” column in Google Sheets and only publish when that cell is set to “Yes.”
Usually it’s permissions. Make sure the connected Google account can access the exact spreadsheet and worksheet tab, then re-authenticate the Google Sheets credential in n8n if it still fails. Also double-check that the sheet columns you’re writing to still exist, because renaming headers can break field mapping.
Plenty for a typical small team.
It depends on how far you want to take it. Zapier or Make can absolutely move a draft into Sheets and send a Slack message, and they may feel simpler for a two-step setup. But this workflow also includes “pull inspiration, filter posts, generate drafts, structure outputs, then publish,” which is where n8n tends to shine because you can add branching logic without paying extra for every path. If you self-host, you also avoid execution limits that can get expensive when you start generating lots of drafts. And frankly, when something breaks, n8n’s visibility into each run makes it easier to troubleshoot. Talk to an automation expert if you want help choosing.
Once drafts reliably flow into Sheets and reviewers get nudged in Slack, the whole content machine feels calmer. Set it up once, then spend your time on better ideas and sharper edits.
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.