Home
Contact Us

How I Put My Daily Status Reports on 100% Autopilot Using Google Sheets + Apps Script

Why I Built This

My Boss asked for twice-daily updates — one in the morning and one in the evening summarising what I completed and what was still pending.

Doing this manually every single day is repetitive, easy to forget, and honestly a waste of time when you could be doing actual work. So I spent 30 minutes building a system that sends the emails automatically. Here is exactly how it works and how you can set up the same thing.


How the System Works

Before getting into the setup, here is the big picture. There are four parts working together:

Google Sheet — This is where you write your tasks. Every task gets its own row. This is your database.

Google Apps Script — This is the code that runs inside Google. It reads your sheet, picks out today’s tasks, and builds the email content.

GmailApp — This is what actually sends the email. It sends from your real Gmail address, so it never lands in spam.

Time Triggers — These tell Google to run the script at 8 AM and again at 4 PM every day. Your computer does not need to be on. Google runs it in the cloud.


Phase 1 — Set Up Your Google Sheet

Create a sheet and name it exactly: Daily Tracker

Add these five columns in this order:

Date | Task Description | Priority | Status | Notes

Two important things to do after setting up the columns:

First, add dropdown options to the Priority column with these values: High, Medium, Low

Second, add dropdown options to the Status column with these values: Pending, In Progress, Blocked, Completed

To add dropdowns, select the column, go to Data, then Data Validation, then choose Dropdown and type the values.

The reason dropdowns matter is that the script does a strict match on the word “Completed” to separate finished tasks from active ones. If someone types “Done” or “Compelted” by mistake, the script will put it in the wrong category. Dropdowns prevent that.


Phase 2 — Add the Script

In your Google Sheet, click Extensions at the top, then click Apps Script. Delete any placeholder code you see and paste in the following:

function sendDailyStatusUpdate() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet()
                .getSheetByName("Daily Tracker");
  if (!sheet) return;

  var today = Utilities.formatDate(
    new Date(), "Asia/Kolkata", "MM/dd/yyyy"
  );

  var lastRow = sheet.getLastRow();
  if (lastRow < 5) return;

  var values = sheet.getRange(5, 2, lastRow - 4, 6).getDisplayValues();

  var outstanding = "";
  var completed = "";

  for (var i = 0; i < values.length; i++) {
    var date     = values[i][0];
    var task     = values[i][1];
    var priority = values[i][2];
    var status   = values[i][3];
    var notes    = values[i][4];

    if (!task || date !== today) continue;

    var line = "[" + date + "] " + task +
               " (Priority: " + priority + ", Status: " + status + ")\n";
    if (notes) line += "  Notes: " + notes + "\n";
    line += "\n";

    if (status === "Completed") {
      completed += line;
    } else {
      outstanding += line;
    }
  }

  var body = "Hi,\n\nHere is my task update for today:\n\n";

  body += outstanding
    ? "--- TODAY'S OUTSTANDING & ACTIVE TASKS ---\n" + outstanding
    : "All tasks for today are completed.\n\n";

  if (completed)
    body += "\n--- TODAY'S COMPLETED TASKS ---\n" + completed;

  body += "\nBest regards,\nPinto Yadav";

  GmailApp.sendEmail(
    "boss@example.com",
    "Daily Task Update Summary - Pinto Yadav",
    body
  );
}

Replace boss@example.com with your manager’s actual email address. Then click the Save button (the floppy disk icon at the top).


Three Important Things This Script Does Differently

It reads dates as text, not timestamps. Most tutorials use getValues() which pulls the raw date from Google and turns it into something like “Sat Jun 13 2026 00:00:00 GMT+0530” in the email. This script uses getDisplayValues() instead, which reads the date exactly as it appears on your screen — like 06/13/2026. Clean and readable.

It only sends today’s tasks. The script compares each task’s date to today’s date and skips anything that doesn’t match. Your manager only ever sees what is relevant right now, not a dump of everything you have ever written in the sheet.

It uses GmailApp instead of MailApp. MailApp is a basic email tool that sends from a generic system address. On corporate email domains, these often get flagged as spam. GmailApp sends from your actual Gmail account, which shows up in your Sent folder and that spam filters trust.


Phase 3 — Set Up the Triggers

This is what makes the emails send automatically without you doing anything.

In the Apps Script tab, look at the left sidebar and click the alarm clock icon. This opens the Triggers page.

Click the blue button that says Add Trigger in the bottom right corner.

Set up the first trigger like this:

Click Add Trigger again and set up the second one like this:

One more important step. Click the gear icon in the left sidebar to open Project Settings. Find the timezone setting and change it to Asia/Kolkata. This is critical. If you skip this, the script runs on UTC time which is 5 and a half hours behind India. The script would think today is still yesterday when it runs in the morning and send you nothing.


Do You Need to Deploy the Script?

No. A lot of people get confused by the Deploy button in Apps Script. Deploying is only needed if you are building a web app or an external API that other systems connect to. For a simple email automation that runs on a timer, you only need three things: save the code, authorize it once, and set the triggers. That is it.


What Your Manager Receives

Every morning and every evening, this email lands in their inbox automatically:

Subject: Daily Task Update Summary - Pinto Yadav

Hi,

Here is my task update for today:

--- TODAY'S OUTSTANDING & ACTIVE TASKS ---
[06/13/2026] Client follow-up call (Priority: High, Status: In Progress)
  Notes: Waiting for final contract confirmation.

[06/13/2026] Design draft review (Priority: Medium, Status: Pending)

--- TODAY'S COMPLETED TASKS ---
[06/13/2026] Corrected 247RS website (Priority: Medium, Status: Completed)
[06/13/2026] Prepared weekly report (Priority: High, Status: Completed)

Best regards,
Pinto Yadav

Plain text, no broken formatting, works on every email client.


Common Problems and How to Fix Them

Authorization failed when running the script. This almost always happens when you are signed into more than one Google account in the same browser. Open your Google Sheet in an Incognito window, sign in with only your work account, go back to Apps Script, and try running it again.

Emails are going to spam. Make sure the script is using GmailApp and not MailApp. The script above already uses GmailApp, so if you copied it correctly this should not be an issue.

The script runs but sends an empty email. Check two things. First, make sure your task rows start at row 5 in the sheet. Second, check that the dates in your sheet are formatted as MM/dd/yyyy and match exactly what the script is looking for.

Dates in the email look like a long timestamp. You are probably using getValues() somewhere. Switch to getDisplayValues() as shown in the script above.

The script is not picking up today’s tasks. Go to Project Settings in Apps Script and check the timezone. If it is set to UTC, change it to Asia/Kolkata and run the test again.


Your Daily Routine After This

The system runs itself. All you do is keep the sheet updated:

That is all. The script runs at 8 AM and 4 PM, reads whatever is in the sheet at that moment, and sends the email. You never have to think about it.


Key Takeaways

30 minutes of setup means you never manually write a status email again.

Use getDisplayValues() not getValues() when reading date cells in Apps Script.

Use GmailApp not MailApp if you are on a corporate email domain.

Always set the script timezone in Project Settings — do not leave it on UTC.

No deployment is needed for time-triggered scripts. Save, authorize, and add triggers. Done.


Have you automated any daily workflows at work? Drop a comment below.

#Automation #GoogleAppsScript #Productivity #WorkSmarter #GoogleSheets

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *