Forum Discussion
Detect the new reports in Power BI workspaces
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.
7 Replies
- samratpbi
Super User
Hi,
What you can do is create an usage report in the workspace and add report count to it as a KPI card. Now if you have Fabric license then you can easily add alart on it when the data changes. So when report count will change, you will get notified. Or you can create a dashboard using that KPI card and set an alart on from Dashboard. it sends alart when the value changes. So for threshold you can set zero.
If this helps to resolve your problem, then kindly mark it as solution.
Thanks - Samrat
- Nikhil_BINew Member
No, I not only want the number, but also the report names which have been recently added.
- DataTako
Resolver IV
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.
- ShahRukhSameer
Continued Contributor
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.
- v-saisrao-msft
Community Support
HI Nikhil_BI,
Have you had a chance to review the solution shared by ShivekMaharaj DataTako ShahRukhSameer ? If the issue persists, feel free to reply so we can help further.
Thank you.
- v-saisrao-msft
Community Support
Hi Nikhil_BI,
Checking in to see if your issue has been resolved. let us know if you still need any assistance.
Thank you.
- ShivekMaharaj
Memorable Member
Hi Nikhil_BI,
Since you need the report names, not just a count, I would keep the comparison approach you already had in mind rather than trying to solve this with Usage Metrics alone.
For each workspace, you can use the Power BI Get Reports In Group API to retrieve the current list of reports.
Conceptually:
SharePoint / Excel report catalog ↓ Scheduled automation ↓ Get reports from each monitored workspace ↓ Compare current report IDs/names against the catalog ↓ New report found ↓ Send notification + update catalogI would compare using the report ID as the stable key and keep the report name as descriptive metadata. That way a rename does not get treated as a completely new report.
If you have Fabric / Power BI admin access, another option is the Power BI activity log. Microsoft keeps up to four weeks of activity history, so you can query the audit events and detect report creation/publishing activity directly rather than repeatedly comparing the entire catalog.
For your scenario, though, I would probably start with the REST comparison because you already maintain a report catalog and only care about a known set of workspaces.
The api.powerbi.com access error is then a separate authentication/permission issue. If you are using a service principal, Microsoft documents that Power BI API access for the application is controlled through the Power BI/Fabric admin settings rather than simply adding delegated API permissions to the app registration.
So I would first get Get Reports In Group working for one test workspace, then build the catalog comparison and notification around that.
AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.