In a world where data moves fast, automation is no longer a nice-to-have, it’s essential. ETL pipelines handle the hard part: cleaning, transforming, and preparing your data. Then, Logic Apps take over to refresh your Power BI reports.
At least, that’s how it’s supposed to work.
Using the native Power BI connector in Logic Apps, you can trigger the refresh. But then, silence, no status, no clue whether it succeeded, failed, or is still stuck in the refresh void. If you have ever built a data pipeline only to realize you have no idea whether the final report is up to date… you’re not alone.
Let’s break open this black box.
The Power BI Refresh Riddle
It’s Monday morning. You open your inbox and there it is:
“The dashboard hasn’t updated. The numbers are wrong. Can you check?”
You log into Power BI Service. Everything looks fine, at first glance. But is it really?
Here’s the problem: While the Logic Apps connector lets you initiate a dataset refresh, it doesn’t tell you what happened after that. No status. No alerts. Just fire-and-forget. And while Microsoft Fabric’s Monitoring Hub offers insights, it requires you to log in and sift through activity logs manually. That’s helpful, but not hands-free.
You need something better, something that fits in your workflow, not something that adds more manual steps.
The Solution: Custom Connector + Logic Apps = The Refresh That Talks Back
Imagine this instead:
Your data pipeline ends, kicks off a Logic App, and you get a Teams ping:
“Sales dataset refreshed successfully at 6:12 AM.”
Or:
“Warning! Sales dataset failed to refresh. Investigate before 9 AM.”
No more guessing. No endless page refreshes. Just clear answers, when you need them.
Here’s how we do it:
- Step 1: Build a custom connector in Logic Apps that wraps the Power BI REST API.
- Step 2: Use this connector to start a dataset refresh.
- Step 3: Then, get latest refresh status and based on the result, send automated alerts via email or Teams.
Now your refresh isn’t just triggered — it’s tracked and reported.
Let’s See It in Action
Here’s how to make it happen, from setup to notification, with no full-blown code.
Prerequisites
Before we dive into Logic Apps and connectors, make sure you have the following in place:
- Register an App in Azure AD
To authenticate your Logic App and custom connector with Power BI’s REST API, you will need to register an application in Azure Active Directory and obtain the Client ID and Client Secret.
Follow this guide to set it up.
Step 1: Build a custom connector
- Go to Azure portal> create a resource > logic apps custom connector
- Complete the form with appropriate values and click Review+create.

- After the deployment, click on edit to start building the custom connector.

General
- In the General tab, select the API endpoint and Import mode for the connector. We will use REST API and OpenAPI file as the import mode.

- In the General Information tab, you can optionally upload a connector icon and add a description. To proceed, use the following details to populate the required fields.
- Scheme: HTTPS
- Host: api.powerbi.com

Security
- Now set up the security method. Select OAuth 2.0 as authentication type.

- Configure the form with the following informtaion:
- Identity Provider: Azure Active Directory
- Client ID: Use the client ID that you got after the app registration
- Client Secret: Use the client secret
- Authorization URL: https://login.microsoftonline.com
- TenantID: common
- ResourceURL: https://analysis.windows.net/powerbi/api
Save the connector to generate the Redirect URL.

Definition
- In the Definition tab, you can either fill out the form manually or from General tab import a Swagger file from GitHub. Since the Swagger contains over 200 actions and locating the specific ones we need can be time-consuming, I’ll opt to fill out the form manually.

- Scroll down to the Request section. Click on ‘Import from sample’ and enter the following details:
- Verb: GET

- Add the default response in the body

After the setup the validation will look like the picture below,

Once you’ve registered this connector:
- Create a Logic App with a HTTP trigger or let your pipeline call it via Web API.
- Call Start Refresh.
- Delay until the refresh ends.
- Get Latest Refresh Status.
- Alert your stakeholders.

No coding gymnastics. Just clear answers.
How Much Does It Cost?
Let’s break it down:
Component | Estimated Cost (per 1,000 runs) |
Logic Apps Execution | ~$1.00–$2.00 |
Custom Connector Calls | $0 (no premium APIs used) |
Power BI API Usage | Free with existing license |
Azure Key Vault Access | ~$0.03 per 10,000 secret fetches |
Notifications (Email/Teams) | Included in Logic Apps Standard Tier |
That’s a low price to pay for sleeping peacefully on Sunday night.
Why This Is Worth Building
This goes beyond automation. It’s about enabling scalable, secure, and efficient workflows.
- No developer dependency. Complex processes can be built visually using Logic Apps.
- Reusable architecture. A single Logic App can support multiple datasets through simple parameterization.
- Secure implementation. Integration with Azure Key Vault ensures that credentials are managed properly, eliminating the need for hardcoded secrets.
In the process, this approach demonstrates how to create a custom connector, how to invoke APIs within Logic Apps, and how to build end-to-end automation using native Azure services.
While this example focuses on Power BI refresh monitoring, it represents just one of many opportunities. With access to hundreds of APIs, similar methods can be applied to streamline operations, improve reliability, and reduce manual overhead across a wide range of business scenarios.
Conclusion: The End of the “Did It Refresh?” Era
The next time your client sends that Monday morning panic email, surprise them.
Let them know you already knew, because you were notified 10 minutes after the failure. Or better yet, let them never need to ask.
By pairing Logic Apps with a custom Power BI connector, you unlock a no-code power move that most data teams are still dreaming about. Monitoring doesn’t have to be a luxury, it can be your default.