PurviewTroubleshooting

Purview retention policies not applying to Teams, SharePoint or OneDrive: what to check

Why Teams messages or SharePoint and OneDrive files don't follow your Purview retention policy: wrong locations, timer jobs, holds, distribution and site prerequisites, and how to prove it.

A retention policy looks right in the Microsoft Purview portal, yet expired Teams messages are still on screen, a OneDrive keeps files nobody can delete, or eDiscovery can't find what the policy should have kept. Usually retention is working as designed, just not where or when you expected. In this post I'll show how retention runs behind Teams, SharePoint and OneDrive, how to tell a real fault from normal timing, and how to prove what a policy is doing.

Errors this guide fixes

  • We've deleted older messages due to your org's retention policyTeams client (chat)
  • This message has been deleted because of a Retention PolicyTeams client (channel conversation)
  • File not foundTeams client (file shared in a message)
How this guide is organized: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (5 steps: Confirm the policy is distributed and targets the right locations; Look up every policy that applies; Find holds that suspend deletion; Rule out site and account prerequisites; Do the timing math before escalating). 4. Verify the fix. 5. Prevent it next time. Toolbox: Get-SPOSite, SubstrateHolds, DistributionStatus.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it nexttime1Confirm the policyis distributed and t…2Look up everypolicy that applies3Find holds thatsuspend deletion4Rule out site andaccount prerequis…5Do the timing mathbefore escalatingTOOLBOXGet-SPOSiteSubstrateHoldsDistributionStatusHow this guide is organized: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (5 steps: Confirm the policy is distributed and targets the right locations; Look up every policy that applies; Find holds that suspend deletion; Rule out site and account prerequisites; Do the timing math before escalating). 4. Verify the fix. 5. Prevent it next time. Toolbox: Get-SPOSite, SubstrateHolds, DistributionStatus.1Symptoms2Why it happens3How to fix it1Confirm the policy is distributed and targets theright locations2Look up every policy that applies3Find holds that suspend deletion4Rule out site and account prerequisites5Do the timing math before escalating4Verify the fix5Prevent it next timeTOOLBOXGet-SPOSiteSubstrateHoldsDistributionStatus
At a glance: how this guide is organized · 5 fix steps · 3 key tools

Symptoms#

  • Teams messages older than the retention period are still visible days after they should have expired, or they've gone from Teams but eDiscovery still returns them.
  • Users see one of these system messages, sometimes in chats with people from another organization:
Text
We've deleted older messages due to your org's retention policy
This message has been deleted because of a Retention Policy
  • A file shared in a Teams message still shows a preview, but opening it returns File not found: the file had its own, shorter retention.
  • SharePoint or OneDrive content survives the end of the period, deleted files never reach the Preservation Hold library, or users get an error when they try to delete a library, list or site.

Why it happens#

Is retention failing, or working as designed somewhere unexpectedIs the policy distributed, and does it name the right location? if Not distributed: Fix the distribution errors first (DistributionStatus must read Success); if Wrong location: Add the location that holds the content (Chats, channel messages and files are separate locations); if Yes, both: Is the content gone from the app but still in eDiscovery? if Yes: A hold or longer retention wins (Retention wins over deletion; holds suspend permanent deletion); if No: Have the timer job windows passed? if No: Wait for the timer jobs (Teams can show messages up to seven days after expiry); if Yes: Check site and account prerequisites (Indexed, unlocked sites; a license that covers Teams retention)Is the policy distributed, anddoes it name the right location?FIXFix thedistributionerrors firstDistributionStatusmust read SuccessNot distributedFIXAdd the locationthat holds thecontentChats, channelmessages and filesare separatelocationsWrong locationIs the content gone from theapp but still in eDiscovery?OKA hold or longerretention winsRetention wins overdeletion; holdssuspend permanentdeletionYesHave the timer job windowspassed?NOTEWait for the timerjobsTeams can showmessages up toseven days afterexpiryNoFIXCheck site andaccountprerequisitesIndexed, unlockedsites; a license thatcovers TeamsretentionYesNoYes, bothIs retention failing, or working as designed somewhere unexpectedIs the policy distributed, and does it name the right location? if Not distributed: Fix the distribution errors first (DistributionStatus must read Success); if Wrong location: Add the location that holds the content (Chats, channel messages and files are separate locations); if Yes, both: Is the content gone from the app but still in eDiscovery? if Yes: A hold or longer retention wins (Retention wins over deletion; holds suspend permanent deletion); if No: Have the timer job windows passed? if No: Wait for the timer jobs (Teams can show messages up to seven days after expiry); if Yes: Check site and account prerequisites (Indexed, unlocked sites; a license that covers Teams retention)Is the policy distributed, and does it name theright location?Not distributedFIXFix the distribution errors firstDistributionStatus must read SuccessWrong locationFIXAdd the location that holds the contentChats, channel messages and files are separatelocationsYes, bothIs the content gone from the app but still ineDiscovery?YesOKA hold or longer retention winsRetention wins over deletion; holds suspendpermanent deletionNoHave the timer job windows passed?NoNOTEWait for the timer jobsTeams can show messages up to seven daysafter expiryYesFIXCheck site and account prerequisitesIndexed, unlocked sites; a license thatcovers Teams retention
Figure 1 · Decision tree Is retention failing, or working as designed somewhere unexpected. Check distribution and locations first, then holds, then the timer job windows. Verify Teams retention with eDiscovery, not the Teams app.

Retention acts on compliance copies, through timer jobs, and only in the locations a policy names. Five causes cover most cases:

CauseWhat you see
Wrong location. Teams chats and Teams channel messages are separate locations. Exchange mailbox policies don't cover Teams messages, Teams policies don't cover files, and retention labels aren't supported for Teams messages.Messages or files never expire, or expire on another schedule
Timer jobs. Teams: a timer job, which typically takes 1–7 days to run, moves expired messages to the hidden SubstrateHolds folder, keeps them at least a day, then deletes them on a later run. SharePoint and OneDrive: the timer job can take up to seven days; Preservation Hold library cleanup takes up to 37 days, then up to 93 days in the recycle bins.Content lingers well past the configured period
Holds and conflicts. Retention wins over deletion and the longest retention period wins. Litigation Hold, delay hold, an eDiscovery hold or another retention policy for the same location suspends permanent deletion.Content gone from the app but still in eDiscovery
Distribution. The policy is still pending or has errors for some locations.Nothing happens for some users or sites
Unsupported targets. Sites that aren't indexed or are locked, room mailboxes, guests' shadow mailboxes, users in another tenant, users without a suitable license.Retention silently skips those items

Two Teams behaviors surprise most admins. A message a user deletes vanishes from Teams at once but only moves to SubstrateHolds after 21 days. And when one organization's policy deletes a message, Teams removes it for everyone in the conversation, including external participants, whose own copies stay searchable.

How to fix it#

1. Confirm the policy is distributed and targets the right locations#

PowerShell
Connect-IPPSSession
# Channel messages, SharePoint, OneDrive and older Teams chats policies
Get-RetentionCompliancePolicy -Identity "Teams channels - 3 years" -DistributionDetail |
  Format-List Name, Enabled, DistributionStatus, *Location*
Get-RetentionComplianceRule -Policy "Teams channels - 3 years" |
  Format-List Name, RetentionDuration, RetentionComplianceAction
# Newer Teams chats, private channel, Viva Engage and Copilot policies
Get-AppRetentionCompliancePolicy -Identity "Teams chats - 1 year" -DistributionDetail |
  Format-List Name, Applications, DistributionStatus, *Location*

DistributionStatus should read Success; otherwise fix the locations first (see policy distribution errors). Then match location to content:

  • Chats need the Teams chats location and channel messages the Teams channel messages location. After the 2025 private channel migration, private channel messages are stored in group mailboxes and follow the channel messages location; older policies for the private channel location keep enforcing.
  • Files from channels live in SharePoint (Microsoft 365 Group mailboxes & sites, or SharePoint sites). Files and meeting recordings from chats need a policy that includes the organizer's OneDrive account.

2. Look up every policy that applies#

In Data Lifecycle Management or Records Management, open Policy lookup and enter the exact email address, group address or site URL (OneDrive accounts count as sites; no wildcards). Every policy listed affects the outcome.

3. Find holds that suspend deletion#

PowerShell
Connect-ExchangeOnline
# Chats are stored in each participant's mailbox, channel messages in the team's group mailbox
Get-Mailbox -Identity adele@contoso.com |
  Format-List LitigationHoldEnabled, InPlaceHolds, DelayHoldApplied
Get-Mailbox -GroupMailbox -Identity sales-team@contoso.com | Format-List InPlaceHolds
Get-OrganizationConfig | Select-Object -ExpandProperty InPlaceHolds

Organization-wide mailbox and group policies appear only on the organization config, and newer Teams chats, private channel and Copilot policies don't stamp these properties at all; use Policy lookup for them. Decode the GUIDs as shown in retention policies vs litigation hold and check eDiscovery cases for holds. A hold explains "gone from Teams but still in eDiscovery"; that's expected, not a fault.

4. Rule out site and account prerequisites#

  • SharePoint sites must be indexed for retention to apply. Hiding a library from search results doesn't exclude its files.
  • Check for a lock with Get-SPOSite -Identity https://contoso.sharepoint.com/sites/Finance | Select-Object Url, LockState; items in a NoAccess or ReadOnly site can't be deleted.
  • Retention policies cover files in document libraries, not list items or the libraries and folders themselves. Turn on versioning if every version must be kept.
  • Teams users need a license that covers retention for Teams, such as Office 365 E3 or A3.

5. Do the timing math before escalating#

A Teams message can stay visible for up to seven days after it expires, and a delete-after-one-day policy can take 16 days to remove it from eDiscovery results. For SharePoint and OneDrive, allow up to seven days for a new policy to apply, then the 37-day and 93-day windows above. Don't keep editing the policy while you wait; every change has to distribute again.

Verify the fix#

  • The policy shows DistributionStatus : Success, and Policy lookup lists the expected policies for a test user and site.
  • Verify Teams retention with an eDiscovery search, not the Teams app: search the user's mailbox or the team's group mailbox for a known test message. Edited and deleted copies are returned until permanent deletion, then disappear.
  • In SharePoint, edit and then delete an existing test file in a covered site; the original should appear in the Preservation Hold library. A brand-new file isn't copied on its first edit.
  • For delete actions, check again after the expected deletion window.

Prevent it next time#

  • Treat Teams chats, channel messages and files as three separate decisions, and use adaptive scopes where membership changes.
  • Brief the help desk on the two Teams system messages before go-live; they can't be customized.
  • Before deleting a leaver's account, decide whether their Teams data must be kept; a user in a retaining Teams policy becomes an inactive mailbox.
  • Watch storage in the Preservation Hold library, and look up status messages in the retention, records and audit errors quick reference.

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)