Send grouped Slack reminders for overdue Google Sheets tasks

Make late deliverables visible to their owners, then stop reminding them when the work is done.

Automate.ax team6 min read

Integrations used in this example

Remind people about the work still open

A shared sheet can track deliverables well enough until the due dates pass. Then someone has to keep checking rows, find the right owner, and ask for updates. A blanket daily ping becomes noise quickly.

This example checks the sheet on a schedule, selects rows that are both overdue and incomplete, and sends the owner a grouped Slack reminder. When the completion cell changes, that task drops out of the next reminder.

They wanted named owners to get reminders for late deliverables until each row was checked complete.Source: a Google Sheets user’s overdue-task question

What you'll tell the agent

  • The spreadsheet, task tab, and its grid ID for links back to rows.
  • Task ID, Task, Due Date, Complete, and Slack Conversation ID columns. The agent can add missing columns and help populate Slack IDs for owners.
  • The reminder time zone; this example runs at 9 a.m. on weekdays.
  • Account authorization for Google Sheets and Slack.

The agent will create the project and ask you for these details. When Automate.ax asks you to connect an account, authorize the integrations you want this workflow to use.

Google account connection currently requires alpha access. The setup agent should check availability before asking you to authorize it.

The automation

Each weekday run reads up to 1,000 rows. It compares ISO-formatted due dates with the chosen time zone, filters completed work, and groups the remaining tasks by the Slack Conversation ID stored on each row.

sheets-overdue-tasks.automation.ts
import { automation, each, onSchedule, transform } from "automate.ax"
import { googleSheets } from "automate.ax/google-sheets"
import { slack } from "automate.ax/slack"
import { z } from "zod"

export default automation(
  "Remind owners about overdue sheet tasks",
  {
    parameters: [
      { label: "Google spreadsheet ID", name: "spreadsheetId", type: "text" },
      { label: "Tasks sheet name", name: "sheetName", type: "text" },
      { label: "Tasks sheet grid ID", name: "sheetGridId", type: "text" },
      { label: "Reminder time zone", name: "timeZone", type: "text" },
    ],
  },
  ({ parameters }) => {
    const tick = onSchedule({
      schedule: "0 9 * * 1-5",
      timeZone: parameters.timeZone,
    })
    const rows = googleSheets.listRows({
      spreadsheet: parameters.spreadsheetId,
      source: { sheet: parameters.sheetName, headerRow: 1 },
      limit: 1000,

What a run looks like

Example input

Two unchecked rows for the same owner are due September 20 and 21. A third overdue row is already checked complete.

Expected result

The owner receives one Slack message listing the two open tasks. The completed row is absent, and checking another task removes it from the next run.

Set it up

  1. Copy the setup prompt at the top into your coding agent.
  2. Show the agent the sheet headers and owner-to-Slack mapping. It can add the required columns and populate a Slack Conversation ID on each row.
  3. Choose the reminder time zone and authorize Google Sheets and Slack when prompted. This code runs at 9 a.m. on weekdays in that time zone.

Check the result

Use a disposable sheet with two past-due rows and one completed row. Run the automation in a test Slack destination, confirm one digest contains only open items, then mark one row complete and run it again.

Where this workflow stops

  • Dates should be unambiguous ISO dates; locale-formatted text and spreadsheet serial values need conversion before comparison.
  • The code reads the first 1,000 rows and requires a Slack Conversation ID on each. Add pagination or a narrower sheet for larger task lists.
  • A sheet is only as accurate as its Slack destinations and completion cells. The automation cannot infer whether work happened outside it.
  • The scheduled run can overlap with a slow earlier run; choose a cadence and destination that tolerate an occasional repeated reminder.

Common questions

Will this send a new message for every late row?

The intended setup groups overdue rows by owner, so each person sees one actionable reminder per scheduled run.

How does a reminder stop?

The next run reads the sheet again. When the row is marked complete, it no longer passes the overdue-and-open filter.

More automation examples