On a schedule
Post a daily Asana status update to Slack
Each morning your team sees, for every project, what was finished yesterday, what's due today and what's overdue.
- Runs
- On a schedule
- Apps
- Asana
- AI
- Optional
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every weekday at 9am, post to #standup in Slack, for each of my Asana projects, the tasks completed yesterday, due today and overdue.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Remote teams hold daily standups where everyone recites what they did, and half the time is spent hunting for the status of tasks that are already recorded in Asana. A manager with four active projects might open four boards before the meeting just to remember what is in progress, what is blocked and what finished yesterday. Latecomers miss context, and people who skipped standup have no summary at all.
On a schedule you choose, ClickRuntime lists the tasks in each Asana project, sorts them into buckets such as done, in progress and not started, and posts the result in Slack. If you want it, ClickRuntime's built-in AI can add a short paragraph summarizing the day's movement for each project.
Product and engineering teams often post it fifteen minutes before standup so the discussion starts from facts.
What you get out of it
Standup time goes to blockers, not recitals
When the board's state is already in the channel, the meeting can skip status reading and focus on what is stuck. Fifteen minutes becomes five, with better conversation. The meeting ends earlier too.
People who miss standup stay informed
A teammate on leave or in another timezone can read the digest and catch up in a minute. Nobody has to ask a colleague to explain what happened. It takes a minute to read.
Stakeholders get visibility without meetings
A director who wants a pulse on four projects can read the channel instead of joining calls. Progress is public, which reduces status-request messages sent to the team. Fewer pings land on the team.
Stale work becomes noticeable
A task that sits in the same bucket for a week shows up in every digest. Repetition makes drift hard to ignore and encourages the team to move or close it.
A daily log of progress accumulates
Scrolling back through the channel gives a day-by-day account of each project. That helps with retrospectives and with writing monthly updates for leadership. You can cite specific days. Nothing is rebuilt from memory.
How it works
What happens, step by step
Every morning, ClickRuntime reads the tasks in each Asana project you chose.
It sorts them into done yesterday, due today and overdue.
A status update for each project goes to your #standup Slack channel, so the team can skip reading it out in the meeting.
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
- 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 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
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):
today = date.today().isoformat()
yesterday = (date.today() - timedelta(days=1)).isoformat()
blocks = []
for gid in PROJECTS:
name = asana("GET", f"/projects/{gid}", opt_fields="name")["name"]
tasks = asana("GET", f"/projects/{gid}/tasks", completed_since=yesterday,
opt_fields="name,completed,completed_at,due_on")
done = [t["name"] for t in tasks if t["completed"] and t["completed_at"][:10] == yesterday]
due = [t["name"] for t in tasks if not t["completed"] and t["due_on"] == today]
late = [t["name"] for t in tasks if not t["completed"] and t["due_on"] and t["due_on"] < today]
blocks.append(f"*{name}*\nDone yesterday: {', '.join(done) or '-'}\n"
f"Due today: {', '.join(due) or '-'}\nOverdue: {', '.join(late) or '-'}")
notify.slack("\n\n".join(blocks), channel="#standup")
return {"projects": len(blocks)}FAQ
Common questions
Is the AI summary required?
How are tasks sorted into buckets?
Can each project post to a different channel?
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 “Post a daily Asana status update to Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.