🔓 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

Google Sheets + Gmail: newsletters sent only when approved

Lisa Granqvist Partner Workflow Automation Expert

You wrote the newsletter. You double-checked the links. Then someone sends the wrong version anyway, or hits “send” before the client signs off. It’s the kind of mistake that feels small until it isn’t.

This Sheets Gmail approval automation hits marketing managers first, but agency teams and solo operators feel it too. You get a simple control system: drafts are generated and stored, and only rows marked “Approved” actually send.

Below, you’ll see how the workflow works, what it replaces, and how to put it into production without turning your newsletter process into another “project.”

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets + Gmail: newsletters sent only when approved

The Problem: Newsletters Ship Before They’re Truly Ready

Newsletter operations usually start simple: a spreadsheet of topics, a doc somewhere, and a “we’ll remember” approval step. Then real life shows up. You’re juggling multiple clients, last-minute edits, and “can we send it today?” messages. The weak point is always the same: there’s no single source of truth that decides what gets sent and what stays parked. So drafts get emailed early, the wrong audience gets the wrong version, and you spend your morning doing cleanup instead of planning the next campaign.

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

  • Approval lives in someone’s inbox, so the sending step turns into guesswork.
  • Draft files end up scattered in Drive, which makes “final” hard to define.
  • Manual copying of subject lines and HTML leads to tiny errors that look sloppy in production.
  • When you manage multiple clients, you risk sending Client A’s content to Client B.

The Solution: Google Sheets Runs the Entire Approval-to-Send Pipeline

This workflow turns one Google Sheet into your newsletter command center. You add topics as “Pending,” then run a manual generation flow that creates AI-written HTML for each topic and stores it in Google Drive for review. The system updates the row so everyone can see the draft is “Generated,” and it sends an admin notification so nothing gets lost. Separately, a schedule checks your sheet for rows marked “Approved.” Only those rows move forward. n8n pulls the client email, sends the newsletter through Gmail, then marks the row “Sent” so you have a clean audit trail and you don’t send duplicates.

The workflow starts with either a manual run (to generate content from Pending rows) or a timed schedule (to distribute only Approved rows). In the middle, OpenAI generates newsletter HTML, Google Drive stores the file, and Gmail handles both admin alerts and client delivery. At the end, Google Sheets updates every status so your spreadsheet always matches reality.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you manage 10 client newsletters a week. Manually, you might spend about 20 minutes generating content, 10 minutes saving and organizing files, and 10 minutes prepping the send per client. That’s roughly 40 minutes each, or about 7 hours weekly. With this workflow, you drop topics into Sheets, run the generation, and you’re mostly waiting on processing (about 5 minutes per newsletter). When rows flip to “Approved,” scheduled sending handles delivery automatically. You get most of that 7 hours back, and approvals stop getting skipped.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store topics, statuses, and send dates.
  • Gmail to send admin notifications and client emails.
  • OpenAI API key (get it from your OpenAI dashboard).

Skill level: Intermediate. You’ll connect accounts, map a few fields, and tweak an AI prompt without writing “real code.”

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

How It Works

A manual run generates drafts from “Pending.” You trigger the workflow when you’re ready to create newsletters, and it pulls the queued topics from your Google Sheet. If a row isn’t truly Pending (or the date rules don’t match), it gets skipped.

AI creates newsletter HTML, then it’s packaged for storage. OpenAI produces the draft content in HTML, and a small formatting step prepares it so it can be saved cleanly as a document.

Google Drive stores the draft, and the sheet becomes your tracker. The workflow uploads the file to Drive, emails the admin that it’s ready, and updates the Google Sheets status to “Generated” so review can happen without confusion.

A scheduled run sends only “Approved.” On a timer, n8n searches for rows marked Approved, looks up the client email, loops through recipients, and sends the newsletter via Gmail. Once sent, it marks the row “Sent.” Done.

You can easily modify the approval rules to include a “Needs edits” state or a second reviewer based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Trigger Nodes

Set up both manual and scheduled entry points so you can run the newsletter generation on demand or automatically.

  1. Open Manual Run Initiator to enable manual test runs in the editor.
  2. Open Timed Schedule Trigger and configure your schedule rule (e.g., daily or weekly) in the rule settings.
  3. Confirm that Manual Run Initiator connects to Fetch Newsletter Topics, and Timed Schedule Trigger connects to Retrieve Approved Records as shown in the workflow.

Step 2: Connect Google Sheets

These nodes read newsletter topics, approvals, client emails, and update statuses. Connect Google Sheets once and reuse it across all Sheets nodes.

  1. Open Fetch Newsletter Topics and confirm the documentId is [YOUR_ID] and sheetName is gid=0. The filter should match Status = Pending.
  2. Open Retrieve Approved Records and ensure the documentId is [YOUR_ID] and sheetName is gid=0.
  3. Open Lookup Client Emails and set sheetName to the client list sheet id [YOUR_ID].
  4. Open Mark as Generated and confirm it updates Status to Generated and maps fields like Date to {{ $('Fetch Newsletter Topics').item.json.Date }}.
  5. Open Mark as Sent and confirm it updates Status to Sent and matches on Date.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials to all Google Sheets nodes (5 total: Fetch Newsletter Topics, Retrieve Approved Records, Lookup Client Emails, Mark as Generated, Mark as Sent).

Step 3: Set Up the Date and Approval Filters

These checks ensure only today’s pending topics are generated and only approved newsletters are sent.

  1. In Check Pending Date, verify the condition compares {{ $json.Date }} to {{ new Date().toLocaleDateString('en-US') }}.
  2. In Confirm Approved Status, ensure the condition checks {{ $json.Status }} equals Approved.
  3. Confirm the flow: Fetch Newsletter TopicsCheck Pending DateGenerate Newsletter HTML, and Retrieve Approved RecordsConfirm Approved StatusLookup Client Emails.

Step 4: Set Up the AI and HTML File Generation

Generate the newsletter content with AI and format it into an HTML file for Google Drive.

  1. Open Generate Newsletter HTML and set the model to gpt-4o.
  2. In Generate Newsletter HTML, confirm the prompt includes {{ $json.Topic }} and {{ $json.hooks }} in the message content.
  3. Credential Required: Connect your openAiApi credentials in Generate Newsletter HTML.
  4. Open Format HTML for Drive and keep the jsCode block as-is to generate a binary HTML file and filename based on the current date.
  5. Confirm the flow: Generate Newsletter HTMLFormat HTML for DriveUpload File to Drive.

Tip: If the AI output looks truncated, adjust the prompt in Generate Newsletter HTML to reduce length or add formatting instructions.

Step 5: Configure Drive Upload and Admin Review Email

Store the generated HTML in Drive and notify an admin for review before sending to clients.

  1. In Upload File to Drive, set name to =newsletter-{{ $('Fetch Newsletter Topics').item.json.Date }}.html.
  2. Set driveId to My Drive and folderId to [YOUR_ID].
  3. Set inputDataFieldName to =data.
  4. Credential Required: Connect your googleDriveOAuth2Api credentials in Upload File to Drive.
  5. In Notify Admin via Email, set sendTo to [YOUR_EMAIL] and verify message is =Review the attached newsletter {{ $json.webViewLink }}.
  6. Set subject to =Newsletter Preview for {{ $('Fetch Newsletter Topics').item.json.Date }} and HTML body attached and emailType to text.
  7. Credential Required: Connect your gmailOAuth2 credentials in Notify Admin via Email.
  8. Confirm the flow: Upload File to DriveNotify Admin via EmailMark as Generated.

⚠️ Common Pitfall: If Upload File to Drive fails, verify the folder permissions and that the Drive credential has access to [YOUR_ID].

Step 6: Configure Client Delivery and Status Updates

This section dispatches the approved newsletter to each client and marks records as sent.

  1. In Dispatch Client Email, set sendTo to {{ $json.Email }}.
  2. Set message to =Attached is the newsletter {{ $('Retrieve Approved Records').item.json['Document URL'] }} and emailType to text.
  3. Credential Required: Connect your gmailOAuth2 credentials in Dispatch Client Email.
  4. Verify the batching flow: Lookup Client EmailsBatch IteratorDispatch Client EmailBatch IteratorMark as Sent.

Step 7: Test and Activate Your Workflow

Validate both the manual generation path and the scheduled delivery path before turning the workflow on.

  1. Click Execute Workflow using Manual Run Initiator and confirm a newsletter HTML file is created in Drive.
  2. Check Notify Admin via Email to verify the admin email includes a webViewLink to the uploaded file.
  3. Run a test on the scheduled path by temporarily triggering Timed Schedule Trigger, then verify that Dispatch Client Email sends to addresses from Lookup Client Emails.
  4. Confirm Mark as Generated and Mark as Sent update the Google Sheet with Generated and Sent statuses.
  5. Once validated, toggle the workflow to Active to run automatically on schedule.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets permissions can block updates even when reads work. If status changes fail, check the Google connection and sharing settings on the spreadsheet 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.
  • OpenAI prompts that are too generic create bland newsletters. Add your brand voice, target audience, and “what to avoid” early, or you will be rewriting every draft.

Frequently Asked Questions

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

About 45 minutes if your Google accounts and sheet are ready.

Do I need coding skills to automate Sheets Gmail approval?

No. You’ll mostly connect apps and map columns to fields. The “code” step is included and usually doesn’t need edits.

Is n8n free to use for this Sheets Gmail 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 OpenAI API costs (often just a few dollars a month at low volume).

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 Sheets Gmail approval workflow for a two-step approval?

Yes, but keep it simple. Add a second status like “Review” or “Client Approved,” then adjust the “Confirm Approved Status” check so only the final state sends. Many teams also add an extra admin notification after “Mark as Generated” so reviewers get pinged immediately.

Why is my Google Sheets connection failing in this workflow?

Usually it’s the Google authentication scope or a spreadsheet permission mismatch. Reconnect the Google account in n8n, then confirm that same account can edit the exact file (not a copy) and the right sheet/tab names haven’t changed. If you renamed columns, check the node mappings too because n8n can’t update a field it can’t find.

How many newsletters can this Sheets Gmail approval automation handle?

It can handle 100+ clients without breaking a sweat, as long as your Google and OpenAI rate limits are respected.

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

Often, yes. The big win is control: n8n makes it easier to enforce “only Approved sends,” loop through multiple rows, and update statuses reliably without paying extra for every branch. You also get the option to self-host, which matters once you’re running lots of scheduled checks. Zapier or Make can still be fine for a simple two-step “row added → send email,” but approvals plus file storage plus status tracking gets messy. If you want help choosing, Talk to an automation expert.

Once Sheets becomes the gatekeeper, “Oops, wrong version” stops being a regular event. Set it up once, then let approvals decide what actually ships.

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