Microsoft Teams on Mac: When Profile Pictures Just Won't Load (And the Fix That Actually Works)
- Shannon

- Apr 29
- 3 min read
Note, this issue affected me recently, so I wanted to blog about it and hopefully help folks out in the future.
You know the pattern: You've restarted Teams. You've cleared the cache. You've uninstalled and reinstalled. Twice. Maybe three times (I know I personally lost count). And yet every person in your meeting is a gray silhouette, except for whoever happens to have their camera on.
This is a specific, reproducible pain on Mac with New Teams, and the reason the usual fixes don't stick is that everyone stops one step short. It also doesn't help that common troubleshooting articles online lead you down paths that don't fix everything either. Gah! Unhelpful internet articles! shakes fist
What's actually happening
When Teams on Mac fails to render profile pictures consistently, the instinct is to blame the cache...and know the cache is only part of it. What survives after every uninstall and reinstall, completely untouched, is the macOS Keychain (doh!). Teams stores identity and credential tokens there under entries like Microsoft Teams Identities Cache, MSOpenTech.ADAL.1, and oneauth. When those entries get stale or corrupted, Teams can't authenticate the requests it makes to fetch profile photos. The reinstall never fixes it because the Keychain entries are never part of the uninstall. I suppose I can buy into the design choices, but this is where I sorta miss Windows a bit. le sigh
The result is intermittent or total failure to load profile pictures. Now "intermittent" is the keyword that makes this maddening to diagnose, because it works just enough to make you question whether the last fix did something.
The full fix that Worked for Me
I'm a sucker for automation, so I worked on this to help me out quickly. The commands below handle everything in sequence: graceful quit, force kill, full cache wipe across every Teams-related location on Mac, and Keychain entry removal. After it runs you receive a clean sign-in prompt and Teams starts with no stale state.
# Kill Teams gracefully, then forcefully
osascript -e 'quit app "Microsoft Teams"' 2>/dev/null; \
sleep 3; \
pkill -x "Microsoft Teams" 2>/dev/null; \
sleep 2; \
# Wipe all cache and container locations
rm -rf \
~/Library/Containers/com.microsoft.teams2 \
~/Library/Caches/com.microsoft.teams2 \
~/Library/Caches/com.microsoft.teams \
~/Library/Application\ Support/Microsoft/Teams \
~/Library/Application\ Support/com.microsoft.teams2 \
~/Library/Group\ Containers/UBF8T346G9.com.microsoft.teams \
~/Library/WebKit/com.microsoft.teams2 \
~/Library/HTTPStorages/com.microsoft.teams2 \
~/Library/Logs/Microsoft\ Teams \
~/Library/Saved\ Application\ State/com.microsoft.teams2.savedState \
~/Library/Preferences/com.microsoft.teams2.plist; \
# Wipe Teams Keychain entries
for label in \
"Microsoft Teams Identities Cache" \
"com.microsoft.teams" \
"com.microsoft.teams2" \
"MSOpenTech.ADAL.1" \
"oneauth" \
"Microsoft OneAuth"; do
security delete-generic-password -l "$label" 2>/dev/null
security delete-internet-password -l "$label" 2>/dev/null
done; \
echo "Teams fully wiped including Keychain. Relaunch and sign in fresh." && \
open -a "Microsoft Teams"A few notes on what this does
The osascript line asks Teams to quit cleanly. The pkill is the backup for when Teams ignores that (and it did in my instance). The two sleep calls aren't just politeness. Know if you start deleting files while Teams is still mid-shutdown, you'll get partial deletes and lock errors. The best way to frame this up is you wind up with more headaches (I personally need less and you probably do, too).
The rm -rf block covers both New Teams (com.microsoft.teams2) and any Classic Teams remnants. The plist deletion is worth calling out specifically, as that resets preferences entirely, so the first launch after this will feel like a fresh install setup-wise. That's expected and completely fine.
The security CLI is the macOS built-in tool for interacting with the Keychain from the command line. The loop runs both delete-generic-password and delete-internet-password against each label because Teams uses both types depending on the entry. The 2>/dev/null suppression means you won't get errors for labels that don't exist on a given machine...the command just moves on.
Why reinstalling never fixed the Problem
macOS treats the Keychain as user data, not application data. When you drag an app to the Trash or even run a proper uninstaller, the Keychain entries stay put. This is intentional behavior, as macOS assumes you want credential persistence across reinstalls (a fair assumption). For most apps that's great. For a case where the credential cache is the source of the corruption (my very specific issue), it means every reinstall starts from a broken state.
If this comes back
If profile pictures go intermittent again after this fix, you're looking at something outside the client. The next places to check are your network path (specifically whether requests to *.cdn.office.net are getting inspected or interrupted by a proxy or SSL inspection appliance) and whether the affected users have photos set via a source Teams can actually resolve. Note, photos set only through the Teams client itself are the least reliable; photos pushed via Graph API or Exchange Online propagate more consistently.




Comments