Can you export all Microsoft Teams chat history in one pass?
If you need your Teams chat and channel history out before a renewal or an exit, the documented path is the Microsoft Graph Teams Export APIs. They return 1:1, group, meeting and channel messages, plus links to meeting recordings and transcripts. Two conditions apply: the export runs under admin-approved application permissions, and every user whose content you export must hold an active Teams license. If either condition is missing, the pull fails or returns less than you expect, so confirm both with your Microsoft 365 admin before planning any other work.
The export is a data pull that your team or partner builds and runs against the API, not a one-click download from the admin center. Someone has to register the application, grant consent, page through results, handle throttling and store the output in a format your target platform can read. Plan for that engineering effort and for the storage it creates, and ask for the exact export scope in writing before you commit. Read the Microsoft Learn guide to the Teams Export APIs for the current permission names and supported content types.
The export also does not carry everything a Teams tenant holds. Files stored in SharePoint and OneDrive, tabs, wiki content, planner data, compliance settings and the membership structure of teams all sit outside the message export. Treat the message export as one input to the migration, and inventory the other components separately. Confirm with Microsoft which items the Export APIs cover in your tenant before you tell business owners that their history is complete.
What the Teams Export APIs return and under what conditions
This table lists each content type the Microsoft Graph Teams Export APIs cover, with the export method, what comes back and the conditions that apply. Read the conditions column first, because every row depends on admin-approved permissions and an active Teams license on the user being exported. The Microsoft Learn documentation defines the exact output schema, so confirm field names and file layout there before you write any script.
| Data type | Export method | Output | Conditions |
|---|---|---|---|
| 1:1 chat messages | Teams Export API for one-to-one chats in Microsoft Graph | Messages from one-to-one conversations | Admin-approved application permissions and an active Teams license on the exported user |
| Group chat messages | Teams Export API for group chats in Microsoft Graph | Messages from group chat conversations | Admin-approved application permissions and an active Teams license on the exported users |
| Meeting chat messages | Teams Export API for meeting chats in Microsoft Graph | Chat messages posted during meetings | Admin-approved application permissions and an active Teams license on the exported users |
| Channel messages | Teams Export API for channels in Microsoft Graph | Messages posted in team channels | Admin-approved application permissions and an active Teams license on the exported users |
| Meeting recording links | Teams Export API for meeting recordings in Microsoft Graph | Links to meeting recordings | Admin-approved application permissions; confirm link access and retention in your tenant |
| Meeting transcript links | Teams Export API for meeting transcripts in Microsoft Graph | Links to meeting transcripts | Admin-approved application permissions; confirm link access and retention in your tenant |
What the export path does not return, and how to handle each gap
The Graph Teams Export APIs cover messages and meeting links, but a complete record also depends on licenses, files, app content, deleted items and permissions. Each card names one gap, why it matters for the archive, and a workaround. Confirm every scope item in the Learn documentation and with Microsoft licensing before you assume coverage.
Users without a Teams license
The export requires an active Teams license on every user whose content you export. Former employees, departed contractors and accounts moved to a plan without Teams can fall outside the run, so their chats may never reach the archive. Check the license state of every account in scope before the export starts. Confirm this rule in the Learn export article and with Microsoft licensing, since Microsoft changed how Teams is sold in its April 2024 licensing news. Where a license is missing, decide with legal whether to restore it for the export window.
Files shared in chats and channels
Messages carry references to shared files, but the file contents live in SharePoint and OneDrive. The documented export scope covers messages and meeting links and does not list document content, so a message export alone does not preserve the files. Treat the file libraries as a separate export. Pull each team's channel library from SharePoint and the OneDrive folders of chat participants, then map files back to message IDs so references still resolve. Confirm the file scope in the Learn article before you build the plan.
Wiki and app tab content
Channel tabs such as wiki pages, Planner boards, Forms and third-party app tabs keep their content in the app or in a separate service. None of these appear in the documented export scope, so a team's procedures can be missing from the archive even when its messages are complete. Inventory every tab in each team before cutover. Capture wiki content through a documented manual process, such as exporting pages to PDF or copying them into the target wiki, and record who did it and when. Confirm the status of each tab type against the Learn documentation.
Deleted and expired content
Messages removed by users or purged by retention policy may not come back through the export, depending on when deletion happened and which holds apply. Microsoft sets the windows for deleted content, and the exact figures appear in the Learn documentation and your tenant settings. Run the export before deletion windows close, because the export cannot recover content already purged. Ask your Microsoft 365 administrator to review retention labels and legal holds, confirm what the tenant still holds, and record the cutoff date used.
Meeting recordings and transcripts
The export returns links to meeting recordings and transcripts, and the media files stay where they were stored. A link works only while the file exists and the reader has access, so a departed organizer or a moved file can leave the link dead. A link in the export is an index entry, not a copy of the recording. Download recordings and transcripts from the owner's OneDrive or SharePoint location while the license is active, store them with checksums, and keep the export links as cross-references. Confirm link access rules in the Learn article.
Admin consent for application permissions
The export uses admin-approved application permissions. If a Microsoft 365 administrator has not granted consent for the required permissions, the export cannot run for the tenant, and a partial run can look complete when some users or chat types are skipped. Verify consent and scope in the app registration before the run and log which accounts were processed. Ask the administrator to confirm the permission set against the Learn documentation, and compare the processed user list with your license inventory to find gaps.
The sequence for a complete export, with verification at each stage
This sequence moves Teams chat and channel history into storage you control, with a count check and a named approval at each stage so the export can be defended to auditors and business owners. Each step produces a record that the next step relies on.
Inventory users, teams and channels in scope
Start by listing every team, standard channel, private channel, meeting chat and one-to-one or group chat that the export must cover, and the users who own or participate in them. Assign an owner to each team who can answer questions about its purpose and retention needs. The output is a written inventory with one row per team and channel, and the business owner signs off that nothing in scope is missing. Record who approved this inventory and when.
Confirm active Teams licenses for exported users
The Microsoft Graph Teams Export APIs require an active Teams license on every user whose content is exported, so check each account in the inventory against your licensing records in the Microsoft 365 admin center. Users without a Teams license must be licensed, or their content must be handled through a different documented route before export. The output is a list of accounts with confirmed licenses and any exceptions with a named decision owner. Record who verified the license list.
Obtain admin approval for application permissions
The Teams Export APIs use admin-approved application permissions, so a Microsoft 365 administrator must grant consent for the app registration that will call them. Confirm the exact permissions in the current Microsoft Learn guidance for the export APIs before requesting consent, and keep the consent record with the scope document. The output is a documented grant that names the approving administrator, the app, and the permissions. Record who approved the consent and the date it was given.
Run a pilot export on one team
Choose one team with a representative mix of standard channels, a private channel, and attachments, and export it end to end using the same tooling planned for the full run. Compare message counts, thread structure, and attachment links against what the Teams client shows for the same channels, and log every mismatch. The output is a pilot report with the counts from each side and a list of resolved issues. The team owner and the migration lead both sign the report before the full run is approved.
Run the full export under a logged change
Execute the export across the approved inventory in the same way as the pilot, one team at a time, so each batch can be re-run without affecting the others. Log the start and end time, the account running the job, and any API errors or throttled requests for each batch. The output is a set of exported files and a run log that shows every team was processed or explicitly deferred. Record who ran each batch and who reviewed the log.
Checksum and archive the output in your storage
Calculate a checksum for every exported file and for the run manifest, then copy the output into storage the organization controls, such as an approved file store or object storage in its own tenant or data center. Confirm that the checksums match after the copy and restrict access to the archive to named roles. The output is an archive with a manifest of files and checksums, plus a record of who has access. Record who verified the checksums and where the archive is stored.
Reconcile counts per team and channel
Compare the message counts and attachment references in the archive with the counts recorded during the full run, team by team and channel by channel. Investigate any difference by checking the run log, the API responses, and the pilot findings before accepting an exception. The output is a reconciliation table with each difference explained or resolved, and no unexplained gaps left open. Record who performed the reconciliation and who accepted each exception.
Sign off with the business owners
Send the inventory, pilot report, run log, checksum manifest and reconciliation table to the business owner of each team for written acceptance. Each owner confirms that their content is complete for the purpose set out at the start, or records the exceptions they accept. The output is a signed acceptance for every team, filed with the project records. Keep the signed record with the approval entries from the earlier steps so the full chain of decisions can be shown later.
Which Teams licenses and admin approvals the export needs
The Teams Export APIs in Microsoft Graph depend on two prerequisites, and both must hold for every user whose chats you want to pull. First, a Microsoft Entra administrator has to approve the application permissions the export uses. Second, each user being exported needs an active Teams license. The Microsoft Learn export article lists the exact permission names and the license conditions, so copy them from there into your change request rather than working from memory. Treat the permission approval as a governance decision: it grants an application broad read access to message content across the tenant, so it should be scoped, logged and removed once the extraction is complete.
The license requirement has practical consequences for three groups. Leavers whose accounts have been deleted or whose licenses were reclaimed cannot be exported through this route, so the extraction should run before offboarding removes licenses, not after. Guests and external participants depend on how their licensing is assigned in your tenant, so list them early and confirm their status in the Microsoft Learn article. Accounts that are suspended or in a license-lapsed state may also block the pull for those users. A license lapse for even one account can therefore leave gaps in the history you deliver, which matters if the archive is later used as a record.
Because Microsoft changed which suites include Teams with the April 1, 2024 unbundling, do not assume that every user in a Microsoft 365 subscription currently holds a Teams license. Check the license assigned to each account in the Microsoft 365 admin center, and confirm the current Teams licensing position with Microsoft or your reseller before you plan the export. Record the results in a simple inventory: user, license status, guest or member, and whether the account is active. That inventory is the input to your migration scope and shows the reader exactly which conversations can be recovered from Teams and which will need another source.
Which export approach fits your tenant situation
Users who still hold an active Teams license are the simplest case for the Teams Export APIs in Microsoft Graph. The APIs can export 1:1, group, meeting and channel messages, along with meeting recording and transcript links, but they run with admin-approved application permissions and only against users who have an active Teams license. Your first step is to confirm the permission set your tenant administrator is willing to approve and to document who approved it and why.
- Scope of the export: Confirm which chats, channels and meetings are in scope for each user or team, and whether recordings and transcripts are included.
- Admin consent: Ask your Microsoft 365 administrator to confirm the application permissions required by the Microsoft Learn export guide and record the consent decision.
- License check: Verify that each account in scope holds an active Teams license at the time of export, because the APIs depend on it.
- Retention policies: Check whether any retention or hold policy changes what content is visible to the export, and route the scope through your records or legal team.
- Downstream handling: Decide where exported files are stored and who can read them before any import into Mattermost starts.
Before you start, confirm the current permission names and license requirements with Microsoft, since the export depends on tenant configuration that your own administrators control.
Former employees, contractors whose licenses have lapsed and shared or service accounts can still hold history that the business needs. Because the Teams Export APIs require an active Teams license on the exported user, an account without one cannot be exported through the standard path. You need to confirm with Microsoft how your tenant handles these accounts, and whether any retained content remains reachable through another route.
- License status: Identify every account in scope whose Teams license has ended, and record the date each license changed.
- Alternative routes: Ask Microsoft whether a license, a retention hold or an administrative process can restore access to the content for export, and what that requires.
- Legal and privacy review: Involve legal, HR and your data protection contact before exporting messages from people who have left, since their expectations and rights differ from current staff.
- Gaps to record: Document which conversations cannot be recovered, so the migration plan does not assume complete history.
- Approval trail: Keep the approval record for each exported leaver account, including the authority that allowed it.
Confirm the license and access conditions for former users with Microsoft and your legal team before you plan the migration scope.
Deleted messages and content held under retention need separate handling. The Microsoft Learn documentation for the Teams Export APIs describes how deleted content is treated, and it refers to time windows of 21 and 30 days. You should confirm the exact meaning and applicability of those windows in the current Microsoft documentation for your tenant rather than assume how they apply to your data.
- Confirm the windows: Check the 21 and 30 day figures for deleted content in the Microsoft documentation, and note the date you checked.
- Retention and holds: Ask your compliance team which retention labels, eDiscovery holds or legal holds apply, since these can change what is available to export.
- Timing decisions: Set the export schedule against those confirmed windows so content you need is not lost before extraction.
- Records obligations: Confirm with your records or legal function whether exporting and copying deleted or held content meets your obligations.
- Evidence of what was exported: Keep a log of what was requested, what was returned and what could not be retrieved.
Read the deleted-content section of the Microsoft Learn export documentation and confirm both windows with Microsoft before you commit to a cutover date.
What to plan before the Teams contract or license ends
Exporting Teams history depends on licenses, permissions and timing that run out on their own schedule. The cards below set out the decisions and checks that connect the export to a verified archive and a clean cutover.
Keep Teams licenses active
The Microsoft Graph Teams Export APIs only export content from users who hold an active Teams license, so a removed or lapsed seat can silently cut off their history. Assign the license owner the task of keeping every user whose chat must be exported licensed until the pull is verified. Check the license state for each exported user before every run. Record the date each license was last confirmed active.
Choose the transition suite
Microsoft introduced Microsoft 365 and Office 365 suites without Teams, plus a standalone Teams offering, effective April 1, 2024, and suites with Teams are no longer sold to new subscribers worldwide. Your IT lead and procurement should decide which suite or standalone Teams plan stays in place during the transition, and confirm that it covers the users and the admin consent needed for the export. Ask the Microsoft reseller to state in writing which SKUs remain valid until the contract ends.
Set retention and legal hold review
Teams retention policies and legal holds decide what history exists to be exported. Legal counsel and records managers should review every hold and retention rule before the export, because content deleted under a policy may not be recoverable through the export. Confirm which deleted content falls inside the recovery windows described in the export documentation, and document any content that falls outside them. Keep the review record with the archive.
Confirm the target import path
Before extracting anything, the platform team should confirm how the target platform will load the data. Mattermost loads a Slack export through mmetl and its bulk import format, but it has no Teams importer, so the Teams export must be converted into a format the target accepts. Run a small test batch through the full path, including users, channels, threads and attachments, and confirm which items will not move, such as integrations or custom emoji.
Agree archive sign-off
Someone accountable must approve the archive before the Teams tenant is decommissioned. Name the owner for records, the owner for security, and the business owner for each team whose history is exported. The sign-off should cover completeness checks, the list of excluded users or channels, the storage location and access rules for the archive, and the retention period for the archive itself. Written approval protects the organization if a later dispute depends on the exported history.
Schedule a gap-free cutover
Chat posted between the final export and the go-live date can be lost if the two are not planned together. The project lead should set a freeze point after which users stop posting in Teams, run a final delta export from that point, and load it before users switch. Keep Teams read-only or licensed through the handover so messages posted during the window remain reachable. Rehearse the sequence with a named owner for each step.
Questions buyers ask before exporting Teams data
How much effort does a Teams data export take?
The effort depends on the size and state of the Teams estate, not on a fixed duration. The main drivers are the number of teams and channels in scope, the volume of chat history per channel, whether meeting recordings and transcripts must be pulled, and whether every user to be exported still holds an active Teams license. Each of these adds scripting, validation and data handling work. A written scope that lists these counts is the most useful input for estimating effort, and a short pilot on a few teams will show the real throughput before the full run is planned.
Can our own team run the Teams export without outside help?
Often yes, if the team has the right skills and the required approvals. The work needs someone who can register an application in Microsoft Entra ID, request admin-approved application permissions for the Microsoft Graph Teams Export APIs, and call those APIs with a script. It also needs data handling skills to store exported content securely, check it for completeness, and document what was removed or skipped. Teams without these skills in-house usually bring in help for the scripting and validation steps, and keep the approvals and data decisions internal.
What should a quote for a Teams export include?
A quote should follow from a written scope that names the teams, channels, chat types and meeting content to export. It should list the deliverables, such as the exported data set, a validation report and a record of exceptions, along with the approvals the client must provide, including Entra admin consent. Ask the provider to state which tasks are one-time, such as the export and the conversion, and which recur, such as retained support. Also ask what is excluded, for example conversion into a target platform or user mapping.
Can Mattermost or Rocket.Chat import Teams exports directly?
No, not as a direct Teams import. The documented Mattermost migration path converts a Slack export with mmetl into its bulk import format, and Rocket.Chat documents an import from Slack through its admin Import function. Teams output from the Graph Teams Export APIs does not match either format, so a conversion step is required. That step maps users, channels, threads, direct messages and attachments into the target format, and it needs to be scoped and tested by the team before the full migration.
How long does the export and conversion take?
No reliable duration can be given before the scope is known, and any figure quoted without that scope should be treated with caution. The main drivers are the volume of content, the number of users and channels, how many meeting recordings are included, and how many exceptions need manual review. A pilot on a representative set of teams is the most dependable way to measure throughput and to find conversion problems early. Ask the provider to base the timeline on the pilot results and the written scope.
Which Teams licenses and permissions does the export require?
The Teams Export APIs require an active Teams license on each user whose content is exported, and they use application permissions that an administrator must approve. Users whose licenses have lapsed may not be exportable through these APIs, so the license state should be checked before the scope is final. Confirm the exact permission names and the license requirements against Microsoft's current documentation and your tenant configuration, since these details can change.
How should exported Teams data be stored and handled?
Exported chat and meeting content is sensitive personal and business data, so it should be stored in an encrypted location under your control, with access limited to the people who run the migration. Set a retention period for the export copies, document who accessed them, and delete them once the target system is verified. Check your data protection obligations and any internal policies before the export starts, including how to handle content from users who have left the organization.
What happens to deleted Teams content during an export?
Content that users or admins have deleted may fall outside the export unless it is still within Microsoft's retention window, so the scope should state how deleted content is handled. Confirm the retention windows that apply to your tenant against Microsoft's documentation before setting expectations with stakeholders. Record any content that cannot be exported so that the business can decide whether a gap is acceptable.
How DeployOpen scopes and delivers a Teams data exit
DeployOpen plans and delivers the export of Teams chat and channel history as a fixed-scope engagement inside your own infrastructure. The work covers the permissions and licenses the Graph Teams Export APIs need, the extraction run, the conversion into the target platform's import format, and the evidence that the export is complete.
How we scope
- The written scope lists which teams, channels, chats and meeting artifacts are in and out of the export.
- We confirm with your Microsoft 365 administrator which application permissions can be admin-approved for the run.
- The scope names which users must hold an active Teams license during extraction and who owns that check.
- Scope also records how deleted content is handled, including the 21 and 30 day windows that apply.
How we build
- We configure the Graph export run in a tenant you control and keep credentials within your environment.
- Extracted messages are converted into the bulk import format of your chosen target platform.
- Test imports run against a non-production instance so you can check threads, attachments and user mapping.
- Each run produces a log of what was exported, skipped or failed, reviewed with your team before cutover.
How we hand over
- You receive the export scripts, configuration and import files, documented for your own operators to rerun.
- The handover includes a reconciliation report comparing exported item counts against the source scope.
- Runbooks describe how to request a new export for content still within the retention windows.
- Known gaps, such as items the APIs do not return, are listed in writing with the agreed next steps.
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer after handover.
- A retainer can cover re-running exports for late-added teams or users during a migration period.
- Confirm with DeployOpen in the written scope which post-handover tasks sit inside the retainer and which are separate.
- Quotes follow from the written scope, so ask for each cost component to be itemized in the proposal.

