Forum Discussion
Detect the new reports in Power BI workspaces
- 1 month ago
Yes, this is definitely possible, and your proposed flow is basically the right approach.
The key issue is the authentication to the Power BI REST API. To retrieve the reports from a specific workspace, you can call:
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports
This returns the reports in that workspace, which you can then compare against the Excel Report Catalog. Microsoft supports this endpoint for workspace report retrieval.
The Access to api.powerbi.com was denied message most likely means that the identity used by the automation does not have sufficient Power BI API/workspace access, rather than there being a problem with the flow itself.
I would recommend using a Service Principal / Entra App Registration for the automation rather than a personal user account. In the Fabric/Power BI Admin Portal, the tenant setting that allows service principals to call Fabric/Power BI APIs needs to be enabled, preferably for a dedicated security group. The service principal also needs access to each workspace that you want to monitor. Microsoft specifically documents that a service principal needs to be added to the workspace, typically as Member or Admin, before it can access the workspace content through the APIs.
So your architecture could be:
Scheduled Power Automate / Azure Function → authenticate with Entra ID → GET /groups/{workspaceId}/reports → read Excel catalog → compare report IDs/names → send email for anything missing
I would compare using the Report ID where possible rather than only the report name, because names can change or potentially be duplicated.
Another option, especially if you have Fabric Administrator access, is to use the Power BI Activity Log instead. The Activity Events API exposes tenant Power BI activities and keeps up to approximately four weeks of history. You could periodically check for report publishing/creation events and send a notification from there. However, for your specific requirement “does a report currently exist in these workspaces that isn't in my catalog?” I actually prefer your scheduled inventory comparison because it also catches reports if an event was missed.
So I wouldn't redesign the solution yet. I would first ask your Power BI/Fabric administrator to check:
- Whether the identity running the flow has access to the relevant workspaces.
- If using a service principal, whether Service principals can call Fabric public APIs / use Power BI APIs is enabled for it.
- Whether you're obtaining an Entra access token for the Power BI API before calling api.powerbi.com. Microsoft also has an HTTP with Microsoft Entra ID connector that can call Entra-authenticated endpoints from Power Automate.
Once that authentication issue is solved, the rest of the flow you designed should be relatively straightforward.
Hi Nikhil_BI,
Your approach looks fine to me, and you can actually do this without calling api.powerbi.com directly.
A simple setup would be:
- Create a scheduled Power Automate flow (daily or weekly).
- Use the Power BI connector and get the list of reports from each workspace.
- Read your Excel Report Catalog from SharePoint.
- Compare Report Name or Report ID from Power BI against the Excel file.
- If a report exists in Power BI but not in Excel:
- Send an email notification, or
- Add the report automatically to the catalog.
The "Access denied" error is usually related to permissions or tenant settings, so I'd first check:
- Do you have Workspace Admin access?
- Is Power BI REST API access enabled by your tenant admin?
- Are you using the Power BI connector or a direct HTTP call?
One alternative is to skip the comparison entirely and generate the Report Catalog automatically from workspace metadata on a schedule. That way, the Excel file is always up to date and you don't have to maintain it manually.
This is usually the approach I recommend when there are lots of workspaces and reports to track.