Perplexity + Gmail: newsletter drafts ready to approve
Your newsletter process probably breaks in the same place every week. Research lives in one tab, drafts live in another, approvals happen in a messy email thread, and the “final” version somehow still ships with a stale stat or missing disclaimer.
This Perplexity Gmail automation hits marketing managers first, because deadlines don’t care about context switching. But founders shipping investor updates and client-facing advisors sending weekly market notes feel the drag too. You end up spending about 2 hours just getting to a “sendable” draft.
This workflow turns that weekly scramble into a repeatable approval loop, then drops a polished Gmail draft in your account. You’ll see what it automates, what to customize, and where the common failures happen.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Perplexity + Gmail: newsletter drafts ready to approve
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", 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/code.svg' width='40' height='40' /></div><br/>Parse Perplexity JSON"]
n2["<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/>Week ranges + run_key"]
n3["<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/>Assemble Preview (Code)"]
n4@{ icon: "mdi:message-outline", form: "rounded", label: "Send Preview", pos: "b", h: 48 }
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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook"]
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/code.svg' width='40' height='40' /></div><br/>Enrich for Editorial"]
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/perplexity.dark.svg' width='40' height='40' /></div><br/>Research LLM"]
n8@{ icon: "mdi:robot", form: "rounded", label: "QC LLM", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "HTML Builder LLM", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Editor LLM", 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/code.svg' width='40' height='40' /></div><br/>Normalize"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Approval Submit (POST)"]
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Create Final Draft for Editor", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Merge Revision Notes"]
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Action Type", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Decode"]
n18["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Form HTML1"]
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n20 --> n15
n20 --> n18
n17 --> n11
n8 --> n3
n11 --> n16
n10 --> n9
n7 --> n1
n9 --> n8
n0 --> n2
n16 --> n13
n16 --> n20
n6 --> n10
n15 --> n10
n1 --> n6
n2 --> n7
n12 --> n17
n3 --> n4
n13 --> n5
end
subgraph sg1["Flow 2"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Approval Webhook (GET)"]
n19["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook (HTML page)"]
n14 --> n19
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 trigger
class n8,n9,n10 ai
class n16,n20 decision
class n5,n12,n18,n14,n19 api
class n1,n2,n3,n6,n11,n15,n17 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n5,n6,n7,n11,n12,n15,n17,n18,n14,n19 customIcon
The Problem: Newsletters Get Stuck in Research and Approvals
A “weekly newsletter” sounds simple until you actually try to run it like a system. You start by gathering credible updates, then you reshape them into something readable, then you chase someone for approval, then you redo half the draft because the reviewer replied with “tiny tweaks” and three screenshots. Meanwhile, you’re also trying not to publish anything risky or inaccurate. The worst part is the mental load: every week feels like rebuilding the same machine from scratch, which quietly steals time from strategy, partnerships, and actual marketing.
It adds up fast. Here’s where it breaks down in real life.
- Research gets copied from multiple sources, and one wrong number can trigger a last-minute rewrite.
- Drafting takes longer than it should because you’re constantly reformatting, rewording, and re-explaining context.
- Approvals happen in scattered replies, which means version control becomes guesswork.
- Compliance or factual checks get skipped when you’re under the gun, then you “hope it’s fine.”
The Solution: AI Research + Drafting + Approval, Then a Gmail Draft
This n8n workflow automates your weekly newsletter production cycle end to end, without turning it into a black box. It starts on a schedule (weekly by default), computes the date window you want covered, then asks Perplexity for structured research in a predictable JSON format. That research becomes the input for an editorial drafting step in OpenAI, which writes a long-form newsletter (about 2,000 words) in your preferred style. Before anyone sees it, a separate quality check step scans for factual issues and compliance risk, so you’re not sending something you’ll regret. Finally, the workflow emails a preview with clear Approve/Revise actions and, once approved, generates a clean Gmail draft ready for you to send.
The workflow begins with a scheduled run and a defined week window. Perplexity gathers the raw material, OpenAI shapes it into a newsletter and formats it into HTML, then n8n routes it through a simple approval loop. Approval creates the final Gmail draft. Revisions route back into the editorial step with the reviewer’s notes.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish one weekly newsletter and you normally spend about 2 hours researching, 2 hours drafting, and another hour chasing approvals and applying edits. That’s roughly 5 hours per issue. With this workflow, you spend maybe 10 minutes adjusting the angle (if needed), then you review the emailed preview and click Approve or request changes. Even if you add 20 minutes for review and tweaks, you’re still getting back about 4 hours each week.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Perplexity for research API calls.
- OpenAI to draft, format, and quality-check.
- Gmail to send previews and create drafts.
- Perplexity API key (get it from your Perplexity account settings).
- OpenAI API key (get it from the OpenAI API dashboard).
Skill level: Intermediate. You’ll connect OAuth/API credentials and edit prompts, but you won’t be writing an app.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled run kicks everything off. The workflow triggers every week, then calculates the right “week window” so your research stays focused on the latest updates.
Research is collected and normalized. Perplexity is called to fetch structured market research, and n8n parses the JSON so later steps can reference consistent fields instead of messy text.
The newsletter is drafted, formatted, and checked. OpenAI generates the editorial draft, then an HTML composing step turns it into an email-ready layout. A dedicated QC pass reviews for factual issues and potential compliance concerns before anything goes to a human.
Approval happens through email, then Gmail gets the final draft. n8n sends a preview email with Approve/Revise actions. Clicking routes to an n8n-hosted approval page, and approval triggers the “Generate Final Draft” node that creates a Gmail draft in your account.
You can easily modify the prompts and the HTML branding to match your voice. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow starts on a weekly schedule and calculates the market week window for downstream research.
- Add and open Scheduled Run Trigger.
- Set the schedule rule to run weekly at 8:00 by configuring the interval for weeks with triggerAtHour set to
8. - Connect Scheduled Run Trigger to Compute Week Window so the date range and
run_keyare generated for the current week.
Step 2: Connect Market Research and Parse the Response
These nodes fetch weekly market data and normalize the JSON into a consistent structure for drafting.
- Open Market Research LLM and ensure the request uses the provided system and user prompts with week context expressions like
{{ $json.week_label }},{{ $json.start_iso }}, and{{ $json.end_iso }}. - Credential Required: Connect your perplexityApi credentials in Market Research LLM.
- Confirm the connection flow Compute Week Window → Market Research LLM → Parse Research JSON.
- Review Parse Research JSON to ensure the robust JSON parser and normalization logic remains intact; this node cleans the model output before editorial processing.
Step 3: Set Up Editorial Drafting and HTML Composition
This section builds the editorial JSON, composes HTML, and runs quality checks before sending a preview.
- In Prepare Editorial Context, set your firm details by updating values like firm_name to
Company Name, contact_url tocontact url, and view_url tohttps://website/${runKey}. - Open Editorial Draft LLM and keep jsonOutput enabled. The prompt uses an expression to set the mode:
{{ $json.editor_json ? 'REVISE' : 'FRESH' }}. - Credential Required: Connect your openAiApi credentials in Editorial Draft LLM.
- Open HTML Composer LLM and keep jsonOutput enabled. This node reads editor JSON from Editorial Draft LLM and uses date expressions such as
{{ $('Compute Week Window').isExecuted ? $node['Compute Week Window'].json.start_iso : ($json.week_meta?.start_iso || '') }}. - Credential Required: Connect your openAiApi credentials in HTML Composer LLM.
- Open Quality Check LLM and keep jsonOutput enabled to return structured compliance and fact-check results.
- Credential Required: Connect your openAiApi credentials in Quality Check LLM.
- Verify the flow Editorial Draft LLM → HTML Composer LLM → Quality Check LLM → Build Preview Payload.
Step 4: Configure Preview Delivery and Approval Webhooks
This path sends a preview email with approval links and hosts the approval/revision interface.
- Open Build Preview Payload and verify it composes
encoded_contextfrom the editorial and QC output. - In Dispatch Preview Email, set sendTo to
[YOUR_EMAIL]and keep the HTML message expression that builds approval/revision buttons usinghttps://[YOURDOMAIN].app.n8n.cloud/webhook/newsletter-approval. - Credential Required: Connect your gmailOAuth2 credentials in Dispatch Preview Email.
- Configure Approval Link Webhook with path set to
newsletter-approvaland responseMode set toresponseNode. - Ensure Approval Page Response returns the approval/revision HTML and handles
#ctxcontext from the URL hash. - Configure Approval Submit Webhook with path set to
newsletter-approval-submitand httpMethod set toPOST.
[YOURDOMAIN] and [YOUR_EMAIL] in Dispatch Preview Email and webhook response HTML, otherwise approval links will break.Step 5: Configure Approval Processing and Final Draft Creation
This branch processes approval or revision requests, updates the context, and creates the final Gmail draft.
- Confirm the webhook flow: Approval Submit Webhook → Decode Context Payload → Normalize Request Data → Evaluate Action Type.
- In Evaluate Action Type, keep the approval condition using the expression
{{ ($json.body?.action || $json.query?.action || '').toLowerCase() }}equalsapprove. - When approval is true, ensure the output goes to Generate Final Draft and then Return Webhook Reply.
- Credential Required: Connect your gmailOAuth2 credentials in Generate Final Draft.
- When approval is false, ensure the output goes to Notes Present Check and then Combine Revision Notes → Editorial Draft LLM for revision cycles.
- Keep Return Form HTML and Return Webhook Reply as the response nodes for webhooks to close the loop.
notes field. Check that the approval form sends notes on POST.Step 6: Test and Activate Your Workflow
Validate the full workflow, including approval and revision flows, before running on schedule.
- Click Execute Workflow to run Scheduled Run Trigger manually and confirm Dispatch Preview Email sends a preview.
- Open the approval email and click Approve and Request revisions to verify both webhook paths (Approval Link Webhook and Approval Submit Webhook).
- Confirm Generate Final Draft creates a Gmail draft with a subject formatted by the expression in the node.
- Check that Return Webhook Reply and Return Form HTML respond with HTML pages and no errors.
- When satisfied, toggle the workflow to Active to enable weekly production runs.
Common Gotchas
- Gmail OAuth credentials can expire or need specific permissions. If things break, check your n8n Credentials panel and your Google account’s connected apps 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 you already have your API keys and Gmail OAuth ready.
No. You will mostly connect accounts and edit 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 Perplexity and OpenAI API usage (cost depends on token volume and model choice).
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 mostly prompt work. Update the Perplexity “Market Research” prompt to your domain (tech, education, internal comms), then adjust the editorial and QC prompts so tone and rules match your audience. Many teams also swap the disclaimer/signature inside the HTML composing step to match brand requirements.
Most of the time it’s OAuth. Reconnect your Gmail credential in n8n and make sure the Google account still allows access (workspace policies can block it). If the preview email sends but draft creation fails, check that the Gmail node is using the same authorized account you expect, not an old credential. Also watch for rate limits if you test repeatedly in a short window.
On n8n Cloud Starter, it’s generally fine for a weekly newsletter (or several) because you’re running a handful of executions per issue. If you self-host, there’s no execution cap, so scale is mostly limited by your server and AI API quotas. Practically, the slow part is the AI generation, not n8n, so expect each issue to take a few minutes of processing time.
Often, yes, if you care about the approval loop and logic. This workflow uses multiple webhooks, branching (Approve vs. Revise), and “carry context forward” behavior, which is where Zapier and Make can get expensive or awkward. n8n also gives you the self-hosted option, which is a big deal if you plan to scale. If you only need “generate draft and email it,” Zapier can be simpler. If you’re unsure, Talk to an automation expert and you’ll get a straight recommendation.
Once this is running, your weekly newsletter stops being a recurring fire drill. You review, approve, and move on.
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.