Trello Dev Card to Azure DevOps Work Item
When a Trello card is labeled for engineering, the flow creates a linked Azure DevOps work item with the card detail, syncs state both ways, and notifies the dev channel in Teams. Lets non-developers triage in Trello while engineers work in Azure DevOps.
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 solution bridges a Trello board with Azure DevOps, with Microsoft Teams alerts and a Dataverse cross-reference table as the system of record. When a Trello card is flagged for engineering, the producer flow creates a linked Azure DevOps work item, comments the work-item link back onto the card, logs the link in Dataverse, and alerts the dev channel in Teams. A second flow mirrors Azure DevOps state changes back onto the Trello card by moving it between lists.
Why it matters: stakeholders triage in Trello; engineers work in the Azure DevOps backlog. A loop-guarded two-way sync keeps both honest without duplicate data entry.
Built as two scheduled-poll flows plus one Dataverse table; both ship Off. The Azure DevOps connector has no dedicated work-item operation, so the connector's own HttpRequest action is used (json-patch create + REST get).
Use Case
A product team triages incoming work in Trello but development happens in Azure DevOps. They want engineering-flagged cards reflected as work items automatically, with status kept in step between the two tools and the dev channel notified when new work lands.
Flow Architecture
Producer: Poll Trello Every 15 Minutes
RecurrenceScheduled poll (replaces a Trello webhook) for the producer flow.
Initialize Correlation Id & Config
Initialize variable (x10)Mints a guid() correlation id and binds board, dev label, ADO org/project, work-item type, Teams group/channel, link table, and the new-item counter.
Get Board Cards
Trello - ListCardsReads all cards on the board.
Filter Dev Cards
Filter arrayKeeps open cards carrying the engineering label.
For Each Dev Card
Apply to each (concurrency 1)Dedup-checks Dataverse for an existing link; for new cards composes an ADO JSON-Patch, creates the work item (Azure DevOps HttpRequest), comments the work-item URL back on the card, writes the link row, and notifies Teams.
Sync-back: Poll ADO Every 15 Minutes
RecurrenceScheduled poll for the sync-back flow.
List Link Rows
Dataverse - ListRecordsReads every card-to-work-item link row.
For Each Link
Apply to each (concurrency 1)Gets the live ADO work item, compares its state to the stored state (loop guard), and only when changed moves the Trello card to the mapped list (UpdateCard_V2) and writes the new state + timestamp back to the link row.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_TrelloBoardId | String | REPLACE_WITH_TRELLO_BOARD_ID | Trello board to watch. |
| flowlibs_DevLabelId | String | REPLACE_WITH_TRELLO_LABEL_ID | Trello label id that flags a card for engineering. |
| flowlibs_AdoOrganization | String | your-org | Azure DevOps organization name (connector account). |
| flowlibs_AdoProject | String | FlowLibs | Azure DevOps project. |
| flowlibs_AdoWorkItemType | String | Task | Work item type to create (Task / Bug / User Story). |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team id for the dev-channel alert. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for the dev-channel alert. |
| flowlibs_TrelloAdoLinkTable | String | flowlibs_trelloadolinks | Dataverse entity set name of the link table. |
| flowlibs_AdoStateToListMap | String | {"New":"REPLACE_TODO_LIST_ID","Active":"REPLACE_DOING_LIST_ID","Resolved":"REPLACE_REVIEW_LIST_ID","Closed":"REPLACE_DONE_LIST_ID"} | Maps ADO state to Trello list id. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Trello | shared_trello | ListCards AddCommentToCard UpdateCard_V2 |
| Azure DevOps | shared_visualstudioteamservices | HttpRequest |
| Microsoft Dataverse | shared_commondataserviceforapps | 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.
- Cadence
- Both flows poll every 15 minutes; adjust the Recurrence for tighter or looser sync.
- Work item type & fields
- Change flowlibs_AdoWorkItemType, or extend Compose Work Item Patch to set Area Path, Iteration, Assigned To, or Tags from card data.
- State mapping
- Edit flowlibs_AdoStateToListMap to match your board's list ids and your team's ADO states.
- Dedup
- Handled by the Lookup Existing Link Dataverse check; no duplicate work items are created for a card that already has a link row.
- Two-way comment sync
- Extend the sync-back with an ADO comment read and a Trello AddCommentToCard to mirror engineering comments back to triagers.
- Label resolution
- flowlibs_DevLabelId expects the Trello label id (not name); read it from the board JSON or a card's idLabels.
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.01Dev gate (filter)
Keeps open cards carrying the engineering label.
EXPR.02Dedup guard
True when no link row exists yet for the card.
EXPR.03ADO create URI
POST target for the JSON-Patch work-item create (Content-Type application/json-patch+json).
EXPR.04Loop guard (sync-back)
Acts only when live ADO state differs from the stored state.
EXPR.05State to list map
Resolves the target Trello list id from the ADO state.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.