You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Google Apps Script that reads rows from a Google Sheet where each row represents a recipient, merges row data into a configurable email template using {{placeholder}} syntax, and sends personalized emails via MailApp. Supports plain text and HTML templates, draft preview before sending, and a send-log column that prevents duplicate sends on re-runs. Configurable via the browser-based deploy page.
Market Signal
Mail merge is an evergreen top-3 GAS automation request. Yet Another Mail Merge (YAMM) has 10M+ installs on the Google Workspace Marketplace at $25/year. Mailmeteor, GMass, and Mail Merge with Attachments collectively serve millions more users — all paid. No free, open-source, browser-deployable mail merge exists. The relaxed MailApp quotas in 2026 (UrlFetch daily data-received cap removed, increased size limits) make this more viable at scale. Apps Script's promotion to a Google Workspace Core Service (June 2026) validates the platform for production automation.
User Signal
"Google Sheets mail merge script" is consistently one of the top GAS-related search queries. Community research identifies mail merge and document generation as top-requested automation workflows. The project's target persona — non-technical users who want to automate without code — is exactly the audience currently paying $25/year for YAMM or $30/month for Zapier mail merge workflows.
Technical Opportunity
MailApp and SpreadsheetApp are core GAS services. The {{placeholder}} template pattern is simple to implement and test. The send-log column (marking rows as "sent" with timestamp) provides idempotency — the same deduplication pattern used by gmail-to-drive-by-labels for thread dedup. Config schema: sheet ID, template subject, template body, recipient column, status column. The SCRIPT_CATALOG entry with Sheets picker integration is already proven in calendar-to-sheets.
Assessment
Dimension
Score
Rationale
Feasibility
high
MailApp and SpreadsheetApp are core services. Template rendering is straightforward string replacement. Send-log pattern is proven.
Impact
high
Displaces $25/year paid tools with 10M+ combined installs. Mail merge is one of the most commercially validated GAS use cases.
Urgency
med
Demand is steady and evergreen. Not tied to a specific market event, but the commercial market has matured without an open-source contender.
Adversarial Review
Strongest objection: MailApp has a daily email quota (100 for free accounts, 1500 for Workspace). Users will hit limits on large lists and blame the tool.
Rebuttal: The quota is a GAS platform constraint, not a design flaw. Mitigation: (1) configurable batch size with clear quota documentation in the UI, (2) send-log column ensures interrupted batches resume correctly on next trigger run — no duplicates, (3) daily quota check before send loop with user-friendly "quota exhausted, will resume tomorrow" message, (4) draft-preview mode lets users verify merge output before sending. For the target persona (individuals, small teams), 100–1500 emails/day covers the vast majority of use cases: team updates, client outreach, event invitations, and newsletter sends.
Suggested Next Step
Create a tech spec defining the template syntax ({{column_name}} placeholders), config.gs schema, the send-log idempotency pattern, and the draft-preview mode that generates a sample email without sending. MVP scope: single template → per-row email send with status tracking. Phase 2: HTML templates, CC/BCC support, file attachment from Drive.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Summary
A Google Apps Script that reads rows from a Google Sheet where each row represents a recipient, merges row data into a configurable email template using
{{placeholder}}syntax, and sends personalized emails via MailApp. Supports plain text and HTML templates, draft preview before sending, and a send-log column that prevents duplicate sends on re-runs. Configurable via the browser-based deploy page.Market Signal
Mail merge is an evergreen top-3 GAS automation request. Yet Another Mail Merge (YAMM) has 10M+ installs on the Google Workspace Marketplace at $25/year. Mailmeteor, GMass, and Mail Merge with Attachments collectively serve millions more users — all paid. No free, open-source, browser-deployable mail merge exists. The relaxed MailApp quotas in 2026 (UrlFetch daily data-received cap removed, increased size limits) make this more viable at scale. Apps Script's promotion to a Google Workspace Core Service (June 2026) validates the platform for production automation.
User Signal
"Google Sheets mail merge script" is consistently one of the top GAS-related search queries. Community research identifies mail merge and document generation as top-requested automation workflows. The project's target persona — non-technical users who want to automate without code — is exactly the audience currently paying $25/year for YAMM or $30/month for Zapier mail merge workflows.
Technical Opportunity
MailApp and SpreadsheetApp are core GAS services. The
{{placeholder}}template pattern is simple to implement and test. The send-log column (marking rows as "sent" with timestamp) provides idempotency — the same deduplication pattern used bygmail-to-drive-by-labelsfor thread dedup. Config schema: sheet ID, template subject, template body, recipient column, status column. TheSCRIPT_CATALOGentry with Sheets picker integration is already proven incalendar-to-sheets.Assessment
Adversarial Review
Strongest objection: MailApp has a daily email quota (100 for free accounts, 1500 for Workspace). Users will hit limits on large lists and blame the tool.
Rebuttal: The quota is a GAS platform constraint, not a design flaw. Mitigation: (1) configurable batch size with clear quota documentation in the UI, (2) send-log column ensures interrupted batches resume correctly on next trigger run — no duplicates, (3) daily quota check before send loop with user-friendly "quota exhausted, will resume tomorrow" message, (4) draft-preview mode lets users verify merge output before sending. For the target persona (individuals, small teams), 100–1500 emails/day covers the vast majority of use cases: team updates, client outreach, event invitations, and newsletter sends.
Suggested Next Step
Create a tech spec defining the template syntax (
{{column_name}}placeholders),config.gsschema, the send-log idempotency pattern, and the draft-preview mode that generates a sample email without sending. MVP scope: single template → per-row email send with status tracking. Phase 2: HTML templates, CC/BCC support, file attachment from Drive.All reactions