Gmail doesn't have a built-in mail merge feature, but you can do it in three ways
Mail merge means sending the same email to many people with each person's name, address, or other details filled in automatically. Gmail itself doesn't have this tool built in. Instead, you use Google Sheets to hold the list of names and details, then use either a free add-on, a script you paste in, or an external service to send the personalized emails through your Gmail account.
The easiest route for most people is the add-on called Mail Merge for Gmail, which takes about five minutes to set up. If you want something free with no add-ons, you can use Google Apps Script, which is built into Google Sheets but requires copying and pasting code. A third option is to use an external service like Mailmodo or Brevo, which gives you more control over timing and tracking but costs money for large lists.
Key Takeaways
- Mail Merge for Gmail is the fastest option: create a spreadsheet with names and details, install the add-on, and send personalized emails in minutes.
- Google Apps Script is free and built into Google Sheets, but you need to paste code into the script editor and run it from there instead of Gmail.
- External services like Mailmodo or Brevo let you schedule sends and track opens, but they charge per email or per month for large lists.
- All three methods send emails from your Gmail account, so recipients see your name and address in the From field.
- Test with one or two emails to yourself before sending to your full list, no matter which method you choose.
How to use Mail Merge for Gmail (the add-on method)
Start by creating a Google Sheet with your data. The first row should be headers: put "Email" in column A, "First Name" in column B, and any other details you want to use in the email in the columns after that. Then fill in one row per person with their email address and details.
Go to the Google Workspace Marketplace and search for "Mail Merge for Gmail". Click the result, then click Install. You'll be asked to give the add-on permission to read your spreadsheet and send emails from your Gmail account. Click Allow. The add-on will now appear in your Google Sheets menu under Extensions.
Open your Gmail account in a new tab and draft the email you want to send. Use curly brackets around the column headers where you want details to appear — for example, write "Hi {First Name}," to insert each person's first name. Don't send the draft yet. Copy the entire email text (subject line and body).
Go back to your Google Sheet. Click Extensions, then Mail Merge for Gmail, then Start Mail Merge. Paste your email into the box that appears. The add-on will show you a preview with the first person's details filled in. If it looks right, click Send. The emails go out when ready to everyone in your list.
How to use Google Apps Script (the free, no add-on method)
Create a Google Sheet with the same structure: headers in the first row (Email, First Name, and any other fields), then one row per person. Open the sheet and click Extensions, then Apps Script. A new tab will open with a blank script editor.
Delete the default code and paste this script into the editor:
function sendEmails() { const sheet = SpreadsheetApp.getActiveSheet(); const data = sheet.getDataRange().getValues(); const headers = data[0]; for (let i = 1; i < data.length; i++) { const row = data[i]; const email = row[0]; const firstName = row[1]; const subject = "Your subject line here"; const message = "Hi " + firstName + ",\n\nYour message here."; GmailApp.sendEmail(email, subject, message); } }
Edit the subject and message lines to match what you want to send. If you want to use other columns from your sheet, add more const lines like const lastName = row[2]; and then use {lastName} in your message. Click the Save button, then click Run. The first time you run it, Google will ask for permission to send emails. Click Review Permissions, then Allow. The script will send one email per row in your sheet.
How to use an external service (Mailmodo, Brevo, or similar)
External mail merge services let you schedule when emails go out, track who opened them, and see which links people clicked. They also handle large lists more reliably than add-ons. The trade-off is that they cost money once you go above a certain number of emails per month.
Mailmodo and Brevo both have free tiers that cover a few hundred emails per month. Sign up for an account, then upload or paste your spreadsheet data. Create your email template using the same curly-bracket method ({First Name}, {Email}, etc.). Choose when you want the emails to go out — now, or on a schedule. The service will send them from your Gmail address but track opens and clicks on their servers.
The main reason to use these services is if you need to know who opened the email or clicked a link, or if you want to send emails slowly over time instead of all at once. If you just need to send personalized emails quickly and don't care about tracking, the add-on or script method is simpler and costs nothing.
What to put in your spreadsheet and how to format it
Your first row must be headers. The second row onward is your data. Here's what a typical sheet looks like:
| First Name | Company | Product | |
|---|---|---|---|
| alex@example.com | Alex | Acme Corp | Widget A |
| jordan@example.com | Jordan | Beta Inc | Widget B |
The Email column must come first and must contain valid email addresses. Other columns can be in any order and can have any name you want. In your email template, refer to them by the exact header name in curly brackets: {First Name}, {Company}, {Product}. If a cell is empty, the merge will leave that spot blank in the email.
Make sure there are no extra blank rows in the middle of your data. If you have 50 people to email, your sheet should have row 1 (headers) plus rows 2 through 51 (data), with nothing after that. Extra blank rows will cause the script or add-on to send blank emails.
Testing before you send to your full list
Before you send to everyone, send a test email to yourself. Create a test row at the top of your data with your own email address and test details. Run the mail merge with just that row, or use the preview feature in the add-on to see how the email looks with real data filled in.
Check that the formatting looks right, the merge fields are filled in correctly, and there are no typos or extra spaces. If you're using the script method, run it once and check your inbox. If you're using the add-on, use the preview before clicking Send. Once you're confident it looks right, delete the test row and run the full merge.
If something goes wrong — you sent the wrong message, or the merge didn't work — you can't unsend the emails. That's why testing with one or two emails first saves you from sending 500 broken emails to your whole list.
Common problems and how to fix them
The merge fields aren't filling in. Check that the column header in your spreadsheet matches exactly what you put in curly brackets in your email. {First Name} is not the same as {firstname} or {FirstName}. Capitalization matters.
The script runs but no emails are sent. Make sure the Email column is in column A (the first column) and that every row has an email address. If any row is missing an email, the script may stop or skip that row. Also check that you clicked Allow when Google asked for permission to send emails.
The add-on says "No emails found". This usually means the Email column isn't labeled "Email" in your header row. Rename it and try again. Some versions of the add-on are picky about the exact column name.
Emails are going to the wrong people or with the wrong details. Check that your data rows are in the right order and that you didn't accidentally delete or move a column. If you added a column in the middle, the column numbers in your script or template may be off by one.
Frequently Asked Questions
Can I schedule emails to go out at a specific time instead of right now?
The Mail Merge for Gmail add-on and Google Apps Script send emails when ready. If you need to schedule them, use an external service like Mailmodo or Brevo, which let you pick a date and time. Gmail's own scheduled send feature doesn't work with mail merge.
Will people see that this is a mail merge email, or does it look like a personal email?
It looks like a personal email from you. The recipient sees your name and Gmail address in the From field, and the email arrives in their inbox like any other message. There's no "mail merge" label or tracking pixel visible to them unless you use an external service that adds one.
What's the maximum number of emails I can send at once?
Gmail's sending limit is about 500 emails per day from a regular account. If you need to send more than that, space them out over multiple days or use an external service that can throttle the sends. The add-on and script both respect Gmail's daily limit.
Can I use mail merge to send emails from a group email address or shared inbox?
No. Mail merge sends from your personal Gmail account, not from a group address or shared inbox. If you need to send from a different address, you'd need to log into that account separately and run the merge from there.
What happens if someone's email address is wrong or invalid?
Gmail will try to send the email anyway. It will bounce back to your inbox with a delivery failure notice. The add-on and script don't validate email addresses before sending, so it's worth checking your list for typos before you run the merge.
