Forum Discussion

Nikhil_BI's avatar
Nikhil_BI
New Member
1 month ago
Solved

Detect the new reports in Power BI workspaces

Currently, there are multiple workspaces and it is difficult to track if a new Power BI report went live/got published in the list of workspaces to keep the Report Catalog up-to-date.
 
Report Catalog is an Excel-based file in SharePoint which contains the list of workspaces and report names.
 
Is there any automated way that can help us get an email notification if a new Power BI report gets published in the list of workspaces, which is not in the excel file?
 
This was the flow I was planning to build -
 
SharePoint Excel Report Catalog
Scheduled Automation
Get Reports from specified Power BI Workspaces
Compare with Report Catalog
If report not found in catalog
Send Email Notification
 
However, I am not able to do this because of below reason-
 
Access to api.powerbi.com was denied
  • 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

  • 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_BI's avatar
      Nikhil_BI
      New Member

      No, I not only want the number, but also the report names which have been recently added.

  • 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's avatar
    ShahRukhSameer
    Icon for Continued Contributor rankContinued 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:

    1. Create a scheduled Power Automate flow (daily or weekly).
    2. Use the Power BI connector and get the list of reports from each workspace.
    3. Read your Excel Report Catalog from SharePoint.
    4. Compare Report Name or Report ID from Power BI against the Excel file.
    5. 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.

  • ShivekMaharaj's avatar
    ShivekMaharaj
    Icon for Memorable Member rankMemorable 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 catalog

    I 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.