Guide · Power BI
Monitor Power BI scheduled refresh with a dead man's switch
Power BI has no built-in webhook for "refresh finished" or "refresh failed", so a dataset can sit stale for days, or an expired gateway credential can quietly break every refresh, before anyone notices in the service UI. Wire a check-in through Power Automate and Mortemain pages you the moment a scheduled refresh stops completing normally.
1. Create a check
Create a check in Mortemain matching the dataset's refresh schedule, with a grace window wide enough to cover a normal refresh (Power BI refreshes can run from under a minute to well over an hour). Copy its ping URL.
https://ping.mortemain.com/your-check-uuid
2. Build a Power Automate flow on the refresh
Power BI can't call a URL by itself, so Power Automate is the bridge. In make.powerautomate.com, create an Automated cloud flow and search for the Power BI connector's trigger:
Power BI → When a dataset refresh completes Workspace: your workspace Dataset: your dataset
This trigger fires once per refresh attempt, success or failure, and exposes a Status field (Completed or Failed) you'll branch on next. It needs the dataset to live in a Premium or Fabric capacity workspace; on a Pro-only workspace, swap it for a Recurrence trigger set to the refresh schedule instead, and skip straight to the success ping in step 3.
3. Branch on refresh status
Add a Condition action checking the trigger's Status output, then an HTTP action in each branch calling the ping URL. HTTP is a premium connector, so make sure the flow's environment has a licence that covers it.
Status is equal to Completed
Method: GET URI: https://ping.mortemain.com/your-check-uuid
Method: GET URI: https://ping.mortemain.com/your-check-uuid/fail
Calling /fail alerts immediately, instead of waiting for the check's grace window to expire, so you hear about a broken gateway credential the same morning, not three stale reports later.
4. Optional: track refresh duration
"When a dataset refresh completes" only fires once the refresh is over, so it can't ping /start itself. If you want Mortemain to report how long each refresh actually takes, add a second, small flow: a Recurrence trigger set a minute or two before the scheduled refresh time, with a single HTTP action calling /start.
Method: GET URI: https://ping.mortemain.com/your-check-uuid/start
Test it
In the Power BI service, open the dataset and click Refresh now. Check the flow's run history in Power Automate to confirm it triggered, then confirm the check flips to up in Mortemain. To test the failure path, temporarily break the data source (rename a table, or revoke a credential in the gateway) and refresh again: the down alert should land as soon as the flow's failure branch runs, not after the grace window expires.