WhatsApp to Gmail, approve posts before they publish
You had a good idea. You even wrote it down. Then it sat in WhatsApp while you “got to it later,” because turning one thought into seven platform-ready posts is a whole second job.
If you’re a solopreneur posting between calls, you feel this daily. A marketing manager feels it when approvals drag, and an agency lead feels it when brand voice gets diluted across writers. This WhatsApp Gmail approval automation turns a single message into ready-to-review posts, without the copy-paste marathon.
You’ll see how the workflow generates platform-specific content, emails clean previews to Gmail for approval, and only publishes when you say “yes.”
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: WhatsApp to Gmail, approve posts before they publish
flowchart LR
subgraph sg0["Social Media Content Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Social Media Content", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "gpt-4o-mini", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "gpt-4o LLM", pos: "b", h: 48 }
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/>Merge"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Save Image to imgbb.com3"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Instagram Image"]
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/facebook.svg' width='40' height='40' /></div><br/>Instragram Post"]
n10["<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/>X Post"]
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/facebook.svg' width='40' height='40' /></div><br/>Facebook Post"]
n12["<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/>LinkedIn Post"]
n13@{ icon: "mdi:robot", form: "rounded", label: "OpenAI", pos: "b", h: 48 }
n14["<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/>Merge1"]
n15["<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/>Merge2"]
n16@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "gpt-4o-mini1", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "gpt-4o-mini2", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Approved?", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Instagram Result", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "X Result", pos: "b", h: 48 }
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Facebook Result", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "LinkedIn Result", pos: "b", h: 48 }
n25["<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/>Merge Results"]
n26@{ icon: "mdi:robot", form: "rounded", label: "Social Media Content Factory", pos: "b", h: 48 }
n27@{ icon: "mdi:robot", form: "rounded", label: "Prepare Results Email", pos: "b", h: 48 }
n28@{ icon: "mdi:robot", form: "rounded", label: "Prepare Results Message", pos: "b", h: 48 }
n29@{ icon: "mdi:message-outline", form: "rounded", label: "Gmail Results", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Content Approved?", pos: "b", h: 48 }
n31@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Default True 2", pos: "b", h: 48 }
n32@{ icon: "mdi:wrench", form: "rounded", label: "SerpAPI", pos: "b", h: 48 }
n33["<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/>WhapAround.pro HTTP Request"]
n34["<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/>WhappAround.pro HTTP Request"]
n35@{ icon: "mdi:robot", form: "rounded", label: "Prepare Content Review message", pos: "b", h: 48 }
n36["<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/>whappAround HTTP Request"]
n6 --> n31
n14 --> n8
n15 --> n11
n15 --> n12
n13 --> n7
n13 --> n6
n13 --> n15
n10 --> n22
n32 -.-> n26
n22 --> n25
n16 --> n27
n16 --> n28
n4 -.-> n26
n2 -.-> n35
n20 --> n10
n20 --> n14
n20 --> n15
n17 -.-> n27
n18 -.-> n28
n11 --> n23
n12 --> n24
n25 --> n16
n23 --> n25
n8 --> n9
n9 --> n21
n24 --> n25
n21 --> n25
n31 --> n20
n30 --> n13
n0 -.-> n26
n27 --> n29
n28 --> n36
n7 --> n6
n7 --> n14
n33 --> n26
n26 --> n35
n34 --> n30
n35 --> n34
end
subgraph sg1["Flow 2"]
direction LR
n3@{ icon: "mdi:brain", form: "rounded", label: "gpt-4o", pos: "b", h: 48 }
end
subgraph sg2["Flow 3"]
direction LR
n1@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini LLM", pos: "b", h: 48 }
end
subgraph sg3["Flow 4"]
direction LR
n19@{ icon: "mdi:message-outline", form: "rounded", label: "Approve Final Post Content", pos: "b", h: 48 }
end
subgraph sg4["Flow 5"]
direction LR
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/httprequest.dark.svg' width='40' height='40' /></div><br/>pollinations.ai"]
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 n0,n13,n26,n27,n28,n35 ai
class n2,n4,n17,n18,n3,n1 aiModel
class n32 ai
class n20,n30 decision
class n7,n8,n9,n11,n33,n34,n36,n5 api
class n3 disabled
class n1 disabled
class n19 disabled
class n5 disabled
classDef customIcon fill:none,stroke:none
class n6,n7,n8,n9,n10,n11,n12,n14,n15,n25,n33,n34,n36,n5 customIcon
Why This Matters: Consistent Content Without Constant Rewriting
Creating multi-platform content looks simple until you actually do it. One LinkedIn post becomes a Twitter thread, then an Instagram caption, then a TikTok hook, then you’re hunting hashtags, rewriting CTAs, and trimming character counts. Meanwhile your “source of truth” is scattered between Notes, Google Docs, and half-finished drafts in schedulers. And the worst part is the mental load: you’re not just writing, you’re context-switching all day, which is why the voice drifts and why you keep rewriting the same idea.
It adds up fast. Here’s where it breaks down.
- One idea gets rewritten seven different ways, and you still end up second-guessing tone and formatting.
- Approvals happen in DMs, screenshots, and “final-final-v3” docs, so publishing slows to a crawl.
- When you post manually, it’s easy to miss a platform for days, then scramble to catch up.
- Even small errors (wrong link, wrong CTA, off-brand phrasing) slip through because review is rushed.
What You’ll Build: WhatsApp Idea → Gmail Approval → Multi-Platform Posts
This workflow starts with a single WhatsApp message: a raw idea, a quick rant, a client insight, anything. From there, n8n sends that input through AI generation (GPT-4 or Gemini) so you get platform-specific versions for X/Twitter, Instagram, LinkedIn, Facebook, TikTok, Threads, and YouTube Shorts. It also enriches the content using trend research (via SERP API) and can generate supporting images using OpenAI or Pollinations.ai, then optionally host them via ImgBB. Finally, instead of publishing blindly, it assembles clean HTML previews and emails them to Gmail for human review, including a simple approval flow. Only after approval does the workflow publish via each platform’s API, and it can log what went out to Google Sheets for tracking.
The workflow begins when a message comes in (Webhook or scheduled check). AI creates each post format, then conditional logic (If/Merge) prepares the right payloads for each channel. Gmail becomes your control panel: approve once (or twice, if you want a stricter gate), and publishing happens automatically.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you publish 5 times a week across 7 platforms. Manually, even a “quick” workflow is maybe 10 minutes per platform (tweaks, hashtags, formatting, image upload), which is about 70 minutes per post, or nearly 6 hours a week. With this setup: 2 minutes to send the WhatsApp idea, about 10 minutes for AI generation and images to finish, then 3 minutes to approve in Gmail. You’re back to work while the posts publish.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- WhatsApp to capture ideas from your phone.
- Gmail to review and approve post previews.
- OpenAI or Gemini API key (get it from your OpenAI/Gemini dashboard)
Skill level: Intermediate. You’ll connect APIs, paste keys, and update a few placeholder IDs in HTTP Request nodes.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A WhatsApp message triggers the run. The workflow listens for a new message (commonly via a webhook-style inbound step, or a scheduled trigger if you’re polling). That message becomes the “seed” for everything downstream.
The idea is cleaned up and enriched. n8n uses Set/Edit Fields and Merge steps to normalize your input, then can pull supporting context from the SERP API so the AI has relevant angles, keywords, or trending references.
AI generates per-platform drafts (and images, if you want). GPT-4 or Gemini produces separate outputs for each channel, including hashtags and CTAs. If images are enabled, an HTTP Request step calls OpenAI or Pollinations.ai, and another step can upload the result to ImgBB so platforms can fetch it reliably.
Gmail sends previews and waits for approval. You receive an HTML email that shows each platform draft in a scannable format. Conditional logic (If nodes) handles approval states, including a double-approval gate if your process needs it.
You can easily modify the prompts and the approval threshold to match your brand and risk tolerance. See the full implementation guide below for customization options.
Troubleshooting Tips
- Google (Gmail/Sheets) credentials can expire or need specific permissions. If things break, check the connected Google account in n8n credentials and re-auth first.
- If you’re using Wait nodes or external image generation, 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.
Quick Answers
About 45 minutes if your API keys and social accounts are ready.
No. You will connect accounts, paste API keys, and update a few placeholders in HTTP Request nodes.
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/Gemini usage (often a few dollars a month at low volume), plus any SERP API or image hosting costs.
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 you probably should. Swap GPT-4 for Gemini (or the other way around) by changing the AI/HTTP Request nodes, then adjust the prompt text so it matches your brand voice. Common tweaks include changing which platforms get generated, editing the Gmail HTML preview template, and setting stricter approval rules (like requiring two approvals for paid campaigns). You can also log extra fields to Google Sheets, like campaign name or offer link, so reporting is less painful later.
Usually it’s an expired Google OAuth connection in n8n or the wrong Google account being authorized. Reconnect the Gmail credential, then confirm the workflow is allowed to send email and read the approval response. If you’re using a restricted Workspace domain, an admin setting can block third-party app access, which will look like random auth failures.
Plenty for most small teams: dozens of ideas per day is normal if your API limits allow it.
Often, yes, because this is not a simple two-step zap. You’re branching into multiple platforms, merging outputs, handling approval logic, and sometimes waiting on image generation, which is where n8n tends to be more flexible (and more affordable at volume if you self-host). Zapier and Make can absolutely do parts of it, but complex approvals plus multi-post publishing can get fiddly and pricey once you add paths and higher task usage. If you already run most of your stack on Zapier, it might still be the fastest “good enough” option for a single channel. If brand risk is high, I’d rather keep the approval gate and logic in one place. Talk to an automation expert if you’re not sure which fits.
Once this is running, WhatsApp becomes your capture tool and Gmail becomes your approval hub. The workflow handles the repetitive stuff, so you can focus on 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.