Asana Approval Section Workflow
When a task is moved to an 'Awaiting Approval' section in Asana, the flow launches a Power Automate approval to the project owner, writes the decision as a task comment, moves the task to Approved or Changes-Requested, and notifies the assignee in Teams. Adds governed approvals to Asana boards.
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 adds governed approvals to Asana boards. On an hourly schedule it scans the approval project for tasks sitting in an "Awaiting Approval" section, routes a Power Automate approval to the project owner, writes the recorded decision back onto the task as a comment, moves the task to the Approved or Changes Requested section, and notifies the team in Microsoft Teams.
Why it matters: Asana's native approval task type lacks the routing, audit trail, and Microsoft 365 integration of the Power Automate Approvals engine. This wraps Asana work in a tracked, auditable approval that lives where the rest of the business runs.
Idempotency by design: Because a processed task is moved out of the Awaiting Approval section into Approved or Changes Requested, the next poll never re-processes it — no state table is required.
Use Case
Teams that run deliverables in Asana want a real approval gate tied to a board section, with the decision recorded on the task and surfaced to the assignee in Teams. The project owner approves from Outlook, Teams, or the Approvals center; the task is auto-routed; everyone sees the outcome.
Flow Architecture
Scan Asana Project Hourly
Recurrence (Hour/1)Asana has no section-change trigger, so the flow polls hourly.
Initialize variables
Initialize VariableBind every env var (API base/token, workspace, project, the three section GIDs, owner email, Teams group/channel) to a typed variable.
List Project Tasks
Asana — ListTasksPrimary connector data fetch — lists tasks in the approval project (workspace + project).
For Each Task
Foreach (Sequential)Processes each task in order so approvals are handled one at a time.
Get Task Section Memberships
HTTP — GET /tasks/{id} (secure)Reads the task's section memberships from the Asana REST API (the connector exposes no section data).
Check If Awaiting Approval
Condition (If)Proceeds only for open tasks whose memberships include the Awaiting Approval section GID.
Start Owner Approval
Approvals — StartAndWaitForAnApprovalRoutes a Basic approval to the project owner and waits for the decision.
Compose Approval Outcome / Comments
ComposeCapture the outcome (Approve/Reject) and the approver's comments.
Add Decision Comment To Task
Asana — AddCommentWrites the decision + reviewer comments back onto the task (audit trail).
Route Task By Outcome
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AsanaApiBaseUrl | String | https://app.asana.com/api/1.0 | Asana REST base URL for section list/move. |
| flowlibs_AsanaApiToken | String | REPLACE_WITH_ASANA_PAT | Asana Personal Access Token (bearer credential, Key Vault-backed). |
| flowlibs_AsanaWorkspaceId | String | <configure> | Asana workspace the project belongs to (reused). |
| flowlibs_AsanaApprovalProjectId | String | <configure> | Project governed by the approval workflow. |
| flowlibs_AsanaAwaitingApprovalSectionId | String | <configure> | Section that signals a task is awaiting approval. |
| flowlibs_AsanaApprovedSectionId | String | <configure> | Destination section for approved tasks. |
| flowlibs_AsanaChangesRequestedSectionId | String | <configure> | Destination section for rejected / changes-requested tasks. |
| flowlibs_AsanaProjectOwnerEmail | String | owner@yourcompany.com | Project owner who receives the approval. |
| flowlibs_TeamsGroupId | String | <your-team-id> |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Asana | shared_asana | ListTasks AddComment |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| HTTP | http | GET /tasks/{id} (section memberships) POST /sections/{gid}/addTask |
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.
- Multi-stage approval
- Chain a second StartAndWaitForAnApproval for high-value tasks before moving to Approved.
- Approver routing
- Replace the single owner email with a lookup (Dataverse map, Asana custom field, or project-owner API call) to route per project.
- SLA escalation
- Add a Do Until / age check to nudge or escalate approvals that sit unanswered.
- Interim In Review section
- Move tasks to a guard section while the approval is pending to prevent re-submission inside the same hour.
- Tighter polling
- Lower the recurrence interval (e.g. 15 min) for faster turnaround; Asana rate limits are generous for a single project.
- Richer Teams card
- Swap the HTML message for an Adaptive Card with the task link and a Reopen action.
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.01Awaiting-section gate
True for open tasks in the Awaiting Approval section.
EXPR.02Approval outcome
Approve / Reject.
EXPR.03Approver comments
Reviewer comments captured for the audit trail.
EXPR.04Move task to section (HTTP body)
POST {base}/sections/{sectionGid}/addTask body.
EXPR.05Route branch
Routes to Approved when the outcome is Approve.
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.