GA4 11 min read

GA4 Customizable Dashboards: How to Build Role-Specific Views That Replace Your Looker Studio Reports

Google just launched customizable Dashboards directly inside GA4 — and for the first time, you can build executive, marketing, and ecommerce views without ever opening Looker Studio. Most teams are ab

A
Ashwani Bhasin
·

Google just rolled out customizable Dashboards directly inside GA4, and for the first time you can build executive, marketing, and ecommerce views without ever opening Looker Studio. Most teams are about to misuse this feature by rebuilding the same cluttered reports they already have, dragging in 15 cards per view and calling it a day. That approach wastes the one thing GA4 Dashboards actually does better than Looker Studio: speed-to-insight for people who live inside GA4 anyway.

This is a practitioner playbook. I’ll walk through what the feature does, where it falls short of Looker Studio, three dashboard blueprints I’ve shipped for clients (CMO, paid media, ecommerce ops), the permissions quirks nobody is talking about, and a six-question framework for deciding when to migrate a report versus leave it where it is.

What GA4 Customizable Dashboards Actually Do

Dashboards sit in the left-hand navigation under Reports. Each property can hold multiple dashboards, and each dashboard holds a grid of cards you pull from existing GA4 reports, explorations, or built from scratch with a dimension/metric picker. You get the same date comparison controls you’d expect, plus filtering by dimension values at either card or dashboard level.

The underlying data model is still GA4. Same event schema, same attribution model picker, same thresholding behavior for user-scoped metrics when identity spaces get sparse. If you understand how a GA4 report works, you understand how a dashboard card works.

Here’s where it stops short of Looker Studio:

CapabilityGA4 DashboardsLooker Studio
Blended data (GA4 + Ads + Search Console + Sheets)NoYes
Calculated fields across data sourcesNoYes
Share with users outside the GA4 propertyNoYes (viewer link, PDF)
Scheduled email deliveryNoYes
Custom visual types (geo map, Sankey, custom viz)Limited to GA4 chart typesYes, including community viz
FreshnessSame as GA4 reports (near real-time)Dependent on connector cache
Load speedFast, in-productSlower, especially blended sources

Those four limits at the top (no blended data, no cross-source calculated fields, no external sharing, no scheduled email) are the ones that actually determine whether a given report can migrate. Keep them in mind, I’ll come back to them in the decision framework.

Blueprint 1 — Executive Dashboard (CMO / Founder View)

The failure mode here is building a 20-card dashboard that answers every possible exec question. Don’t. An exec view should answer five questions in under 10 seconds: Are we growing? Where is growth coming from? What’s efficiency looking like? What’s broken? What’s the trend?

Build a 6-card dashboard. No more.

Card 1 — Revenue scorecard (big number, YoY comparison)

  • Metric: Total revenue
  • Comparison: Previous year, same period
  • Date range: Last 28 days (not last 30 — 28 keeps day-of-week aligned)
  • No dimension breakdown, just the number and the delta

Card 2 — Sessions and engaged sessions trend (line chart)

  • Metrics: Sessions, Engaged sessions
  • Dimension: Date
  • Comparison: Previous period
  • Why both: engaged sessions filter out most bot and bounce noise, so the gap between the two lines tells you about traffic quality drift

Card 3 — Channel contribution to revenue (bar chart)

  • Dimension: Session default channel group
  • Metric: Total revenue, Sessions, Session conversion rate
  • Sort by revenue, limit to top 8 channels
  • Comparison: Previous year

Card 4 — MER proxy (table)

GA4 doesn’t know your ad spend unless you’ve linked Google Ads, and even then it only covers one platform. A real MER needs total revenue divided by total ad spend across all platforms. You can’t do that in GA4. What you can do is build a proxy that tracks the ratio of paid-source revenue to total revenue, which flags major efficiency shifts even without the spend numbers.

  • Dimension: Session source / medium
  • Metric: Total revenue, filtered to sessions where medium matches cpc|paid|ppc|display|social-paid
  • Secondary metric: Total revenue (unfiltered)
  • Calculated in-head: paid revenue share — if it jumps from 40% to 65% without a campaign launch, something organic is dying

Card 5 — New vs returning user revenue split (donut or stacked bar)

  • Dimension: New / returning
  • Metric: Total revenue, Purchases

Card 6 — Top landing pages by revenue (table, 10 rows max)

  • Dimension: Landing page + query string
  • Metric: Sessions, Session conversion rate, Total revenue
  • Filter: Sessions > 100 to kill long-tail noise

Set the default date range on the dashboard to last 28 days, comparison to previous year. Executives want to know “is this better than last year,” not “is this better than last month,” because the latter is dominated by seasonality.

Blueprint 2 — Paid Media Dashboard

This one assumes you have Google Ads linked. If you’re running Meta, TikTok, or Amazon traffic too, you’ll need UTM discipline because GA4 won’t auto-recognize those platforms. If your UTM governance is loose, fix that first — we cover the structure we use for clients in our GA4 setup work.

Card 1 — Campaign ROAS table (the workhorse)

  • Dimensions: Session campaign, Session source / medium
  • Metrics: Sessions, Purchases, Total revenue, Advertising cost, Return on ad spend
  • Filter: Session medium contains cpc OR Session source contains facebook|meta|tiktok|instagram
  • Sort by revenue descending, limit 25
  • Comparison: Previous period

Card 2 — Attribution model comparison (table)

This is the card most paid teams skip, and it’s the most useful one on the dashboard. Build the same campaign table twice — once with the default data-driven attribution, once with last-click — and compare. Campaigns where DDA revenue is 2x+ last-click revenue are your assist drivers. Campaigns where last-click is higher than DDA are your closers. You cut budget on the wrong one at your peril.

GA4 Dashboards let you set attribution model at the card level in the metric configuration. Build:

  • Card 2a: Campaign + Revenue (DDA)
  • Card 2b: Campaign + Revenue (Last click)

Place them side by side. The visual delta tells the story.

Card 3 — Landing page quality for paid traffic (table)

  • Dimension: Landing page + query string
  • Metrics: Sessions, Bounce rate, Average engagement time per session, Session key event rate, Total revenue
  • Filter: Session medium = cpc (expand to paid social sources if needed)
  • Sort by sessions descending

A paid landing page with 20k sessions, 3-second engagement time, and a 0.4% conversion rate is bleeding money. This card finds it in two seconds.

Card 4 — Device and geo cross-cut (two cards side by side)

  • Card 4a: Device category × Session conversion rate, Revenue
  • Card 4b: Country or Region × Sessions, Revenue, Session conversion rate

Mobile paid campaigns targeting desktop-converting products is a classic silent killer. So is spending on geos where you can’t ship.

Card 5 — First-touch vs last-touch channel (if you want to go deep) Use the attribution comparison report embedded as a card, dimension = Default channel group. Shows which channels initiate journeys vs close them.

Here’s a quick snippet showing how we validate UTM hygiene before trusting any of this, because dashboards built on dirty UTMs lie confidently. Run this in BigQuery against the GA4 export:

SELECT
  traffic_source.source,
  traffic_source.medium,
  traffic_source.name AS campaign,
  COUNT(DISTINCT user_pseudo_id) AS users,
  COUNTIF(event_name = 'purchase') AS purchases
FROM `your-project.analytics_XXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
  AND event_name IN ('session_start', 'purchase')
GROUP BY 1, 2, 3
HAVING users > 50
ORDER BY users DESC;

Look for (not set) mediums with high traffic, inconsistent casing (CPC vs cpc), and campaign names that drift across platforms. Fix the tagging, then build the dashboard. If you need to lock this down at the tag layer, our GTM team handles the auto-tagging rules that keep UTMs clean across platforms.

Blueprint 3 — Ecommerce Ops Dashboard

Ops teams care about different things than marketing. They want funnel leaks, SKU-level performance, and anything that tells them a product is going to blow up in a bad way (refund spike, out-of-stock surge, PDP error).

Card 1 — Ecommerce funnel (funnel exploration pinned to dashboard)

  • Steps: view_item → add_to_cart → begin_checkout → add_shipping_info → add_payment_info → purchase
  • Breakdown: Device category
  • Show both absolute drop and completion rate

The two drops you care about most: view_item → add_to_cart (product/pricing issue) and add_payment_info → purchase (checkout failure, payment gateway, trust signal). If either moves more than 5 percentage points week over week, something broke.

Card 2 — Product performance table

  • Dimension: Item name, Item ID
  • Metrics: Items viewed, Items added to cart, Items purchased, Item revenue, Cart-to-view rate, Purchase-to-view rate
  • Sort by item revenue descending, 50 rows

Include item_id, not just item_name. Variants, bundles, and relabeled SKUs will have identical names. Without the ID you’re grouping apples and apple variants.

Card 3 — Refund tracking tied to item_id

This only works if you’re firing the refund event with the correct item array. Most Shopify stores aren’t. If you’re on Shopify, the native GA4 integration doesn’t fire refunds reliably for partial refunds or app-driven returns — you’ll need a server-side hook. We’ve built this exact pipeline for ecommerce clients; our Shopify dev team can wire it through the Admin API webhook.

For the card:

  • Dimension: Item name, Item ID
  • Metrics: Item refund amount, Refund quantity, Item revenue
  • Calculated in-head: refund rate = refund amount / item revenue
  • Sort by refund amount descending

Card 4 — Out-of-stock signal (custom event)

If you’ve instrumented product_oos_view (fires when a PDP loads with the inventory flag at zero), build a card:

  • Dimension: Item ID, Item name
  • Metric: Event count for product_oos_view
  • Date range: Last 7 days

Rising OOS views on top-10 revenue SKUs is a demand signal and a lost-sales signal in one.

Card 5 — Site search queries with zero conversion

  • Dimension: Search term
  • Metrics: Event count (view_search_results), Purchases (user-scoped)
  • Filter: Event count > 20, Purchases = 0

Shoppers tell you exactly what they want and leave empty-handed. This card is a merchandising brief.

Card 6 — Checkout error events

If you’ve instrumented checkout error events (checkout_error with error_type and error_message parameters), surface the top error types by frequency. A spike in payment_declined can mean a gateway outage; a spike in shipping_unavailable means your rate matrix broke.

Here’s the dataLayer push pattern we standardize on so the dashboard card has clean data to work with:

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'checkout_error',
  error_type: 'payment_declined',
  error_message: 'card_declined_insufficient_funds',
  checkout_step: 'payment',
  cart_value: 184.50,
  cart_currency: 'GBP',
  items: [
    { item_id: 'SKU-4421', item_name: 'Wool Overcoat', quantity: 1, price: 184.50 }
  ]
});

With that firing, the ops dashboard becomes an early-warning system instead of a post-mortem tool.

Permissions: The Part Nobody Documents Properly

Dashboard permissions inherit from property-level roles, with some quirks worth knowing.

GA4 RoleCan view dashboardsCan create own dashboardsCan edit shared dashboardsCan delete
ViewerYesPersonal onlyNoOwn personal only
AnalystYesYesYes (shared ones they created or were given edit on)Own creations
EditorYesYesYesYes
AdministratorYesYesYesYes

A few gotchas I’ve hit:

Personal vs shared dashboards. When you build a dashboard, it defaults to personal. You have to deliberately share it to the property. Teams build great dashboards nobody else can see because they skipped this step.

Edit collisions. Two editors modifying the same shared dashboard at the same time: last write wins, no versioning, no conflict warning. If you’re iterating as a team, assign one owner per dashboard.

Removing a user doesn’t remove their dashboards. If an editor built shared dashboards and then left the company, their dashboards remain. But if those dashboards reference custom explorations the ex-editor built as personal explorations, the cards will break. Audit personal exploration dependencies before offboarding.

Audience filters respect user permissions. If a card is filtered by an audience that references a user property with restricted-metrics (cost data, revenue), users without the right role will see thresholded or hidden data. This causes “my dashboard looks different from yours” tickets.

Decision Framework: Migrate or Leave Alone?

Not every Looker Studio report should move. Ask these six questions in order. One “no” at any step and you leave the report in Looker Studio.

1. Does the report use only GA4 data? If it blends in Google Ads cost, Search Console impressions, Shopify order data from a Sheet, or anything else — stop. GA4 Dashboards can’t blend. Leave it.

2. Do all viewers have GA4 property access? Dashboards can only be seen by users with a role on the property. If your CFO, agency contact, or client stakeholder doesn’t have a GA4 login, they can’t see the dashboard. Leave it in Looker Studio where you can share a viewer link.

3. Does anyone need the report emailed on a schedule? No scheduled delivery in GA4 Dashboards. If a weekly PDF to the exec team is a hard requirement, leave it.

4. Do you need calculated fields that combine metrics in ways GA4 doesn’t natively support? Simple ratio metrics inside a single GA4 report work. Anything more complex — weighted blended ROAS, cohort retention math, custom LTV formulas — needs Looker Studio or BigQuery.

5. Is the primary audience inside GA4 already? If your analysts and marketers live in GA4 daily, a dashboard that lives one click away from their raw data is more useful than a Looker Studio tab they have to bookmark. Migrate.

6. Does the report need to survive longer than 14 months? GA4’s standard data retention is 14 months (26 with the setting toggled). Historical trending beyond that needs BigQuery export plus Looker Studio. Leave it.

If you got “yes” to all six, migrate. If you got “no” on 1–4, leave it alone. If you’re on the fence on 5–6, consider running both in parallel for a month and seeing which one your team actually opens.

Common Mistakes and Troubleshooting

Mistake: Rebuilding your 30-tab Looker Studio report as 30 dashboards. The point of GA4 Dashboards is role-specific, focused views. If you need 30 tabs, you have a Looker Studio problem, not a GA4 problem.

Mistake: Trusting ROAS cards when Ads isn’t linked. The ROAS metric only populates for linked Google Ads data. Meta ROAS requires you to be exporting Meta spend into BigQuery and joining — which you can’t do inside GA4 Dashboards.

Mistake: Using “Users” as the headline metric. GA4 users are modeled with thresholding and identity space collapse. Use Sessions or Engaged sessions for traffic cards and Purchasers for conversion cards. Users at the top of an exec dashboard will not match any other number anyone in the business sees.

Mistake: Not setting a default comparison period. New dashboards default to no comparison. Every card looks like a stat with no context. Set it at the dashboard level once.

**Mistake: Filtering at

#GA4#Dashboards#Reporting#Looker Studio

Share this article

Want This Implemented Correctly?

Let our team apply these concepts to your specific setup — with QA validation and 30 days of support.