# Google Sheets: Send an Email Based on a Cell Value

By [Stanislas Marion](https://www.linkedin.com/in/stanislasmarion/) · Published 15 July 2024 · Updated 28 October 2026

Send an email from Google Sheets when a cell changes or has a value: Google's Conditional notifications, an Apps Script trigger, or a YAMM mail merge.

![A highlighted spreadsheet cell connected by an arrow to outgoing emails.](https://yamm.com/images/blog/covers/google-sheets-send-emails-based-on-cell-value.webp)

Google Sheets can email people when a cell changes, and you can email every row that has a certain value. For a change, Google sends a short notice, or your own script sends your message. For a value, filter the sheet, then run a mail merge with Yet Another Mail Merge (YAMM): each person on the filtered rows gets their own email from your Gmail.

| You need                                       | Use                                     | Watch out                                                                                   |
| ---------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------- |
| An alert when a cell changes                   | Conditional notifications               | Only on some work or school accounts, and people get Google's notice, not your own message. |
| Your own email when a cell changes             | Apps Script with an installable trigger | You paste a short script and set up the trigger yourself.                                   |
| A personalized email to every row with a value | A filter, then a YAMM mail merge        | It sends when you start it or at a time you set, not each time a cell changes.              |

## Can Google Sheets send an email when a cell value changes?

Yes, with [**Conditional notifications**](https://support.google.com/docs/answer/14099459), which are built into Sheets and need no code. What people receive is a notice from Google, not a message you write. Depending on how much access each person has to the file, it shows the new value, the cells next to it, who made the change and the old value. It's a good fit for "tell the team when a status turns to Completed".

To set it up:

1. Open your spreadsheet and click **Tools > Conditional notifications**. You can also right-click any cell.
2. Click **Add rule**.
3. Choose the column or the range of cells to watch.
4. Click **Add condition** and set it, for example **Text is exactly** "Completed".
5. Choose who gets the email: type the addresses, or pick a column of your sheet that holds email addresses.

A few things to know:

- It's only on some work or school accounts. If you don't see it, ask your administrator.
- It emails individual Google accounts only, not group addresses or Outlook and Yahoo addresses.
- The email may not arrive right away, and several changes can come in one email.
- It doesn't react to data pulled in from another sheet with IMPORTRANGE.

The older **Tools > Notification settings** only emails you.

## How do you send your own email automatically when a cell changes?

Use Google Apps Script, Google's built-in tool for small scripts, with an **installable trigger**. You write the subject and the text, and the script sends the email from your Gmail account as soon as someone edits the cell.

Most scripts you'll find online use a function called `onEdit`. If you've tried one and no email arrived, here's why, in [Google's words](https://developers.google.com/apps-script/guides/triggers): "a simple trigger can't send an email because the Gmail service requires authorization." The fix is to give the function another name and run it from a trigger you set up yourself.

This example sends an email when someone types "Send" in column C. The email address is in column A of the same row.

1. In your sheet, click **Extensions > Apps Script**.
2. Delete what's in the editor and paste this:

   ```javascript
   function emailWhenStatusIsSend(e) {
     const cell = e.range;
     if (cell.getColumn() !== 3 || e.value !== "Send") return;
     const sheet = cell.getSheet();
     const email = sheet.getRange(cell.getRow(), 1).getValue();
     MailApp.sendEmail(email, "Your request is approved", "Hi, your request has been approved.");
   }
   ```

   In the code, `3` is column C, the one it watches, and `1` is column A, where it reads the email address (A is 1, B is 2, and so on). Change the words in quotes to your own value, subject and message.
3. Click **Save**.
4. At the left, click **Triggers**, then **Add Trigger** at the bottom right.
5. Choose the function `emailWhenStatusIsSend`, the event source **From spreadsheet** and the event type **On edit**. Click **Save** and allow the access Google asks for.

The code follows Google's Apps Script guides for the [edit event](https://developers.google.com/apps-script/guides/triggers/events), [Range](https://developers.google.com/apps-script/reference/spreadsheet/range) and [MailApp](https://developers.google.com/apps-script/reference/mail/mail-app), as they stand in October 2026.

Before you rely on it:

- It runs only when a person edits the cell. Changes made by another script don't start it, and if someone pastes into several cells at once, the script gets no value and sends nothing.
- It doesn't remember what it sent. If someone types "Send" in the same row again, that person gets a second email.
- If a run fails, Google emails you a summary of the failures.
- Apps Script can email [100 recipients a day](https://developers.google.com/apps-script/guides/services/quotas) from a personal Gmail account and 1,500 from a Google Workspace account.

## How do you email every row that has a certain value?

Filter the sheet on that value, then send a mail merge to the rows that stay visible. [YAMM](https://yamm.com/), the add-on we make, sends each person their own email from your Gmail, with their name and details filled in. It goes out when you start it or at a time you set.

### Step 1: Set up your sheet

![Spreadsheet headers Email, First Name and Last Name highlighted.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/spreadsheet-headers-email-first-name-and-last-name.webp)

Make the sheet a [contact list](https://yamm.com/help/usage/create-campaign/build-contact-list/): one person on each row, a column of email addresses, a column for each detail you want in the email, and the column you'll filter on, such as Status or Department.

![Contact spreadsheet containing email, first name, last name and department columns.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/contact-spreadsheet-containing-email-first-name-last-name.webp)

### Step 2: Filter on the value

Click cell A1, then click the **Filter** button (or **Data > Create a filter**). Click the filter arrow in your column's header and use **Filter by values** to keep only the rows you want, for example Department is "Sales". You can also right-click a cell and choose **Filter by cell value**.

YAMM sends only to the rows your filter shows. Use the normal filter from this step, not a saved filter view.

### Step 3: Write the email as a Gmail draft

![Gmail draft using First Name and Department merge fields.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/gmail-draft-using-first-name-and-department-merge-fields.webp)

In [Gmail](https://mail.google.com/), write a new message and leave the To field empty. Wherever the email should change for each person, type the column's name in double curly brackets, like `{{First Name}}` or `{{Department}}`. YAMM swaps in each person's value. These markers work in the subject too.

### Step 4: Send it with YAMM

![Google Sheets Extensions menu showing YAMM and Start Mail Merge.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/google-sheets-extensions-menu-showing-yamm-and-start-mail.webp)

Back in your sheet, click **Extensions > Yet Another Mail Merge: Mail Merge for Gmail > Start Mail Merge**. If you don't have YAMM yet, install it from the [Google Workspace Marketplace](https://workspace.google.com/marketplace/app/yet_another_mail_merge_mail_merge_for_gm/52669349336).

![YAMM email-template menu with the Seminar Reminder draft selected.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/yamm-email-template-menu-with-the-seminar-reminder-draft.webp)

Pick your draft and enter your [sender name](https://yamm.com/blog/email-sender-name-best-practices/), the name people see on your email. Click **Send test email** first: YAMM fills it in with the first row your filter shows, so you see exactly what that person will get.

![YAMM mail merge dialog showing Schedule and Send 4 emails controls.](https://yamm.com/images/blog/google-sheets-send-emails-based-on-cell-value/yamm-mail-merge-dialog-showing-schedule-and-send-4-emails.webp)

Then click **Send emails**, or **Schedule** to send it later, up to two weeks ahead. YAMM writes each person's result in a **Merge status** column and updates it as they open, click or reply.

### Next time, only the new matches get an email

Next week, when more rows have the value, filter the sheet again and start another mail merge. YAMM skips every row that already has a status like EMAIL_SENT or EMAIL_OPENED, so [only the new rows get an email](https://yamm.com/help/usage/launch-campaign/re-run-mail-merge/). To send someone the email again, clear their Merge status cell.

If the rows come from a Google Form, each response adds a new row, and YAMM can also [send a personalized email every time someone submits the form](https://yamm.com/help/usage/launch-campaign/send-upon-google-form-submission/): **Extensions > Yet Another Mail Merge: Mail Merge for Gmail > Configure form submission notifications**.

## Can Google Sheets send reminders based on a date?

Not with Conditional notifications, because they don't reliably trigger when a formula like TODAY() changes a cell's value while the file is closed. You have two other ways:

- **Apps Script** has time-driven triggers that run your script on a schedule, for example once a day, and the script can check each row's date.
- **YAMM**: open the filter on your date column, use **Filter by condition** to keep the rows that are due, then send the reminder to those rows.

If you send to filtered rows often, [install YAMM from the Google Workspace Marketplace](https://workspace.google.com/marketplace/app/yet_another_mail_merge_mail_merge_for_gm/52669349336) and send your first merge from the sheet you already have.

To email everyone on the sheet, not only the rows with one value, use our guide to [sending emails from Google Sheets](https://yamm.com/blog/send-emails-from-google-sheets/). And before a big send, check [how many emails Gmail lets you send in a day](https://yamm.com/blog/gmail-sending-limits/).
