Weekly
Flag 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.
- Runs
- Weekly
- Apps
- Asana
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, post to #projects in Slack the open Asana tasks in my projects that have no assignee or no due date, grouped by project.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A project in Asana only works if tasks have an owner and a date. In practice, quick captures pile up with no assignee, and tasks created in meetings have no due date. These items cannot appear in a person's My Tasks or in a timeline, so nobody sees them. A project lead reviewing progress on Friday sees a clean board while a quarter of the work is quietly unowned and unscheduled.
Every week, ClickRuntime lists the incomplete tasks across your projects, picks out those missing an assignee or a due date, groups them by project and posts a scorecard to Slack. Each project shows how many tasks need attention, with links so they can be fixed in a minute.
Operations teams and PMOs use it to keep Asana trustworthy as a source of truth.
What you get out of it
Unowned work gets an owner
A task with no assignee is a task nobody will do. Seeing the count by project each week creates gentle pressure to assign every item before it gets forgotten. That prevents quiet drift.
Timelines and calendars become accurate
Tasks without dates do not show up on timelines. Filling in the missing dates means project plans reflect all the real work, not just the neat portion that happened to be scheduled.
Projects can be compared fairly
A scorecard that lists the number of messy tasks per project shows which teams keep tidy boards and which need help. Leads can compare and encourage without a lecture. Encouragement beats lectures.
Reporting numbers become more reliable
Dashboards built on due dates and assignees are only as good as the data. Fixing gaps weekly keeps workload and completion reports honest for leadership. Leadership sees honest numbers. Decisions rest on better data.
Cleanup stays small and routine
Fixing five tasks a week is a ten-minute job, while fixing five hundred after a year is a project. A weekly nudge prevents that backlog from forming. The backlog never forms.
How it works
What happens, step by step
Once a week, ClickRuntime checks the unfinished tasks in your Asana projects.
It picks out tasks with no owner or no due date.
It groups them by project.
A message goes to your Slack channel listing each task and what it is missing.
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 clickruntime import on_trigger, http, credentials, notify
PROJECTS = ["PROJECT_GID_1", "PROJECT_GID_2"]
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):
blocks = []
for gid in PROJECTS:
name = asana("GET", f"/projects/{gid}", opt_fields="name")["name"]
tasks = asana("GET", f"/projects/{gid}/tasks", completed_since="now",
opt_fields="name,assignee,due_on,permalink_url")
gaps = [t for t in tasks if not t["assignee"] or not t["due_on"]]
if gaps:
rows = [f"• {t['name']} ({'no owner' if not t['assignee'] else 'no due date'})" for t in gaps]
blocks.append(f"*{name}* ({len(gaps)})\n" + "\n".join(rows))
notify.slack("\n\n".join(blocks) or "Every open task has an owner and a due date.", channel="#projects")
return {"projects_with_gaps": len(blocks)}FAQ
Common questions
Which tasks are counted as missing information?
Can the scorecard name the person who created the tasks?
How is it different from the overdue alert?
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 worksGet a daily email of overdue Asana tasks
Each morning you see every overdue task in your workspace, grouped by who owns it.
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 “Flag Asana tasks with no owner or due date” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.