Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Microsoft Power BI

Connect Bubble to Microsoft Power BI by using the API Connector to chain two server-side calls: first exchange your Azure AD app credentials for a Bearer access token, then call Power BI's GenerateToken endpoint to get a short-lived embed token. Inject that token into an HTML element on your Bubble page to display a live Power BI report — no external backend required, because Bubble's API Connector keeps your Azure client_secret private.

What you'll learn

  • How to register an Azure AD application and grant it Power BI API permissions
  • How to configure two API Connector call groups for Azure AD token exchange and Power BI GenerateToken
  • How to chain Bubble Workflows to fetch a token, call GenerateToken, and store the embed token
  • How to embed a Power BI report in a Bubble HTML element using the powerbi-client CDN
  • How to schedule automatic embed token refresh using a Backend Workflow (paid plan)
  • How to protect any Power BI data written to the Bubble database with privacy rules
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced19 min read3–5 hoursAnalyticsLast updated July 2026RapidDev Engineering Team
TL;DR

Connect Bubble to Microsoft Power BI by using the API Connector to chain two server-side calls: first exchange your Azure AD app credentials for a Bearer access token, then call Power BI's GenerateToken endpoint to get a short-lived embed token. Inject that token into an HTML element on your Bubble page to display a live Power BI report — no external backend required, because Bubble's API Connector keeps your Azure client_secret private.

Quick facts about this guide
FactValue
ToolMicrosoft Power BI
CategoryAnalytics
MethodBubble API Connector
DifficultyAdvanced
Time required3–5 hours
Last updatedJuly 2026

Embedding Power BI Reports Inside a Bubble App

Power BI's 'embed for your customers' (app-owns-data) model lets you display a Power BI report inside any web application without requiring end users to have a Power BI licence. The flow has three stages: (1) your server exchanges Azure AD credentials for a Bearer access token, (2) your server calls Power BI's GenerateToken API to get a short-lived embed token tied to a specific report, and (3) the browser renders the report by loading the powerbi-client JavaScript SDK and calling powerbi.embed() with that token.

In FlutterFlow, stages one and two require a Cloud Function because the client cannot hold Azure credentials. In Bubble, the API Connector runs stages one and two server-side natively — marking the Authorization header as 'Private' keeps your Azure client_secret out of the browser entirely. The result is a cleaner architecture with fewer moving parts.

One important caveat: embed tokens expire after approximately 60 minutes. Refreshing them automatically requires a Bubble Backend Workflow scheduled to run every 55 minutes — and Backend Workflows are only available on paid Bubble plans. Free-plan users will see the embedded report go blank when the token expires.

Integration method

Bubble API Connector

Bubble's API Connector calls the Azure AD OAuth 2.0 token endpoint and the Power BI REST API server-side, keeping your Azure client_secret private in a 'Private' header.

Prerequisites

  • A Microsoft Azure account with permission to register Azure AD applications
  • A Power BI Pro licence or Power BI Premium / Embedded capacity (required for the app-owns-data GenerateToken flow — a free Power BI account will return 403 on GenerateToken)
  • At least one Power BI workspace containing a published report
  • A Bubble app on a paid plan if you want automatic token refresh via Backend Workflows
  • The API Connector plugin installed in your Bubble app (Plugins tab → Add plugins → search 'API Connector' by Bubble → Install)

Step-by-step guide

1

Register an Azure AD Application and Grant Power BI API Permissions

Open the Azure portal (portal.azure.com) and navigate to Azure Active Directory → App registrations → New registration. Give the app a name like 'Bubble Power BI Embed', set the supported account type to 'Accounts in this organizational directory only', and leave the redirect URI blank for a service-to-service flow. Click Register. After registration, copy three values from the Overview tab: the Application (client) ID, the Directory (tenant) ID, and the Object ID. You will need all three in your Bubble configuration. Next, go to Certificates & secrets → Client secrets → New client secret. Add a description, choose an expiry period, and click Add. Copy the Value immediately — it is only shown once. This is your Azure client_secret. Now go to API permissions → Add a permission → APIs my organization uses → search for 'Power BI Service'. Select 'Delegated permissions' and add Report.Read.All and Dataset.Read.All. Then click 'Grant admin consent for [your tenant]'. The status column must show a green checkmark — without admin consent, every API call will return 401 Unauthorized. Finally, go to your Power BI workspace in the Power BI service (app.powerbi.com), open the workspace settings, and add the Azure AD application as a Member. This step is separate from the Azure AD API permissions and is the most commonly missed step — GenerateToken returns 403 until the service principal is a workspace member.

azure_ad_setup_reference.json
1{
2 "azure_ad_values_to_copy": {
3 "tenant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
4 "client_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
5 "client_secret": "[copy immediately — shown only once]"
6 },
7 "required_permissions": [
8 "Power BI Service → Report.Read.All",
9 "Power BI Service → Dataset.Read.All"
10 ],
11 "admin_consent": "required"
12}

Pro tip: If you see 'AADSTS700016: Application with identifier was not found in the directory', your tenant_id is wrong. Double-check the Directory (tenant) ID on the Azure AD Overview page, not the App Overview page.

Expected result: An Azure AD app registration with client credentials, admin-consented Power BI API permissions, and the service principal added as a Member of your target Power BI workspace.

2

Create API Connector Group 1: Fetch the Azure AD Access Token

In your Bubble app, click the Plugins tab in the left sidebar. If you do not already have it, click 'Add plugins', search for 'API Connector' (the plugin by Bubble), and click Install. Inside the API Connector, click 'Add another API'. Name this API group 'Azure AD Token'. Set the base URL to https://login.microsoftonline.com. Leave authentication as 'None' — you will include all credentials in the request body. Click 'Add another call' inside this group. Name the call 'Get Access Token'. Set the method to POST. Set the endpoint path to /[YOUR_TENANT_ID]/oauth2/v2.0/token — replace [YOUR_TENANT_ID] with the actual tenant ID you copied from Azure AD. In the Body section, change the body type to 'Form data' (not JSON — the Azure AD token endpoint requires application/x-www-form-urlencoded). Add five body parameters: grant_type (value: client_credentials), client_id (your Azure app client ID, Private checkbox unchecked — this is a public identifier), client_secret (your Azure client secret, Private checkbox CHECKED — this is the sensitive credential), scope (value: https://analysis.windows.net/powerbi/api/.default), and a fifth param for any optional assertion if needed. Mark client_secret as Private. This single checkbox is what keeps your Azure secret off the browser and out of Bubble's API Connector logs visible to admin users. Set 'Use as' to 'Action'. Click 'Initialize call'. Bubble will make a real POST request — it needs a successful 200 response to detect the response shape. You should see a JSON response containing access_token, token_type (Bearer), and expires_in. If you see 'There was an issue setting up your call', the most common causes are: wrong tenant_id in the endpoint path, missing admin consent on the Azure AD app, or client_secret containing special characters that need URL encoding in form data.

azure_ad_token_call.json
1{
2 "method": "POST",
3 "url": "https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/token",
4 "body_type": "form_data",
5 "body_params": {
6 "grant_type": "client_credentials",
7 "client_id": "{{client_id}}",
8 "client_secret": "<private>",
9 "scope": "https://analysis.windows.net/powerbi/api/.default"
10 },
11 "use_as": "Action"
12}

Pro tip: The scope value must end with /.default — this is not a standard OAuth scope name. It tells Azure AD to use the delegated permissions granted on the app registration. Using 'https://analysis.windows.net/powerbi/api' without /.default returns a malformed scope error.

Expected result: A successful Initialize call response containing access_token, token_type: 'Bearer', and expires_in: 3599 (or similar). The call now appears as an action available in Bubble Workflows.

3

Create API Connector Group 2: List Reports and Call GenerateToken

Click 'Add another API' in the API Connector to create a second API group. Name it 'Power BI REST API'. Set the base URL to https://api.powerbi.com/v1.0/myorg. Add a shared header to this group: Key = Authorization, Value = Bearer [leave empty for now — you will populate it dynamically from a Bubble Workflow], and check the Private checkbox. This header is marked Private so that Bubble never logs the Bearer token in the API Connector response panel. Add three calls inside this group: 1. 'List Workspaces' — GET /groups. Use as Data. Initialize this call using a real access token (you can temporarily hardcode one from Postman or the Azure AD token call above, then remove it after initialization). This call returns a JSON array of workspace objects with id and name fields that you can browse in Bubble. 2. 'List Reports in Workspace' — GET /groups/[workspaceId]/reports. Use as Data. Use a real workspace ID for initialization. Returns report objects with id, name, datasetId, and embedUrl fields. 3. 'Generate Embed Token' — POST /groups/[workspaceId]/reports/[reportId]/GenerateToken. Method POST, body type JSON, body: {"accessLevel": "view"}. Use as Action. Initialize with real workspace and report IDs. Returns {"token": "...", "tokenId": "...", "expiration": "2024-..."}. For all three calls, the Authorization header value will be passed dynamically from a Bubble Workflow — the Initialize call needs a real token to succeed, but in production the token comes from the Bubble database after the Azure AD token exchange runs. If GenerateToken returns 403, the most common cause is that the Azure AD service principal has not been added as a Member of the Power BI workspace — go to app.powerbi.com → workspace → settings → add the app as Member.

power_bi_api_calls.json
1{
2 "api_group": "Power BI REST API",
3 "base_url": "https://api.powerbi.com/v1.0/myorg",
4 "shared_headers": [
5 {
6 "key": "Authorization",
7 "value": "Bearer {{access_token_from_workflow}}",
8 "private": true
9 }
10 ],
11 "calls": [
12 {
13 "name": "List Workspaces",
14 "method": "GET",
15 "path": "/groups",
16 "use_as": "Data"
17 },
18 {
19 "name": "Generate Embed Token",
20 "method": "POST",
21 "path": "/groups/{{workspaceId}}/reports/{{reportId}}/GenerateToken",
22 "body": { "accessLevel": "view" },
23 "use_as": "Action"
24 }
25 ]
26}

Pro tip: You need a real successful response to initialize each call — Bubble cannot detect the response shape from a failed call. Use a valid access_token obtained manually (e.g., from the Azure AD token call in step 2 or from Postman) as the Authorization value during initialization only.

Expected result: Three initialized API calls in the Power BI REST API group: List Workspaces (returns workspace array), List Reports (returns report array with embedUrl), and Generate Embed Token (returns token string and expiration timestamp).

4

Build a Bubble Workflow to Chain Token Exchange, GenerateToken, and Database Storage

Now connect the two API groups in a Bubble Workflow so that clicking a button or loading a page fetches a live embed token. Create a button on your page labelled 'Load Report'. Open the Workflow editor and add an event: 'When Button Load Report is clicked'. Add actions in this order: Action 1: 'Plugins → Azure AD Token - Get Access Token'. This runs the Azure AD token call. When the action completes, the result (access_token) is available as the 'result of step 1'. Action 2: 'Make changes to a Thing' — create or update a database record of a new data type called 'PowerBI Token' with fields: access_token (text), embed_token (text), embed_url (text), token_expires_at (date), report_id (text). Set access_token = 'Result of Step 1's access_token'. Action 3: 'Plugins → Power BI REST API - Generate Embed Token'. In the Authorization dynamic field, enter 'Bearer ' followed by 'Result of Step 1's access_token'. Set workspaceId and reportId to the correct IDs (you can store these in Option Sets or App State for flexibility). When complete, the result contains token and expiration. Action 4: 'Make changes to a Thing' — update the PowerBI Token record: embed_token = 'Result of Step 3's token', embed_url = [the embedUrl from your List Reports call or a fixed URL], token_expires_at = 'Current date/time' + 55 minutes (use Bubble's date arithmetic: 'Current date/time + 3300 seconds'). On page load, add a conditional check: 'When page is loaded → if PowerBI Token's token_expires_at < Current date/time → run the full workflow chain to refresh the token.' This entire chain runs server-side. The embed token appears in the Bubble database and is available to the HTML element on the page — the Azure client_secret never leaves Bubble's servers.

bubble_workflow_chain_reference.txt
1// Workflow action sequence (Bubble visual editor — not actual code)
2// Event: Button 'Load Report' is clicked
3//
4// Step 1: Plugins → Azure AD Token - Get Access Token
5// (no params needed — client_id, client_secret in API Connector)
6//
7// Step 2: Create a new PowerBI Token
8// access_token = Step 1's access_token
9//
10// Step 3: Plugins → Power BI REST API - Generate Embed Token
11// Authorization = "Bearer " + Step 1's access_token
12// workspaceId = App State workspaceId
13// reportId = App State reportId
14//
15// Step 4: Make changes to PowerBI Token
16// embed_token = Step 3's token
17// embed_url = Step 3's embedUrl (or stored embedUrl from List Reports)
18// token_expires_at = Current date/time + 3300 seconds

Pro tip: If you see 'Result of Step 1 is empty' in your workflow, the Azure AD token call failed silently. Open Logs tab → Workflow logs in Bubble to see the raw API response. A 400 from Azure AD usually means the scope parameter is missing or malformed.

Expected result: A PowerBI Token record in your Bubble database containing a valid embed_token string and an embed_url — both ready to be read by the HTML element in the next step.

5

Embed the Power BI Report in a Bubble HTML Element

Add an HTML element to your Bubble page (from the Add menu, search 'HTML'). Resize it to the dimensions you want for the report viewer — for example, 900 x 600 pixels. Inside the HTML element, paste the code below. The key dynamic values are the embed_token and embed_url — you need to pull these from the Bubble database using Bubble's dynamic text expressions. In Bubble's HTML editor, place your cursor where the embed token should go, then click 'Insert dynamic data' and select 'Do a search for PowerBI Token → First item's embed_token'. Do the same for the embed URL. These dynamic expressions are evaluated server-side when Bubble renders the page, so the token is injected into the HTML before it reaches the browser. The powerbi-client library (loaded from Microsoft's CDN) handles rendering the report, zoom controls, full-screen toggle, and filter pane — you do not need to write any custom JavaScript beyond the embed configuration shown below. If you want the report to reload when the embed token is refreshed (after the Workflow in step 4 runs), add a 'Trigger workflow on page load' condition: 'When PowerBI Token's embed_token is changed → re-render HTML element' using Bubble's 'Reset relevant inputs' action or a conditional visibility toggle.

power_bi_embed_html.html
1<!-- Paste into Bubble HTML element -->
2<div id="reportContainer" style="width:100%;height:600px;"></div>
3
4<script src="https://cdn.jsdelivr.net/npm/powerbi-client@2.23.1/dist/powerbi.min.js"></script>
5<script>
6 var models = window['powerbi-client'].models;
7 var embedConfiguration = {
8 type: 'report',
9 id: '[REPORT_ID]',
10 embedUrl: '[DYNAMIC: PowerBI Token first item embed_url]',
11 accessToken: '[DYNAMIC: PowerBI Token first item embed_token]',
12 tokenType: models.TokenType.Embed,
13 settings: {
14 panes: {
15 filters: { expanded: false, visible: true }
16 },
17 background: models.BackgroundType.Transparent
18 }
19 };
20 var container = document.getElementById('reportContainer');
21 var report = powerbi.embed(container, embedConfiguration);
22</script>

Pro tip: Replace [REPORT_ID] with your actual Power BI report GUID, and replace the two [DYNAMIC: ...] placeholders with Bubble's 'Insert dynamic data' expressions pointing to your PowerBI Token database fields. The CDN version pinned here (2.23.1) is stable — check Microsoft's npm page for the latest version if you need newer features.

Expected result: A live, interactive Power BI report rendered inside your Bubble page. Users can interact with report visuals, apply filters, and drill down — all without a Power BI Pro licence on their account.

6

Schedule Automatic Token Refresh via Backend Workflow (Paid Plan)

Embed tokens expire after approximately 60 minutes. Without automatic refresh, the report iframe will go blank mid-session and users will need to reload the page manually. To prevent this, set up a Bubble Backend Workflow that runs the token chain every 55 minutes. Note: Backend Workflows (also called API Workflows with scheduling) require a paid Bubble plan. If you are on the free plan, you can only refresh the token on page load — but sessions longer than 60 minutes will fail. To create the scheduled workflow: 1. Go to Settings tab → API → check 'This app exposes a Workflow API'. This enables the Backend Workflows section. 2. In the left sidebar, click 'Backend workflows'. Click 'Add a new API workflow'. Name it 'Refresh Power BI Token'. 3. Inside this workflow, add the same three-action chain from step 4 (Get Access Token → GenerateToken → update PowerBI Token record). 4. After saving, click the clock icon on the workflow to create a recurring schedule: run every 55 minutes. Alternatively, trigger the refresh from the client side: add a Bubble Workflow that runs every 55 minutes using the 'Schedule current workflow to run again in X seconds' action within a recurring server-side event, or use a page-level timer with 'Trigger API workflow' to call the backend endpoint. For high-traffic Bubble apps where many users are viewing the same report, use one shared embed token stored in the database (refreshed by the scheduler) rather than generating a unique token per user per session. This reduces WU consumption significantly — each token generation call consumes WUs, and generating hundreds of tokens per hour will add up quickly on Bubble's usage-based pricing.

backend_workflow_token_refresh.txt
1// Backend Workflow: 'Refresh Power BI Token'
2// Settings → API → expose Workflow API → enabled
3// Backend Workflows → New API Workflow → 'Refresh Power BI Token'
4//
5// Action 1: Azure AD Token - Get Access Token
6// Action 2: Power BI REST API - Generate Embed Token
7// Authorization = "Bearer " + Step 1's access_token
8// workspaceId = [App data workspaceId]
9// reportId = [App data reportId]
10// Action 3: Make changes to PowerBI Token
11// embed_token = Step 2's token
12// token_expires_at = Current date/time + 3300 seconds
13//
14// Scheduled: every 55 minutes (3300 seconds)

Pro tip: RapidDev's team has built internal Bubble tools with Power BI embeds and the most reliable pattern is a single shared embed token refreshed by a scheduled Backend Workflow — if you are unsure whether app-owns-data or user-owns-data is right for your use case, book a free scoping call at rapidevelopers.com/contact.

Expected result: A scheduled Backend Workflow that automatically refreshes the Power BI embed token every 55 minutes, ensuring the report never goes blank during active user sessions.

Common use cases

Internal KPI Dashboard for Operations Teams

Surface Power BI reports directly inside a Bubble operations portal so that non-technical staff can view live KPI dashboards without needing a Power BI Pro licence or logging into the Power BI service separately.

Bubble Prompt

Show the Q2 revenue dashboard embedded in our Bubble operations app, refreshing the embed token automatically so the report never goes blank.

Copy this prompt to try it in Bubble

Client-Facing Analytics Portal

Build a Bubble app where each client logs in and sees their own Power BI report — filtering by workspace ID or report ID stored against their Bubble account — without exposing credentials or the underlying data of other clients.

Bubble Prompt

Embed the correct Power BI report for the logged-in client account, scoping the GenerateToken call to that client's workspace and report IDs.

Copy this prompt to try it in Bubble

Executive Summary Page with On-Demand Refresh

Create a Bubble page where executives click a 'Refresh Report' button to trigger an on-demand dataset refresh via the Power BI REST API, then view the updated report embedded in the same page.

Bubble Prompt

On button click, call the Power BI dataset refresh endpoint, wait 30 seconds, then regenerate the embed token and reload the report iframe.

Copy this prompt to try it in Bubble

Troubleshooting

GenerateToken returns 403 Forbidden even though Azure AD credentials are correct

Cause: The Azure AD service principal (your registered app) has not been added as a Member of the Power BI workspace. This is a separate step from granting Azure AD API permissions — both are required.

Solution: Go to app.powerbi.com → open the target workspace → click the three-dot menu → Workspace access. Add the Azure AD application name as a Member. Allow 1-2 minutes for the permission to propagate, then retry the GenerateToken call.

Azure AD token call returns 'There was an issue setting up your call' during Initialize in API Connector

Cause: The Initialize call failed — either the tenant_id in the endpoint URL is wrong, the client_secret contains special characters that are not URL-encoded in the form data body, or admin consent has not been granted on the Power BI API permissions.

Solution: Open the Azure portal → your app registration → API permissions and confirm the green checkmark under 'Status' for Power BI Service permissions. Copy the tenant_id from Azure AD → Overview (not the app's Overview). If the client_secret contains characters like +, =, or /, generate a new secret with only alphanumeric characters.

The embedded report goes blank after approximately 60 minutes

Cause: Power BI embed tokens expire after ~60 minutes and there is no auto-refresh in the powerbi-client SDK without a new token from your server.

Solution: If you are on a paid Bubble plan, set up the Backend Workflow scheduler from step 6. If you are on the free plan, add a client-side Bubble Workflow triggered by a timer: 'Every 55 minutes → run the token refresh workflow chain → reset the HTML element to reload with the new token'. The HTML element will briefly flash as it re-embeds.

Power BI API returns 401 Unauthorized on report or dataset calls after the Azure AD token was successfully fetched

Cause: The scope parameter used in the Azure AD token call is missing or incorrect. The correct scope for Power BI API is exactly 'https://analysis.windows.net/powerbi/api/.default' — missing the /.default suffix produces a token that is accepted by Azure AD but rejected by the Power BI API.

Solution: In your API Connector → Azure AD Token - Get Access Token → body params, verify the scope value is exactly: https://analysis.windows.net/powerbi/api/.default. Re-initialize the call after correcting it.

Azure client_secret appears in Bubble's API Connector response logs visible to admin users

Cause: The Private checkbox was not checked on the client_secret body parameter in the API Connector. Bubble logs all non-Private parameters in the Logs tab.

Solution: Open the API Connector → Azure AD Token - Get Access Token → find the client_secret body parameter → check the Private checkbox. Save and re-initialize. Immediately rotate the client_secret in Azure AD if it was exposed.

Best practices

  • Always mark your Azure client_secret as Private in the API Connector body parameters — this is what prevents Bubble from logging it and exposing it to admin users in the Logs tab.
  • Use one shared embed token stored in the Bubble database for all users viewing the same report, refreshed by a Backend Workflow scheduler — this reduces WU consumption versus generating a per-user token on every session.
  • Store your workspaceId and reportId in Bubble's App Data or Option Sets rather than hardcoding them in Workflows — this makes it easy to switch reports without editing multiple Workflows.
  • Add privacy rules to any Bubble data type that stores Power BI data (such as the PowerBI Token record) — restrict it so only logged-in users with the correct role can read the embed token via the Data API.
  • Set a token_expires_at field on your PowerBI Token record and check it on page load before triggering a full token refresh — this avoids unnecessary Azure AD calls (and WU costs) when the token is still valid.
  • Power BI Pro or Embedded capacity is a hard prerequisite for the app-owns-data GenerateToken flow — verify your Power BI licence tier before building. Without it, GenerateToken will always return 403 regardless of how correctly Bubble is configured.
  • For apps with many concurrent users, consider Bubble's WU budget: two API calls (Azure AD token + GenerateToken) per token generation event. Use the scheduler pattern (one refresh every 55 minutes, shared token) rather than per-user-per-session generation to stay within WU budgets on lower Bubble plans.

Alternatives

Frequently asked questions

Do my Bubble app users need a Power BI Pro licence to view the embedded report?

No. The app-owns-data embed model (GenerateToken) is specifically designed for this scenario. Your Azure AD application acts as the licensed entity. End users of your Bubble app view the report through the embed token without needing their own Power BI licence. You need Power BI Pro (or Embedded/Premium capacity) at the application level, not per viewer.

Can I use this integration on Bubble's free plan?

Partially. The Azure AD token exchange and GenerateToken calls work on any Bubble plan. What does not work on the free plan is the scheduled Backend Workflow for automatic token refresh — Backend Workflows require a paid Bubble plan. On the free plan, you can refresh the token on every page load, but users in sessions longer than 60 minutes will see the report go blank.

Why does GenerateToken return 403 even though my API permissions in Azure AD are set correctly?

The most common cause is that the Azure AD app (service principal) has not been added as a Member of the Power BI workspace. Go to app.powerbi.com → your workspace → Workspace access → add your app. This step is separate from Azure AD API permissions and is frequently missed. Also confirm your Power BI tenant has the 'Allow service principals to use Power BI APIs' setting enabled in the Admin portal.

Can I filter the Power BI report based on the logged-in Bubble user?

Yes, using Power BI row-level security (RLS). Define an RLS role in Power BI Desktop and configure the GenerateToken call to include an identities array specifying the username and role. The embedded report will then only show data matching that user's RLS filter. This is the recommended approach for multi-tenant Bubble apps.

Can I trigger a Power BI dataset refresh from a Bubble Workflow?

Yes. Add a fourth call in your Power BI REST API group: POST /groups/{workspaceId}/datasets/{datasetId}/refreshes with an empty body and your Bearer token. Call this from a Bubble Workflow button. Be aware that Power BI Pro accounts support 8 dataset refreshes per day; Premium capacity supports 48. Exceeding this limit returns 429 Too Many Requests.

How do I find my workspaceId and reportId to use in the API calls?

Open app.powerbi.com and navigate to your report. Look at the URL — it follows the format app.powerbi.com/groups/{workspaceId}/reports/{reportId}/ReportSection. Copy these GUIDs from the URL. Alternatively, use the 'List Workspaces' and 'List Reports in Workspace' API Connector calls from step 3 to fetch them programmatically and store them in your Bubble database.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.