Google Sheets to Gmail, newsletters sent on schedule
Your newsletter process probably isn’t “hard.” It’s just endless. Pick a topic, research it, write it, find an image, format the email, send it, then remember what you already covered so you don’t repeat yourself next week.
This is where Sheets Gmail automation helps most. A marketing manager trying to stay consistent feels it. A solo founder juggling sales calls feels it. And honestly, agency teams running updates for multiple clients feel it the most.
This workflow turns a simple Google Sheet into a scheduled newsletter engine. You’ll see what it does, what you need, how it works, and where teams usually get tripped up.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to Gmail, newsletters sent on schedule
flowchart LR
subgraph sg0["Scheduled Run Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Initialize Payload", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Trigger", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Result Parser", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Engine", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign Image URL", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Cloud Storage Upload", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Retrieve Client List", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Combine Data Streams"]
n8@{ icon: "mdi:database", form: "rounded", label: "Retrieve Newsletter Topic", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Modify Status Flag", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Select First Topic", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Image Request"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Convert File to Binary", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "AI Orchestrator", pos: "b", h: 48 }
n14@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Newsletter Email", pos: "b", h: 48 }
n15@{ icon: "mdi:web", form: "rounded", label: "Perplexity Query Tool", pos: "b", h: 48 }
n0 --> n13
n7 --> n14
n13 --> n11
n4 --> n7
n9 --> n0
n6 --> n7
n10 --> n9
n1 --> n8
n3 -.-> n13
n15 -.-> n13
n8 --> n10
n11 --> n12
n12 --> n6
n12 --> n5
n5 --> n4
n2 -.-> n13
end
subgraph sg1["Flow 2"]
direction LR
n16@{ icon: "mdi:web", form: "rounded", label: "Tavily Search Tool", pos: "b", h: 48 }
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 trigger
class n2,n13 ai
class n3 aiModel
class n6,n8,n9 database
class n11,n15,n16 api
class n16 disabled
classDef customIcon fill:none,stroke:none
class n7,n11 customIcon
The Problem: Newsletters Keep Slipping (Or Repeating)
Creating a newsletter is a pile of small tasks that love to spread into your whole day. You start with a topic, then you “quickly” research it, then writing takes longer than you expected, then you hunt for an image that doesn’t look like generic stock. Next comes formatting HTML in Gmail, double-checking your list, and sending. And the worst part is the follow-up work: tracking what was sent, when it was sent, and making sure you don’t accidentally recycle the same topic two weeks later.
The friction compounds. Here’s where it breaks down for most teams.
- Topic tracking lives in someone’s head or a messy doc, so repeats happen and subscribers notice.
- Research and writing get postponed because it takes “a full block of time,” which never appears.
- Images are an afterthought, so newsletters feel flat and clicks suffer.
- Sending to a client list is easy to mess up if the list changes often.
The Solution: Scheduled Newsletters Generated From Google Sheets
This n8n workflow gives you a repeatable newsletter system that runs on a schedule. It starts by grabbing the first “unpublished” topic from a Google Sheet called Newsletter Topics, then immediately marks it as used (and records the date) so you don’t send the same thing twice. From there, an AI agent generates the newsletter content and a detailed image prompt using real-time web research (via Perplexity, with an option to swap to Tavily). That image prompt is sent to OpenAI’s image generation, the result is uploaded to Google Cloud Storage, and finally Gmail sends a personalized email to every contact pulled from your Clients Google Sheet. No copying, no reformatting, no “did we already send this?” anxiety.
The workflow starts with a scheduled trigger, so it runs automatically at the frequency you choose. In the middle, AI handles research, writing, and image creation, then the workflow packages everything into an HTML email. Gmail sends it out to each client from your sheet, one by one.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you send one newsletter every week to a list of 120 clients. Manually, it’s often about 2 hours to research and write, plus maybe 30 minutes to find or create a decent image, plus another 20 minutes to format and send. With this workflow, you spend about 10 minutes adding topics to Google Sheets, then the scheduled run generates the draft and image while you do other work, and Gmail sends automatically. You typically go from “block off half a day” to “quick check and done.”
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store topics and your client list.
- Gmail to send personalized newsletter emails.
- OpenAI API key (get it from your OpenAI API dashboard).
- Perplexity API key (get it from your Perplexity API settings).
- Google Cloud Storage to host the generated newsletter image.
Skill level: Intermediate. You’ll connect accounts, add API keys, and lightly edit prompts and email HTML.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A schedule kicks it off. The workflow runs from the “Scheduled Run Trigger” node at whatever cadence you set (weekly, daily, twice a week, you decide).
The next topic is selected and locked in. n8n reads your Newsletter Topics Google Sheet, grabs the first unpublished row, then updates that row with a status flag and publication date so the next run moves on automatically.
AI creates the newsletter and the image prompt. The AI agent uses OpenAI to write the newsletter, and it pulls supporting details from Perplexity (or Tavily if you enable that tool). You get copy that isn’t just generic fluff, because the workflow is designed to incorporate fresh web context.
The image is generated and attached properly. The workflow creates the image through OpenAI’s image endpoint, converts it into a file, uploads it to Google Cloud Storage, and then merges the image URL back into the email content.
Gmail sends to your list from Sheets. n8n pulls names and emails from your Clients Google Sheet and dispatches the newsletter to each contact with your chosen HTML template.
You can easily modify the newsletter style and tone to match your brand, because the prompt and HTML are meant to be edited. 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 schedule and immediately pulls the next newsletter topic.
- Add and open Scheduled Run Trigger.
- Set your preferred run cadence (e.g., daily or weekly) in Scheduled Run Trigger.
- Confirm the connection from Scheduled Run Trigger to Retrieve Newsletter Topic is in place.
Step 2: Connect Google Sheets
Topics and recipients are stored in Google Sheets and flow through topic selection and status updates.
- Open Retrieve Newsletter Topic and select the spreadsheet and sheet that stores topics.
- Open Select First Topic to ensure it limits the results to a single topic.
- Open Modify Status Flag to mark the selected topic as used.
- Open Retrieve Client List and select the spreadsheet and sheet that stores recipient emails.
- Confirm the flow Retrieve Newsletter Topic → Select First Topic → Modify Status Flag → Initialize Payload.
Credential Required: Connect your Google Sheets credentials in Retrieve Newsletter Topic, Modify Status Flag, and Retrieve Client List. These nodes have no credentials configured yet.
Step 3: Set Up AI Orchestration
The AI pipeline prepares structured newsletter content and supports external research tools.
- Open Initialize Payload and define any base fields you want to pass into the AI process.
- Open AI Orchestrator and confirm it receives input from Initialize Payload.
- Ensure OpenAI Chat Engine is connected to AI Orchestrator as the language model.
- Ensure Structured Result Parser is connected to AI Orchestrator as the output parser.
- Confirm Perplexity Query Tool is connected as an AI tool; Tavily Search Tool is disabled and can remain off unless you plan to use it.
Credential Required: Connect your OpenAI credentials in OpenAI Chat Engine. The AI tool nodes (Perplexity Query Tool, Tavily Search Tool, Structured Result Parser) are sub-nodes—add any required credentials to AI Orchestrator or the connected tool nodes, not the sub-nodes.
Step 4: Configure Image Generation and Storage
The workflow generates an image, converts it to a file, and uploads it to cloud storage, while also pulling the client list in parallel.
- Open Generate Image Request to configure the external image generation API request.
- Open Convert File to Binary to convert the image response into a binary file for upload.
- Confirm Convert File to Binary outputs to both Retrieve Client List and Cloud Storage Upload in parallel.
- Open Cloud Storage Upload and configure the target bucket/folder.
- Open Assign Image URL to map the uploaded image URL into the payload for later email composition.
Credential Required: Connect your Google Cloud Storage credentials in Cloud Storage Upload. This node has no credentials configured yet.
Step 5: Combine Data and Send the Newsletter
All content and recipient data are merged before sending the email.
- Open Combine Data Streams and confirm it merges outputs from Assign Image URL and Retrieve Client List.
- Open Dispatch Newsletter Email and configure the email fields (to, subject, body) using the merged data.
- Confirm the flow Combine Data Streams → Dispatch Newsletter Email is intact.
Credential Required: Connect your Gmail credentials in Dispatch Newsletter Email. This node has no credentials configured yet.
Step 6: Test and Activate Your Workflow
Run a manual test to validate the end-to-end flow before scheduling it for production.
- Click Execute Workflow to run a manual test from Scheduled Run Trigger.
- Verify a topic is selected, its status is updated, and the AI content is generated via AI Orchestrator.
- Confirm the image is created, uploaded through Cloud Storage Upload, and the URL is mapped in Assign Image URL.
- Check that Dispatch Newsletter Email sends a message to the intended recipients with the merged content.
- When successful, toggle the workflow to Active to enable scheduled production runs.
Common Gotchas
- Google Sheets permissions are picky. If the workflow can’t read or update rows, check the Google connection in n8n first, then confirm the sheet names match exactly (“Newsletter Topics” and “Clients”).
- 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 an hour if your Google accounts and API keys are ready.
No. You will connect accounts and paste in API keys. The only “technical” part is lightly editing prompts and email HTML if you want a custom look.
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 and Perplexity API costs, which usually land around a few cents per newsletter depending on length and image generation.
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 should. Update the prompt inside the “AI Orchestrator” agent to reflect your brand voice, reading level, and preferred structure. Then tweak the Gmail “Dispatch Newsletter Email” node’s HTML body so your header, spacing, and image placement match your style. Many teams also add a short “personal intro” paragraph template that gets reused each send.
Usually it’s permission scope or the wrong Google account connected. Reconnect Google Sheets in n8n, then confirm the sheet names match exactly and the service has access to that Drive. If it fails only on updates, check that the workflow has edit access and the columns you’re writing to still exist.
It can handle a typical small-business list easily, but Gmail sending limits still apply, so don’t try to blast thousands per day from a regular inbox.
If you want AI research, content generation, image handling, and “mark the topic as used” logic in one place, n8n is usually the cleaner fit. You can branch, merge data streams, and control the order of operations without paying extra for every path. The self-hosted option is a big deal when you start running frequent scheduled sends or multiple client newsletters. Zapier or Make can be faster to start for simple “new row → send email” flows, but they get awkward once you add AI, storage, and topic de-duplication. If you’re torn, Talk to an automation expert and we’ll sanity-check your use case.
Once this is live, your newsletter stops being a recurring project and becomes a background process. Set it up, keep your Sheets updated, and spend your time on the parts that actually grow the business.
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.