SheetsXSheetsX
Google Sheets + Gmail guide

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 steps

Quick 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. 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. 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. 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. 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. 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. 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. 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.

Actual review results from the recorded spreadsheet
Source rowApprovalReviewStatusDraft result
Alex / Northwind Demo / Workshop reminderApprovedREADYSubject: Workshop reminder. Body: Hi Alex, your workshop reminder for Northwind Demo.
Jordan / Cedar Demo / Project check-inApprovedREADYSubject: Project check-in. Body: Hi Jordan, project check-in for Cedar Demo.
Missing FirstName / Pine Demo / Onboarding notesApprovedNEEDS REVIEWSubject and body stay blank; no name is invented.
Taylor / Maple Demo / Event followupHoldHOLDSubject 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.

Illustrative recipient rows only β€” example.com addresses are placeholders, not a mailing list
EmailFirstNameLastNameCompanyTopic
alex@example.comAlexRiveraNorthwind DemoWorkshop reminder
jordan@example.comJordanLeeCedar DemoProject 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.

Two Google-supported approaches and where SheetsX fits
MethodTemplate and setupBoundary
Native Gmail mail mergeEligible Workspace plan; select merge tags from Gmail's @ menuGmail controls eligibility, unsubscribe links, and sending limits
Google Apps Script sampleGmail draft with {{Column name}} placeholders matching sheet headersRequires code review, authorization, and Apps Script quota checks
SheetsX preparationClean sheet data and generate suggested copy in cellsNot 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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 Sheets

Frequently 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.

Official Google references

Keep learning