Mail merge Google Sheets data into personalized emails
Mail merge Google Sheets data with a supported Gmail or Apps Script workflow, then review every merge field before sending. SheetsX can prepare spreadsheet data and draft message text in cells; Gmail or a separately authorized script handles delivery.
SheetsX team Β· Updated
Technical review: Codex (AI-assisted) Β· Sources and examples checked on August 28, 2026.
Follow the stepsQuick answer
Can you do a mail merge from Google Sheets?
Yes. With an eligible Google Workspace plan, compose a message in Gmail, enable mail merge, and choose Add from a spreadsheet. Map the recipient columns and insert merge tags from the @ menu in the message body. If native Gmail mail merge is unavailable, Google's Apps Script sample is a separate option that reads a sheet and a Gmail draft after you authorize it.
This guide does not send emails. Use only approved recipients, keep an explicit do-not-send list, and test with an inbox you control before any real send. A cleaned email address is not proof of consent or deliverability.
Real Google Sheets demonstrations
Watch the SheetsX workflow
Recorded in Google Sheets with fictional data and a new English Agent conversation for each keyword. Processing waits are shortened; the actions and results are real.
Mail Merge Google Sheets: Review & Draft with SheetsX
Two complete Approved rows receive READY labels and short drafts. The missing-name row becomes NEEDS REVIEW and the held row stays HOLD, both with blank drafts. The Agent reads back E1:G5 and verifies the counts; no Gmail access or email delivery occurs.
Exact English prompt used in this demo
Prepare mail-merge drafts from Sheet1!A1:D5. Write E1:G5 headers ReviewStatus, SubjectDraft, BodyDraft. Complete Approved rows: READY plus a short subject and body (at most 18 words); missing source fields: NEEDS REVIEW and blank drafts; Hold rows: HOLD and blank drafts. Use only supplied facts. Preserve source data, formatting and all other sheets. Do not infer consent, access Gmail, create Gmail drafts or send email. Read back E1:G5 and report counts briefly in English.
Step by step
Mail merge Google Sheets with Gmail
This is the native Gmail desktop workflow, not an Apps Script workflow. The account must have an eligible Workspace plan; a regular free personal Gmail account alone does not include native mail merge.
- 1
Create an approved send list
Put only the approved recipients in the first tab of a separate spreadsheet. Use a header row and one recipient per row, with text columns for Email, FirstName, LastName, and any personalization fields. Keep unsubscribed, uncertain, and unapproved rows out of this send file.
- 2
Check the account and data
Confirm mail merge eligibility in Google's current help page. Check missing fields, repeated addresses, and accidental spaces. If your working sheet contains formulas, copy reviewed results as text values into the send list and verify them again.
- 3
Enable Gmail mail merge
In Gmail on a computer, click Compose. Next to the To line, open Use mail merge and turn on Mail Merge. If the control is missing, check the signed-in account and its plan rather than assuming SheetsX can enable it.
- 4
Connect the spreadsheet
Choose Add from a spreadsheet, select the send file, and click Insert. Map the Email and First name columns, plus Last name if used, then click Finish. Check that Gmail selected the intended file and recipient fields.
- 5
Insert actual merge tags
In the message body, type @ and select the available merge tags. Custom tags come from your spreadsheet headers. Use Gmail's selected merge chips instead of pasting Apps Script placeholders. Keep the subject line fixed because native Gmail mail merge does not support merge tags there.
- 6
Test a separate one-row list
Create a separate test spreadsheet containing only an inbox you control, with realistic test names and fields. Run the test through the same sending method, then inspect the received greeting, links, formatting, and unsubscribe information. Do not use the example.com addresses below for a real test.
- 7
Review and send deliberately
Return to the approved send file and recheck the recipient count, mapped columns, missing values, message, and attachments. Confirm the current sending allowance before you send. Keep a record of the batch so you can distinguish sent recipients from retries.
Recorded example: review four rows and draft only two
The recorded SheetsX demo uses four fictional rows in Sheet1!A1:D5 with FirstName, Company, Topic, and Approval. It contains no email addresses. In a new English conversation, the Agent writes ReviewStatus, SubjectDraft, and BodyDraft to E1:G5, then reads those cells back. It does not connect to Gmail or send anything.
What READY means here
Two rows have enough supplied source data for draft text. READY is not proof of consent, a verified address, a delivery guarantee, or authorization to send.
What was verified
E1:G5 was written and read back: 2 READY, 1 NEEDS REVIEW, and 1 HOLD. A1:D5, formatting, and the other worksheets were preserved. The output is text in spreadsheet cells, not Gmail drafts.
| Source row | Approval | ReviewStatus | Draft result |
|---|---|---|---|
| Alex / Northwind Demo / Workshop reminder | Approved | READY | Subject: Workshop reminder. Body: Hi Alex, your workshop reminder for Northwind Demo. |
| Jordan / Cedar Demo / Project check-in | Approved | READY | Subject: Project check-in. Body: Hi Jordan, project check-in for Cedar Demo. |
| Missing FirstName / Pine Demo / Onboarding notes | Approved | NEEDS REVIEW | Subject and body stay blank; no name is invented. |
| Taylor / Maple Demo / Event followup | Hold | HOLD | Subject and body stay blank. |
Prepare a clean recipient sheet
Use short, unique headers made from letters and numbers for native Gmail. Google requires recipient information in the first tab and in text form. Keep a separate review sheet for approval and suppression tracking; a filter or hidden row is not a reliable send permission.
Resolve missing names before sending
Preview the greeting. If a merge value is missing, fix the source field or choose a suitable fallback in Gmail when prompted. Never let the AI guess a person's name or business details.
Keep a separate approval record
Track why the recipient is included and whether they have opted out. Build the send file from approved records only; a ReviewStatus column does not automatically stop Gmail or a script from sending.
| FirstName | LastName | Company | Topic | |
|---|---|---|---|---|
| alex@example.com | Alex | Rivera | Northwind Demo | Workshop reminder |
| jordan@example.com | Jordan | Lee | Cedar Demo | Project check-in |
Gmail mail merge or Apps Script?
The two approaches use different templates, permissions, and limits. Choose one before preparing the sending file so that you do not mix their placeholder formats.
| Method | Template and setup | Boundary |
|---|---|---|
| Native Gmail mail merge | Eligible Workspace plan; select merge tags from Gmail's @ menu | Gmail controls eligibility, unsubscribe links, and sending limits |
| Google Apps Script sample | Gmail draft with {{Column name}} placeholders matching sheet headers | Requires code review, authorization, and Apps Script quota checks |
| SheetsX preparation | Clean sheet data and generate suggested copy in cells | Not a mail transport; no delivery or Gmail authorization is implied |
Use Google's Apps Script mail merge sample
Google publishes a maintained example that replaces Gmail-draft placeholders with values from a spreadsheet. It is an alternative to native Gmail mail merge, not a way to remove sending limits or ignore administrator policies. Review the official source and requested access before authorizing it.
Start with the official sample copy
Open Google's linked sample and make your own copy. Use only a test address you control at first. Preserve the Recipient and Email Sent column names unless you also update the matching constants in the script.
Create the matching Gmail draft
Use placeholders such as {{First name}} that match the sheet headers exactly, including case and spaces. Copy the draft's subject so the sample can locate the right template. These braces are for the sample, not Gmail's native merge chips.
Review the code and authorize carefully
Inspect the script and its requested permissions. A Workspace administrator may need to approve it. Do not grant access to an unknown copy or bypass an administrator block just to complete a merge.
Test, then control each production batch
The sample's Mail Merge β Send Emails action sends messages; it is not a preview. Test only with your controlled inbox, review the sent status, and use a separate approved send file for production. Do not rely on filters to exclude rows, and do not clear sent-status cells to retry an entire batch.
Apps Script draft example (not native Gmail syntax):
Hi {{First name}},
Here is the update for {{Company}}: {{Topic}}.
Each placeholder must match a column in the sample sheet.Sending limits and troubleshooting
Check Google's current limits immediately before sending. Native Gmail mail merge and Apps Script have separate quota rules, and neither method guarantees that a message will reach the inbox.
Native Gmail daily allowance
Google currently lists up to 1,500 mail merge recipients per day for eligible accounts. Regular email use also affects the remaining allowance, so do not treat 1,500 as an extra batch on top of everything already sent. See the linked Gmail documentation for the account-specific rules.
Apps Script quotas are different
The official sample is subject to Apps Script email quotas, which vary by account type and can change. If a quota stops a run, inspect the sent log before retrying so recipients are not contacted twice.
Missing or literal merge fields
Check the field mapping and missing values. Insert native Gmail chips through @; for the script sample, match {{Column name}} exactly. The two syntaxes are not interchangeable.
Scheduling and subject personalization
Native Gmail mail merge does not support Schedule send or merge tags in the subject line. If those are requirements, assess a suitable authorized workflow rather than promising that a spreadsheet column enables them.
Unsubscribe handling
Native Gmail mail merge adds an unsubscribe link. That suppression does not automatically cover ordinary email or other sender accounts. Maintain your own do-not-send records and respect them across workflows; do not use another method to bypass an opt-out.
Attachments and recipient-specific files
An attachment added to a native Gmail merge is included in each recipient's copy. A filename in the sheet does not make attachments personalized. Review access and use the appropriate workflow for private recipient-specific documents.
SheetsX workflow
Prepare and verify draft text with SheetsX Agent
This is the executed prompt from the recording, not a proposed workflow. The Agent reads four fictional source rows, writes review labels and short drafts in E:G, and verifies those cells. The two rows with missing or held data receive no draft text.
Workflow prompt
Prepare mail-merge drafts from Sheet1!A1:D5. Write E1:G5 headers ReviewStatus, SubjectDraft, BodyDraft. Complete Approved rows: READY plus a short subject and body (at most 18 words); missing source fields: NEEDS REVIEW and blank drafts; Hold rows: HOLD and blank drafts. Use only supplied facts. Preserve source data, formatting and all other sheets. Do not infer consent, access Gmail, create Gmail drafts or send email. Read back E1:G5 and report counts briefly in English.
- Read back 2 READY, 1 NEEDS REVIEW, and 1 HOLD.
- Keep both draft cells blank for the missing-name and Hold rows.
- Confirm that A1:D5 and the other worksheets remain unchanged.
- Review draft text and recipient approval separately before any authorized sending workflow.
The recording verifies spreadsheet preparation only. It does not test email addresses, consent, delivery, Gmail drafts, unsubscribes, or sending quotas. Actual mail merge delivery requires a separate authorized Gmail or Apps Script workflow and your final review.
Add SheetsX to Google SheetsFrequently asked questions
Can I mail merge from Google Sheets for free?
A regular free personal Gmail account alone does not include native Gmail mail merge. Google's Apps Script sample can be used with a Google account, subject to authorization, administrator policy, and account-specific quotas. Check the current requirements before choosing it.
Which accounts have native Gmail mail merge?
Google's current eligibility list includes Workspace Individual, Business Standard and Plus, Enterprise Standard and Plus, and Education Standard and Plus. Check the linked Google help page because plan availability and account restrictions can change.
Does SheetsX send the mail merge emails?
This guide uses SheetsX only to prepare spreadsheet data and suggested content. Sending happens separately through eligible Gmail mail merge or an authorized script. Generating text in a cell does not send email.
What headers should I use for a Gmail mail merge?
Use a unique header row with text fields such as Email, FirstName, LastName, Company, and Topic. Map the email and name columns when connecting the spreadsheet. Use the first tab and insert the tags Gmail offers from the @ menu.
Can I use {{First name}} in native Gmail mail merge?
That format belongs to the Google Apps Script sample. Native Gmail uses merge chips inserted from its @ menu. Pasting the other method's syntax will not automatically personalize the message.
Will hidden or filtered rows be skipped?
Do not rely on hiding or filtering as a send exclusion. In particular, Google's sample warns that filtered participants can still receive messages. Create a separate send file containing only approved recipients before running either workflow.
Can I personalize attachments or schedule the native merge?
Native Gmail mail merge sends the same attached files to each recipient and does not support Schedule send. Evaluate a separate authorized workflow if you need scheduled delivery or different private attachments for each recipient.
