Hi Hyde,
You need a single flow that loops across all teams and channels dynamically, rather than hardcoding each one.
The approach uses the Microsoft Graph API via HTTP actions in Power Automate.
Step 1: Get all teams
Add an HTTP action with:
GET https://graph.microsoft.com/v1.0/me/joinedTeams
Or, if you need all teams in the tenant (not just yours), use:
GET https://graph.microsoft.com/v1.0/groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')
This requires a service principal or admin-consented app registration with Team.ReadBasic.All permission.
Step 2: Loop through each team
Apply an "Apply to each" loop over the teams array from the response body. Parse the JSON first using the value array from the Graph response.
Step 3: Get channels for each team
Inside that loop, add another HTTP action:
GET https://graph.microsoft.com/v1.0/teams/{teamId}/channels
Use the id field from the current team item as {teamId}.
Step 4: Inner loop for channels
Add a second "Apply to each" inside the first, iterating over the channels. Then place your action inside this inner loop.
Authentication note
Use an Azure AD app registration with client credentials. In Power Automate, configure the HTTP action with Active Directory OAuth. This avoids delegated permission issues at scale.
Performance note
Several hundred teams with multiple channels each will generate a large number of iterations. Graph API throttles at roughly 10,000 requests per 10 minutes per app. Add a "Delay" action between iterations if you hit 429 errors, or consider batching with $batch endpoint:
POST https://graph.microsoft.com/v1.0/$batch
Thank you!
Proud to be a Super User!
📩 Need more help?
✔️ Don’t forget to Accept as Solution if this guidance worked for you.
💛 Your Like motivates me to keep helping