Weekly personalized newsletter from a Google Sheet

Every Monday at 8am, draft a short personalized newsletter for each contact in your Google Sheet and send it through Amazon SES.

Agentic Task
Amazon SESGoogle SheetsMarketingOperationsEmail AutomationContent Generation
PromptCreate

Every Monday at 8am, send a short personalized newsletter to the subscribers in my Google Sheet through Amazon SES. This runs as an agent because each email is drafted per recipient using their segment and interest columns, and the send decision depends on both the sheet and the SES suppression list.

Start by reading the subscriber list from Google Sheets with Get Values. The sheet has columns for email, first_name, an unsubscribed flag (TRUE/FALSE or blank), and one or more segment/interest columns (for example segment, interests, company_size). Ignore any row where unsubscribed is TRUE or where email is empty. Ask me for the spreadsheet ID, the tab name, and this week's topic at run start if they are not already provided.

Before sending anything, pull the current Amazon SES suppression list once with List Suppressed Destinations and hold it in memory. Do not call it once per recipient. For each remaining subscriber, skip them if their email is on the suppression list (past bounce or complaint).

For every recipient who survives both filters, draft a short newsletter of roughly 120 to 200 words that riffs on this week's topic and references the recipient's segment/interest columns where it fits naturally. Use the first name once, keep the tone warm and specific, and end with a single soft call to action. Do not invent personal details that are not in the row.

Send each drafted email with Amazon SES Send Email. Put the recipient's first name in the subject line (for example, "Alex, this week on <topic>"). Pace the sends to respect the SES sandbox rate limit of one message per second by default: wait about a second between calls. If Amazon SES returns an error for a specific recipient (rejected, throttled, or anything else), record the address and the error and keep going rather than failing the whole run.

When every recipient has been handled, append one summary row to a Run Log tab in the same spreadsheet using Append Values. The row should contain: run timestamp in UTC, this week's topic, count sent, count skipped for unsubscribed, count skipped for SES suppression, count of send errors, and a short comma-separated list of any failed email addresses. If the Run Log tab does not exist yet, tell me so I can create it.

Guardrails: never persist recipient email content anywhere outside Amazon SES. The drafts live only inside the Send Email call and must not be written back to the Sheet, logged, or included in the summary row. Never send to a row where unsubscribed is TRUE, and never send to an address on the SES suppression list. If the sheet is empty or unreadable, append a summary row noting the failure and exit without sending anything.

What does this prompt do?

  • Reads your subscriber list straight from a Google Sheet you already keep
  • Skips anyone marked unsubscribed, and anyone Amazon SES has flagged for a past bounce or complaint
  • Drafts a short, personalized note for each remaining reader using their segment or interest columns
  • Sends each email through Amazon SES with the reader's first name in the subject line
  • Appends a summary row to the same Sheet with counts sent, skipped, and any errors

What do I need to use this?

  • A Google account and a subscriber sheet with columns for email, first name, an unsubscribed flag, and any segment or interest fields
  • An Amazon SES account with your sending domain or from-address already verified
  • A one-line topic or angle you want this week's newsletter to riff on

How can I customize it?

  • Change the schedule to a different day or a different cadence (twice a week, monthly, quarterly)
  • Point at a different sheet, tab, or set of segment columns
  • Adjust the send pace to match your Amazon SES limits (sandbox accounts default to one email per second)

FAQs

Do I need to leave the Amazon SES sandbox before running this?
Not to try it out. In the sandbox you can only send to email addresses you have already verified in Amazon SES, and you are capped at one message per second and 200 messages per day. Once you move to production, the workflow keeps working with a higher limit.
Where does the recipient list live?
In your Google Sheet. The workflow reads it fresh at every run, so if you add, edit, or unsubscribe someone in the Sheet before Monday morning, the next send will reflect it.
Will people who unsubscribed still get an email?
No. Any row where the unsubscribed column is TRUE is skipped, and anyone Amazon SES has already put on your suppression list (past bounces or complaints) is also skipped automatically.
Does the workflow store the email content anywhere?
No. Drafts are written per recipient and handed straight to Amazon SES to send. Only a summary row (counts and any failed addresses) is written back to the Sheet.
Can I use my own message instead of an AI-drafted one?
Yes. Give the workflow your finished copy as the topic and ask it to send that verbatim, or add a column with per-row copy and tell the workflow to use it as-is.

Related templates

Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Flag VIP client emails in Zoho Mail and alert your team

Keep a spreadsheet of your most important senders, and every email from one gets labeled, posted to your team channel, and logged automatically.

Zoho Mail
Google Sheets
Slack Bot
Deterministic Code
Send Yotpo review requests when Shopify orders ship

The moment an order is fulfilled, we register it with Yotpo so the review request is timed off real delivery, and we log every sync so failures never go unnoticed.

Shopify
Yotpo
Google Sheets
Deterministic Code

Send your weekly newsletter without touching a mail-merge tool.

Keep the list in a Google Sheet, let this workflow draft and send each personalized email through Amazon SES, and check the log when Monday is done.