Smartsheet Approval Workflow with Status Write-Back
When a Smartsheet row is marked Submitted for Approval, the flow starts a Teams/Outlook approval, then writes the decision, approver, and timestamp back to the row, moves it to the next status, and notifies the requester. Adds a governed approval gate on top of Smartsheet rows.
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 a governed approval gate on top of Smartsheet rows. On a schedule it scans a sheet for rows marked "Submitted for Approval", starts a Teams/Outlook approval for each, writes the decision, approver, and timestamp back onto the row as a Smartsheet discussion comment, moves the row to its next status via the Smartsheet REST API, and notifies the team in Microsoft Teams.
Why it matters: Smartsheet's built-in approvals are limited. Power Automate Approvals give auditable, routable decisions with full write-back to the sheet — without leaving the Smartsheet system of record.
Connector-first note: The Smartsheet Power Automate connector has no update-row operation (it exposes GetSheetData, InsertRow, discussion/comment ops, and read/folder ops only). So the build is connector-first everywhere a connector op exists, and uses a single documented HTTP fallback for the one thing the connector cannot do — change a cell value: read rows via GetSheetData; write the decision via AddDiscussionToRow; move the row to its next status via built-in HTTP PUT to the Smartsheet REST API; notify via Teams PostMessageToConversation. The HTTP fallback's credentials and sheet id are bound to flowlibs_ environment variables — no inline secrets.
Use Case
Rows representing requests (purchases, content, change requests, onboarding tasks) need a documented sign-off before proceeding. Operations and project managers get an approval in Teams/Outlook, and the decision is recorded back on the Smartsheet row so the sheet stays the single source of truth.
Flow Architecture
Recurrence_Scan_Smartsheet
Recurrence (Hour/1)Polls the sheet on a schedule (Smartsheet has no row-status-change trigger).
Init_var x6
Initialize VariableConfigurable labels: submitted/approved/rejected status values plus the Status / Task / Requester column titles.
Get_Submitted_Rows
Smartsheet — GetSheetDataReads all rows; output keyed by column title.
Filter_Rows_For_Approval
Query (Filter array)Keeps rows where Status = Submitted for Approval.
Apply_to_each_Pending_Row
ForeachIterates pending rows.
Start_Smartsheet_Row_Approval
Approvals — StartAndWaitForAnApprovalTeams/Outlook approval (Basic); waits for outcome.
Compose_Decision_Status
ComposeMaps outcome to the Approved / Rejected status value.
Add_Decision_Comment_To_Row
Smartsheet — AddDiscussionToRowWrites decision + approver + timestamp + approver comments back onto the row.
Write_Status_Back_To_Smartsheet
HTTP (PUT)Updates the Status cell to the new value (connector has no update-row op).
Notify_Requester_In_Teams
Microsoft Teams — PostMessageToConversationPosts the decision + new status to the team channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_SmartsheetSheetId | String | <configure> | Sheet id used by GetSheetData, AddDiscussionToRow, and the HTTP write-back URL. |
| flowlibs_SmartsheetStatusColumnId | String | <configure> | Numeric column id of the Status column (Smartsheet REST updates cells by columnId, not title). |
| flowlibs_SmartsheetApiToken | String | <configure> | Smartsheet API access token — Bearer credential for the HTTP write-back. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team (group) id for the notification. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for the notification. |
| flowlibs_ApproverEmail | String | approver@yourcompany.com | Approver's email (Approvals assignedTo). |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Smartsheet | shared_smartsheet | GetSheetData AddDiscussionToRow |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| HTTP | http | PUT /2.0/sheets/{id}/rows |
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
- To react faster, lower the Recurrence interval, or swap to the Smartsheet OnUpdatedSheet/OnRowCreated trigger if your scenario fits an event model.
- Status values & columns
- Change the Init_var labels to match your sheet's status wording and column titles.
- Multi-stage approvals
- Add a second approval (e.g. by amount) before the write-back.
- Reminders
- Add Approvals reminder logic for pending approvers.
- Reject loop
- On Reject, send the row back to the requester instead of marking Rejected.
- Richer write-back
- Add more cells (Decision/Approver/Date columns) to the HTTP body using additional column-id env vars.
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.01Approval outcome
Reads the approval result.
EXPR.02Decision to status
Maps the outcome to the new status value.
EXPR.03Read a cell by column title
Dynamic cell read by configurable column title.
EXPR.04Row id for write-back
Identifies the row for the HTTP write-back.
EXPR.05HTTP body (status cell)
Smartsheet REST PUT body to update the Status cell.
EXPR.06Approver comment
Captures the approver's comment.
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.