Microsoft Teams Error: 'Uploading custom apps isn't available' — Cause, Fix, and Troubleshooting Guide
Fix Teams 'Uploading custom apps isn't available': enable Upload custom apps in the app setup policy, assign it to the user, and allow time to propagate.
- #microsoft-teams
- #troubleshooting
- #errors
- #app-manifest
Stuck on this Microsoft Teams error? Get the free incident triage checklist
A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.
What this error means
A developer or admin tries to sideload a custom app and finds the option missing, greyed out, or blocked with a message telling them to contact their admin. This is a policy gate, not a packaging problem: the ability to upload custom apps is controlled by the Teams app setup policy assigned to that user and by org-wide custom app settings.
Uploading custom apps isn't available. Contact your admin.
What users report
- The “Upload a custom app” / “Upload an app to your org’s app catalog” option is missing or greyed out in the client.
- The option appears for admins but not for a specific developer account.
- One user in the org can sideload; another in the same org cannot.
- The setting was just enabled but the option still doesn’t appear for the target user.
- A newly created tenant has never shown the upload option at all.
Tenant and app configuration causes
- Upload custom apps disabled in the assigned app setup policy — the policy attached to the user has the “Upload custom apps” toggle off.
- Org-wide custom app setting off — the tenant-level custom app control disables sideloading for everyone regardless of per-policy settings.
- User on the wrong policy — the user inherits the Global (Org-wide default) app setup policy while the enabled toggle lives on a custom policy they were never assigned.
- Policy assignment not yet propagated — the change is correct but hasn’t reached the user’s client yet.
- Group vs direct assignment conflict — a group-assigned policy and a direct assignment collide, and the effective policy isn’t the one you edited.
- Client cache — the user’s Teams client is still holding the previous policy state.
Confirming tenant configuration
Confirm which app setup policy the user actually has in effect, then confirm that policy’s upload toggle. In the Teams admin center this is under Teams apps → Setup policies, plus the per-user assignment view.
For automation, inspect the effective app setup policy and the tenant custom-app setting via Microsoft Graph (Teams admin/PowerShell equivalents also expose the same settings):
# Read the tenant-wide Teams app settings (includes custom app upload control)
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/teamwork/teamsAppSettings" | jq .
Then verify the specific policy’s “Upload custom apps” state in the admin center and confirm the target user is assigned to that exact policy (not just the Global default). If the tenant setting is off, no per-policy toggle will help.
Resolution
Enable uploading in the right place, in order:
- In the Teams admin center, open Teams apps → Setup policies. Edit the policy the user is assigned to (or the Global default if that’s what they inherit) and turn on “Upload custom apps.”
- If uploads are blocked tenant-wide, enable the org-wide custom app setting first — a per-policy toggle can’t override a tenant-level block.
- Assign the corrected policy to the user (or their group) if they weren’t already on it.
You can also flip the tenant custom-app setting through Graph by patching teamsAppSettings:
curl -s -X PATCH -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://graph.microsoft.com/v1.0/teamwork/teamsAppSettings" \
-d '{"isUserPersonalScopeAllowed": true}'
After enabling and assigning, allow time for propagation — policy changes can take up to a few hours to reach the user’s client. Have the user sign out and back in, or clear the client cache, to force a refresh once the change has propagated.
Avoiding tenant drift
- Tenant setting beats policy — if org-wide custom apps are off, editing individual setup policies has no effect until you fix the tenant setting.
- Global default vs custom policy — verify the user’s effective policy; enabling a toggle on a policy nobody is assigned to does nothing.
- Propagation delay — don’t conclude the fix failed for a few hours; policy assignment isn’t instant.
- Group assignment precedence — mixed group and direct assignments can produce an effective policy you didn’t intend to be active.
- Client cache — a stale client can keep hiding the option after the policy is correct; sign out/in or clear cache.
- Least privilege — enable uploads only for the developer group that needs it rather than flipping it on org-wide.
Related tenant errors
Fixed it? Get 500 Microsoft Teams & DevOps AI prompts — free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.
Did this fix your issue?
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.