All workflows
Google Sheets logoGmail logo

Mail merge a personalised email to every row of a spreadsheet

Sends a personalised email to each row of a Google Sheet, records every send, and never emails the same person twice.

Run manually2 apps6 steps

Apps it connects

Authenticate each one once and the workflow is ready to run.

What it does

Each integration step this workflow runs, in order, what it is for, and the conditions and loops that decide when it runs.

  1. 1Google SheetsCreate tabCreates a 'Sent log' tab in your spreadsheet on the first run, leaving it alone if it already exists.
  2. If sentLogIsNew

    1. 2Google SheetsAppend rowWrites the 'Sent log' header on a new tab, then appends the address and subject of each email sent.
  3. 3Google SheetsRead columnReads the addresses already in the 'Sent log' tab so anyone emailed before is skipped this run.
  4. 4Google SheetsRead rowsReads your recipient tab, taking the email, first name and company from each row in turn.
  5. For each row

    1. 5GmailSendSends the personalised subject and message to each recipient from your own Gmail account, one email per row.
    2. 6Google SheetsAppend row

How it works

What happens on each run, in plain English.

Give it a spreadsheet of recipients and a message written once, with merge fields where each row's first name and company should go. Each time you run it, it sends one personalised email per row from your own Gmail account.

Nothing in your recipient tab is ever changed. A separate 'Sent log' tab is added alongside it and one line is appended there for every email sent. Every address is checked against that log before sending, so running it again skips everyone already written to and catches an address that appears twice. A row with no usable email, or a blank cell where the message needs a name or company, is reported and skipped rather than sent a half-finished greeting. If an email goes out but the log cannot be written, the run stops at once rather than carrying on blind.

Your sheet needs a header row with an 'Email' column, plus 'First Name' and 'Company' if your message uses them. Each run sends only as many emails as you allow, so your first run can be a single test.

gmailgoogle sheetsmail mergeemailoutreach

Start from a workflow that already works.

Add "Mail merge a personalised email to every row of a spreadsheet" to your workspace, connect its apps, and make it yours. No credit card required.

Free plan available · No credit card required