Alert: User Account Disabled Automatically — What to Check Next
For customers who received an alert that a user account was disabled automatically and need to understand what happened without digging through engineering jargon. This runbook shows the exact checks to confirm why the account was disabled, how to restore access safely, and what to add so the next alert is easier to triage.
TL;DR — If you get an alert that a user account was disabled automatically, the most common reason is a security rule triggered by repeated failed logins, suspicious sign-in location changes, or an HR/identity sync that marked the user inactive. Start in your provider's dashboard under Users or Directory audit logs, confirm the disable reason, then either re-enable the account or fix the upstream sync rule so it does not disable the user again.
Reading time: ~6 min
The scenario
It is a normal Tuesday afternoon and a teammate messages you: they were working an hour ago, then suddenly every app tied to your company login started rejecting them. A security alert lands in your inbox saying the user account was "disabled automatically" and now the person cannot get into email, the app dashboard, or the VPN. You open the admin area and see the account is disabled, but it is not obvious whether that happened because of suspicious activity, too many failed logins, or an automated sync from your HR or identity system. You need to answer two questions quickly: is this a real security event, and can you safely restore access?
Symptoms
- The user sees messages such as:
-
Your account has been disabled. -
Sign-in blocked. Contact your administrator. -
Account disabled due to suspicious activity. -
User is inactive or disabled.
-
- Admin or security alert email says one of:
-
User account disabled automatically -
Account locked after repeated failed sign-in attempts -
User disabled by policy -
User deprovisioned by directory sync
-
- In audit logs you may see entries like:
-
action=disable_user actor=system reason=too_many_failed_logins -
action=disable_user actor=policy-engine reason=impossible_travel -
action=update_user active=false source=scim -
action=suspend_user actor=automation
-
- The user may also report:
- MFA (multi-factor authentication) prompts stopped appearing
- Password reset succeeds but sign-in still fails
- Other users are unaffected
Likely causes
| Cause | How common | Quick check |
|---|---|---|
| Repeated failed sign-ins triggered an automatic lockout | Very common | In your provider's dashboard: Security or Audit Logs → filter by user email and search for failed login or lockout |
| Risk policy flagged suspicious activity (new country, impossible travel, unusual device) | Common | In your provider's dashboard: Security Alerts → open the alert for the user and read the disable reason |
| HR or directory sync deactivated the user upstream | Common | In your provider's dashboard: Directory Sync or Provisioning Logs → filter by user email |
| An admin workflow or automation rule disabled the account | Sometimes | In your provider's dashboard: Audit Logs → filter action:disable and check the actor field |
| License or subscription enforcement removed access and marked the account inactive | Less common | In your provider's dashboard: Billing or Licenses → search for the user and check assigned license status |
Step-by-step diagnosis
-
Open the user record first.
- Menu path: in your identity provider or app admin dashboard, go to
UsersorDirectory→ search for the user's email → open the profile. - This is your problem if you see a status like:
Disabled Suspended Inactive Blocked - If the account is not disabled there, stop and check the specific app instead; this runbook assumes the account really was disabled.
- Menu path: in your identity provider or app admin dashboard, go to
-
Check the exact disable event in audit logs.
- Menu path:
SecurityorAdmin→Audit Logs→ filter by the user's email and by actions containingdisable,suspend,block, ordeactivate. - This is your problem if you find an event with a reason such as:
reason=too_many_failed_logins reason=impossible_travel source=scim actor=automation - Jump to the matching fix section below.
- Menu path:
-
If the reason is unclear, check security alerts next.
- Menu path:
Security AlertsorDetections→ search for the user's email. - This is your problem if the alert says the account was disabled because of suspicious sign-in behavior, impossible travel (sign-ins from far-apart locations too quickly), malware, or a high-risk session.
- Jump to Fixes → Risk policy flagged suspicious activity.
- Menu path:
-
Check for repeated failed sign-ins.
- Menu path:
Sign-in LogsorAuthentication Logs→ filter by the user's email. - This is your problem if you see many failures close together, for example:
status=failed reason=invalid_password status=failed reason=mfa_denied status=blocked reason=lockout_threshold_reached - Jump to Fixes → Repeated failed sign-ins triggered an automatic lockout.
- Menu path:
-
Check directory or HR sync.
- Menu path:
Directory Sync,Provisioning, orSCIM Logs(SCIM = standard user provisioning sync) → filter by the user's email. - This is your problem if you see the account changed by sync, for example:
action=update_user active=false action=deprovision_user source=scim - Jump to Fixes → HR or directory sync deactivated the user upstream.
- Menu path:
-
Check whether an automation or admin action did it.
- Menu path:
Audit Logs→ filteraction:disable_userand inspect the actor. - This is your problem if the actor is an admin account, service account, workflow, or webhook integration.
- Jump to Fixes → An admin workflow or automation rule disabled the account.
- Menu path:
-
Check license assignment only if the logs do not show a clearer reason.
- Menu path:
Billing,Licenses, orSubscriptions→ search for the user. - This is your problem if the user lost the required license at the same time the account became inactive.
- Jump to Fixes → License or subscription enforcement removed access.
- Menu path:
View as text
[User] ---- 1. sign-in fails ----> [App] ^ | | 5. access restored | 2. auth check | v [Admin] <---- 4. disable reason ---- [IdP] | | 3. audit / alert review v [Logs / Alerts]
Fixes
Repeated failed sign-ins triggered an automatic lockout
- In the dashboard, open
Users→ select the user → clickUnlock,Unsuspend, orRe-enable. - Immediately reset the password or send a reset link from the same user page.
- Ask the user to sign out of old devices and retry with the new password.
- If your provider exposes lockout settings, review them under
Security→Authentication→Lockout Policyand confirm the threshold is reasonable.
If your provider supports API or CLI and you use it for admin tasks, the action often looks like this pattern:
curl -X POST "https://api.example.com/users/USER_ID/unlock" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
Verify it worked:
User status shows Active, and a fresh sign-in succeeds without a lockout message.
Risk policy flagged suspicious activity
- Open the alert and read the evidence: source IP, country, device, and time.
- Contact the user on a trusted channel and confirm whether the sign-in was theirs.
- If the activity was legitimate, re-enable the account from
Users→ user profile →Re-enableand require a password reset plus MFA re-registration if your provider offers it. - If the activity was not legitimate, keep the account disabled, reset the password, revoke active sessions, and review recent app activity.
A common session-revocation API pattern is:
curl -X POST "https://api.example.com/users/USER_ID/revoke-sessions" \
-H "Authorization: Bearer $TOKEN"
Verify it worked:
The alert is closed or marked resolved, the account status is correct, and new sign-ins require fresh authentication.
HR or directory sync deactivated the user upstream
⚠️ If you only re-enable the user in the app but do not fix the upstream directory record, the next sync may disable them again.
- Open
Directory SyncorProvisioning Logsand confirm the source system changed the user to inactive. - In the upstream directory or HR system, find the user and set them back to active.
- Run a manual sync if your provider offers one, usually under
Directory Sync→Sync now. - After the sync completes, re-open the user profile and confirm the status is active.
If you manage SCIM mappings yourself, the payload should send the user as active:
{
"active": true,
"userName": "user@example.com"
}
Verify it worked:
A new provisioning log shows active=true, and the user no longer flips back to disabled after sync.
An admin workflow or automation rule disabled the account
- In
Audit Logs, identify the actor: admin email, service account, webhook, or workflow name. - Open the related automation tool or integration and find the rule that disables users.
- Correct the condition, for example changing a bad match from all inactive sessions to only terminated employees.
- Re-enable the user manually after fixing the rule.
If the automation is a script calling an API, look for requests like:
grep -R "disable_user\|deactivate\|suspend" ./automation-scripts
Verify it worked:
The user stays active for at least one full sync or automation cycle, and no new disable event appears in audit logs.
License or subscription enforcement removed access
- Open
Billing,Licenses, orSubscriptionsand check whether the user still has the required seat or product license. - Reassign the missing license.
- If the platform separates license state from account state, re-enable the user from the user profile after assigning the license.
A license assignment API often looks like:
curl -X POST "https://api.example.com/users/USER_ID/licenses" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"license":"standard"}'
Verify it worked:
The user profile shows the required license assigned, and the app no longer says the account is inactive or blocked.
Prevention
- Add an alert that separates disable reasons instead of one generic message. For example, send different notifications when the reason contains
too_many_failed_logins,impossible_travel, orsource=scim.
{
"match": {
"action": "disable_user"
},
"group_by": ["reason", "source"],
"notify": ["security@example.com", "it-ops@example.com"]
}
- Keep a daily export of disable events to a searchable log tool so you can answer "who disabled this and why" quickly.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.example.com/audit-logs?action=disable_user&since=24h"
- If you use HR or SCIM provisioning, add a pre-sync check that flags unexpected deactivations before they apply.
jq '.users[] | select(.active==false) | .userName' scim-preview.json
- Require MFA for admin accounts and service accounts that can disable users. This reduces accidental or malicious disable actions from compromised admin credentials.
- Add a review for automation rules that call disable, suspend, or deactivate actions. Store those rules in version control and require approval before changes.
grep -R "disable\|suspend\|deactivate" ./infra ./automation
- Track lockout spikes. If many users are being auto-disabled after failed sign-ins, that often points to password spraying (many accounts tested with common passwords) or a broken password manager rollout.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.example.com/signin-logs?reason=lockout_threshold_reached&since=1h"
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI