Google Sheets to Gmail, personalized campaigns sent
Writing “just one more promo email” sounds small until you’re on version seven, copying names from a spreadsheet, and second-guessing every subject line. Then you hit send and realize you used the wrong offer, or forgot to personalize the opening for half the list.
This Sheets Gmail campaigns automation is a relief for marketing managers trying to ship weekly promos, agency teams juggling multiple client lists, and business owners who do not have time to draft from scratch. You get consistent messaging, faster launches, and fewer messy mistakes.
Below, you’ll see how the workflow pulls your offer and audience from Google Sheets, uses AI to write the message, then sends a personalized campaign through Gmail. Clean, repeatable, and scalable.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets to Gmail, personalized campaigns sent
flowchart LR
subgraph sg0["Track Offer Sheet Updates (Sheet 1) Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Generate Marketing Content w..", 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/>Format Personalized Email"]
n2@{ icon: "mdi:message-outline", form: "rounded", label: " Send Marketing Email to Cli..", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Llama 3.2 - Promo Content Mo..", pos: "b", h: 48 }
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Track Offer Sheet Updates (S..", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Fetch Client List (Sheet 2)", pos: "b", h: 48 }
n1 --> n2
n5 --> n1
n3 -.-> n0
n0 --> n5
n4 --> n0
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 n4 trigger
class n0 ai
class n3 aiModel
class n5 database
class n1 code
classDef customIcon fill:none,stroke:none
class n1 customIcon
The Challenge: Personalizing campaigns without losing your mind
Email campaigns fail in boring ways. Someone updates the offer in a sheet, but the draft in Gmail still uses last week’s pricing. A client list grows, and now you are duplicating emails, hunting for first names, and hoping you didn’t paste the wrong greeting. Even when you do everything “right,” the mental load is real. You are switching tabs, rewriting the same pitch, and trying to keep tone consistent across dozens (or hundreds) of recipients. Honestly, that’s not marketing. That’s clerical work with a deadline.
It adds up fast. Here’s where it breaks down most often.
- Offer details change in Google Sheets, but the email copy doesn’t get updated everywhere.
- Personalization becomes “Hi {FirstName}” and nothing more because doing it properly takes too long.
- One copy-paste error can send the wrong pricing or wrong name, and you will not catch it until replies arrive.
- Campaign quality drifts over time because multiple people edit drafts with no shared structure.
The Fix: Generate and send personalized Gmail campaigns from Sheets
This workflow turns your Google Sheets into a simple campaign control center. When you add or update an offer in your “Offer” sheet, n8n automatically kicks off the process. An AI agent (using a Llama 3.2 chat model) reads the offer details and generates marketing copy that matches the structure you want, not a random blob of text. Then the workflow pulls your client list from a second sheet, merges in each client’s name and email, and assembles a clean email payload for every recipient. Finally, Gmail sends the messages out, one by one, with the right personalization baked in. You keep the spreadsheet workflow your team already understands, but the drafting and sending stops being manual busywork.
The automation starts with a Google Sheets trigger that watches for offer changes. AI generates the promo copy, then the workflow retrieves your client rows and formats a personalized email for each one. Gmail handles delivery, so your campaign is sent from the channel your customers recognize.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run one weekly promo to a list of 120 clients. Manually, you might spend about 2 hours drafting, then another hour personalizing and double-checking names, pricing, and links before you send. With this workflow, you update the offer once in Sheet 1, keep your client list in Sheet 2, and let n8n generate and dispatch the emails. Your “hands-on” time drops to roughly 15 minutes, and the rest is automated processing and sending.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store offers and client lists.
- Gmail to send campaigns from your mailbox.
- Llama 3.2 API credentials (get it from your Llama/Ollama provider or hosted endpoint).
Skill level: Intermediate. You’ll connect Google + Gmail, map a few sheet columns, and paste an AI prompt that matches your brand voice.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
An offer update in Google Sheets triggers everything. When Sheet 1 changes (new promo, updated pricing, fresh dates), the workflow starts automatically so you are not relying on someone remembering to “run the campaign.”
AI turns raw offer details into campaign-ready copy. The AI agent reads what you entered in the offer sheet and generates structured content (subject line, intro, offer framing, CTA). This is where you lock in consistency.
Your client list is pulled from a second sheet and merged. The workflow retrieves names and emails from Sheet 2, then combines each row with the AI copy so every message is personalized without manual edits.
Gmail sends the finished emails. n8n assembles the final payload, then dispatches each email via the Gmail node, which keeps delivery in the Google ecosystem your team already uses.
You can easily modify the prompt and email formatting to match your tone, offer types, or segmentation rules. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
Set up the workflow trigger so a change in your offer sheet starts the AI email campaign process.
- Add the Monitor Offer Sheet Changes node as your trigger.
- Set Document to
1kRRDSoJNzVQAUbunYzAk-KUBcMjhuUw0PydGjLbbEVgand Sheet toSheet2. - Set the polling interval to
everyMinuteto check for new or updated offers. - Credential Required: Connect your
googleSheetsTriggerOAuth2Apicredentials.
Tip: The Flowpast Branding sticky note is optional and can be kept for documentation or removed without affecting execution.
Step 2: Connect Google Sheets
Pull client email data from the customer sheet after a new offer is detected.
- Add Retrieve Client Sheet Data and connect it after AI Promo Copy Generator (as in the execution flow).
- Set Document to
1kRRDSoJNzVQAUbunYzAk-KUBcMjhuUw0PydGjLbbEVgand Sheet toSheet1. - Set Authentication to
serviceAccount. - Credential Required: Connect your
googleApicredentials.
Step 3: Set Up AI Promo Copy Generator
Configure the AI agent and its language model so it can generate promotional copy from the offer data.
- Add AI Promo Copy Generator after Monitor Offer Sheet Changes.
- Set Text to
=You are an expert sales copywriter. Based on the provided offer data, generate a persuasive and emotionally engaging promotional message for WhatsApp or Email that motivates immediate customer action. 🎯 **Objective:** Encourage purchases by emphasizing value, benefits, urgency, and exclusivity with a detailed, impactful message. 📌 **Format Guidelines:** - Keep under 150 words. - Use short, readable lines for WhatsApp/email. - Include 3–5 well-placed emojis for visual appeal. - Write in a warm, enthusiastic, benefit-driven tone. - Use bold hooks, clear product benefits, urgency, and rewards. - Structure with multiple unordered lists (`<ul>`) for impact and readability. 📋 **Offer Data:** - Title: {{ $json.title }} - Discount: {{ $json.discount }} - Validity: {{ $json.validity }} - Products Included: {{ $json.products_included }} - Original Price: {{ $json.original_price }} - Discounted Price: {{ $json.discounted_price }} - Bonus Item: {{ $json.bonus }} - Call to Action: {{ $json.cta }} --- 📢 **Message Structure:** 1. Start with a catchy, energetic title using 1–2 emojis and {{ $json.title }}. 2. Hook with emotional language (e.g., “refresh your style,” “upgrade your look”). 3. State {{ $json.discounted_price }} vs {{ $json.original_price }} and {{ $json.discount }} as a steal. 4. List {{ $json.products_included }} in a `<ul>` with specific benefits (e.g., fabric, fit, usage). 5. Highlight bundle value in a second `<ul>` (e.g., quality, versatility, savings). 6. Present {{ $json.bonus }} as an exclusive gift with an emoji (e.g., 🎁). 7. Emphasize urgency with {{ $json.validity }} and “limited stock” using ⏳. 8. End with a motivational line and {{ $json.cta }} to create FOMO. --- 🧾 **Sample Output Format:** 🔥 LAST CHANCE: {{ $json.title }}! 🌞 Ready to refresh your style? Grab this **limited-time deal** curated for you! 💸 Only {{ $json.discounted_price }} ({{ $json.discount }} OFF {{ $json.original_price }}) — save big now! ✨ **What’s Included:** <ul> <li>👕 Stylish Shirt – breathable cotton for all-day comfort</li> <li>👔 Classic T-Shirt – perfect for any summer vibe</li> </ul> 🛍️ **Why You’ll Love It:** <ul> <li>✔️ Premium quality at a steal</li> <li>✔️ Versatile looks for any occasion</li> <li>✔️ Curated bundle, no guesswork</li> </ul> 🎁 **Exclusive Bonus:** {{ $json.bonus }} – yours free! ⏳ **Hurry!** Offer ends {{ $json.validity }}. Limited stock! 👉 Don’t wait – {{ $json.cta }} now to slay the season in style! --- ✅ **Notes:** - Make the message personal, warm, and engaging. - Avoid robotic or templated language. - Use `<ul>` for product details and benefits to enhance readability. - Ensure clear formatting with emojis, short lines, and emotional appeal. - Do not include notes or explanations in the output. - Add Llama Promo Chat Model and connect it as the language model for AI Promo Copy Generator with Model set to
llama3.2-16000:latest. - Credential Required: Connect your
ollamaApicredentials in Llama Promo Chat Model (the AI agent uses this model, so credentials are applied there).
Step 4: Configure Output and Email Assembly
Aggregate client emails, merge in AI output, and send the campaign email.
- Add Assemble Email Payload after Retrieve Client Sheet Data.
- Set JavaScript Code to
const emails = items.map(item => item.json.Emial); return [ { json: { allEmails: emails.join(", "), output : $('AI Promo Copy Generator').first().json.output } } ];. - Add Dispatch Client Email and connect it after Assemble Email Payload.
- Set Send To to
{{ $json.allEmails }}, Message to{{ $json.output }}, Subject toOffer, and Email Type totext. - Credential Required: Connect your
gmailOAuth2credentials.
⚠️ Common Pitfall: The code uses item.json.Emial (misspelled). Ensure your Google Sheet column matches this exact key or update the code to your correct column name.
Step 5: Test and Activate Your Workflow
Verify that the offer trigger generates AI copy, builds the recipient list, and sends emails correctly.
- Click Execute Workflow and update a row in the offer sheet to simulate a change.
- Confirm that AI Promo Copy Generator produces a formatted message and Assemble Email Payload outputs
allEmailsandoutput. - Check that Dispatch Client Email sends the email to the combined list.
- Once successful, toggle the workflow to Active for production use.
Watch Out For
- Google Sheets permissions can be surprisingly strict. If the trigger stops firing, check the spreadsheet sharing settings and the connected Google account inside n8n credentials 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.
Common Questions
Usually about an hour once your two sheets are ready.
Yes. No coding is required, but someone needs to be comfortable mapping sheet columns to email fields and testing with a small list first.
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 Llama 3.2 API costs from your provider.
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.
You’ll mostly customize the AI Promo Copy Generator prompt and the Assemble Email Payload mapping. For example, you can add segmentation fields in Sheet 2 (industry, plan type, last purchase) and have the AI mention the most relevant angle. If you prefer approvals, route the assembled draft to a review step instead of sending immediately via Dispatch Client Email. You can also swap the model behind the Llama Promo Chat Model node if your team standardizes on a different hosted LLM.
Most of the time it’s OAuth access expiring or the wrong Google account connected in n8n credentials. Reconnect Gmail, confirm the sender mailbox, then check Google Cloud Console settings if the Gmail API was disabled or restricted. If you’re sending to a big list, you can also hit Gmail sending limits, so the node may fail partway through a run.
It can comfortably handle hundreds of recipients per run, but you’ll still be limited by Gmail sending limits and your n8n plan/server resources.
Often, yes, if you want AI copy generation plus conditional logic without paying extra for every branch. n8n is also easier to keep predictable when the workflow grows, because you can self-host and avoid execution caps. Zapier and Make can still be fine for simple “new row → send email” automations, especially if you do not need an AI step. The bigger difference is control: prompts, formatting, and error handling are more flexible here. If you’re torn, Talk to an automation expert and explain your volume, approval needs, and email compliance requirements.
Once this is live, your spreadsheet becomes the single source of truth and Gmail becomes the delivery engine. You stop babysitting drafts and start shipping campaigns on schedule.
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.