
The question that keeps coming back
A recurring question in the Copilot Studio community goes like this. You have deployed an agent, users are leaving thumbs up and thumbs down reactions with the occasional comment, and you can see all of it under Analytics, Reactions. Now governance wants the individual reactions exported and tied back to the conversations that produced them, ideally in Dataverse. So you open the Power Apps table designer, go looking for a Reactions table or a feedback column on ConversationTranscript, and you find nothing that looks right. The natural conclusion is that reaction data simply is not in Dataverse and cannot be exported.
That conclusion is wrong, and it matters because a lot of makers are building custom feedback cards to work around a limitation that no longer exists. The data is there. It is just not where most people look for it.
The short answer, corrected for 2026
Thumbs up and thumbs down reactions, including any comment the user typed, are stored in Dataverse. Microsoft’s current analytics documentation states plainly that feedback data is held in the conversation transcript table. This was not always obvious in the product, and earlier community answers, some from as recently as late 2025, said the opposite. Those answers are now out of date. The built-in reaction feature reached general availability in mid-2025 and is on by default for new and existing custom agents, and the feedback it collects is persisted alongside the rest of the conversation.
Please verify the exact general availability date against the release plan before publishing, since I am flagging it from a secondary source.
The reason the data is hard to find is that it does not sit in its own table or its own tidy set of columns. It lives inside the transcript.
Where the data actually lives
Every conversation your agent handles generates one or more records in the ConversationTranscript table in Dataverse. The meaningful part of each record is a content column that holds the full conversation as a JSON document. Reactions are written into that JSON as structured events. Each reaction event carries the signal itself, whether the user selected thumbs up or thumbs down, the comment text if the user added one, and enough surrounding context to identify the exact agent response that was rated and the user turn that preceded it.
This design is why the Analytics, Reactions view can show you a comment sitting next to the question that triggered it, and it is also why a casual look at the Dataverse schema turns up nothing. There is no ReactionValue column to select. You have to open the transcript JSON and read the reaction events out of it. The community member who suggested checking the transcript JSON was on exactly the right track.
One clarification worth making, because it causes confusion. The ConversationTranscript path described here is for Copilot Studio custom agents. Dynamics 365 Customer Service Copilot uses a separate set of interaction tables for its own feedback. If you are working with a Copilot Studio agent, ConversationTranscript is the table you want.
Why the confusion is so common
Three product realities combine to make this feel like missing functionality when it is not.
First, the Analytics page is a reporting surface, not a data store, and it applies its own retention. Reaction comments are viewable in the analytics UI for a limited window, commonly cited as twenty-eight days, and session and transcript detail in analytics follows a similar short horizon even though aggregate analytics data is retained far longer. Makers who only ever meet the feedback through the Analytics page reasonably assume that is all there is, and that it disappears.
Second, there is no dedicated schema. Because the reactions are embedded in a JSON blob rather than exposed as first-class columns, none of the point-and-click discovery paths surface them.
Third, the earlier answers were correct when they were written and then quietly aged out as the feature matured and the documentation caught up. A governance answer that was accurate in December can be misleading by March. This is a good reminder to date-stamp technical guidance and to treat Microsoft Learn as the source of truth over forum threads, including older ones.
How to export it and link it to conversations
Because the reactions are already inside the transcript record, correlation to the conversation is essentially free. The same record that holds the reaction also holds the conversation and session identifiers. The task is not to join two systems together. It is to parse one JSON document and lift the fields you care about into a shape your reporting can use.
A supportable pattern looks like this.
- Create a dedicated Dataverse table, for example Agent Feedback, with columns for the rating, the comment, the user identity, the channel, the timestamp, the agent response text, the user utterance, and the conversation or session identifier.
- Build a cloud flow that triggers on a new row added to the ConversationTranscript table.
- In the flow, parse the transcript content JSON and detect reaction events. For each reaction event found, write one row to your Agent Feedback table, carrying across the rating, the comment, the surrounding context, and the conversation identifier from the same transcript record.
- Report and audit against the Agent Feedback table, which now gives you exactly what governance asked for, every individual reaction, tied to its conversation, in a table you own and control retention over.
The advantage of this approach is durability. The moment you copy each reaction into your own table, you are no longer bound by the analytics retention window. You hold the record for as long as your retention policy requires, and you can build model-driven review apps, dashboards, and alerts on top of it.
The gotchas that will bite an enterprise rollout
A production-grade version of this has to account for several sharp edges.
Transcript records are size-capped. A single ConversationTranscript record has a size limit, commonly documented at one megabyte. Longer conversations are split across multiple records that share the same conversation start time. If your flow assumes one conversation equals one record, you will drop reactions from long sessions. Correlate related records on the shared start-time key so you reassemble the full conversation before extracting.
The Microsoft 365 Copilot channel is the exception. Reactions submitted through the Microsoft 365 Copilot channel are not captured through the same transcript mechanism that Teams, web, and the other channels use. If that channel matters to you, the transcript-parsing approach will silently miss those reactions. The common workaround is to render a custom feedback adaptive card in the conversation and route its result to your own table through a flow, which also gives you a richer, structured comment than a bare thumbs signal. Confirm the current channel support list in the feature details section of the release plan before you rely on any single channel.
Permissions are governed by a specific role. Viewing reaction comments in the analytics experience requires the Bot Transcript Viewer security role. Treat access to raw transcripts and their embedded feedback as sensitive, and grant it deliberately.
Feedback is user content, so treat it as such. Comments can contain personal or sensitive information that users typed freely. Make sure your disclaimer text tells users how their feedback is used, keep the disclaimer current, and apply your data loss prevention and retention policies to the Agent Feedback table the same way you would to any store of user-submitted text.
A governance-forward recommendation
For most enterprises, the durable pattern is a hybrid. Keep the built-in reactions on, because they cost nothing and feed the native analytics that product owners rely on. Add a flow that lifts every reaction out of the transcript into an owned Agent Feedback table so the data survives the analytics retention window and becomes auditable and reportable. Where the Microsoft 365 Copilot channel is in play, supplement with an adaptive card so that feedback is not lost. That combination gives product owners their dashboards, gives governance its exportable and linkable record, and does not leave you dependent on a twenty-eight day window for data that stakeholders will ask about months later.
The headline for anyone still building around the assumption that this data is trapped in a dashboard is simple. It is in Dataverse. Go get it out of the transcript, put it in a table you own, and you have solved the export and correlation problem that keeps landing in the community forums.
References
Microsoft Learn, Analyze conversational agents (Copilot Studio), confirms feedback data is stored in the conversation transcript table in Dataverse. https://learn.microsoft.com/en-us/microsoft-copilot-studio/analytics-improve-agent-effectiveness
Microsoft Learn, Analytics overview (Copilot Studio), transcript download, retention windows, and analytics data horizons. https://learn.microsoft.com/en-us/microsoft-copilot-studio/analytics-overview
Microsoft Power Platform release plan, Collect thumbs up or down feedback and comments for your agents, confirms comments are available in the conversation transcript table and covers channel feature details and the Bot Transcript Viewer role. https://learn.microsoft.com/en-us/power-platform/release-plan/2025wave1/microsoft-copilot-studio/collect-thumbs-up-or-down-feedback-comments-agents
Microsoft Learn, Obtain feedback for every response with an adaptive card (Copilot Studio guidance), for the custom feedback card pattern. https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/adaptive-card-add-feedback-for-every-response
Origin of the question: Power Platform Community thread, Exporting Copilot Studio thumbs up and down feedback and linking it to conversations.
Verify before publishing: the general availability date for the reaction feature, the exact analytics retention window in days, and the one megabyte transcript record limit, all against the current Microsoft Learn and release plan pages, since product specifics change.