monday.com Board Item Status Automation
When a monday.com item changes status (e.g. to Done or Stuck), the flow updates a mirrored Dataverse record, notifies the item owner in Teams, and emails a weekly per-board rollup of completed vs stuck items. Handles unassigned 'Stuck' items by escalating to the board lead. Bridges monday.com work management into Microsoft 365.
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
monday.com Board Item Status Automation bridges monday.com work management into Microsoft 365. It is a two-flow solution backed by a Dataverse mirror table: - A status-sync flow polls a monday.com board every 15 minutes, detects status changes, mirrors each change into Dataverse, notifies the item owner in Teams, and escalates *Stuck-without-owner* items to the board lead by email. - A weekly rollup flow emails a per-board *completed vs. stuck* digest every Monday morning. Why it matters: Teams that execute on monday.com still need their data and alerts inside the Microsoft estate. This keeps a governed Dataverse mirror for cross-tool reporting and surfaces status changes in Teams/email automatically — so nothing stalls unowned.
Use Case
A delivery team runs execution on monday.com but reports and collaborates in Microsoft 365. They want status changes surfaced in Teams, stuck-without-owner items escalated, and a weekly progress digest — automatically, without anyone watching the board.
Flow Architecture
Recurrence Every 15 Minutes (Status Sync)
RecurrencePoll the monday.com board on a 15-minute schedule.
Initialize correlation id + config
Initialize VariableMint @guid() correlation id plus env-var-backed config: board id, status/owner column ids, MCP tool name, stuck label, board-lead email, Teams group/channel, and the GraphQL query string.
Open MCP session + query board
monday.com — InvokeMondayMCP (initialize + tools/call) + ComposeJSON-RPC initialize to open the MCP session, read Mcp-Session-Id, run the all_monday_api GraphQL board query, and parse the items array from the result envelope.
Apply to each Item — detect change
Foreach (concurrency 1) + Compose + Microsoft Dataverse — ListRecords + ConditionRead aliased status/owner text, list the existing mirror by flowlibs_itemid, and act only when the status is new or changed.
Upsert mirror + notify
Microsoft Dataverse — CreateRecord/UpdateRecord + Microsoft Teams — PostMessageToConversationUpsert the Dataverse mirror row (whole-object bind) and post a status card to the item owner in Teams.
Escalate Stuck unassigned
Condition + Office 365 Outlook — SendEmailV2 (High)If the item is Stuck and has no owner, email the board lead at high importance.
Recurrence Weekly Monday 8am (Rollup)
RecurrenceWeekly digest schedule (Mon 08:00).
Read live board + split items
monday.com — InvokeMondayMCP + Compose + Filter arrayRead the live board via the same MCP path, then split items by the Done / Stuck status label.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_MondayBoardId | String | 1234567890 | Board to monitor (reused). |
| flowlibs_MondayMcpToolName | String | all_monday_api | monday MCP tool name (reused). |
| flowlibs_MondayStatusColumnId | String | status | Status column id (reused). |
| flowlibs_MondayOwnerColumnId | String | person | Owner/person column id (reused). |
| flowlibs_StuckStatusLabel | String | Stuck | Label meaning blocked/stuck. |
| flowlibs_DoneStatusLabel | String | Done | Label meaning completed. |
| flowlibs_BoardLeadEmail | String | alerts@yourcompany.com | Stuck-no-owner escalation recipient. |
| flowlibs_RollupRecipientEmail | String | you@yourcompany.com | Weekly digest recipient. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team (group) id (reused). |
| flowlibs_TeamsChannelId | String |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| monday.com | shared_mondaycom | InvokeMondayMCP |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Office 365 Outlook | shared_office365 |
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.
- Cross-board
- Loop multiple board IDs for a portfolio-wide rollup (store a comma list and split it).
- Status routing
- Extend Condition Status Changed into a Switch on a status->action map to drive different actions per status (e.g. invoice on Done, escalate on Stuck).
- SLA timers
- Alert when an item sits in a status (e.g. In Progress) beyond a configurable age.
- Two-way sync
- Add a monday change_simple_column_value write-back so Dataverse/Power Apps updates flow back to the board.
- Poll cadence
- Tune the 15-minute recurrence to balance freshness vs. API volume.
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.01GraphQL board read
Build the GraphQL query for board items with aliased status/owner columns.
EXPR.02MCP session id
Read the MCP session id from the initialize response header.
EXPR.03Parse board items
Unwrap the items array from the MCP result envelope.
EXPR.04Change gate
Act only when the status is new (__NONE__) or has changed.
EXPR.05Stuck-unassigned gate
Escalate only Stuck items that have no owner.
EXPR.06Rollup counts
Done vs stuck counts for the weekly digest.
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.