Asana Milestone to Stakeholder Comms
When a milestone task is completed in Asana, the flow notifies stakeholders (email + Teams) with the milestone, what it unblocks, and what's next, updates a SharePoint project page, and posts a celebratory note to the project channel. Keeps stakeholders informed of progress at the moments that matter.
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
FlowLibs - Asana Milestone to Stakeholder Comms keeps project stakeholders informed when key Asana milestones are reached. On a daily schedule it scans an Asana project for milestone-marked tasks that completed inside a recency window, posts a confirmation comment back onto each milestone task in Asana, emails the stakeholder distribution list, and posts a celebratory roll-up to the project's Microsoft Teams channel.
Why it matters: Stakeholders care about milestones, not every task. Automatic, well-framed milestone comms keep them informed at the moments that matter and build momentum - without the PM having to remember to send the update.
Status: Built and shipped Off (demo). Going live requires only authorizing the three connections and setting the environment-variable values.
Use Case
A project manager wants stakeholders updated automatically the moment a key milestone is hit, without manually composing an announcement each time. Milestones are flagged in Asana by a naming-convention marker (e.g. a task named [Milestone] Phase 1 sign-off). When such a task is completed, the flow fans out the news to email and Teams and leaves an audit comment on the milestone task itself.
Flow Architecture
Milestone Sweep Daily 0800
Recurrence (Day/1, 08:00 ET)Runs each morning to sweep the project.
Initialize Variables (x11)
Initialize VariableBind env vars to working variables; compute the recency cutoff; seed the milestone counter and HTML digest accumulator.
List Milestone Tasks
Asana — ListTasksLists all tasks in the milestone project (body/data[]).
Filter Completed Milestones
Query (Filter array)Keeps only milestone-marked tasks completed within the lookback window.
For Each Milestone
Foreach (sequential)Processes each newly completed milestone.
Add Stakeholder Comment To Milestone
Asana — AddCommentPosts a confirmation comment back onto the milestone task (comment-on-action).
Email Stakeholders
Office 365 Outlook — SendEmailV2Emails the stakeholder list that the milestone is reached.
Increment Milestone Count
Increment VariableCounts processed milestones.
Append Digest Row
Append to String VariableBuilds an HTML list item per milestone for the roll-up.
Any Milestones Completed
Condition (If count > 0)Only posts the channel roll-up when something completed.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AsanaWorkspaceId | String | <configure> | Asana workspace GID scoping the task query. |
| flowlibs_AsanaMilestoneProjectId | String | 0000000000000000 | Asana project GID scanned for completed milestones. |
| flowlibs_MilestoneMarker | String | [Milestone] | Naming marker that identifies a milestone task by name. |
| flowlibs_MilestoneLookbackHours | String | 24 | Recency window (hours); match to the trigger interval. |
| flowlibs_StakeholderEmails | String | stakeholders@example.com | Semicolon-separated stakeholder recipients. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams group/team ID of the project channel. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel ID of the project channel. |
| flowlibs_MilestoneEmailSubjectPrefix | String | Milestone Reached | Subject-line prefix for the stakeholder email. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Asana | shared_asana | ListTasks AddComment |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
| Microsoft Teams | shared_teams | PostMessageToConversation |
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.
- Trigger cadence
- Adjust the Recurrence frequency and set flowlibs_MilestoneLookbackHours to match (e.g. hourly poll with a 1-hour window for near-real-time comms).
- Milestone definition
- Change flowlibs_MilestoneMarker to whatever naming convention the team uses, or swap the filter to read an Asana custom field / tag if you add an HTTP enrichment step.
- Add a status page
- Insert a SharePoint UpdateItem (or Word/PDF generation) in the loop to update a project status page, restoring the original idea's SharePoint step.
- Audience tiering
- Send an exec summary email and a detailed PM email by splitting Email_Stakeholders into two actions with different recipient env vars.
- What's next / unblocks
- Enrich the email body by reading dependent tasks via the Asana REST API and listing what the milestone unblocks.
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.01Recency cutoff
Computes the lookback cutoff timestamp.
EXPR.02Milestone filter (Query where)
Keeps milestone-marked tasks completed inside the window.
EXPR.03Comment text (body/data/text)
Confirmation comment posted back onto the milestone task.
EXPR.04Roll-up gate (If)
Only post the Teams roll-up when at least one milestone completed.
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.