AI & automation

Turn Meeting Transcripts into Action Items with AI: A Step-by-Step Workflow

Build a Power Automate flow that fetches a Teams meeting transcript, asks Claude to extract action items, and sends them to the organiser for review before anything is assigned.

By EpiFive Editorial TeamReviewed/updated 9 min readHow we check articles
On this page

You can turn a Microsoft Teams meeting transcript into a reviewable list of action items with a Power Automate flow that fetches the transcript, sends it to an AI model such as Claude through the Messages API, and emails the proposed list to the meeting organiser. The organiser confirms or edits it before anything is assigned. This guide builds that flow step by step, with the permissions, tenant settings and limits that most often block it.

It is written for Microsoft 365 administrators and automation builders who already have Teams transcription turned on and want follow-ups to stop depending on someone taking notes. You will finish with a working flow, a prompt that returns structured output, and a review step that keeps a person responsible for the result. Details were checked against Microsoft Learn and Anthropic documentation on 28 October 2026.

How the workflow fits together

Teams meeting ends -> transcript stored
        |
Power Automate: get meeting ID -> list transcripts -> get transcript content
        |
HTTP action: Claude Messages API -> JSON list of action items
        |
Email or Teams message to organiser for review -> tasks created only after approval

The flow has four stages: obtain the transcript, ask the model, validate the result, and route it for human approval. The sections below take each in turn.

Prerequisites

  • Transcription must be on. In the Teams admin center, go to Meetings > Meeting policies, select the policy, and make sure Transcription is On (it is on by default for new policies). Transcription is both a per-organiser and per-user setting, and the organiser and the person who starts it need it enabled. In PowerShell the parameter is -AllowTranscription on Set-CsTeamsMeetingPolicy.
  • Someone must start transcription in the meeting. If recording is on but transcription is off, no transcript file is stored.
  • Power Automate access to the Microsoft Teams connector. The connector lists actions for meeting transcripts, including List meeting transcripts (input: Meeting ID) and Get meeting transcript content (inputs: Meeting ID and Transcript ID, returns a string).
  • An Anthropic API key stored securely, for example in an environment variable or a key vault, not typed into a flow step as plain text. Using the HTTP action may require a Power Automate licence that includes premium connectors; check your plan.
  • Approval from your data protection owner. Transcripts often include personal or commercial information. Confirm your organisation permits sending them to the AI provider, and read the provider's data handling terms.

Tenant settings that affect transcript access through Graph

The Microsoft Graph documentation for callTranscript describes two tenant administrator settings, configured in the Teams admin center or with Set-CsTeamsMeetingConfiguration:

  • Graph API access to transcripts. When disabled, all transcript requests return 403 Forbidden with the GraphAccessToTranscriptsDisabled inner-error code.
  • Speaker attribution. When disabled, you can retrieve transcript content only without speaker information. Requesting text/vtt then returns 403 Forbidden with SpeakerAttributionNotAllowed; request the application/vnd.microsoft.graph.transcript+text format instead, which you must select with the Accept header (it is not supported through the $format query parameter).

The documentation states these controls take effect from the end of July 2026. If your flow worked before and now returns 403, check them first. For the permissions model when you call Graph directly, delegated access uses OnlineMeetingTranscript.Read.All, and application access requires OnlineMeetingTranscript.Read.All or OnlineMeetingTranscript.Read.Chat plus, for application permissions, an application access policy created by a tenant administrator. The API works only for meetings that have not expired and does not support meetings created with the create onlineMeeting API that are not linked to a calendar event.

Step 1: Start the flow and get the meeting ID

The Teams connector page lists no trigger for a transcript becoming available, so start with a trigger you control. Two common choices:

  • A manual (instant) flow that asks for the meeting join URL, useful for a first test.
  • A scheduled flow that runs after working hours and processes meetings you identify from calendar events.

Add the Teams action Get an online meeting. It retrieves a meeting by meeting ID, join web URL or join meeting ID, and returns the online meeting you need for the next steps.

Step 2: List and fetch the transcript

  1. Add List meeting transcripts and pass the Meeting ID from step 1. It returns the transcripts for that meeting.
  2. Add Get meeting transcript content with the Meeting ID and the Transcript ID of the transcript you want. If a meeting has several, decide a rule, such as taking the most recent.
  3. Run the flow against a short test meeting and open the run history to confirm the output is a string containing timestamped lines.

When you call Graph directly instead, the transcript content endpoint is under /users/{user-id}/onlineMeetings/{meeting-id}/transcripts/{transcript-id}/content, and the default format text/vtt returns WebVTT with timestamps and <v Speaker> voice tags. Speaker tags help the model assign owners, so keep them where your tenant allows.

Step 3: Build the request to Claude

Add an HTTP action. The Messages API requires the x-api-key header, an anthropic-version header (the documentation examples use 2023-06-01), and a JSON body with model, max_tokens and messages.

Raw transcript text contains quotes and line breaks that break a hand-written JSON body, so build the message object with an expression. First add a Compose action named Message with this expression, where Get_meeting_transcript_content is the name of your step 2 action:

addProperty(json('{"role":"user"}'), 'content', concat('Transcript: ', outputs('Get_meeting_transcript_content')))

Here addProperty adds a property to a JSON object and json() converts a string to an object, both standard workflow expression functions. Then set the HTTP action:

SettingValue
MethodPOST
URIhttps://api.anthropic.com/v1/messages
Headersx-api-key: your key; anthropic-version: 2023-06-01; content-type: application/json

Body:

{
  "model": "claude-sonnet-5-5",
  "max_tokens": 1500,
  "system": "You extract action items from meeting transcripts. Use only what is stated. Return JSON only: {\"items\":[{\"task\":\"\",\"owner\":\"\",\"due\":\"\",\"evidence\":\"\"}]}. Use an empty string when the owner or due date is not stated. Do not guess.",
  "messages": [ @{outputs('Message')} ]
}

Check the model ID in Anthropic's models documentation before you deploy, because model names are retired over time. The evidence field asks for the supporting sentence from the transcript, which makes the reviewer's job faster.

Prompt rules that improve reliability

  • Tell the model to use only what is stated and to leave owner and due date blank otherwise. Invented owners and deadlines are the most damaging failure.
  • Ask for a fixed JSON shape so the flow can parse it with a Parse JSON action.
  • Keep the instructions in the system field and the transcript in the user message.
  • For very long meetings, check the transcript length against the model's context window and the flow limits below before you send it.

Step 4: Parse the result and validate it

The response's content array holds blocks such as {"type": "text", "text": "..."}. Add Parse JSON on the HTTP body, then another Parse JSON on the text of the first content block, using a schema that matches the items structure.

Add a Condition after parsing. If parsing fails or items is empty, send a short message to the organiser saying no action items were found and attach the transcript link instead of failing silently. Use the action's Configure run after setting to catch a failed parse.

Step 5: Send the draft for review

Add Send an email (V2) or a Teams message to the organiser. Format the items as a list and include a clear statement that the list was generated by AI from the transcript and needs checking. Include the evidence text. Only after the organiser replies or approves should another flow, or a later stage of this one, create tasks in Planner, To Do or your ticketing system. A Power Automate Approvals action is a natural fit if you want a recorded approval.

This review step is not optional decoration. Models can omit items, merge two tasks, or assign an action to the wrong person when several people share a name.

Limits to design around

The Power Automate limits page lists these relevant values:

LimitValue
Outbound synchronous request (such as an HTTP action)120 seconds
Message size100 MB (1 GB with chunking where supported)
Run duration30 days; pending steps time out after this

A long transcript sent to a model can take a while to process. If the HTTP action times out at 120 seconds, shorten the input, summarise in sections, or use an asynchronous pattern. The Message Batches API is another option for non-urgent work; see Claude Message Batches API in Python: A Practical Guide for how it works.

Troubleshooting

SymptomLikely cause and fix
No transcript found for the meetingTranscription was not started, the organiser's policy has Transcription off, or the meeting expired. Check the meeting policy and run the Teams transcript diagnostic in the Microsoft 365 admin center.
403 Forbidden with GraphAccessToTranscriptsDisabledThe tenant setting for Graph API access to transcripts is off. A Teams administrator must enable it.
403 Forbidden with SpeakerAttributionNotAllowedSpeaker attribution is disabled. Request application/vnd.microsoft.graph.transcript+text instead of text/vtt.
HTTP action returns 401The API key is missing or wrong in the x-api-key header.
Parse JSON failsThe model returned text around the JSON. Tighten the prompt, or handle the failure branch and send the raw text to the reviewer.
Flow times outThe call exceeded the 120-second outbound request limit. Shorten the input or split the work.

If your organisation has Microsoft 365 Copilot licences, the Teams connector also offers List AI insights and Get AI insight, which return meeting summary notes and action items generated by Teams. That route avoids sending transcripts to an external provider but requires the Copilot licence. For a comparison of transcription sources, see Meeting Transcription Options Compared: Whisper, Teams and Cloud APIs, and for a similar human-in-the-loop flow on email, see Automate Shared Mailbox Triage with Power Automate and AI Prompts.

Checklist

  • Transcription policy on, and the meeting was actually transcribed.
  • Tenant settings for Graph transcript access reviewed.
  • API key stored securely; data protection approval documented.
  • Prompt forbids guessing owners and due dates.
  • Failure branch tells the organiser when parsing fails.
  • Tasks are created only after human approval.

References

Questions people ask

Can Power Automate get a Teams meeting transcript?

Yes. The Microsoft Teams connector includes the actions List meeting transcripts and Get meeting transcript content, which take the online meeting ID and the transcript ID. You can also call the Microsoft Graph callTranscript API directly with an HTTP action and an app registration.

Why does my flow get a 403 error when reading a transcript?

Microsoft Graph returns 403 Forbidden with the GraphAccessToTranscriptsDisabled code when the tenant setting for Graph API access to transcripts is off. It returns SpeakerAttributionNotAllowed if speaker attribution is disabled and you request the text/vtt format. Ask a Teams administrator to review the settings, or request the unattributed format.

Is it safe to send meeting transcripts to an AI service?

Only if your organisation has approved it. Transcripts can contain personal and confidential information, so check your data protection obligations and the AI provider's terms, send only what is needed, and keep a person in the loop to review the output before anyone acts on it.

Can AI assign tasks automatically from a transcript?

It can propose them, but the output can miss items, misattribute owners or invent due dates. A safer pattern is to send the proposed list to the meeting organiser for approval, then create tasks only after they confirm.

Microsoft TeamsPower AutomateClaudeTranscripts
  1. Automate Overdue Invoice Reminder Emails with Power Automate

    Build a scheduled Power Automate flow that reads an Excel table of invoices, finds overdue unpaid ones, emails reminders through Outlook and logs each reminder to avoid duplicates.

    AI & automation12 min read
  2. ChatGPT Business vs Claude Team vs Gemini for Workspace: Plans and Pricing

    Compare team AI plan pricing, seat minimums and data-use terms for ChatGPT Business, Claude Team and Gemini in Google Workspace, from official pages checked October 30, 2026.

    AI & automation9 min read
  3. Build a Power Automate Flow with Copilot: Create a Cloud Flow from a Prompt

    Create a Power Automate cloud flow by describing it in plain English. Covers the Create with Copilot steps, writing a good prompt, editing flows, connections and limits.

    AI & automation9 min read
  4. AI Automation ROI: Calculate a Business Case and Payback Before You Build

    A step-by-step method to estimate time saved, build and running costs, and payback for an automation, with worked arithmetic and real pricing inputs.

    AI & automation10 min read
  5. Power Automate Run a Prompt Action: Classify and Summarise Text in Flows

    Create a prompt in prompt builder, call it from a Power Automate cloud flow with the Run a prompt action, add human review, and understand credits and common errors.

    AI & automation10 min read
  6. AI Builder Document Processing in Power Automate: Setup and Costs

    Set up AI Builder document processing in a Power Automate cloud flow, learn the credit and Copilot Credit cost per page, and plan for the November 2026 licensing changes.

    AI & automation10 min read