How to email a Google Sheet automatically on a schedule
Short answer: Google Sheets has no “email this sheet every Monday” setting. It can send a copy when you click File → Email → Email this file, and on some work and school accounts it can email you when cells change. For a real schedule, the free way is a short Apps Script: it asks Google for the PDF of a tab, emails it with MailApp, and a time-driven trigger runs it every week. An add-on such as ReportLane does the same without code, and adds tables in the email, Excel and CSV, and reminders.
1. What Google Sheets can do by itself
- Email this file. In a spreadsheet, File → Email → Email this file sends a copy, attached as a PDF or an Excel file for example, to the people you type. It is by hand, every time: there is no schedule.
- Conditional notifications. On some Google Workspace™ work and school editions, Tools → Conditional notifications emails people when cells in a column or range change, optionally only when a value matches, such as a Status that turns “Completed”. It tells people about a change; it does not send the sheet on a timetable, and it cannot remind anyone three days before a date. Google’s help says it does not support group addresses or non-Google recipients such as Outlook, and that emails may be combined or delayed.
- Notification settings (Tools → Notification settings) email you, and only you, when someone edits the file.
Looker Studio can email a report on a schedule, but that is a Looker Studio report built on your data, not the sheet itself. For the sheet, on a timetable, you write a script or use an add-on.
2. The Apps Script way: a PDF every Monday
- In your spreadsheet, choose Extensions → Apps Script.
- Replace the code with the script below. Change the tab name and the address, and click Save.
- Click Run. The first time, Google asks you to allow the script to see your spreadsheet, connect to an external service and send email as you. Check your inbox: the PDF should be there.
function emailSheetAsPdf() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Weekly sales'); // the tab to send
const url = 'https://docs.google.com/spreadsheets/d/' + ss.getId() +
'/export?format=pdf&gid=' + sheet.getSheetId() +
'&portrait=true&fitw=true&gridlines=false';
const pdf = UrlFetchApp.fetch(url, {
headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }
}).getBlob().setName(sheet.getName() + '.pdf');
MailApp.sendEmail({
to: 'team@example.com',
subject: sheet.getName() + ' for ' + new Date().toDateString(),
body: 'The latest numbers are attached.',
attachments: [pdf]
});
}
The export link is the same one File → Download → PDF uses. Change format=pdf to format=csv for a CSV of the tab, or to format=xlsx for an Excel file of the whole spreadsheet. Add &range=A1:F30 to send only part of the tab as a PDF or CSV.
3. Make it run on a schedule
- In the Apps Script editor, click Triggers (the clock icon on the left), then Add Trigger.
- Choose the function
emailSheetAsPdf, the event source Time-driven, the type Week timer, Every Monday and a time such as 8am to 9am. - Click Save.
From then on Google runs the script every Monday at some point in that hour, while the spreadsheet is closed. A Day timer sends daily and a Month timer once a month. The trigger can also be made in code: ScriptApp.newTrigger('emailSheetAsPdf').timeBased().onWeekDay(ScriptApp.WeekDay.MONDAY).atHour(8).create().
4. Where the simple script falls short
- An attachment, not a table. Most people read the email, not the file. Putting the numbers inside the email means building an HTML table from
getDisplayValues(), escaping every cell, and stopping before the email gets too long. - It sends when nothing happened. An empty “overdue” list or last week’s unchanged numbers still go out. Skipping them means counting rows, or saving a fingerprint of the values and comparing it on every run.
- Time zones. The trigger hour follows the script’s time zone (Project Settings), which can differ from the spreadsheet’s (File → Settings) and from your recipients’.
- Daily limits. Scripts can email 100 recipients a day from a personal Gmail™ account and 1,500 from a Google Workspace account. A run that goes over fails with an error, and the rest is not sent.
- Downloads turned off. If the owner turned off download, print and copy for viewers, Google answers the export link with a web page instead of the PDF, and the script attaches that page.
- Errors go quietly. When a run fails, Google emails a failure summary to the person who made the trigger, by default once a day. Nobody else knows the report did not go out.
- Reminders are a second program. “Email the client three days before the due date, once, unless the invoice is paid” means reading each row, working out the dates, and remembering which rows were already sent so no one gets the same email twice.
- One script per spreadsheet. Each spreadsheet needs its own copy of the code and its own trigger, and each change to the report means editing code.
None of this is hard on its own. Together, it is a small program to keep up every time someone asks for one more report.
5. With an add-on: ReportLane
ReportLane is our Google Sheets™ add-on for this job. It does what the script above leaves to you:
- Any tab, or a range such as
A1:F30or a named range, as a PDF (portrait or landscape, fitted to the width, gridlines on or off), an Excel file, a CSV file or a table inside the email, or several at once. - Send now by hand, free. With Pro, a schedule: every day, on the weekdays you tick, or monthly on a day or the last day, at the hour you choose and in the time zone you choose.
- Subject and message with
{sheet},{range},{date},{spreadsheet}and{link}; Skip if empty, and with Pro Send only if changed. - Reminders (Pro): days before, on or after the date in a column, or when a number crosses a limit, to fixed addresses or to the address in the row. Each row and date sends once.
- Google’s daily limit handled: the panel shows what is left, and a run that hits the limit sends the rest next time instead of failing.
- Every email goes from your own Google account. ReportLane has no Drive or Gmail-reading permission.
- Send now is free for up to 3 recipients per report. Pro, for $4.99 a month or $39 a year, adds schedules, reminders, up to 50 recipients with CC and BCC, and a run log.
How to set it up: ReportLane help.
Questions
Can Google Sheets send an email automatically?
Not on a timetable. File → Email → Email this file sends a copy when you click it, and conditional notifications, on some work and school accounts, email when cells change. For a daily or weekly email you need an Apps Script with a time-driven trigger, or an add-on.
How do I email a Google Sheet as a PDF every week?
In the spreadsheet, open Extensions → Apps Script, paste a script that asks Google for the PDF export of the tab and sends it with MailApp, then add a time-driven trigger with a week timer. Or use an add-on that does both.
How many emails can a script send a day?
Google allows 100 recipients a day from a personal Gmail account and 1,500 from a Google Workspace account, counting every address in To, CC and BCC.
Can I email only part of a sheet?
Yes. The PDF and CSV exports take a range, such as range=A1:F30 in the export link. An Excel export is always the whole spreadsheet.