GA4 to Power BI: every route, what each one costs, and what each one gets wrong
Power BI can read Google Analytics 4 (GA4) today: its built-in Google Analytics connector queries the Google Analytics Data API, and for one property and a modest report the built-in connector is the right first try. Four other routes exist. The GA4 BigQuery export, free to link and read through Power BI's BigQuery connector, is the pick when you need raw event-level data or when many reports would otherwise share one property's API quota. A paid partner connector such as Windsor.ai or Supermetrics is the pick when nobody on the team wants to own quotas or SQL. Manual CSV export suits a one-off look and nothing recurring. TableBI is the fifth route and a different kind of answer: TableBI is not a Power BI connector, and it replaces the Power BI step for recurring marketing questions by syncing GA4 into its own store for an AI agent to query. This guide prices each route in money and in upkeep, names the failure each one tends to hit, and ends with the costs nobody quotes up front: viewer licences, API quota, withheld rows and numbers that never quite match the GA4 interface.
Route 1 — Power BI's built-in Google Analytics connector
Power BI Desktop ships a first-party Google Analytics connector under Get Data → Online Services → Google Analytics. According to Microsoft's connector documentation, the connector reads GA4 through V1 of the Google Analytics Data API when the Implementation = "2.0" setting is used, and Microsoft calls that setting the default; the Desktop walkthrough on the same page still labels Implementation 2.0 as Beta. The connector supports Import only, so each scheduled refresh runs its queries against GA4 again. Sign-in is a Google account that can see the property.
What it costs: nothing beyond Power BI itself. Power BI Desktop is a free download and the connector adds no fee. The bill arrives when the report is shared, which the licensing section below prices.
What it gets wrong: the connector spends a quota that belongs to the GA4 property, not to your report. Google's Data API quota table gives a standard property 200,000 core tokens per day and 40,000 per hour, caps any single Google Cloud project at 14,000 tokens per property per hour, and allows 10 concurrent requests per property. Google says most requests cost 10 or fewer tokens, with cost rising with rows, dimensions and metrics, filter complexity, date-range length and cardinality: a fair description of a wide, page-level Power BI import. Microsoft's page quotes a Power BI allowance of 1,500,000 queries per day, but Google's GA4 quota counts tokens per property, a different unit.
The trap: an empty quota bucket fails the refresh, and four failures switch the schedule off. When any quota bucket is empty, the Data API fails the request immediately with a 429 error, according to Google's quota-management guide. Power BI deactivates a refresh schedule after four consecutive failures, per Microsoft's scheduled-refresh documentation, and someone has to switch the schedule back on by hand. Google resets daily GA4 quotas at midnight Pacific Standard Time.
Two quieter limits sit underneath the quota. Microsoft's troubleshooting section warns that Google Analytics returns only a subset of values when date ranges are very large, and suggests appending several queries with shorter date ranges instead. The Data API also applies GA4's privacy thresholds and its (other) row, both covered in the costs section below.
Verdict: the right first try for one property, a handful of dimensions and a daily refresh. Plan another route before a model pulls page-level detail across many months, or before several reports and tools lean on the same property.
Route 2 — GA4's BigQuery export, then Power BI's BigQuery connector
GA4 can export raw events into a BigQuery dataset you own, and Power BI reads BigQuery through its Google BigQuery connector, which supports Import and DirectQuery and signs in with a Google account or a service account. Power BI refreshes against BigQuery never call the GA4 Data API, so the property's API quota stops being Power BI's problem.
According to Google's BigQuery Export setup guide, linking is free, but the export needs a valid payment method on the Cloud project, or it can run in the BigQuery sandbox where sandbox limits apply. Google's BigQuery Export page lists two modes. The daily export delivers the previous day's raw, unsampled events and is capped at 1 million events a day on standard properties. The streaming export delivers the current day within minutes with no volume limit, and Google bills it at $0.05 per gigabyte, which Google puts at roughly 600,000 events. The setup guide adds that a standard property which consistently exceeds the limit has its daily export paused, and earlier days are not reprocessed.
The trap: history starts on the day you link. Google's setup guide says data should start flowing within 24 hours of linking and describes no export of the days before the link. The legacy Universal Analytics export promised a one-time historical export of up to 13 months, per Google's Universal Analytics documentation, and Google's GA4 export pages contain no equivalent promise. Link GA4 to BigQuery now, even if the Power BI project is a quarter away.
What it costs: BigQuery storage and query processing, the two pricing components Google names in the setup guide, beyond the free tier. The free BigQuery sandbox comes with a lifetime limit of 10 GiB of storage and 1 TiB of query processing a month, does not support streaming data, and expires every table, view and partition after 60 days. A sandbox-only GA4 export therefore keeps a rolling 60 days of tables, which rules out year-over-year comparisons.
What it costs in upkeep: modelling. Google's export schema stores event parameters in an event_params record that repeats for each key, and Power BI's BigQuery connector loads nested fields as JSON text columns, per Microsoft's documentation. In practice the modelling moves into BigQuery SQL: flattening parameters, and rebuilding sessions from unique combinations of user_pseudo_id or user_id and ga_session_id, the counting method described in Google's guide to UI-versus-export differences. The route needs an owner who is comfortable with Cloud IAM, SQL and a billing alert.
Route 3 — a paid partner connector
Partner connectors sit between GA4 and Power BI and hand Power BI a flat table, which moves the quota and modelling questions onto the vendor. The products differ in how they reach Power BI:
- Windsor.ai ships a connector in Power BI's own Get Data list, owned and provided by Windsor and generally available according to Microsoft Learn; queries are built and saved in Windsor's web app first. Windsor.ai's pricing page listed Basic at $19 a month billed annually, or $23 month to month, for 3 data sources and 75 accounts as of September 2026, plus a Forever Free plan limited to 1 data source, 1 account and the past 30 days of data.
- Supermetrics also ships a connector in the Get Data list, owned and provided by Supermetrics and listed as Preview on Microsoft Learn; queries are saved in the Supermetrics Hub. Supermetrics' pricing page sizes plans by destinations, users, data sources and accounts per source, and offers a 14-day free trial.
- Coupler.io runs scheduled data flows from GA4 to destinations that include Power BI. Coupler.io's pricing page listed Starter at $24 a month billed annually, or $32 month to month, for 3 accounts, 1 destination, a daily refresh and 5,000 rows per run as of September 2026; the free plan allows 1 account, no automated refresh and 100 rows per run.
- Catchr generates a URL that Power BI reads through its generic Web connector, and publishes a free GA4 Power BI template; the template costs nothing, but the data behind the template needs a Catchr trial or subscription.
What it costs: a subscription that usually scales with data sources and accounts, which is cheap for one property and a real budget line across an agency's client list. What it gets wrong: a vendor now sits between you and the numbers. Microsoft documents a 30-minute timeout for polling query results on both the Windsor and Supermetrics connectors, and history depth depends on the vendor and the plan rather than on GA4. The pricing shapes are broken down further in the Windsor.ai comparison and the Supermetrics comparison.
Route 4 — manual export
Every GA4 report can be downloaded. Google's help page on sharing and exporting reports lists Download PDF, Download CSV and Export to Google Sheets, and a CSV or Google Sheets download includes up to 100,000 rows. Data Studio, the product Google called Looker Studio until its April 2026 rebrand, exports up to 750,000 rows from a chart to CSV or Sheets, according to Google's chart export documentation. Power BI then imports the file like any other CSV.
What it gets wrong: the file is a snapshot. No refresh schedule exists, the row ceiling cuts off the long tail of a detailed breakdown, and the recurring version of the route is a person repeating the download every reporting cycle. Manual export is honest for a one-off answer and a liability as a pipeline.
The five routes, side by side
| Route | Money cost | Setup time | Upkeep | History | What bites |
|---|---|---|---|---|---|
| Power BI's Google Analytics connector | Connector free; Pro licences to share | Minutes | Low until a quota or credential error stops refresh | The date range you query; very large ranges can come back partial | Data API quota (200,000 tokens per property per day on a standard property), thresholds, (other) rows; Import only |
| BigQuery export + BigQuery connector | Linking free; BigQuery storage and queries beyond the free tier | Hours: Cloud project, billing, link; first data within 24 hours | SQL modelling of nested event tables | From the link date forward; no documented backfill | Daily export capped at 1 million events a day on standard properties; sandbox tables expire after 60 days |
| Partner connector (Windsor.ai, Supermetrics, Coupler.io, Catchr) | Subscription by sources and accounts; paid plans from $19 (Windsor.ai) and $24 (Coupler.io) a month billed annually, September 2026 | Minutes to an hour | Low; renewals and plan limits | Vendor and plan dependent; Windsor.ai's free plan covers the past 30 days | A vendor in the middle; Supermetrics' Power BI connector is listed as Preview |
| Manual export | Free | Minutes | A person, every reporting cycle | Whatever range the report shows | 100,000 rows per GA4 CSV or Sheets export; no refresh at all |
| TableBI — not a Power BI connector | Free for one source and one live dashboard; Operator $29 a month by request | Minutes | None for the pipeline; syncs automatically | Last 90 days on first sync by default; longer with --days | Does not feed Power BI; GA4 fields today are date, property, channel, country and five measures |
The costs nobody quotes
Every route above solves transport. The four costs below decide whether anyone trusts the report, and none of them appears on a connector's pricing page.
1. Every viewer needs a licence
Power BI Pro costs $14.00 per user per month, paid yearly, on Microsoft's Power BI pricing page as of September 2026, and the free Power BI account cannot share reports. Viewing without a paid per-user licence requires a workspace on Power BI Premium P1 or Fabric F64 capacity or larger. Publish to web skips viewer licences entirely, and Microsoft warns that anyone on the internet can view a report published that way, with no authentication. An agency sharing a monthly GA4 report with ten client contacts therefore needs ten more licensed viewers or a capacity SKU, the same arithmetic as the agency reporting piece.
2. The quota belongs to the property
Every Data API request spends tokens from the property's buckets and from the calling project's bucket at the same time, per Google's quota table. Every application that reads the same property through the Data API therefore competes for one property budget, and a heavy day in another tool can starve the Power BI refresh. Power BI adds limits of its own: shared capacity allows eight scheduled refreshes a day and a two-hour refresh window, Premium, PPU and Fabric capacity allow 48 scheduled refreshes a day, and scheduled refresh pauses after two months without a single report view, per Microsoft's data refresh documentation.
3. Withheld rows and the (other) row
GA4 withholds data to protect user privacy. Google's data-thresholds page says data may be withheld when viewing a report or exploration or making an API call that includes demographic data, and the thresholds are system defined, so no setting turns them off. Separately, the (other) row appears in a report, exploration or Data API response when a table exceeds its row limit, and Google treats any dimension with more than 500 values as high-cardinality. The Data API flags both conditions in response metadata, as subjectToThresholding and dataLossFromOtherRow in the API reference, and Microsoft's connector documentation does not mention surfacing either flag. Check a long-tail page breakdown in Power BI against GA4 totals before trusting the long tail.
4. Three sets of numbers that never quite match
The GA4 interface, the Data API and the BigQuery export count differently, and Google says so. Google's guide to UI-versus-export differences says discrepancies are expected because modeling, Google signals and attribution are not fully present in the export, and that GA4 estimates Active Users and Sessions with the HyperLogLog++ algorithm. Google's thresholds page adds that Analytics doesn't export Google signals data to BigQuery. Google's data-freshness page warns that processing can take 24 to 48 hours, during which report numbers may change. A Power BI model that mixes two routes can disagree with itself, and a report refreshed this morning can differ from the same report refreshed two days later.
The fifth route: answer the recurring questions without a canvas
TableBI is not a Power BI data source and has no Power BI connector. TableBI replaces the Power BI step for recurring marketing questions rather than feeding Power BI: TableBI syncs GA4 into its own store, an AI agent such as Claude Code queries that store in read-only SQL from the terminal, and any answer can be pinned to a live, self-refreshing public dashboard URL. If the destination has to be a Power BI report, routes 1 to 4 are the options. TableBI suits the weekly "how did the channels do" question that never needed a canvas.
# install the CLI, then plant the skill your agent reads npm i -g @tablebi/cli tablebi login tablebi install # a browser opens for Google sign-in; choose the GA4 property tablebi connect ga4 # which sources are connected, and the date each one runs through tablebi sources
Connecting GA4 is one Google sign-in, and the first sync pulls the last 90 days by default; --days asks for a longer window. Nothing is installed on your website. The data lands in ga4_raw with four dimensions (date, property, channel, country) and five measures (page_views, sessions, users, conversions, revenue). Device, landing page, new users and engaged sessions are not available yet, so a landing-page report still belongs in route 1 or route 2.
TableBI's sync reads GA4 through the same Data API as route 1, so TableBI draws on the same property quota. The sync asks for three coarse dimensions (date, channel group and country) rather than page-level detail.
# sessions, conversions and revenue by channel, last 28 days of data tablebi ask "SELECT channel, SUM(sessions) AS sessions, SUM(conversions) AS conversions, SUM(revenue) AS revenue FROM ga4_raw WHERE date > (SELECT MAX(date) FROM ga4_raw) - 28 GROUP BY channel ORDER BY sessions DESC"
The 28-day window anchors on MAX(date), the newest day actually synced, rather than on today's date. Every answer also arrives with a trust block: the date each connected source runs through, plus the caveats that apply to the result. For GA4, the caveat says the most recent 24 to 48 hours are still being processed and that numbers pulled through the API can differ slightly from the interface's cards.
Pin the answer to a live URL
When a view is worth keeping, tablebi pin stores the query rather than a snapshot and publishes a public, read-only URL that refreshes itself as GA4 syncs. Viewers open the link without a login or a Power BI licence.
tablebi pin --title "GA4 channels, 28 days" \ --widget "Daily sessions::line=SELECT date, SUM(sessions) AS sessions FROM ga4_raw …" \ --widget "Sessions by channel::hbar=SELECT channel, SUM(sessions) AS sessions FROM ga4_raw …" # prints the dashboard's public URL, e.g. https://acme.tablebi.com/d/dsh_…
TableBI connects GA4 alongside Google Search Console and Google Ads, which are live, Meta Ads, which is in beta (only the ad account owner's own accounts can authorize today), and CSV upload. Nothing else connects. TableBI has no white-label reports, no scheduled PDF or email delivery and no alerts, so a report that must carry a client's logo or arrive by email belongs in another tool.
Which route should you actually pick
Power BI is a serious tool, and one awkward source is no reason to leave it. A straight read:
- Power BI's Google Analytics connector for one property, a few dimensions and a daily refresh, when the report has to live in Power BI and nobody wants another bill.
- The BigQuery export when you need raw events, when several reports would share one property's quota, or when you want event data kept on your own terms. Link GA4 today, because the export's history starts on the link date.
- A partner connector when one subscription costs less than the hours spent on quotas and SQL, and the account count keeps per-source pricing boring.
- Manual export for a one-off answer, never for a recurring report.
- TableBI when the recurring question is how the channels did, the reader is an AI agent or a client holding a link, and nobody needs a Power BI canvas, with the understanding that TableBI does not feed Power BI.
The same problem for other sources is covered in Google Search Console to Power BI and Google Ads to Power BI. For the agent-side GA4 workflow, see Claude Code + GA4; for the BI tools themselves, see Looker Studio vs Power BI; and for every TableBI command, the docs.
FAQ
Does Power BI have a GA4 connector?
Yes. Power BI's built-in Google Analytics connector reads GA4 through the Google Analytics Data API when Implementation 2.0 is selected, which Microsoft documents as the default. The connector is import-only, and every refresh spends the GA4 property's Data API quota, which is 200,000 tokens a day on a standard property.
Can I connect GA4 to Power BI for free?
Partly. Power BI Desktop and its Google Analytics connector cost nothing, and GA4's BigQuery export can run in the free BigQuery sandbox, which deletes tables after 60 days. Sharing is where the bill starts: Power BI Pro is $14.00 per user per month, paid yearly, as of September 2026, and viewers need a paid licence unless the workspace runs on Fabric F64 or Premium P1 capacity or larger, or the report is made public with Publish to web.
Does the GA4 BigQuery export include historical data?
Plan as if it does not. Google's setup guide says data should start flowing within 24 hours of linking and describes no export of earlier days, while the legacy Universal Analytics export promised a one-time historical export of up to 13 months. Link GA4 to BigQuery well before a Power BI project needs the history.
What happens when a Power BI refresh hits the GA4 API quota?
The Google Analytics Data API fails a request with a 429 error as soon as any quota bucket for the property is empty, and the refresh that sent the request fails with it. Power BI switches off a refresh schedule after four consecutive failures, and GA4's daily quotas reset at midnight Pacific Standard Time.
Why don't my GA4 numbers in Power BI match the GA4 interface?
The routes read different things. Data API rows can be thresholded or rolled into an (other) row, the GA4 interface estimates users and sessions with the HyperLogLog++ algorithm, and the BigQuery export carries raw events without Google's modeling or Google signals data. GA4 processing can also take 24 to 48 hours, and recent numbers may change during that window.
Can TableBI send GA4 data to Power BI?
No. TableBI is not a Power BI data source and has no Power BI connector. TableBI syncs GA4 into its own store, an AI agent such as Claude Code queries that store in read-only SQL, and any answer can be pinned to a public, read-only dashboard URL that refreshes itself.
GA4 in your agent today: one Google sign-in, no BigQuery project, no licence per viewer.
npm i -g @tablebi/cli && tablebi install