SheetRender Blog

Google Sheets Mail Merge: What Works and Where It Breaks

By Josh ·

There is no mail merge button in Google Sheets. Word has had one since the nineties, so people trying to do a Google Sheets mail merge open a sheet full of names and go looking for the same feature. It isn't there. Add-ons and scripts fill the gap, and each of them works right up until it hits a quota nobody told you about.

Does Google Sheets have a built-in mail merge? No. Gmail has one, on some paid Workspace tiers, and it only sends email. For documents you need an add-on or a script. Or a tool that runs outside Google.

Before you pick one, work out which job you have. "Mail merge" means two different things:

  1. Email merge: send each row a personalized email. "Hi Maria, your invoice total is $1,240."
  2. Document merge: turn each row into a personalized document, usually a PDF. An invoice, certificate, letter, or report per row.

Plenty of real jobs are both at once: generate the PDF, then email it to that row's address. That combined job gets its own section below, because the quota math changes when generating and sending happen in the same run.

Sending personalized emails from a Sheet

Gmail mail merge from Sheets, built in

If your Workspace edition includes it, this is the shortest path on the page:

  1. Start a compose window and turn on Use mail merge (the spreadsheet icon near the To field).
  2. Link your Google Sheet, pick the tab, and choose the column that holds email addresses.
  3. Write the email, inserting merge tags like @firstname that pull from your other columns.
  4. Preview a recipient or two, then send.

Where it breaks:

  • The edition gate is stricter than "paid." Business Starter doesn't get the toggle. Workspace Individual, Business Standard and up, and the Enterprise and Education tiers do. If the toggle is missing, check Google's eligibility list before assuming something's broken. Free @gmail.com accounts are out entirely.
  • It sends email and nothing else. No documents, no per-row attachments.
  • It caps at 1,500 recipients per rolling 24 hours, and that budget is shared with your regular outgoing mail. Google also throttles well before any published number if your domain is new or your list is cold.

If you're on the right tier and personalized email is the whole job, use this and stop reading.

YAMM, Mailmeteor, and the other merge add-ons

YAMM (Yet Another Mail Merge) is the best known of the Gmail merge add-ons, with Mailmeteor close behind. Write your template as a Gmail draft with {{placeholders}}, open the add-on from your Sheet, pick the draft, send. You get open tracking and scheduling, and it works on free Gmail accounts.

Where it breaks: YAMM's free plan is 50 emails a day. Paid plans lift that ceiling, but Gmail's own cap sits underneath it. Add-ons send through the API, and the API allows fewer recipients than the same account typing into the web interface. Their limits page has the current per-plan figures; read it before you plan a 900-person send. If your list is bigger than your quota, the merge stops mid-run and you're left working out who got the email and who didn't.

Apps Script, if you'd rather own it

If you can read code, a dozen lines of Apps Script does an email merge with no add-on and no subscription:

function sendMerge() {
  // assumes columns are Name, Email, Amount, in that order
  const rows = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const data = rows.slice(1);
  data.forEach(([name, email, amount]) => {
    GmailApp.sendEmail(
      email,
      "Your invoice from Acme",
      "Hi " + name + ",\n\nYour total this month is 
quot; + amount + ".\n\nThanks!" ); }); }

Apps Script has its own daily email quota, separate from Gmail's. It's low: 100 recipients a day on a free account, 1,500 on Workspace (Google's quota table). And this is the naive version. It has no retry logic and no record of which rows were already sent when a run dies at row 73. The gap between this script and one you'd trust is the real cost of the DIY route. Fine for a hundred rows a month. Miserable as a system other people depend on.

Generating personalized documents from a Sheet

This is the half of mail merge Google never built. It's also the half most people came here for, since what they need at the end is one PDF per row. (Still on Word rather than Sheets? The macro route for splitting a merge into separate PDFs is the equivalent for you.) If the rows are award recipients rather than customers, there's a dedicated comparison of four ways to generate certificates in bulk from a spreadsheet.

Autocrat

Autocrat is the default answer, and for modest batches it deserves that. It's free, and it's been around forever because it does the job. You design a Google Doc or Slides template with <<tags>>, map each tag to a column, choose multiple output mode so every row becomes its own file, then run. It can email the result and trigger on form submissions or a timer.

Where it breaks: Autocrat runs on Apps Script inside your Google account, so it inherits the same daily execution and runtime quotas as every other add-on and script here. Big or frequent batches fail partway with "Service invoked too many times". Others stall with no error at all, which leaves you nothing to search for. We wrote up what those errors mean and how to get unstuck, and there's a fuller comparison at sheetrender.com/vs/autocrat. If your batches are small and occasional, none of that will bite you. I'd use Autocrat for a job that size.

Form Publisher and Portant

Form Publisher does the same template merge, from Google Forms submissions or straight from sheet rows, and by default produces both a Doc and a PDF per row. Portant connects Sheets to Docs and Slides templates too, though its free tier is thin (30 documents a month when I last checked) and its marketing leads with HubSpot rather than spreadsheets. I have no complaints about either one. They're still Apps Script underneath, though, so the quota table below applies to them just the same.

Rolling your own, the document version

You can script this half too: copy a Doc template, replaceText per row, export with getAs('application/pdf'), save to a folder. It works. It's forty lines instead of a dozen, and it burns through document-creation and runtime quota faster than anything else on this page: every row means a file copy and a text pass, then a PDF export, before you've sent a thing.

SheetRender

SheetRender is ours. Discount this section accordingly. We built it for the batches that keep dying halfway through Autocrat, and for templates nobody wants to rebuild as a Google Doc.

The difference is the template. Instead of tagging <<placeholders>> into a Doc, you upload one finished example. A PDF works. So does a web page or a screenshot. We rebuild that example as a template with its fields mapped to your columns. Upload a spreadsheet or connect a Google Sheet, then review the mapping and generate. Output is a zip of separate PDFs. You can also drop the files into a Drive folder, or email each row its own PDF. If the sheet keeps growing, the whole thing can run on a schedule. All of it runs on our servers, so none of the quotas in this post apply.

Where it breaks:

  • Your data leaves your Google account. For some HR and school workloads that's a policy conversation, and Autocrat's everything-stays-in-Drive story wins it.
  • It's a hosted product. If we shut down, your workflow goes with us, and Autocrat has outlived a lot of startups.
  • The free tier is 50 documents and 50 emails a month, and every free page carries a "Made with SheetRender" line at the foot. It will not get January's invoices out the door.
  • Scheduled runs start on the paid tiers.

Doing both: generate the PDF, then email it

The free stack can do the combined job. Autocrat will email each merged file to a per-row address, and YAMM can attach a file from a Drive column. Nothing falls over at the first hurdle.

What happens instead is quieter. Each row now spends from three budgets at once: script runtime to build the document, document-creation quota to save it, and email quota to send it. You hit whichever ceiling is lowest, and it's rarely the one you were watching. On a free account the binding limit is 100 emails a day or 90 minutes of total script runtime, unless a single execution times out mid-batch first. Either way, a 200-row generate-and-email run tends to die in the middle. Usually at 4:55 on a Friday. At volume, this combined job is why the hosted tools exist.

The quota cheat sheet

LimitFree GmailWorkspace
Gmail recipients per day (normal sending)~500~2,000
Gmail built-in mail mergenot available1,500 recipients per rolling 24h, shared with regular mail
Apps Script email recipients per day (scripts, some add-ons)1001,500
Apps Script total runtime per day (Autocrat, Form Publisher, your scripts)90 min6 hours

These are Google's published numbers as of mid-2026, and Google adjusts them without announcing it. Check the quota page before you plan a batch around any row in this table.

Quick answers

What is the daily limit for Gmail's mail merge? 1,500 recipients per rolling 24 hours on eligible Workspace editions, shared with your regular outgoing email.

Can I mail merge from Google Sheets for free? Yes. Apps Script and Autocrat are free and stay free; what limits them is your Google account's daily quotas. YAMM's free plan covers 50 emails a day.

Is Autocrat still free? Yes. Its limits come from Google's Apps Script quotas. There's no paywall behind them.

Can Gmail's mail merge send attachments per person? No. It personalizes the email body only. Per-row attachments need an add-on like YAMM or a generate-and-deliver tool.

Which one should you pick?

  • Personalized emails only, on an eligible Workspace tier: Gmail's built-in merge. Done.
  • Personalized emails only, free Gmail or you want tracking: YAMM or Mailmeteor, mind the daily caps.
  • Comfortable with code and the volume is small: Apps Script.
  • Documents from rows, small occasional batches: Autocrat. It's free and it's good at this.
  • Documents from rows, every Monday, for a roster that keeps growing, especially generate-then-email: that's what SheetRender is for. The free tier is enough to prove the workflow on your own data before you pay anything.

The real sorting rule is cadence. If you're doing this once, take a free path and eat the friction. If you're doing it every Monday, the thing that will cost you isn't the tool. It's being the person who has to check whether the batch finished.

Ready to turn every row into its own polished PDF?

Free plan · No credit card required