The problem
Someone fills out your Google Form. Maybe it's a client inquiry, a support request, an event registration, or a job application. The response lands silently in a spreadsheet. Nobody gets notified. The person who submitted it gets a generic "your response has been recorded" message, or nothing at all. You check the responses tab manually, sometimes hours or days later. By then the lead is cold, the support ticket is stale, or the event spot should have been confirmed immediately. Google Forms has a built-in email notification feature, but it's limited. It can notify you when a new response arrives, but it can't send a confirmation to the respondent, can't customize the message, and can't route different notifications based on what the person selected in the form. This guide covers three levels of Google Forms email notifications, from basic to fully custom. Pick the level that fits your needs.
Level 1: Turn on the default notification
This takes 30 seconds and gets you basic alerts. Open your Google Form. Click the Responses tab. Click the three-dot menu in the top right of the responses section. Select "Get email notifications for new responses." That's it. Google will send you (the form owner) an email every time someone submits a response. The email contains a link to the response spreadsheet but does not include the actual response data. This is fine if you just need a ping. It's not enough if you want to see the response without clicking through, send a confirmation to the respondent, or route notifications to different people.
Level 2: Better notifications with Apps Script
This is the upgrade most people need. A script that runs every time someone submits the form and sends a custom email with the actual response data included.
Step 1: Link the form to a spreadsheet
Open your form, click Responses, click the green Sheets icon. This creates a response spreadsheet. Open it.
Step 2: Open the Apps Script editor
In the spreadsheet, click Extensions, then Apps Script. Delete any existing code.
Step 3: Paste the notification script
function onFormSubmit(e) {
var sheet =
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var row = sheet.getLastRow();
var headers = sheet.getRange(1, 1,
1, sheet.getLastColumn()).getValues()[0];
var data = sheet.getRange(row, 1,
1, sheet.getLastColumn()).getValues()[0];
// === CONFIGURATION ===
var notifyEmail =
'you@company.com';
var sendConfirmation = true;
var respondentEmailField = 'Email
Address'; // must match your form question exactly
var formName = 'Contact Form';
// === END CONFIGURATION ===
// Build the notification email for
your team
var body = 'New ' + formName + '
submission:\n\n';
for (var i = 0; i <
headers.length; i++) {
if (headers[i] &&
data[i]) {
body += headers[i] + ': ' +
data[i] + '\n';
}
}
MailApp.sendEmail({
to: notifyEmail,
subject: 'New ' + formName + '
Response',
body: body
});
// Send confirmation to the respondent
if (sendConfirmation) {
var emailIndex =
headers.indexOf(respondentEmailField);
if (emailIndex !== -1 &&
data[emailIndex]) {
var confirmBody = 'Thank you
for your submission. We received your '
+ formName.toLowerCase() + '
and will get back to you shortly.\n\n'
+ 'Here is a copy of your
responses:\n\n';
for (var j = 0; j <
headers.length; j++) {
if (headers[j] &&
data[j]) {
confirmBody += headers[j] +
': ' + data[j] + '\n';
}
}
MailApp.sendEmail({
to: data[emailIndex],
subject: 'We received your '
+ formName.toLowerCase(),
body: confirmBody
});
}
}
}Step 4: Set up the trigger
Click the clock icon in the Apps Script sidebar. Click "Add Trigger." Set the function to onFormSubmit, event source to "From spreadsheet," event type to "On form submit." Save and authorize.
Step 5: Test it
Submit a test response through your form. Within a few seconds, you should receive the notification email at the address you configured. If you enabled confirmations, the test email address should also receive a copy.
Level 3: Route notifications based on form answers
The real power comes when different answers trigger different actions. For example: if someone selects "Sales inquiry" from a dropdown, notify the sales team. If they select "Support request," notify the support team. Replace the notification section of the script with conditional logic:
function onFormSubmit(e) {
var sheet =
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var row = sheet.getLastRow();
var headers = sheet.getRange(1, 1,
1, sheet.getLastColumn()).getValues()[0];
var data = sheet.getRange(row, 1,
1, sheet.getLastColumn()).getValues()[0];
// Build the response summary
var summary = '';
for (var i = 0; i <
headers.length; i++) {
if (headers[i] &&
data[i]) {
summary += headers[i] + ': ' +
data[i] + '\n';
}
}
// Route based on a specific
field
var typeField = 'Request Type'; //
must match your form question
var typeIndex =
headers.indexOf(typeField);
var requestType = typeIndex !== -1
? data[typeIndex] : '';
var recipient =
'default@company.com';
if (requestType === 'Sales
inquiry') {
recipient =
'sales@company.com';
} else if (requestType === 'Support
request') {
recipient = 'support@company.com';
} else if (requestType ===
'Partnership') {
recipient =
'partnerships@company.com';
}
MailApp.sendEmail({
to: recipient,
subject: 'New ' + requestType + '
from form',
body: summary
});
}Change the field name, values, and email addresses to match your form. Add as many conditions as you need.
How to extend this
Send HTML emails instead of plain text. Replace the body parameter with htmlBody and build a formatted email using HTML tags. This lets you add your logo, colors, and layout to the notification. Add a Slack notification. Use UrlFetchApp.fetch() to send a message to a Slack webhook URL alongside the email. Useful if your team monitors Slack more than email. Log notification status in the spreadsheet. After sending the email, write "Notified" and a timestamp to an extra column in the response row. This gives you a record of which responses triggered notifications. Send different confirmations based on answers. Use the same conditional logic from Level 3, but apply it to the confirmation email instead of the team notification. Different form answers can trigger different follow-up messages.
Common issues
No email arrives after submitting. Check the Apps Script executions log (Executions in the sidebar). The most common cause is the trigger not being set up correctly. Make sure it's "From spreadsheet" and "On form submit," not "From form." Confirmation goes to the wrong person. The respondentEmailField variable must match the exact text of your form question that collects the email address, including capitalization and spacing. "Service invoked too many times." Google limits email sends. Consumer accounts can send about 100 emails per day. Workspace accounts get 1,500. If your form gets more submissions than that, you'll need to batch notifications or use a different delivery method. Duplicate notifications. This usually means the trigger was added twice. Go to the Triggers page in Apps Script and delete any duplicates.