
Picture this: your team uses Microsoft Teams as its communication hub, but half the important information that should be flowing through it isn't. A new client submits a project request through your web form — and it sits in someone's inbox for two days before anyone notices. A budget approval needs three signatures, but it's moving through email threads where it gets buried under a dozen unrelated replies. A new row gets added to your shared Excel tracker every time a sale closes, but nobody on the channel knows it happened until the weekly meeting.
These aren't exotic edge cases. They're the daily friction that slows teams down and causes things to fall through the cracks. Microsoft Teams is already where your people are — what's missing is the connective tissue that pushes the right information into Teams at the right moment, without requiring anyone to manually copy, paste, or remember to check another system.
That's exactly what you're going to build in this lesson. By the time you finish, you'll understand how Power Automate — Microsoft's no-code automation platform — connects to Teams to deliver notifications, route approval requests, and post formatted messages to channels automatically. You'll build three practical flows that you can adapt immediately for your own work.
What you'll learn:
You'll need:
Before you touch the interface, you need a mental model of how this all fits together. Power Automate works by building flows — automated sequences that follow a simple pattern: something happens, then do these things as a result.
Every flow has exactly one trigger — the event that wakes the flow up. This might be a new row appearing in an Excel table, a form being submitted, a scheduled time arriving, or even a specific message being posted in Teams itself.
After the trigger fires, you have one or more actions — the steps the flow executes in response. Actions can read data, transform it, write it somewhere, send emails, or in our case, post messages to Microsoft Teams.
Think of a flow like a recipe. The trigger is the moment you decide to cook (you're hungry, it's dinner time, a guest arrives). The actions are the steps in the recipe. Power Automate is the kitchen that runs the recipe for you, automatically, every single time that trigger event occurs.
The Microsoft Teams connector in Power Automate is a collection of pre-built triggers and actions specifically designed to talk to Teams. You don't need to write API code — Microsoft has already handled the connection. You just configure what you want.
Let's build something immediately useful. Imagine your team tracks project requests in a Microsoft List (a SharePoint-based list that many Teams tabs use). Whenever someone adds a new project request, you want a message to automatically appear in your team's Projects channel.
Navigate to flow.microsoft.com in your browser and sign in with your Microsoft 365 account. You'll land on the Power Automate home screen. In the left sidebar, click My flows to see your flow library (which will be empty for now).
Click the + New flow button near the top of the page, then select Automated cloud flow from the dropdown. An automated cloud flow means this flow runs automatically when a trigger event occurs — as opposed to a scheduled flow (which runs on a timer) or an instant flow (which you trigger manually).
A dialog box will appear asking you to name your flow and choose a trigger. Give it a meaningful name like "New Project Request → Teams Notification."
In the search box under "Choose your flow's trigger," type "SharePoint item created." Select the trigger called When an item is created under the SharePoint connector. Click Create.
You'll now see the flow canvas — a visual editor where your trigger appears as the first card. Click on the trigger card to expand it. You need to fill in two fields:
Tip: If you don't have a SharePoint list set up, you can use a different trigger for this exercise — try "When a new response is submitted" under the Microsoft Forms connector, or even "Recurrence" (a timer) so you can test the Teams posting action without needing specific data.
Below the trigger card, click the + New step button. In the action search box, type "Teams" and look through the results. Select Post a message in a chat or channel under the Microsoft Teams connector.
This action card has several fields to configure:
In the Message field, you're not just typing static text. You can insert dynamic content — actual data values pulled from your trigger. Click inside the Message field, and a panel called "Add dynamic content" should appear on the right side of the screen (or you can click the lightning bolt icon if it doesn't appear automatically).
You'll see a list of fields from your SharePoint list — things like Title, Created, Author Name, and any custom columns in your list. Compose a message like this by clicking the dynamic content fields to insert them between your typed text:
📋 New project request submitted!
Project: [Title]
Submitted by: [Created By - DisplayName]
Date: [Created]
Please review this request in the Projects list.
Replace the bracketed items by clicking the corresponding dynamic content tokens. The finished message field will show a mix of static text and colored token chips representing the dynamic values.
Click Save in the top right corner. Once saved, click Test — select "Manually" and then go add a new item to your SharePoint list. Return to Power Automate. After a few moments, you should see the test complete successfully with a green checkmark. Open Teams and check your Projects channel — your automated message should be there.
If the test fails, Power Automate shows you exactly which step failed and what error occurred, which makes troubleshooting much more straightforward than debugging traditional code.
Now let's build something more sophisticated: an approval workflow. In many teams, certain decisions require explicit sign-off from a manager or team lead. A common real-world example is expense reports — someone submits an expense, a manager needs to approve or reject it, and the submitter needs to know the outcome.
Power Automate has a built-in Approvals connector that integrates natively with Teams. When an approval request is sent, it appears directly in the approver's Teams activity feed as an actionable card they can approve or reject without leaving Teams.
From My flows, create a new automated cloud flow. Name it "Expense Request Approval Flow." For the trigger, search for "Microsoft Forms" and select When a new response is submitted. Connect it to a form you've created (or create a quick one in forms.microsoft.com with fields like Employee Name, Expense Amount, and Description).
Triggers from Forms only give you the response ID, not the actual answers. You need to add an action to fetch the full response. Click + New step, search for "Get response details" under Microsoft Forms, and select it. Set the Form ID to your form, and set the Response ID to the dynamic content token from the trigger called "Response Id."
Click + New step and search for "Start and wait for an approval." This is a special action type — it sends the approval request and then pauses the flow until someone responds. The flow won't move to the next step until the approver acts.
Configure the approval action:
Employee: [Responders' Email]
Amount: [Expense Amount field from form]
Description: [Description field from form]
Please approve or reject this expense request.
After the approval action, click + New step and search for "Condition." A condition action creates a fork in your flow — like an if/else statement. In the condition, set the left value to the dynamic content token Outcome from your approval action, set the operator to "is equal to," and type "Approve" in the right field.
Note: The Outcome value is literally the string "Approve" or "Reject" — this is documented in Microsoft's connector reference. If you type it wrong (like "Approved"), the condition will never match.
Now you have two branches: If yes and If no.
In the "If yes" branch, add a Teams action: Post a message in a chat or channel. Address it to your team's Finance channel (or wherever appropriate) with a message like:
✅ Expense approved!
[Employee name]'s expense of $[Amount] has been approved by [Approver name].
You can also add an action to email the employee the good news.
In the "If no" branch, do the same but with rejection language:
❌ Expense rejected.
[Employee name]'s expense of $[Amount] was not approved. Reason: [Comments from approver]
The Comments dynamic content token captures any notes the approver typed when making their decision.
Save the flow. Submit a test response through your form. Within a minute or two, the designated approver should see an approval card appear in their Teams activity feed. They click Approve or Reject, optionally add a comment, and submit. The flow resumes and posts the appropriate outcome message to the Teams channel.
Standard text messages work fine, but Teams supports Adaptive Cards — JSON-formatted message templates that can display structured data with headers, columns, images, and even interactive buttons. When you want your automated messages to look professional and be easy to scan, adaptive cards are worth the extra setup.
Power Automate's Teams connector includes an action called Post an adaptive card to a Teams channel. Instead of typing a message, you provide a JSON card definition.
Here's a simple adaptive card JSON you can paste directly into the action:
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "New Sales Opportunity"
},
{
"type": "FactSet",
"facts": [
{
"title": "Client:",
"value": "Contoso Manufacturing"
},
{
"title": "Deal Value:",
"value": "$42,000"
},
{
"title": "Owner:",
"value": "Sarah Chen"
},
{
"title": "Close Date:",
"value": "2024-03-31"
}
]
},
{
"type": "TextBlock",
"text": "Review the opportunity in Salesforce before the weekly pipeline call.",
"wrap": true
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4"
}
In a real flow, you'd replace the hardcoded values with dynamic content tokens. The challenge is that dynamic content tokens need to be inserted inside the JSON string values, which requires clicking into the text field carefully so you insert the token exactly where the text value should be.
Tip: Use the Adaptive Card Designer at adaptivecards.io/designer to build and preview your card visually before copying the JSON into Power Automate. It's a free browser tool that gives you instant visual feedback and validates your JSON structure.
Now it's your turn to build something from scratch. Here's a realistic scenario:
Scenario: Your team receives IT support tickets through a Microsoft Form. Whenever a new ticket is submitted, you want to:
Your task:
Start by creating a Microsoft Form with these fields:
Then build a flow with:
Try to complete this without looking back at the previous steps. When you hit a snag — and you likely will — read the error message carefully before checking back.
The flow runs but nothing appears in Teams. This almost always means the team or channel was configured incorrectly, or the account running the flow doesn't have access to that Teams channel. Check that the account you connected Power Automate with (shown in the Teams action's connection settings) is actually a member of the destination team.
The Condition never matches the Approval Outcome. Double-check the exact string you're comparing. Power Automate's Approvals connector returns "Approve" (not "Approved") and "Reject" (not "Rejected"). These are case-sensitive in some versions of the connector.
Dynamic content tokens show their names instead of real data in the posted message. This usually means the action that produces that data (like "Get response details") ran but didn't return the field you expected. Open the flow run history, click on the failed or suspicious run, and expand each step to see the actual inputs and outputs. This tells you exactly what data was (or wasn't) passed between steps.
The flow is slow — approval messages take 10+ minutes to appear. The trigger "When a new response is submitted" in Microsoft Forms doesn't fire instantly — Microsoft polls for new responses every few minutes. This is normal behavior for Forms-triggered flows. If real-time speed matters, consider a SharePoint list as the data source instead, which can trigger within 1-2 minutes.
"Flow bot" messages don't appear in the channel. Verify that the Teams connector's "Post as" setting is "Flow bot" AND that the Power Automate app is installed in the destination team. In Teams, go to the team settings and check the Apps tab. If Power Automate (or Flow) isn't installed, add it — the flow bot can't post without it.
You're hitting flow run limits. Free and basic Power Automate accounts have limits on how many times flows can run per month and how frequently triggers can check for new events. If you're building flows that might run hundreds of times daily, review the Microsoft Power Automate licensing documentation to make sure your plan fits your needs.
You've covered a lot of ground. You now understand how Power Automate flows are structured around triggers and actions, how to connect them to Microsoft Teams, and how to build three increasingly complex automation patterns: a simple channel notification, a full approval workflow with branching logic, and formatted adaptive card messages.
The pattern you've learned applies far beyond these specific examples. Any time information moves from one system — a form, a spreadsheet, a SharePoint list, a third-party app — you can intercept that movement with Power Automate and push a notification, kick off an approval, or post a summary into Teams. The mechanics are always the same: pick your trigger, fetch any additional data you need, transform or evaluate that data with conditions, and take action.
To continue building on this foundation:
Automation compounds. The time you invest in building one reliable flow pays dividends every day it runs without you having to think about it. Start with one real problem your team faces right now, and build from there.
Learning Path: Flow Automation Basics