monday.com Item to Dataverse Two-Way Sync
Bidirectionally syncs a monday.com board with a Dataverse table: new/changed items upsert to Dataverse and Dataverse changes write back to the board, keyed on a stored ID map with a source flag to prevent loops. Lets Power Platform apps and reporting work off monday.com data and vice versa.
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
A loop-safe two-way sync between a monday.com board and a Dataverse mirror table, built as two cloud flows in one solution (CF-652). New/changed monday items are upserted into Dataverse; app-side Dataverse changes are written back to the monday item. A stored ID map (flowlibs_mondayitemid) plus a source flag prevent infinite echo loops.
Why it matters: monday.com is the team's workspace; Dataverse powers Power Platform apps and reporting. A loop-safe bridge gives each system an authoritative, continuously reconciled copy without duplicate data entry.
Build note: The monday.com connector in this org (shared_mondaycom) is MCP-invoke only: it has a single operation InvokeMondayMCP and exposes the monday.com GraphQL API through a JSON-RPC gateway. It has no trigger, no GetItem, and no ChangeColumnValue action. So monday->Dataverse is a scheduled poll, and Dataverse->monday uses the Dataverse webhook trigger with a GraphQL change_multiple_column_values mutation for the write-back.
Use Case
A team manages work on a monday.com board but also wants those items available and updatable from Power Platform apps and Power BI, with status kept consistent in both directions. Edits made in either system flow to the other, with last-writer-wins conflict handling and no sync loops.
Flow Architecture
Recurrence (Flow A)
Schedule (every 1 hour)Polls monday.com for item changes.
Init config variables (Flow A)
Initialize VariableLoad varToolName / varBoardId / varStatusColId / varSyncTable / varCorrelationId / varSyncedCount.
Build GraphQL Query (Flow A)
ComposeGraphQL to read up to 100 board items (id, name, status column).
Init Session (Flow A)
monday.com InvokeMondayMCP (initialize)Opens MCP session, returns Mcp-Session-Id.
Query Board (Flow A)
monday.com InvokeMondayMCP (tools/call)Runs the GraphQL query through the MCP gateway.
Parse Items (Flow A)
ComposeExtracts the items array from the MCP response.
Apply to each (Flow A)
ForeachPer board item: look up mirror row by flowlibs_mondayitemid, then Update or Create the row with source=monday.
Post Sync Summary To Teams (Flow A)
Teams PostMessageToConversationPosts count + correlation id.
When Mirror Row Changed (Flow B)
Dataverse SubscribeWebhookTrigger (message 4, filter flowlibs_status,flowlibs_name)Fires on app-side row changes.
Init config variables (Flow B)
Initialize VariableLoad varToolName / varBoardId / varStatusColId / varCorrelationId.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_MondayBoardId | String | 1234567890 | Source/target monday board id. Reused. |
| flowlibs_MondayMcpToolName | String | all_monday_api | monday MCP tool exposing the GraphQL gateway. Reused. |
| flowlibs_MondayStatusColumnId | String | status | monday status column id mirrored both ways. Reused. |
| flowlibs_MondayGroupId | String | topics | monday group id (for item creation scenarios). Reused. |
| flowlibs_MondaySyncTableName | String | flowlibs_mondaysyncitems | Dataverse entity-set name of the mirror table. New. |
| flowlibs_MondayColumnMap | String | {"status":"flowlibs_status","name":"flowlibs_name"} | Column to field map for customization. New. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team id for notifications. Reused. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for notifications. Reused. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| monday.com | shared_mondaycom | InvokeMondayMCP |
| Microsoft Dataverse | shared_commondataserviceforapps | SubscribeWebhookTrigger ListRecords CreateRecord UpdateRecord |
| 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.
- Conflict policy
- Current behavior is last-writer-wins. To implement field ownership, compare flowlibs_lastsynced against the trigger's modifiedon before writing.
- More columns
- Extend the GraphQL query (Flow A) and the change_multiple_column_values payload (Flow B), add matching columns to the mirror table, and update flowlibs_MondayColumnMap.
- Mirror updates/comments
- Add a monday create_update mutation in Flow B to mirror Dataverse notes as monday item updates.
- Backfill
- Run Flow A once on demand to seed existing board items before enabling Flow B.
- Trigger scope
- Narrow Flow B's filteringattributes to only the columns an app should push back, to reduce trigger noise.
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.01Loop guard (Flow B)
Proceeds only on app-side changes that carry a monday item id.
EXPR.02Parse monday items (Flow A)
Extracts the items array from the MCP query response.
EXPR.03Status text per item (Flow A)
Reads the status column text for the current item.
EXPR.04Write-back mutation (Flow B)
Write-back mutation; column_values double-quotes are backslash-escaped inside the GraphQL string.
EXPR.05MCP session reuse
Captures the session id from initialize and passes it on tools/call.
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.