It is Monday morning and the founder opens three tabs. Shopify says the store did $118,400 last week. The Looker Studio ecommerce dashboard the agency built says $96,200. Meta Ads Manager claims it alone drove $74,000. Nobody in the standup can explain the gaps, so everyone quietly goes back to the number that makes their own channel look best.
That dashboard cost real money to build. It has 14 pages, a logo in the corner, and a bounce-rate gauge nobody has ever acted on. It gets opened on Mondays out of guilt and closed within ninety seconds.
The problem is almost never Looker Studio. It is that most ecommerce dashboards are built template-first instead of decision-first, on top of a GA4 connector whose limits nobody read. Here is how I build a Looker Studio ecommerce dashboard that actually survives contact with a Monday standup: five views, and the plumbing underneath each one.
Why templates are the easy 20%
Search for looker studio ecommerce dashboard and you will find template galleries from connector vendors: pretty, free, and built to sell you the connector subscription. Nothing wrong with that trade. The templates themselves are fine.
But a template solves layout, which was never the hard part. The hard part is what the template quietly assumes:
- That GA4 revenue is close enough to real revenue (it usually is not, and the gap is rarely documented)
- That the GA4 connector will keep answering every widget's query (it has hard quotas)
- That blending ad-platform data with analytics data just works (blends fail silently on join keys)
- That anyone agreed what "revenue" means: gross or net, with or without tax, shipping, and refunds
Get those four wrong and the most beautiful template in the gallery is a confident display of numbers nobody can defend. So before the views, the plumbing.
The plumbing: three GA4 connector limits every template hides
Quotas. The native GA4 connector runs on the Google Analytics Data API, which enforces per-property token quotas. Every chart on every page consumes tokens on every load, filter change, and date-range tweak. A busy 14-page dashboard shared with a whole team can exhaust the hourly quota and start throwing errors mid-meeting. Fewer charts per page is not just taste, it is rationing.
Thresholding. When Google signals is enabled, GA4 applies data thresholding, withholding rows where user counts are low so individuals cannot be inferred. In practice this means small segments, long-tail landing pages, and low-volume campaigns silently vanish from your dashboard while the totals stay intact. Your dashboard is not lying, it is omitting, which is worse because omissions do not look like errors.
Freshness. GA4 data in Looker Studio is not real time, and third-party connectors add their own sync schedules on top. Looker Studio documents its data freshness behavior per connector. If the Monday meeting is at 9am and the connector last refreshed at 6pm Sunday, agree on that expectation up front or the first ten minutes of every meeting become "why is Saturday missing."
View 1: blended spend vs revenue
One page. Total ad spend across every platform, total revenue from the store of record, and the ratio between them (MER, or blended ROAS if you prefer). Trended weekly, with the last 8 to 12 weeks visible.
This is the view that settles the Meta-says-it-drove-everything argument. Platform-reported ROAS numbers overlap and self-attribute; three platforms will happily claim credit for 160% of your actual revenue. Blended MER cannot be gamed by attribution because it does not use attribution. Spend is spend, revenue is revenue.
The catch: revenue here must come from Shopify or your payment processor, not GA4. That means either a paid connector or a small pipeline into BigQuery. It is worth it. This single page answers "are we profitably growing" better than every attribution report combined.
View 2: the funnel
Sessions, product views, add-to-carts, checkouts started, purchases. Conversion rate between each step, trended, with a device split.
This view exists to localize problems. Revenue down 15% is not actionable. "Checkout-to-purchase dropped from 62% to 41% on mobile the day the theme updated" is actionable within the hour. GA4's enhanced ecommerce events give you the steps; the dashboard's job is making a step change visible in one glance rather than four ad-hoc explorations.
Watch thresholding here: slice the funnel too thin (by campaign and device and new-vs-returning) and rows start disappearing. Keep the default view coarse and let people drill down in GA4 itself when needed.
View 3: channel performance, honestly labeled
Sessions, revenue, and conversion rate by default channel grouping, with two additions most dashboards skip:
- An explicit row for Unassigned and (not set), displayed, not filtered out. The size of that bucket is your tracking-quality score. Hiding it is how dashboards lie by omission.
- A side-by-side of GA4-attributed revenue and platform-reported revenue for your top two paid channels. The gap between them is not a bug to fix, it is a permanent feature of attribution to keep visible so nobody treats either number as ground truth.
If Direct plus Unassigned exceeds roughly a quarter of revenue, the fix is not a better chart. It is UTM discipline, referral exclusions, and cross-domain configuration, which is tracking work, not reporting work.
View 4: product performance
Revenue, units, and AOV by product or category, plus a view of what is rising and falling versus the prior period. If you can get cost data in (via Shopify cost-per-item or a margin sheet), rank by contribution margin instead of revenue. A hero product with a 12% margin deserves different ad spend than one at 55%, and a revenue-ranked table hides that completely.
This is the view merchandising and inventory actually use, and it is the first one to break when the items array in your purchase events is malformed. If product revenue does not sum to total revenue, the dashboard did not fail, the tracking did.
View 5: the data-quality tile
One small, unglamorous page: GA4 purchase revenue versus store revenue for the trailing 30 days, as a percentage. Documented, visible, updated automatically.
Client-side tracking loses a few percent to ad blockers and consent choices no matter how good the setup is. In our experience a stable gap of 3 to 5% is normal. What the tile catches is change: the gap jumping to 15% the week a consent banner was updated, or GA4 running higher than Shopify, which almost always means duplicate purchase events. Every other view on the dashboard inherits its credibility from this one.
We build this tile into every dashboard because it converts "do we trust the data" from a vibes debate into a number with a threshold. When the gap is already large and nobody can explain it, that is an analytics audit problem to solve before polishing any charts, because a dashboard on top of broken tracking just distributes the error faster.
When the connector stops being enough
The native GA4 connector plus one paid connector covers most stores to roughly seven figures. Three signals tell you it is time to put BigQuery underneath instead:
- Quota errors. Widgets erroring under normal team usage means the dashboard has outgrown the Data API's token budget.
- Thresholding pain. The segments you actually decide on (a specific campaign, a landing-page cohort) keep coming back partially hidden.
- Blending fragility. Looker Studio's data blending joins sources on shared keys, with hard limits on sources per blend, and unmatched keys drop rows without warning. Spend-vs-revenue math across four ad platforms and Shopify belongs in a warehouse query, not a five-way blend.
The GA4 BigQuery export is free to enable on standard properties, gives you unsampled, unthresholded event-level data, and turns Looker Studio back into what it is best at: a fast, free presentation layer on top of numbers computed properly upstream. This is exactly how we structure ecommerce reporting and dashboards for brands past that threshold: warehouse does the math, Looker Studio shows it.
The one number
If you take a single thing from this post, make it the data-quality tile: GA4 revenue as a percentage of store revenue, trailing 30 days, on a page of its own.
Every failed dashboard I have inherited died the same death: someone important spotted one number that contradicted Shopify, nobody could explain it, and the whole report lost its credibility in a single meeting. The tile is the antidote. It says: we know the gap, here is its size, here is why, and here is the alarm that fires if it moves.
Build that first. Then the five views. Then, only if you still want to, the bounce-rate gauge.

