Asana Weekly Project Status Roll-Up
Each week the flow reads progress across Asana projects (tasks completed, in progress, blocked, overdue, % complete, milestones) and generates a stakeholder status report, posts highlights to a Teams channel, and emails project sponsors. Flags projects at risk. Replaces manual status reporting with an automatic roll-up.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow automates Asana weekly project status reporting. On a weekly cadence it reads progress across a configured set of Asana projects (total tasks, completed, in progress, overdue, % complete), flags projects whose overdue ratio crosses a threshold as at risk, builds an HTML status report, posts highlights to a Microsoft Teams channel, and emails the full report to project sponsors.
Why it matters: Manual status reports eat PM time and come out inconsistent. An automatic roll-up straight from Asana keeps stakeholders reliably informed and surfaces at-risk projects early.
Status: Built and shipped Off (demo). Going live requires only authorizing the three connections and setting the six environment variable values - no logic changes.
Use Case
A PMO wants a consistent weekly project status update delivered to stakeholders, generated automatically from live Asana data instead of hand-assembled each week.
Flow Architecture
Weekly Status Cadence
Recurrence (Weekly, Thu 15:00 ET)Status cadence.
Initialize varWorkspaceId
Initialize Variable (String)Asana workspace GID from env var.
Initialize varProjectIds
Initialize Variable (Array)split() of the comma-separated project-IDs env var.
Initialize varAtRiskPct
Initialize Variable (Integer)Overdue-% risk threshold.
Initialize varSponsorEmail
Initialize Variable (String)Email recipient(s).
Initialize varTeamsGroupId
Initialize Variable (String)Teams team ID.
Initialize varTeamsChannelId
Initialize Variable (String)Teams channel ID.
Initialize varTodayDate
Initialize Variable (String)yyyy-MM-dd used for overdue comparison.
Initialize varReportRows
Initialize Variable (String)Accumulates one HTML row per project.
Initialize varRowBadge
Initialize Variable (String)Per-project status badge.
Initialize varAtRiskCount
Initialize Variable (Integer)At-risk project counter.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AsanaWorkspaceId | String | 0000000000000000 | Asana workspace GID owning the projects (required by ListTasks). |
| flowlibs_AsanaProjectIds | String | 1200000000000001,1200000000000002 | Comma-separated Asana project GIDs to report. |
| flowlibs_AtRiskOverduePct | String | 20 | Overdue-task % above which a project is flagged at risk. |
| flowlibs_SponsorEmail | String | sponsors@example.com | Recipient(s) of the status email. |
| flowlibs_StatusReportTeamsGroupId | String | 00000000-0000-0000-0000-000000000000 | Teams team (group) ID for the highlights post. |
| flowlibs_StatusReportTeamsChannelId | String | 19:000...@thread.tacv2 | Teams channel ID for the highlights post. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Asana | shared_asana | GetProject ListTasks |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Blocked tasks
- Asana's connector task schema has no native blocked flag. Add an Asana custom field or tag (e.g. "Blocked") and extend Filter Overdue Tasks / add a Filter Blocked Tasks Query that reads item()?['custom_fields'] (via GetTask) or a tag, then add a Blocked column.
- RAG status
- Replace the two-state badge with red/amber/green logic by combining overdue % and % complete thresholds in Check If Project At Risk.
- Portfolio view
- Wrap the projects in program groups and emit a program-level summary block above the table.
- Cadence
- Edit the Weekly Status Cadence recurrence (frequency/day/time/time zone) to match your reporting rhythm.
- Recipients
- flowlibs_SponsorEmail accepts a semicolon-separated list; the Teams target is env-var driven for portability.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Split project IDs
Splits the comma-separated project-IDs env var into an array.
EXPR.02Today (overdue basis)
Today's date used for overdue comparison.
EXPR.03Overdue filter (where)
Keeps incomplete tasks whose due date is before today.
EXPR.04% complete
Percent of tasks completed.
EXPR.05Overdue % (risk basis)
Percent of tasks overdue, used as the risk basis.
EXPR.06In progress
Tasks neither done nor overdue.
EXPR.07At-risk test
Flags the project at risk when overdue % exceeds the threshold.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.