Monitoring 10 min read Updated October 5, 2026

How to get notified before an Entra ID App Registration secret expires

Quick answer: Entra ID has no expiry alert you can configure for App Registration client secrets and certificates. The closest it gets is a one-time preview email to whoever holds the Application Administrator role. So you're choosing between three real options: write and run a PowerShell script yourself, use Entra's built-in recommendation, or connect a service like Token Watch that watches your tenant and pushes the alert out for you. This page compares all three honestly, method by method.

Why this is a problem in the first place

App Registrations authenticate with client secrets or certificates, and both have an expiry date — secrets typically 3 to 24 months out, certificates on whatever lifetime you issued them with. When one expires, nothing warns the app beforehand. It just starts failing, usually surfaced by AADSTS7000222 in logs.

Entra has no expiry alert you can configure. The closest it comes is a preview recommendation that emails one admin role, once, and that you otherwise have to go looking for. Everything past that is on you to build or buy.

It's confirmed repeatedly by Microsoft's own support staff on Microsoft Q&A: there is no configurable, credential-specific alert. If you want one, you're building or connecting it yourself.

Three ways to catch it, compared

Each option trades setup time against long-term ownership. None of them are wrong — they just fit different tenants.

DIY script Entra native recommendation Token Watch
Setup time Hours to days Minutes, once you find it Minutes
Who maintains it You, indefinitely Microsoft Token Watch
Alert channels Email, if you build the delivery yourself Dashboard, plus a one-time preview email to one admin role Email, Slack, Teams, webhooks — plus an Azure DevOps work-item integration
License required None beyond Graph read access Not stated in Microsoft's table; its API metadata lists Workload ID None — standard Graph read access
Warning threshold Whatever you code Fixed at 30 days Configurable
Notification strategy Whatever you code Fixed, one-time Repeat until resolved, or only on status change
Recipients Whoever you hardcode Application Administrator role only Any number, plus per-app owners on paid plans
Collaboration One script, one owner Role-gated Built-in RBAC — multiple people can contribute
Ignore a specific credential? Only if you build a suppression list No Yes — mark it untracked
Cost Your time, indefinitely Depends on your licensing (see Method 2) Free plan with email alerts; paid plans from $29/month

Method 1: a PowerShell script on a schedule

Call Microsoft Graph — Get-MgApplication, selecting keyCredentials and passwordCredentials — list every secret and certificate, check the expiry dates, and email the results. Run it from Task Scheduler, an Azure Automation runbook, or a Logic App.

It costs nothing but time, and you already have the Graph access to do it. The catch is that the script becomes a piece of infrastructure you now own. Real, commonly reported failure modes: the Graph SDK module updates and a cmdlet's output shape changes under you; Connect-MgGraph works fine interactively but the auth pattern that relies on doesn't survive unattended in a runbook; and if the schedule itself silently stops firing, you get no report and nothing tells you that you got no report.

Setup also takes longer than it looks. Even starting from a script that already works, wiring up unattended auth, testing the schedule, and getting delivery actually firing end to end takes a few hours at minimum — copy-pasting a gist rarely gets you there in one sitting.

  • Email only, unless you build Slack, Teams, or webhook delivery on top yourself.
  • No concept of app ownership — the script tells you a secret is expiring, not who to page about it.
  • Runs only when triggered. A failed schedule looks identical to a tenant with nothing expiring.
  • No granularity. There's no way to mute a single credential you don't care about — you can build a suppression list, but now that's one more thing you maintain.
  • Every new requirement is a code change. Notifying app owners instead of just yourself, adding a channel, changing how often it repeats — each one means editing the script and testing it again, not flipping a setting.
  • Reports live in an inbox or a file share. A CSV or an HTML email is awkward to hand to the rest of the team to divide up or track against.

Best fit: a single Entra admin who already lives in PowerShell, doesn't need Slack or Teams delivery, and is willing to own the maintenance for as long as the script runs.

Method 2: Entra's native recommendation

Microsoft Entra recommendations include a preview Renew expiring application credentials recommendation that flags credentials on app registrations expiring within the next 30 days. It isn't part of Identity Secure Score. It's built into the admin center, so there's nothing to install, and it can trigger a preview email — but only to whoever holds the Application Administrator role, not the app's actual owner, and only once, when the recommendation is first generated.

Licensing is unclear. Microsoft's recommendations table doesn't list a license for this one, but the sample API response in its documentation shows requiredLicenses: microsoftEntraWorkloadId (Microsoft Entra Workload ID), and Microsoft notes that license requirements for preview recommendations can change. Some tenants report not seeing it at all, so check that it appears in yours before assuming it covers you.

Even where it works, it's mostly a dashboard you have to remember to check: fixed 30-day window, not configurable, and multiple practitioners report it showing nothing even when expiring credentials clearly exist in the tenant. The full breakdown of what this recommendation does and doesn't cover goes deeper into the role gating, the licensing, and the data-freshness gaps.

Best fit: tenants that already see the recommendation, are disciplined about checking a dashboard weekly, and don't need push alerts to Slack or Teams.

Method 3: Token Watch

Token Watch connects to your tenant with read-only Microsoft Graph access, syncs your App Registrations on a schedule, and alerts you — by email, Slack, Teams, or a signed webhook — when a tracked secret or certificate is expired or inside your configured warning window.

The trade you're making is the opposite of the DIY script: no maintenance burden, but you're granting a third party consent to read your tenant. What that access is scoped to: read-only Graph permissions, and Token Watch never reads or stores the secret values themselves — only names, IDs, and expiry dates. There's a free tier if you want to see your own tenant's exposure before deciding on anything more.

What it gets you that a script or the native recommendation can't, without you having to build any of it:

  • Alerts to more than one inbox — tenant-wide recipients, plus notifications to each application's own owner on paid plans, instead of everything landing on one admin.
  • A choice of notification strategy: keep getting reminded until a credential is actually rotated, or only get notified when its status changes.
  • Delivery to email, Slack, Microsoft Teams, or a signed webhook into your own pipeline.
  • An Azure DevOps integration that goes beyond a notification: it creates a work item per expiring credential and tracks it against that secret, so rotation becomes something the team pulls into a sprint instead of an email someone has to remember.
  • Built-in RBAC, so more than one person can share monitoring duty instead of it depending on whoever wrote the script or holds the role.
  • An inventory of every credential in one screen, so you can mark the irrelevant ones untracked instead of drowning in noise.
  • A configurable warning threshold instead of a fixed 30 days.
  • No Entra license add-on needed — standard Graph read access is enough.

Which one should you actually use?

  • One admin, comfortable owning a script, email is enough. The DIY route works — just budget real maintenance time for it, not zero.
  • Already seeing the recommendation, disciplined about checking a dashboard. The native recommendation needs nothing installed. Just know it emails one admin role once, and after that you have to go looking for it.
  • You want this solved and forgotten, or want alerts somewhere other than email. That's what Token Watch is for — setup is minutes, not the few hours a DIY script needs even when you're starting from one that already works, it removes the maintenance burden, and it doesn't depend on how your tenant is licensed. It's built specifically to solve this one problem instead of doing it as a side effect of something else.

Whichever you pick, the goal is the same: find out from an alert, not from AADSTS7000222 in your error logs after something already broke.

Written by Maksym Vostruhin

Founder of Token Watch. Built it after chasing down one too many expired App Registration secrets by hand across a growing set of Entra tenants.

FAQ

Not one you can configure. There's no expiry email, Slack, or Teams notification you can set up. The closest native feature is the Renew expiring application credentials recommendation, which is preview, dashboard-first, and only emails the Application Administrator role once, when it first flags credentials expiring within 30 days.

Not natively. You'd need to build a Graph script that checks expiry dates and posts to a Slack or Teams webhook yourself, which is real build-and-maintain work on top of the script itself. Token Watch supports both channels out of the box.

Not fully. It's preview, its licensing isn't clearly documented, it uses a fixed 30-day window you can't change, and apart from one email to one admin role it's a dashboard rather than a push notification. It reduces the problem; it doesn't eliminate the need to actively watch for expiry.

Yes, if you treat it as real infrastructure: version-pin the Graph SDK, test the unattended auth path, and monitor the schedule itself so a silent failure doesn't look like a clean tenant. It's genuinely free of vendor cost, but not free of ongoing time.

Read-only Microsoft Graph access to list App Registrations and their credential metadata — names, IDs, expiry dates. It never reads or stores the secret values themselves. Confirm that scope before granting admin consent to any third-party app, Token Watch included.

Back to all guides

Top