← All guides

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.

 your 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:

 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.

 Condition
Status is equal to Completed
 If yes → HTTP action
Method: GET
URI:    https://ping.mortemain.com/your-check-uuid
 If no → HTTP action
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.

 Recurrence flow → HTTP action
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.