We’re experiencing a critical issue with our case management escalation workflow in Power Platform. Cases that exceed their SLA deadline are not being automatically escalated to senior managers as configured.
Our escalation rule is set to trigger 24 hours after case creation if status remains ‘Open’. The SLA deadline trigger appears correct in the workflow designer, but notifications simply don’t fire. We’ve verified that:
- The workflow is published and active
- Email notifications work for other triggers
- Cases are definitely exceeding the 24-hour threshold
Here’s our current flow trigger configuration:
Trigger: When a record is created or modified
Table: Cases
Condition: Status equals 'Open' AND Created On is before 24 hours ago
The notification workflow downstream should send emails to the escalation queue, but we’re seeing zero escalation emails despite having 15+ overdue cases. Has anyone encountered similar issues with time-based escalation rules in Power Automate case management flows?
I had this exact scenario last month and spent days troubleshooting before finding the right approach. Here’s the complete solution that addresses all three focus areas:
Escalation Rule Setup:
First, abandon the record-triggered flow approach. Create a new scheduled cloud flow that runs every 30-60 minutes (depending on your escalation urgency). This ensures consistent checking regardless of record modifications.
SLA Deadline Trigger Implementation:
Use the following flow structure:
- Initialize variables:
DeadlineThreshold = addHours(utcNow(), -24)
EscalatedFlag = 'Escalated'
- List rows from Cases table:
Filter: statuscode eq 1 and createdon lt @{variables('DeadlineThreshold')} and escalationstatus ne 'Escalated'
Select: caseid, title, assignedto, createdon
- Apply to each case returned, add condition to verify SLA breach calculation is correct by comparing
createdon with current time.
Notification Workflow:
For each overdue case:
- Send email using ‘Send an email (V2)’ action to escalation queue (use a shared mailbox or distribution list)
- Include case details: ID, title, owner, days overdue
- Update the case record with a custom field ‘escalationstatus’ = ‘Escalated’ and ‘escalatedon’ = current timestamp
- This flag prevents duplicate notifications on subsequent flow runs
Critical Configuration Points:
- Ensure your scheduled flow uses a service account with proper permissions (Read on Cases, Send As on mailbox)
- Set flow timeout to at least 10 minutes if you have high case volumes
- Add error handling with ‘Configure run after’ to log failures to a separate table
- Test with a small batch first by adding an additional filter like
createdon gt '{recent_date}' **Timezone Considerations:** All datetime comparisons should use UTC. If your business operates in a different timezone, adjust the addHours()offset accordingly. For example, if you're in EST and want escalations based on business days, useaddHours(utcNow(), -29)` to account for the 5-hour offset.
Validation:
After implementing, monitor the flow run history for 24-48 hours. You should see successful runs every hour with the number of cases processed. If no cases are returned but you know overdue cases exist, double-check your filter query syntax and the escalationstatus field values.
This approach has been running flawlessly in our production environment for three months, handling 200+ cases daily with zero missed escalations.
Thanks both. I checked the timezone settings and they’re consistent (UTC-5 across the board). So the issue is definitely with using a record-triggered flow for time-based conditions. That makes sense why it never fires - the record isn’t being modified after creation. How do I structure the scheduled flow to properly query overdue cases?
Mike’s right about the trigger type. Also check if your SLA deadline field is actually being calculated correctly. In our environment, we had timezone issues where the SLA calculation was using UTC but case creation timestamps were in local time. This created a 5-hour offset that made escalations either fire too early or not at all. Verify your environment’s timezone settings match your business hours configuration.
Create a scheduled cloud flow that runs every hour. Use ‘List rows’ action on your Cases table with a filter query like: statuscode eq 1 and createdon lt {timestamp_24hrs_ago}. You’ll need to calculate the 24-hour threshold using addHours(utcNow(), -24) in an expression. Then add a condition to check if each case has already been escalated (use a custom flag field), and if not, send the notification and update the flag. This prevents duplicate escalations on subsequent runs.
I’ve seen this before. Your trigger condition is checking ‘Created On is before 24 hours ago’ but that’s evaluated only when the record is modified. Time-based triggers in Power Automate need to use scheduled flows, not record-triggered flows. You need a separate scheduled cloud flow that runs hourly to check for overdue cases and trigger escalations.