On a schedule
Email the team a daily summary of risky monday.com items
Each weekday morning your team gets an email listing stuck, overdue and at-risk items from your monday.com board.
- Runs
- On a schedule
- Apps
- Gmail, monday.com
- AI
- Optional
- Access
- boards:read; gmail.send
Send this to your assistant
Create a ClickRuntime automation: every weekday at 8:30am, check my Projects board in monday.com for items that are stuck, overdue or due in the next two days, and email the team a short standup summary.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Standups often waste time on items that are fine, while the stuck task in the corner of the board goes unmentioned. Team leads mean to review the board each morning, but it is easy to skip.
An email before the standup with only the items that need attention focuses the conversation. Owners see their overdue items in writing, and problems get raised days earlier.
What you get out of it
Shorter, sharper standups
The meeting starts from the items that need help, not a tour of the whole board.
Overdue work gets noticed
Items past their date are listed by owner, so nothing quietly slips.
Early warning
Items due in the next two days are flagged while there is still time to act.
Works for remote teams
Everyone gets the same summary in their inbox, whatever their time zone.
How it works
What happens, step by step
Each weekday morning ClickRuntime reads the items on your monday.com board.
It picks out items that are stuck, overdue, or due in the next two days and not done.
AI can add a one-paragraph overview at the top.
The summary is emailed to the team from your Gmail.
Before it runs live
- Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
- Connect monday.com
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Gmail and monday.com steps into one automation
Under the hood
The code that runs this automation
import base64
from email.message import EmailMessage
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, ai
BOARD, TEAM = 1234567890, "team@example.com"
ITEMS = """query ($board: [ID!]) { boards(ids: $board) { items_page(limit: 200) { items {
id name url column_values { id text } } } } }"""
def monday(query, **variables):
resp = http.post("https://api.monday.com/v2", json={"query": query, "variables": variables},
headers={"Authorization": credentials.secret("MONDAY_API_TOKEN"), "API-Version": "2024-10"})
resp.raise_for_status()
return resp.json()["data"]
def send_email(to, subject, text):
msg = EmailMessage()
msg["To"], msg["Subject"] = to, subject
msg.set_content(text)
gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}).execute()
@on_trigger
def run(event):
items = monday(ITEMS, board=[BOARD])["boards"][0]["items_page"]["items"]
today, soon = date.today().isoformat(), (date.today() + timedelta(days=2)).isoformat()
lines = []
for i in items:
c = {v["id"]: v["text"] for v in i["column_values"]}
due, status = c.get("date") or "", c.get("status") or ""
if status == "Done":
continue
flag = "Stuck" if status == "Stuck" else "Overdue" if due and due < today else "Due soon" if due and due <= soon else None
if flag:
lines.append(f"[{flag}] {i['name']} – {c.get('person') or 'no owner'} ({due or 'no date'})")
if not lines:
return {"flagged": 0}
try:
intro = ai.generate("\n".join(lines), system="Write a two-sentence overview for a team standup.", max_output_tokens=120).text
except (ai.AINotIncluded, ai.AILimitReached):
intro = ""
send_email(TEAM, f"Standup: {len(lines)} items need attention", f"{intro}\n\n" + "\n".join(sorted(lines)))
return {"flagged": len(lines)}FAQ
Common questions
What counts as at risk?
Does it use AI?
Who receives the email?
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
Get a monthly lead report from your monday.com board
On the 1st of each month you get an email summarising your leads by status and source, with short AI commentary.
See how it worksStart onboarding in monday.com and send a welcome email
When a client or new hire fills in your form, an onboarding item with all its steps is created in monday.com and they get a welcome email.
See how it worksDraft personal emails for new monday.com leads
New leads on your monday.com board get a personalised outreach email drafted in Gmail, ready for you to review and send.
See how it worksKeep exploring
Set up “Email the team a daily summary of risky monday.com items” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.