On a schedule
Get a Monday list of overdue rows by owner
Once a week, one email lists every unfinished row past its due date, grouped under the person it's assigned to.
- Runs
- On a schedule
- Apps
- Smartsheet
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 8am email me the rows in my Smartsheet 'Project Plan' where Due Date is before today and Status isn't Complete, grouped by Assigned To. Skip the email if nothing is overdue.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Every project sheet collects overdue rows. Some are truly late, some are finished but nobody changed the status, and some were dropped months ago. The people who should care rarely look at the sheet's overdue filter, and a manager who does look sees an unsorted list of forty items with no clear owner. Meetings turn into a hunt through rows, and the people who are consistently late are never plainly shown to be, so the pattern continues.
Every Monday, ClickRuntime reads the sheet, keeps the rows where Due Date is earlier than today and Status is not Complete, groups them by owner, and sends one email listing each person's overdue items. If nothing is overdue, no email is sent, so a message always means there is something to do.
Heads of delivery, PMOs and team leads running weekly status meetings use it to start from facts.
What you get out of it
Monday starts with a clear list
Instead of hunting through rows, the manager opens one email that already says who owes what. The status meeting spends its time on solutions rather than on assembling the list.
Owners see their own backlog
Grouping by owner puts each person's late items together. Nobody can say they did not know, and it is easy for someone to see how large their pile has become.
Stale rows get cleaned up
Rows that are really done but not marked complete show up every week until someone updates them. The sheet becomes more accurate, which makes every other report built from it more reliable.
Silence means things are fine
Because no email is sent when there are no overdue rows, an empty inbox on Monday is itself good news and the email keeps its weight when it does arrive.
Patterns of lateness become visible
If the same owner or the same phase of work fills the digest every week, that is an actual finding about capacity or process, and a manager can act on it.
How it works
What happens, step by step
Every Monday at 8am, ClickRuntime reads every row in your Smartsheet sheet.
It keeps the rows whose due date has passed and whose status isn't Complete.
It groups them by owner.
You get one email showing each person's overdue rows with their due dates. If nothing is overdue, no email is sent.
Before it runs live
- Connect Smartsheet
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Smartsheet steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from datetime import date
from clickruntime import on_trigger, notify, http, credentials
SHEET_ID = 4583173393803140 # your 'Project Plan' sheet
@on_trigger
def run(event):
sheet = http.get(f"https://api.smartsheet.com/2.0/sheets/{SHEET_ID}", headers={
"Authorization": "Bearer " + credentials.connection("smartsheet", "main")}).json()
titles = {c["id"]: c["title"] for c in sheet["columns"]}
today = date.today().isoformat()
groups = defaultdict(list)
for row in sheet["rows"]:
cells = {titles[c["columnId"]]: c.get("value") for c in row["cells"]}
due = str(cells.get("Due Date") or "")[:10]
if due and due < today and cells.get("Status") != "Complete":
groups[cells.get("Assigned To") or "Unassigned"].append(f" {due} {cells.get('Task Name', 'Row ' + str(row['rowNumber']))}")
if not groups:
return {"overdue": 0}
body = "\n\n".join(f"{owner}\n" + "\n".join(items) for owner, items in sorted(groups.items()))
notify.email_me("Overdue in Project Plan", body)
return {"owners": len(groups)}FAQ
Common questions
How are rows grouped?
Does a row stay in the list if it is only a day overdue?
Can the digest go to the owners instead of only me?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Email yourself a weekly copy of a sheet
Every Monday you receive an export of the sheet, so you always have last week's version on hand.
See how it worksPost rows due in the next 3 days to Slack
Each weekday morning your team sees what's due soon, with links to the rows, before anything slips.
See how it worksGet new Smartsheet rows by email
Each time a row is added to the sheet, you get an email with every cell value in it.
See how it worksKeep exploring
Set up “Get a Monday list of overdue rows by owner” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
