How to Do a Mail Merge in Gmail (3 Ways, From Free to Built-In)
Gmail has a built-in mail merge on most paid Google Workspace plans, but not on personal @gmail.com accounts. Here's how to use it, the free Google Sheets script that works everywhere, when an add-on is worth it, and the details that ruin merges (blank fields, previews, and sending limits).
You have a spreadsheet of 80 names and you want each person to get an email that starts with their own first name, not "Hi all". That's a mail merge. Gmail can do it, but which way works depends on your account.
On most paid Google Workspace plans, Gmail has mail merge built into the compose window. On a personal @gmail.com account it doesn't, so you use a free Google Sheets script that Google publishes, or a mail-merge add-on. This guide covers all three, then the parts that go wrong in practice: blank fields, previews, and running into Gmail's sending limits halfway down your list.
Which mail merge method should you use?
| Gmail's built-in mail merge | Google Sheets + Apps Script | Mail-merge add-on | |
|---|---|---|---|
| Works on @gmail.com | No | Yes | Yes |
| Cost | Included in eligible Workspace plans | Free | Free tier, then paid |
| Setup time | A minute | About 10 minutes | A few minutes |
| Merge fields | @firstname, @lastname, @fullname, spreadsheet columns | Any column header | Any column header |
| Fallback for empty fields | Yes, a default value | No | Depends on the tool |
| Preview before sending | Yes | Send a test row to yourself | Depends on the tool |
| Unsubscribe link | Added automatically | No | Depends on the tool |
| Open and click tracking | No | No | Often, sometimes on paid plans only |
Short version: if you're on an eligible Workspace plan, start with the built-in feature. If you're on @gmail.com and only send a merge now and then, use the free script. Pay for an add-on when you send merges every week and want scheduling, tracking, and follow-ups in one place.
Method 1: Gmail's built-in mail merge (Google Workspace)
Google's help page on sending personalized emails with mail merge lists the eligible plans: Workspace Individual, Business Standard and Plus, Enterprise Standard and Plus, and Education Standard and Plus. Business Starter and personal Gmail accounts aren't on the list.
On Enterprise and Education editions, mail merge can be off or limited to internal recipients by default, and an admin has to change that in the Admin console (Google's admin guide covers the setting). If you don't see the option, that's the likely reason.
How to use it (step by step)
- Open Gmail on a computer and click Compose.
- Click the Use mail merge icon to the right of the To line and turn mail merge on.
- Add recipients from your contacts, or click Add from a spreadsheet and pick a Google Sheet. The data has to be on the first tab and contain only text.
- In the body, type
@and choose a merge tag:@firstname,@lastname,@fullname, or one of your spreadsheet's columns. - Send yourself a preview. It fills in the values for your first recipient, so you can check the greeting reads right.
- Click Send. Each recipient gets their own copy and can't see who else received it.
Gmail also adds a unique unsubscribe link to the bottom of each merged email, which matters if you send to people who didn't ask to hear from you. Google's sender guidelines expect marketing mail to make unsubscribing easy.
The two things that trip people up
Column headers with special characters. If a header like Company (legal name) won't insert, Google's page says you can refer to columns by position instead: @A is the first column, @B the second.
Missing first names. If a recipient has no first name in your contacts or sheet, Gmail flags it before sending and lets you set a default. Google's own example turns "Hi @firstname" into "Hi friend" for anyone missing a name. Use that rather than deleting the rows.
Method 2: Google Sheets + Apps Script (free, works on @gmail.com)
Google publishes a ready-made mail merge script for Gmail and Google Sheets. It's free, it runs inside your own Google account, and it works on personal Gmail. You don't need to write code, only copy a sheet and authorize the script.
How it works:
- Make a copy of the sample spreadsheet from Google's page. It has a Recipient column for email addresses and an Email Sent column the script fills in.
- Add columns for whatever you want to merge, such as
First nameandCompany. - In Gmail, write a draft. Use placeholders that match your column headers exactly, in double curly braces:
{{First name}},{{Company}}. Leave the draft in your Drafts folder. - Back in the sheet, use the new Mail Merge → Send Emails menu, authorize the script, and paste in the draft's subject line so the script can find it.
The script sends one email per row and writes a timestamp into Email Sent. Rows that already have a value there are skipped, so if a run stops halfway you can run it again without emailing anyone twice. If a row fails, the error goes into that cell instead.
What to watch for with the script
- Placeholders are case sensitive and must match the header character for character.
{{first name}}won't pick up a column calledFirst name. - Format the whole placeholder or none of it. Google's sample notes that if you bold or color the text, the braces need the same formatting. A half-bold
{{First name}}doesn't get replaced. - There's no fallback for blank cells. Read through the sheet before you send. An empty
First namecell can leave you with "Hi ," at the top of an email. - The daily quota is low on @gmail.com. Apps Script has its own email limit: Google's quotas page lists 100 recipients a day for consumer accounts and 1,500 for Workspace. For a 300-person list on a personal account, that's three days of sending.
Method 3: A mail-merge add-on or tool
Add-ons such as YAMM, Mailmeteor, and GMass wrap the spreadsheet approach in a friendlier interface, and many add things the script doesn't have, such as scheduled sends, open and click tracking, automatic follow-ups, or a fallback value for each field. Feature sets differ, so compare the ones you need.
They all send through your Gmail account, so they don't give you extra capacity. Your account's sending limits still apply. Free tiers usually cap how many emails you can merge per day, and the caps change, so check the vendor's pricing page before you plan a large send around one.
What to check before you install one:
- The permissions it asks for. Some add-ons need to read your inbox (to detect replies, for example). Others only need permission to send. Read the Google consent screen before clicking Allow.
- Whether it brands your email. Some free plans add a footer or signature to every message.
- How it handles bounces and unsubscribes. A merge to an old list will bounce, and you want those addresses out before the next send.
Maildriply's dashboard sends each recipient their own copy through the Gmail API, with a separate tracking pixel and signed click links per person. It doesn't fill in per-recipient merge fields yet, so for a personalized greeting on every email, use one of the three methods above.
Why tracking a mail merge needs one pixel per person
If you track opens on a merge, this detail decides whether the numbers mean anything.
Open tracking works by putting a small image in the email whose URL identifies who it was sent to (how Gmail open tracking works explains the full chain). For that to tell you which recipient opened, every copy needs its own image URL. So the tracking has to be added after the merge has split the list into separate messages.
We learned this building our own tracker. When you put several people in a single compose window in Gmail, our Chrome extension can only add one pixel to that message, and it ties it to the first recipient who isn't you. Every recipient's open then shows up under that one person. Dashboard sends don't have the problem, because each recipient's copy gets its own tracking at send time.
The same check applies to any merge tool you're comparing. Ask whether opens and clicks are reported per recipient or per campaign. If it's per campaign, you can't use them to decide who to follow up with.
How to stay under Gmail's sending limits during a merge
Every merged email counts toward your account's daily limit, whichever method sends it. A personal Gmail account can send 500 emails a day and a Workspace account 2,000. Google's Workspace limits page also gives the built-in mail merge its own cap of 1,500 messages a day. Our guide to Gmail sending limits covers how recipients are counted and what happens when you hit the limit.
For a merge, that means:
- Split big lists across days. If the list is larger than your limit, plan the batches before you start. The Apps Script method makes this easy because rows with an Email Sent value are skipped on the next run.
- Leave room for replies. A merge that uses your whole daily limit leaves you unable to answer the people who write back.
- Don't jump from zero to 1,000. A sudden spike from an account that normally sends 20 emails a day is the kind of pattern that lands mail in spam. If that's already happening, work through our checklist for emails going to spam.
Clean the list too. Remove duplicates and obvious typos (gmial.com) before you send. Bounces from a stale list hurt your sender reputation and can trigger a separate temporary block on sending.
FAQ
Does Gmail have a mail merge feature?
Yes, on most paid Google Workspace plans: Workspace Individual, Business Standard and Plus, Enterprise Standard and Plus, and Education Standard and Plus. It's in the compose window as Use mail merge. Personal @gmail.com accounts and Business Starter don't have it.
How do I do a mail merge in Gmail for free?
Use Google's free Apps Script mail merge sample with a Google Sheet. It works on personal Gmail accounts, but Apps Script limits consumer accounts to 100 email recipients a day, so larger lists take several days. Most add-ons also have a free tier with a daily cap.
Is there a limit on how many emails a Gmail mail merge can send?
Yes, several. Gmail's built-in mail merge has its own cap of 1,500 messages a day on Workspace, and Google's Apps Script quotas allow 100 recipients a day on a personal account. Whatever the method, every merged email also counts toward your account's normal daily sending limit.
Can recipients see who else got my mail merge?
No. Each recipient gets a separate email addressed only to them. Bcc also hides the list, but it sends one identical message, so it can't greet anyone by name or tell you which person opened it.
Why didn't my merge tag get replaced?
In Gmail's built-in merge, the field was probably empty for that recipient or the column header had special characters (use @A-style column references). In the Apps Script version, check that the placeholder matches the column header exactly, including capitals and spaces, and that the braces have the same formatting as the text inside them.
If you want to see who opened each email after the merge goes out, Maildriply's getting started guide walks you through connecting Gmail and sending your first tracked email.
Explore Maildriply
- Gmail Chrome extension
Track sends from Gmail compose without leaving your inbox.
- Email tracking for founders
Honest outreach signal without a heavyweight CRM.
- All tracking features
Opens, clicks, unsubscribe handling and deliverability guardrails.
- Email tracker comparisons
How Maildriply stacks up against the popular Gmail trackers.