Teams Administration

How to Export Microsoft Teams Chat History as an Admin (All Methods)

Published Jul 25, 20267 min readBy IT Engineering

The request comes in from legal or HR, often with some urgency: "Can you pull all the Teams messages between these two employees from January through March?" And if you haven't thought about this before, it's a bit of a maze. Teams doesn't have a simple "export chat" button for admins — or rather, it does for some scenarios and doesn't for others, and the output formats vary wildly.

Let's go through every real option available, what each one actually produces, and where each one breaks down.

Microsoft Purview eDiscovery (The Official Path)

For most compliance scenarios, Microsoft Purview eDiscovery is the intended route. You log into the Purview compliance portal, create an eDiscovery case, run a content search scoped to Teams chats or specific users, and export the results. The export comes as a PST file (for email-format items) or as a flat HTML/JSON file for Teams-native messages.

The catch is that this is built for lawyers, not IT admins. The interface is clunky, exports can take hours for large datasets, and the output format — especially for Teams private chats — isn't exactly readable by a non-technical HR manager. You'll get a folder full of JSON files with message IDs rather than a clean chronological transcript.

Another real limitation: Purview only returns data that's within the current retention boundaries. If the messages you need are older than your retention policy allows or the account was deleted more than 30 days ago without a hold, Purview returns nothing — because there's nothing to return.

Microsoft Teams Export Page

Microsoft added a self-service data export feature at microsoft.com/en-us/microsoft-teams/export. Individual users can export their own chat history here — but it's a user-initiated export, not an admin export. As an admin, you can't trigger this for another user, and the output is a ZIP file of JSON files that most non-technical people can't read.

Graph API: Teams Channel Messages

If you're comfortable with PowerShell or scripting, the Microsoft Graph API gives you programmatic access to Teams messages. The relevant endpoints are /teams/{team-id}/channels/{channel-id}/messages for channel history and /chats/{chat-id}/messages for private chats.

Private chat access requires additional admin consent on the Chat.Read.All permission scope, which some organizations restrict. Channel messages are generally more accessible. The API returns paginated JSON, so you'll need to handle @odata.nextLink continuations for large exports. For a team that's been active for two years, this can be thousands of pages.

What you get from the API is accurate and complete, but you're responsible for turning raw JSON into something human-readable. It's useful if you need to feed the data into another system, less so if you're handing it to HR.

Teams Admin Center: Usage Reports

Worth mentioning but often confused with chat export: the Teams admin center has usage reports showing message counts, active users, meeting minutes, and so on. These are aggregate metrics — they don't show you message content. Not useful for the "pull Jane's conversations from Q1" request.

What a Proper Backup Changes

When Teams data is continuously backed up to an independent store, the export question becomes much simpler. Instead of navigating Purview or scripting Graph API calls under deadline pressure, you query your backup store directly — which can surface messages by date range, user, channel, or keyword in seconds.

More importantly, a backup exists outside the 30-day deletion window. If a user account was deleted six months ago and legal needs those messages today, a backup is the only thing that can produce them. Purview, Graph API, the export page — none of those work on data Microsoft has already purged. Your backup does.