On a schedule
Get a daily email of overdue Asana tasks
Each morning you see every overdue task in your workspace, grouped by who owns it.
- Runs
- On a schedule
- Apps
- Asana
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every weekday at 8am, email me all incomplete Asana tasks in my workspace that are past their due date, grouped by assignee.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
In a busy Asana workspace, overdue tasks collect quietly. A task assigned to a contractor, a follow-up promised to a customer, a review waiting on a manager: each shows a small red date that is easy to ignore among hundreds of other items. A team lead who wants to know what is late must build a saved search, remember to open it and then work out who owns which row, which most weeks does not happen.
Each morning, ClickRuntime searches Asana for tasks whose due date is before today and that are not completed. It groups them by assignee and project and sends one email listing each task with its due date and a link. The lead reads one message, with every late item already sorted by person.
It works well alongside a standing Monday check-in, since the email gives the conversation a ready-made agenda.
What you get out of it
Lateness is visible before it becomes normal
When overdue tasks arrive in your inbox every day, a one-day slip does not turn into a two-week slip. Teams stop treating red dates as background decoration. That keeps small delays small.
Grouping by person makes follow-up simple
You see Maya has three late tasks and Jon has one, so you can message each person with the full list. That is quicker and kinder than a general note to the whole team.
Neglected projects stand out
Grouping by project shows which projects hold most of the late work. A project with twelve overdue tasks needs a conversation about scope or staffing, and the email reveals it.
No saved search to maintain
Filters in Asana break when projects are archived or renamed. A scheduled report keeps working without anyone refreshing a view, so the habit survives staff changes. The habit survives staff changes.
A paper trail for escalation
If a client asks why a deliverable was late, a run of daily emails shows exactly when each task became overdue and who held it. That supports honest, factual discussions.
How it works
What happens, step by step
Every morning, ClickRuntime searches your Asana workspace for unfinished tasks that are past their due date.
It groups them by person and project.
You get one email with the number of overdue tasks and a list showing who owns each one and when it was due.
Before it runs live
- Connect Asana
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 Asana steps into one automation
Under the hood
The code that runs this automation
from datetime import date
from clickruntime import on_trigger, http, credentials, notify
WORKSPACE = "WORKSPACE_GID"
def asana(method, path, body=None, **params):
r = http.request(method, f"https://app.asana.com/api/1.0{path}", params=params,
json={"data": body} if body else None,
headers={"Authorization": f"Bearer {credentials.secret('ASANA_TOKEN')}"})
r.raise_for_status()
return r.json().get("data")
@on_trigger
def run(event):
today = date.today().isoformat()
tasks = asana("GET", f"/workspaces/{WORKSPACE}/tasks/search", completed="false",
**{"due_on.before": today, "opt_fields": "name,due_on,assignee.name,permalink_url", "limit": 100})
by_person = {}
for t in tasks:
who = (t.get("assignee") or {}).get("name", "Unassigned")
by_person.setdefault(who, []).append(f" {t['due_on']} {t['name']} {t['permalink_url']}")
body = "\n\n".join(f"{who}\n" + "\n".join(rows) for who, rows in sorted(by_person.items()))
notify.email_me(f"{len(tasks)} overdue Asana tasks", body or "Nothing overdue.")
return {"overdue": len(tasks)}FAQ
Common questions
Does it include tasks with no assignee?
Can I limit the email to one project or team?
What counts as overdue exactly?
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
Move overdue Asana tasks to today
Each morning your overdue tasks are due today again, old completed tasks are cleared out, and you get a summary.
See how it worksFlag Asana tasks with no owner or due date
Each week your team sees the open tasks that are missing an assignee or a due date, grouped by project.
See how it worksGet a weekly report of finished Asana work
Each Friday you get what was completed across your projects this week, with a short summary on top.
See how it worksKeep exploring
Set up “Get a daily email of overdue Asana tasks” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.