🔓 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

Slack + Google Sheets for approved social posts

Lisa Granqvist Partner Workflow Automation Expert

You’ve got ideas. You’ve got a brand brief. And somehow you still end up rewriting the same post twice, hunting for the “latest” image, and wondering what actually got approved.

This is where Slack Sheets approval automation pays off. Marketing managers feel it when approvals stall. Agency owners feel it when clients change their mind mid-week. And founders doing their own content? Honestly, they feel it every day.

This workflow turns one intake form into a week of LinkedIn and Facebook posts, routes images for Slack approval, logs everything in Google Sheets, and schedules the final posts once they’re greenlit. You’ll see the flow, the outcomes, and what you need to run it.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Slack + Google Sheets for approved social posts

The Problem: Social content gets stuck in approval limbo

Planning a week of posts should be a focused hour, not a messy back-and-forth scattered across DMs, email threads, and half-updated spreadsheets. But that’s what happens when your “system” is copy-paste plus someone remembering to ask for approvals. You draft the LinkedIn version, then “adapt it” for Facebook, then reformat again when the image doesn’t fit. Next thing you know, it’s Thursday, you’ve posted twice, and you can’t even tell what’s queued versus what’s still waiting on feedback.

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

  • Approvals live in Slack, but the content calendar lives somewhere else, so nothing stays in sync.
  • Platform-specific tweaks happen late, which means last-minute rewrites and weaker consistency.
  • Images are the bottleneck because nobody knows which version is final.
  • Tracking gets skipped, so you lose the history that makes scaling easier next month.

The Solution: Generate posts, approve in Slack, track in Sheets, then schedule

This n8n workflow acts like a lightweight content ops system that starts with one structured brand brief and ends with scheduled posts on LinkedIn and Facebook. A form submission collects about 10 brand variables (industry, audience, tone, and other essentials). From there, an AI content planning agent generates six distinct posts: three written for LinkedIn’s professional tone and three for Facebook’s more community-driven style. Each post then triggers an image generation path with platform-friendly sizing, and those images are pushed into Slack for human approval using interactive prompts. If someone adds feedback, the workflow sends the instructions back to the image editor, fetches the revised image, and asks for approval again. Once approved, the final asset is uploaded to Google Drive, the details are logged to Google Sheets, and the scheduling request is sent to the publishing API connected to your accounts.

It starts with a single form submission. Then the workflow splits posts by platform, generates and refines images with approval loops in Slack, and stores everything in Drive and Google Sheets. Finally, it schedules each post through the Late (GetLate) API so publishing is consistent without you babysitting it.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you publish six posts per week across two platforms (LinkedIn and Facebook). Manually, a common routine is about 20 minutes per post to rewrite, format, upload an image, and record it somewhere, which is roughly 2 hours for the week, plus extra time chasing approvals. With this workflow, you submit one brief in a few minutes, let the system generate all six drafts and images, then spend maybe 10 minutes total approving or leaving feedback in Slack. The rest runs in the background, and your Google Sheets tracker updates itself.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Slack for approval requests and feedback.
  • Google Sheets to log content and schedules.
  • Google Drive to store approved images.
  • OpenRouter API key (get it from your OpenRouter dashboard).
  • Replicate API key (get it from your Replicate account settings).
  • GetLate (Late) API key (get it from getlate.dev).

Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and update IDs (sheet, folders, Slack channel) without writing code.

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

How It Works

A brand brief kicks everything off. Someone fills out your form once (brand name, industry, audience, and a few positioning details), and n8n maps those fields into variables the AI can reliably use.

AI generates the written plan and parses it into clean structure. The content planning agent creates six posts, then the workflow converts the output into predictable JSON so each post can be processed one by one without chaos.

Posts split by platform and get matching images. LinkedIn items go down one path and Facebook items go down another. Each path generates an image, fetches it, and sends an approval message into Slack that asks for either approval or feedback.

Approved assets get stored, logged, then scheduled. Final images upload to Google Drive with organized naming, a Google Sheets row is updated with URLs and timing, and an HTTP request schedules the post via Late for LinkedIn or Facebook.

You can easily modify the number of posts per week or the approval rules based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Form Trigger

Start by setting up the intake form that triggers the workflow and captures brand inputs for content planning.

  1. Add and open Form Submission Trigger.
  2. Set Form Title to Company Infromation.
  3. Set Form Description to Please fill up teh variables below to generate the weekly content..
  4. In Form Fields, include labels exactly as configured: BRAND_NAME, INDUSTRY, TARGET_DEMOGRAPHICS, TARGET_LOCATION, PRIMARY_VALUE_PROPOSITION, CUSTOMER_CHALLENGE, DESIRED_OUTCOME, BRAND_VOICE, SPECIFIC_TOPICS_TO_FOCUS, and COMPANY_WEBSITE.

Tip: Keep the field labels identical to the workflow inputs so Map Brand Variables can map values without errors.

Step 2: Connect and Map Brand Inputs

Normalize incoming form data so the AI agent can reference consistent variables.

  1. Open Map Brand Variables and verify each assignment uses the correct expressions.
  2. Set BRAND_NAME to {{ $json.BRAND_NAME }} and INDUSTRY to {{ $json.INDUSTRY }}.
  3. Set TARGET_LOCATION to {{ $json.TARGET_LOCATION }} and BRAND_VOICE to {{ $json.BRAND_VOICE }}.
  4. Confirm SPECIFIC_TOPICS_TO_FOCUS uses {{ $json.SPECIFIC_TOPICS_TO_FOCUS }} and COMPANY_WEBSITE uses {{ $json.COMPANY_WEBSITE }}.

⚠️ Common Pitfall: One field name in Map Brand Variables is =COMPANY_WEBSITE — keep it exactly as configured to avoid breaking downstream references.

Step 3: Set Up the AI Content Planning Pipeline

Configure the content planner, language models, and parsing tools that generate structured post data.

  1. Open Content Planning Agent and set Text to the expression:
    Execute a month content for {{ $json.BRAND_NAME }} for next week {{ $now.startOf('week').plus({weeks: 1}).toFormat('yyyy-MM-dd') }}. Company Brand Voice and guidelines: {{ $json.BRAND_VOICE }} This is the current time and date: {{ $now }}
  2. Ensure Content Planning Agent has Has Output Parser enabled and is connected to Structured JSON Parser.
  3. Verify Structured JSON Parser uses Auto Fix and the provided JSON schema example.
  4. OpenRouter Chat Engine B is the language model for Content Planning AgentCredential Required: Connect your openRouterApi credentials.
  5. OpenRouter Chat Engine A is connected as the language model for Structured JSON ParserCredential Required: Connect your openRouterApi credentials.
  6. Perplexity Research Tool, Session Memory Buffer, and Reasoning Helper are AI sub-nodes attached to Content Planning Agent — add or verify credentials at the parent agent connection level (not on the sub-nodes).

Tip: Expand Posts List uses fieldToSplitOut = output.posts and includes output.campaign_theme; ensure your AI output matches this structure.

Step 4: Configure Platform Routing, Image Generation, and Approvals

Split posts by platform, generate images, and route approvals through Slack for optional refinement.

  1. In Route by Platform, confirm the rules compare {{ $json['output.posts'].platform }} to facebook and linkedin.
  2. For LinkedIn, configure Generate Image B with URL https://api.replicate.com/v1/models/google/imagen-4-ultra/predictions and JSON Body using the expression that combines image_prompt, style, and overlay_text.
  3. For Facebook, configure Generate Image A with the same URL and JSON Body template.
  4. Credential Required: Connect your httpHeaderAuth credentials for Generate Image A, Generate Image B, Refine Image via Nano, and Refine Image via Nano B.
  5. Ensure Slack Approval Request A and Slack Approval Request B use Operation = sendAndWait with the approval form fields.
  6. Credential Required: Connect your slackOAuth2Api credentials for Slack Approval Request A and Slack Approval Request B.
  7. Confirm Approval Decision A and Approval Decision B check {{ $json.data.Approval }} for Approved vs Review.
  8. Validate Set Original Image Link A/B and Set Edited Image Link A/B set final_image_url and image_source, then Choose Image Path A/B routes based on {{ $json.image_source }}.

⚠️ Common Pitfall: If Slack Approval Request A/B is not configured to use the correct channel ID, approvals will stall and images won’t advance to Choose Image Path A/B.

Step 5: Configure File Storage, Sheets, and Scheduling Outputs

Upload final images to Drive, update the spreadsheet, and schedule posts with the external API.

  1. In Drive File Upload A and Drive File Upload B, set Name to {{ $('Iterate Facebook Items').item.json.id }}-{{ $now.toFormat('hh:mm-ddMMMyyyy').toUpperCase() }} (A) and {{ $('Iterate LinkedIn Items').item.json.id }}-{{ $now.toFormat('hh:mm-ddMMMyyyy').toUpperCase() }} (B).
  2. Credential Required: Connect your googleDriveOAuth2Api credentials for Drive File Upload A and Drive File Upload B.
  3. In Update Sheet Row A and Update Sheet Row B, confirm Operation = appendOrUpdate and map fields such as TEXT to {{ $('Expand Posts List').item.json['output.posts'].post_text }} and DATE to {{ DateTime.fromISO($('Expand Posts List').item.json['output.posts'].posting_date).set({hour: 15, minute: 0, second: 0}).toUTC().toISO({suppressMilliseconds: true}) }}.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials for Update Sheet Row A and Update Sheet Row B.
  5. In Schedule Social Post A and Schedule Social Post B, set URL to https://getlate.dev/api/v1/posts and JSON Body to the provided payload using {{ $json.TEXT }} and {{ $json.DATE }}.
  6. Credential Required: Connect your httpHeaderAuth credentials for Schedule Social Post A and Schedule Social Post B.

⚠️ Common Pitfall: The IMAGE column uses the literal formula ==IMAGE("https://drive.google.com/uc?id={{ $json.id }}"). If your sheet doesn’t interpret the extra =, adjust it to a single =.

Step 6: Test and Activate Your Workflow

Run a manual test, confirm approvals and outputs, then activate for production.

  1. Click Execute Workflow and submit a sample entry through Form Submission Trigger.
  2. Verify Content Planning Agent produces structured output that Structured JSON Parser can parse into output.posts.
  3. Confirm images are generated via Generate Image A/Generate Image B, approvals flow through Slack Approval Request A/Slack Approval Request B, and the correct image path is chosen in Choose Image Path A/Choose Image Path B.
  4. Check that files appear in Google Drive from Drive File Upload A/Drive File Upload B, sheet rows update via Update Sheet Row A/Update Sheet Row B, and posts are scheduled by Schedule Social Post A/Schedule Social Post B.
  5. Once successful, toggle Active to enable ongoing form-triggered execution.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Slack credentials can expire or need specific permissions. If things break, check the n8n Credentials panel and your Slack app’s OAuth scopes 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.
  • Google Drive uploads can fail if the folder ID is wrong or the connected account lacks access. Confirm the folder is shared with the same Google identity used in n8n.

Frequently Asked Questions

How long does it take to set up this Slack Sheets approval automation?

About an hour if your accounts and keys are ready.

Do I need coding skills to automate Slack Sheets approval?

No. You will mostly connect accounts and paste a few IDs and API keys.

Is n8n free to use for this Slack Sheets approval 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 OpenRouter, Replicate, and GetLate API usage costs.

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 Slack Sheets approval workflow for different posting volume?

Yes, and it’s straightforward. Change the prompt in the Content Planning Agent to generate more or fewer posts, then make sure the Split/iteration nodes (Expand Posts List and the platform batch loops) are aligned with the new output. Many teams also customize the Slack approval message fields, the Google Drive naming convention, and the scheduling logic (dates, cadence, timezone). If you only want LinkedIn or only Facebook, you can disable the other platform route in the Route by Platform switch.

Why is my Slack connection failing in this workflow?

Usually it’s expired OAuth or missing bot scopes. Reconnect the Slack credential in n8n, confirm the app is installed in the right workspace, and verify it can post to the chosen channel. If you’re using interactive approvals, also make sure your Slack app settings allow interactivity for the same request URL.

How many posts can this Slack Sheets approval automation handle?

It can handle a week of posts per brand brief comfortably, and scaling mostly depends on your n8n execution limits and how fast your AI image generation returns.

Is this Slack Sheets approval automation better than using Zapier or Make?

Often, yes, if you want the full loop: generate content, split by platform, wait for Slack approval, optionally revise images, then schedule and log everything. That kind of branching can get awkward (and expensive) in tools priced per step. n8n also gives you the self-hosting option, which matters when you start running lots of approvals and iterations. Zapier or Make can still be a fine pick for a simple “draft to Slack” pipeline, especially if you don’t care about storing assets in Drive or updating a Sheets tracker. If you’re on the fence, Talk to an automation expert and describe your volume and approval needs.

Once this is running, content production stops being a weekly scramble. The workflow handles the repetitive approvals, file handling, and tracking so you can focus on the message.

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