Daily
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.
- Runs
- Daily
- Apps
- Asana
- AI
- Not needed
- Access
- read+write
Send this to your assistant
Create a ClickRuntime automation: every weekday at 7am, move my overdue Asana tasks to today, delete tasks completed more than 30 days ago, and email me a summary of what changed.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Over a few months, a personal Asana list fills with debris. Tasks you meant to do last week carry due dates from March, so the My Tasks view is mostly red and no longer tells you what matters today. At the same time, hundreds of completed tasks from old projects sit in the workspace, slowing searches and making reports harder to read. Cleaning it up by hand is the kind of chore people postpone forever.
Each day, ClickRuntime lists your incomplete tasks that are past due and moves their due date to today, so your list shows what is realistic. It also finds long-completed tasks and deletes them. When the run is done, you receive an email that says how many tasks were moved and which were removed.
It suits individuals who prefer a clean today list over a historical record of every missed date.
What you get out of it
Today's list reflects today's reality
Instead of a wall of red dates, you see tasks that are now due. That makes planning the day a matter of picking from a short list, not wading through old promises.
Missed dates stop causing guilt
Constant red markers make people avoid their list. Rolling dates forward each day removes that pressure and lets you keep using Asana as a working tool, not as a record of failure.
Searches and reports get faster
Removing old completed tasks reduces clutter in search results and in exported data. When you look for a task from last week, you do not scroll through hundreds of irrelevant results.
You still see exactly what changed
The summary email lists every task that was moved or deleted, so nothing disappears without a record. If a deleted task mattered, you know its name and can ask to restore it.
Maintenance happens without willpower
Chores that are never urgent never get done. A scheduled cleanup takes care of itself and keeps your workspace usable year after year. Your workspace stays usable for years without a big cleanup day.
How it works
What happens, step by step
Every day, ClickRuntime finds your unfinished Asana tasks with a due date in the past.
It moves each of those due dates to today, so nothing sits silently overdue.
It also finds tasks you completed a long time ago and deletes them.
You get an email saying how many tasks were moved and deleted, with their names.
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, timedelta
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()
old = today - timedelta(days=30)
tasks = asana("GET", "/tasks", assignee="me", workspace=WORKSPACE,
completed_since=old.isoformat(), opt_fields="name,due_on,completed,completed_at")
moved, deleted = [], []
for t in tasks:
if not t["completed"] and t["due_on"] and t["due_on"] < today.isoformat():
asana("PUT", f"/tasks/{t['gid']}", {"due_on": today.isoformat()})
moved.append(t["name"])
elif t["completed"] and t["completed_at"] and t["completed_at"][:10] < old.isoformat():
asana("DELETE", f"/tasks/{t['gid']}")
deleted.append(t["name"])
notify.email_me(f"Asana: {len(moved)} moved to today, {len(deleted)} deleted",
"Moved:\n" + "\n".join(moved) + "\n\nDeleted:\n" + "\n".join(deleted))
return {"moved": len(moved), "deleted": len(deleted)}FAQ
Common questions
How old does a completed task have to be before it is deleted?
Will it move tasks that other people own?
What if I want to keep the original due date?
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 daily email of overdue Asana tasks
Each morning you see every overdue task in your workspace, grouped by who owns it.
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 “Move overdue Asana tasks to today” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.