---
# === IDENTITY ===
id: business/marketing-execution/marketing-dashboard-setup/2026
canonical_question: "How do I build a marketing dashboard — GA4, ad platforms, CRM, email data sources to Metabase/Looker Studio?"
aliases:
  - "Marketing analytics dashboard setup 2026"
  - "Looker Studio marketing dashboard builder"
  - "Multi-channel marketing reporting dashboard"
  - "Unified marketing dashboard GA4 ads CRM email"
entity_type: execution_recipe
domain: business > marketing-execution > marketing dashboard setup
region: global
jurisdiction: global
temporal_scope: 2025-2026

# === VERIFICATION ===
last_verified: 2026-03-12
confidence: 0.88
version: 1.0
first_published: 2026-03-12

# === TEMPORAL VALIDITY ===
temporal_validity:
  status: volatile
  last_breaking_change: "GA4 native cost data imports for Meta and TikTok launched late 2025; Looker Studio expanded to 800+ connectors; Supermetrics restructured pricing per-destination in 2025"
  next_review: 2026-09-08
  change_sensitivity: high

# === CONSTRAINTS ===
constraints:
  - "GA4 BigQuery export is free but BigQuery storage and query costs apply — first 1 TB/month of queries is free, then $6.25/TB"
  - "Supermetrics requires separate subscription per destination (Sheets, Looker Studio, BigQuery) — $39-299/mo per destination"
  - "Looker Studio has a 10 data source limit per blended data configuration — complex dashboards require pre-joined data in BigQuery or a warehouse"
  - "GA4 custom property limits: 50 custom dimensions and 50 custom metrics per standard property"
  - "CRM API rate limits apply — HubSpot: 100 requests/10s (private apps), Salesforce: 100K API calls/24h (Enterprise)"
  - "Dashboard must load in under 10 seconds with 90 days of data — pre-aggregate in warehouse if raw queries exceed this"

# === SKIP CONDITIONS ===
skip_this_unit_if:
  - condition: "User needs a marketing strategy, not a reporting dashboard"
    use_instead: "business/startup-marketing/marketing-strategy-framework-for-startups/2026"
  - condition: "User only needs GA4 reporting without multi-channel integration"
    use_instead: "software/landing-pages/analytics-implementation/2026"
  - condition: "User needs a real-time operational dashboard with sub-minute latency"
    use_instead: "software/system-design/realtime-dashboard/2026"

# === AGENT HINTS ===
inputs_needed:
  - key: dashboard_tool
    question: "Which dashboard tool should be used?"
    type: choice
    options: ["Looker Studio (free)", "Metabase (open source)", "Tableau", "Power BI", "no preference — auto-select"]
  - key: technical_skill
    question: "What is the user's technical skill level?"
    type: choice
    options: ["non-technical (no-code only)", "semi-technical (can write SQL)", "developer (can write code and manage infrastructure)"]
  - key: budget_for_tools
    question: "What's the tool/connector budget?"
    type: choice
    options: ["free tier only", "up to $50/month", "up to $200/month", "no limit"]
  - key: data_sources
    question: "Which data sources need to be included?"
    type: choice
    options: ["GA4 + Google Ads only", "GA4 + Google Ads + Meta Ads", "GA4 + ads + CRM + email", "all channels (GA4, ads, CRM, email, social)"]

# === EXECUTION METADATA ===
execution:
  required_inputs:
    - name: "GA4 property with active data collection"
      source: "marketing team / developer"
      format: "GA4 property ID (e.g., 123456789)"
    - name: "Ad platform account access"
      source: "marketing team"
      format: "Google Ads, Meta Ads, LinkedIn Ads account credentials or viewer access"
    - name: "CRM access"
      source: "sales/marketing ops"
      format: "HubSpot API key or Salesforce connected app credentials"
    - name: "Email platform access"
      source: "marketing team"
      format: "Mailchimp API key, Klaviyo API key, or HubSpot email (included with CRM)"

  outputs:
    - name: "Live marketing dashboard"
      format: "Looker Studio report URL or Metabase dashboard URL"
      description: "Interactive dashboard with traffic, acquisition, conversion, revenue, and email metrics — auto-refreshing daily"
    - name: "Data model documentation"
      format: "Document or SQL file"
      description: "Schema of blended data sources, field mappings, and calculated metrics for maintenance"
    - name: "Automated report schedule"
      format: "Configured email schedule"
      description: "Weekly PDF report delivered to stakeholders via email"

  tools_required:
    - name: "Google Looker Studio"
      purpose: "Dashboard visualization and sharing"
      tier: free
      cost: "$0"
      alternatives: ["Metabase", "Tableau", "Power BI"]
    - name: "Google BigQuery"
      purpose: "Data warehouse for joining multi-source data"
      tier: free
      cost: "$0 (first 1 TB queries/mo free, then $6.25/TB)"
      alternatives: ["PostgreSQL", "ClickHouse", "DuckDB"]
    - name: "Supermetrics"
      purpose: "Ad platform and CRM data connector"
      tier: paid
      cost: "$39-299/mo per destination"
      alternatives: ["Fivetran", "Airbyte (open source)", "Stitch", "native connectors"]
    - name: "GA4"
      purpose: "Web analytics data source"
      tier: free
      cost: "$0"
      alternatives: ["Matomo", "Plausible"]

  credentials_needed:
    - service: "Google Analytics 4"
      type: "Google account with GA4 property access"
      where_to_get: "https://analytics.google.com"
      free_tier_limits: "Unlimited (standard property)"
    - service: "Google BigQuery"
      type: "Google Cloud project with BigQuery API enabled"
      where_to_get: "https://console.cloud.google.com"
      free_tier_limits: "10 GB storage, 1 TB queries/month"
    - service: "Google Ads"
      type: "Google Ads account with API access or Looker Studio connector"
      where_to_get: "https://ads.google.com"
      free_tier_limits: "Unlimited via native Looker Studio connector"
    - service: "Supermetrics (if using paid connectors)"
      type: "API key / OAuth"
      where_to_get: "https://supermetrics.com"
      free_tier_limits: "14-day free trial"

  estimated_duration: "4-8 hours for initial setup; 1-2 hours for weekly maintenance"
  estimated_cost: "$0 (free tier) to $300/month (paid connectors + warehouse)"

# === DISTRIBUTION ===
canonical_source: "https://knowledgelib.io/business/marketing-execution/marketing-dashboard-setup/2026"
suggested_citation: "Source: knowledgelib.io — AI Knowledge Library (verified 2026-03-12)"

# === RELATED UNITS ===
related_kos:
  depends_on:
    - id: "business/startup-marketing/marketing-strategy-framework-for-startups/2026"
      label: "Marketing strategy defining which channels to track"
  related_to:
    - id: "business/startup-marketing/paid-acquisition-playbook/2026"
      label: "Paid acquisition execution — feeds ad spend data into dashboard"
  alternative_to:
    - id: "software/landing-pages/analytics-implementation/2026"
      label: "Analytics implementation — GTM container, GA4 configuration and conversion events, plus heatmaps, UTM strategy and ad pixels"

# === SOURCES ===
sources:
  - id: src1
    title: "Set up BigQuery Export — Google Analytics Help"
    author: Google
    url: https://support.google.com/analytics/answer/9823238
    type: official_docs
    published: 2025-11-15
    reliability: authoritative
  - id: src2
    title: "Looker Studio Dashboard Tutorial — Analytics Mania"
    author: Analytics Mania
    url: https://www.analyticsmania.com/post/looker-studio-tutorial-for-google-analytics-4/
    type: tutorial
    published: 2025-09-10
    reliability: established
  - id: src3
    title: "Adding and Managing Databases — Metabase Documentation"
    author: Metabase
    url: https://www.metabase.com/docs/latest/databases/connecting
    type: official_docs
    published: 2025-12-01
    reliability: authoritative
  - id: src4
    title: "2026 Supermetrics Pricing Breakdown — AgencyAnalytics"
    author: AgencyAnalytics
    url: https://agencyanalytics.com/blog/supermetrics-pricing
    type: review
    published: 2026-01-15
    reliability: established
  - id: src5
    title: "Marketing KPIs: Essential Metrics to Track Performance — monday.com"
    author: monday.com
    url: https://monday.com/blog/project-management/marketing-kpis/
    type: guide
    published: 2025-10-20
    reliability: established
  - id: src6
    title: "HubSpot Reporting & Dashboard Software"
    author: HubSpot
    url: https://www.hubspot.com/products/reporting-dashboards
    type: official_docs
    published: 2025-12-01
    reliability: authoritative
---

# Marketing Dashboard Setup: GA4, Ad Platforms, CRM & Email to Looker Studio/Metabase

## Purpose

This recipe produces a live, auto-refreshing marketing dashboard that unifies data from GA4 (web traffic and conversions), ad platforms (Google Ads, Meta Ads, LinkedIn Ads spend and performance), CRM (pipeline and revenue attribution), and email marketing (campaign engagement and conversion) into a single interactive view — deployed in Looker Studio or Metabase with automated weekly PDF reports to stakeholders. [src1]

## Prerequisites
<!-- Agents: verify ALL prerequisites before executing. Missing prerequisites = failed execution. -->

- [ ] **GA4 property** with active data collection (at minimum 30 days of data) — configured with conversion events and UTM parameters
- [ ] **Google Cloud project** with BigQuery API enabled — [Google Cloud Console](https://console.cloud.google.com) (free tier: 10 GB storage, 1 TB queries/mo)
- [ ] **Ad platform access** — viewer/analyst role on Google Ads, Meta Ads Manager, and/or LinkedIn Campaign Manager
- [ ] **CRM access** — HubSpot API key from [HubSpot](https://app.hubspot.com/api-key) or Salesforce connected app from [Salesforce Setup](https://login.salesforce.com)
- [ ] **Email platform access** — API key from Mailchimp, Klaviyo, or HubSpot email (included if using HubSpot CRM)
- [ ] **Looker Studio account** — free at [lookerstudio.google.com](https://lookerstudio.google.com) OR **Metabase instance** — self-hosted or cloud at [metabase.com](https://www.metabase.com)

## Constraints
<!-- Hard rules. Agents: enforce throughout execution. Violating these = broken output or legal risk. -->

- GA4 BigQuery export adds latency: streaming export has ~10 min delay; daily export batches at end of day. Dashboard data is never truly real-time. [src1]
- Looker Studio blended data is limited to 5 data sources per blend and 10 blends per report. Complex multi-source dashboards require pre-joined tables in BigQuery. [src2]
- Supermetrics costs compound: each destination (Sheets, Looker Studio, BigQuery) is a separate subscription at $39-299/mo. Budget accordingly. [src4]
- UTM parameter consistency is critical: campaign names must match exactly across GA4, ad platforms, and CRM for accurate attribution. One mismatch breaks the join.
- CRM data exports must respect PII rules: exclude personal emails and phone numbers from dashboard data. Aggregate pipeline and revenue data only.
- Dashboard must target under 10-second load time with 90 days of data. Pre-aggregate weekly or monthly rollups in BigQuery for historical views. [src2]

## Tool Selection Decision

<!-- Agent selects the right tool path based on user inputs.
     Each path leads to a different execution flow below. -->

```
Which path?
├── User is non-technical AND budget = free
│   └── PATH A: Looker Studio + Native Connectors (GA4, Google Ads only)
├── User is non-technical AND budget > $0
│   └── PATH B: Looker Studio + Supermetrics (all sources)
├── User is semi-technical or developer AND budget = free
│   └── PATH C: Looker Studio + BigQuery + Free ETL (Airbyte/scripts)
└── User is developer AND budget > $0
    └── PATH D: Metabase + BigQuery + Paid Connectors (full control)
```

| Path | Tools | Cost | Speed | Output Quality |
|------|-------|------|-------|---------------|
| A: No-Code Free | Looker Studio + native connectors | $0 | 2-3 hours | Basic — Google sources only, no CRM/email |
| B: No-Code Paid | Looker Studio + Supermetrics | $39-200/mo | 3-5 hours | Good — all sources, limited data modeling |
| C: Code + Free | Looker Studio + BigQuery + Airbyte | $0 | 6-8 hours | Excellent — full join control, no connector fees |
| D: Code + Paid | Metabase + BigQuery + Fivetran/Supermetrics | $50-400/mo | 6-10 hours | Excellent — self-hosted, full SQL control, custom metrics |

## Execution Flow

### Step 1: Data Source Inventory and Access Verification

**Duration**: 30-60 minutes
**Tool**: Spreadsheet or document

Catalog every data source, confirm access credentials, and document the key metrics each source provides. This prevents mid-build discovery of missing access.

| Source | Key Metrics | Connector Type | Access Status |
|--------|------------|----------------|---------------|
| GA4 | Sessions, users, conversions, revenue | Native (Looker Studio) or BigQuery export | Verify property ID |
| Google Ads | Spend, clicks, impressions, CPA, ROAS | Native (Looker Studio) or API | Verify MCC access |
| Meta Ads | Spend, reach, CPM, CPA, conversions | Supermetrics or Marketing API | Verify Business Manager access |
| LinkedIn Ads | Spend, clicks, leads, CPL | Supermetrics or API | Verify Campaign Manager access |
| HubSpot/Salesforce | Leads, MQLs, SQLs, pipeline, revenue | API or Supermetrics | Verify API key/connected app |
| Email (Mailchimp/Klaviyo) | Sends, opens, clicks, conversions | API or Supermetrics | Verify API key |

**Verify**: All data sources accessible and returning data. Test each API key or connector with a sample query.
**If failed**: Request missing credentials from the relevant team. Do not proceed with partial access — the dashboard will have blind spots.

### Step 2: Connector Setup and Data Extraction

**Duration**: 1-2 hours
**Tool**: Looker Studio native connectors, Supermetrics, or BigQuery

**Path A/B (Looker Studio)**:
1. Open Looker Studio, create a new report
2. Add GA4 as a data source using the native Google Analytics connector — select the correct property
3. Add Google Ads using the native connector — select the relevant account
4. For Meta/LinkedIn/CRM/email: add Supermetrics connector (Path B) or skip (Path A)

**Path C/D (BigQuery)**:
1. Enable GA4 BigQuery export: GA4 Admin > BigQuery Links > Link to your GCP project [src1]
2. Set up data pipelines for each non-Google source:

```sql
-- Example: Create staging tables in BigQuery for each source
CREATE SCHEMA IF NOT EXISTS marketing_staging;

-- GA4 data arrives automatically via BigQuery export
-- Verify export is working:
SELECT COUNT(*) as event_count,
       FORMAT_DATE('%Y-%m-%d', PARSE_DATE('%Y%m%d', event_date)) as date
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
GROUP BY date
ORDER BY date DESC;
```

3. For Meta Ads, use the Marketing API or Supermetrics BigQuery destination:

```python
# Example: Meta Ads data extraction via API (Python)
import requests
import json

ACCESS_TOKEN = "your_access_token"
AD_ACCOUNT_ID = "act_123456789"

url = f"https://graph.facebook.com/v19.0/{AD_ACCOUNT_ID}/insights"
params = {
    "fields": "campaign_name,spend,impressions,clicks,actions,cost_per_action_type",
    "time_range": '{"since":"2026-01-01","until":"2026-03-12"}',
    "level": "campaign",
    "time_increment": 1,
    "access_token": ACCESS_TOKEN
}
response = requests.get(url, params=params)
data = response.json()
```

**Verify**: Each data source returns recent data (within 48 hours). Check row counts are non-zero.
**If failed**: For GA4 BigQuery export, wait 24 hours after enabling — initial export takes up to a day. For API errors, verify credentials and rate limits.

### Step 3: Data Modeling and Joining

**Duration**: 1-3 hours
**Tool**: BigQuery SQL (Path C/D) or Looker Studio blending (Path A/B)

Create a unified data model that joins traffic, spend, conversions, pipeline, and email data on common keys (date, UTM campaign, source/medium).

```sql
-- Core marketing performance model (BigQuery)
CREATE OR REPLACE TABLE marketing_analytics.daily_channel_performance AS
WITH ga4_traffic AS (
  SELECT
    PARSE_DATE('%Y%m%d', event_date) AS date,
    traffic_source.source AS source,
    traffic_source.medium AS medium,
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') AS campaign,
    COUNT(DISTINCT user_pseudo_id) AS users,
    COUNTIF(event_name = 'session_start') AS sessions,
    COUNTIF(event_name IN ('purchase', 'sign_up', 'generate_lead')) AS conversions,
    SUM(CASE WHEN event_name = 'purchase' THEN ecommerce.purchase_revenue ELSE 0 END) AS revenue
  FROM `your-project.analytics_123456789.events_*`
  WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
  GROUP BY 1, 2, 3, 4
),
ad_spend AS (
  SELECT date, source, medium, campaign,
         SUM(spend) AS spend, SUM(impressions) AS impressions, SUM(clicks) AS ad_clicks
  FROM marketing_staging.unified_ad_spend
  GROUP BY 1, 2, 3, 4
)
SELECT
  t.date, t.source, t.medium, t.campaign,
  t.users, t.sessions, t.conversions, t.revenue,
  COALESCE(a.spend, 0) AS spend,
  COALESCE(a.impressions, 0) AS impressions,
  COALESCE(a.ad_clicks, 0) AS ad_clicks,
  SAFE_DIVIDE(COALESCE(a.spend, 0), NULLIF(t.conversions, 0)) AS cpa,
  SAFE_DIVIDE(t.revenue, NULLIF(COALESCE(a.spend, 0), 0)) AS roas
FROM ga4_traffic t
LEFT JOIN ad_spend a USING (date, source, medium, campaign);
```

**Key joins**: Date + UTM source + UTM medium + UTM campaign. Enforce strict UTM naming conventions across all platforms.
**Verify**: Check that joined table has spend data aligned with conversion data. Look for campaigns where spend > 0 but conversions = 0 (may indicate UTM mismatch, not necessarily poor performance).
**If failed**: Most common cause is UTM parameter mismatch. Audit campaign names across GA4 and ad platforms. Use LOWER() on all join keys to handle case sensitivity issues.

### Step 4: Dashboard Design and KPI Widget Configuration

**Duration**: 1-2 hours
**Tool**: Looker Studio or Metabase

Build the dashboard layout with these sections: [src5]

**Page 1 — Executive Summary**:
- Scorecards: Total spend, total revenue, blended ROAS, blended CPA, total MQLs
- Trend chart: spend vs revenue over time (line chart, dual axis)
- Channel breakdown: spend and ROAS by channel (stacked bar or table)
- Date range control: default to last 30 days, with comparison to previous period

**Page 2 — Acquisition Channels**:
- GA4 traffic by source/medium (table with sparklines)
- Ad platform performance: spend, clicks, CTR, CPC, CPA by campaign (sortable table)
- Google Ads vs Meta Ads vs LinkedIn Ads comparison (grouped bar chart)
- Cost per lead by channel (horizontal bar chart)

**Page 3 — Conversion Funnel**:
- Funnel visualization: visitors > leads > MQLs > SQLs > opportunities > closed-won
- Conversion rates between each stage
- CRM pipeline value by source/channel
- Average deal cycle length by channel

**Page 4 — Email Performance**: [src6]
- Email sends, open rate, click rate, unsubscribe rate (scorecards)
- Campaign performance table: subject line, send date, open rate, CTR, conversions
- List growth trend over time

**Looker Studio specific**:
```
1. Create > Report > Untitled Report
2. Add data source: Google Analytics (select GA4 property)
3. Add data source: Google Ads (select account)
4. For each page, add charts via Insert menu
5. Apply date range control: Add a control > Date range control
6. Set up calculated fields for CPA, ROAS, conversion rate
```

**Metabase specific**:
```sql
-- Create a Metabase question for channel performance
SELECT
  source, medium,
  SUM(sessions) AS sessions,
  SUM(conversions) AS conversions,
  SUM(spend) AS spend,
  SUM(revenue) AS revenue,
  ROUND(SUM(spend) / NULLIF(SUM(conversions), 0), 2) AS cpa,
  ROUND(SUM(revenue) / NULLIF(SUM(spend), 0), 2) AS roas
FROM marketing_analytics.daily_channel_performance
WHERE date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY source, medium
ORDER BY spend DESC;
```

**Verify**: All widgets display data without errors. Date range filter correctly updates all charts. Compare dashboard totals to native platform numbers (expect 5-15% variance due to attribution differences).
**If failed**: If widgets show "no data," check that the data source connection is active and the date range covers dates with data. If numbers diverge more than 20% from native platforms, audit the data model joins.

### Step 5: Calculated Metrics and Goal Tracking

**Duration**: 30-60 minutes
**Tool**: Looker Studio calculated fields or BigQuery views

Add calculated metrics that are not available in any single source:

| Metric | Formula | Purpose |
|--------|---------|---------|
| Blended CPA | Total spend / total conversions | Overall cost efficiency |
| Blended ROAS | Total revenue / total spend | Return on total ad investment |
| Email-attributed revenue | Revenue from email UTM campaigns | Email channel ROI |
| CAC | Total marketing spend / new customers | True customer acquisition cost |
| MQL-to-SQL rate | SQLs / MQLs | Funnel health indicator |
| Pipeline velocity | (SQLs x avg deal size x win rate) / avg cycle days | Revenue forecasting |

**Verify**: Calculated fields return reasonable values (e.g., CPA is positive, ROAS is between 0.5 and 20 for most businesses). Check for division-by-zero edge cases.
**If failed**: Wrap all division calculations in SAFE_DIVIDE or NULLIF to handle zero denominators gracefully.

### Step 6: Automated Reporting and Alerting

**Duration**: 30 minutes
**Tool**: Looker Studio scheduled email or Metabase subscriptions

**Looker Studio**:
1. Open the completed report
2. Click Share > Schedule email delivery
3. Set frequency: weekly, every Monday at 8:00 AM
4. Add stakeholder email addresses
5. Format: PDF attachment

**Metabase**:
1. Open dashboard > click the clock icon (Subscriptions)
2. Add email subscription: weekly on Monday
3. Add Slack subscription to #marketing-reports channel (optional)

Set up alerts for anomalies:
- Spend exceeds daily budget by 20%
- CPA exceeds target by 50% for 3 consecutive days
- Conversion rate drops below historical average by 2 standard deviations

**Verify**: Trigger a test email delivery. Confirm all pages render correctly in PDF format.
**If failed**: If PDF rendering cuts off charts, reduce the number of widgets per page or switch to landscape orientation.

## Output Schema

<!-- Exact format of the deliverable. Downstream agents and dashboard cards
     reference this schema to consume the output. -->

```json
{
  "output_type": "marketing_dashboard",
  "format": "Interactive dashboard URL + scheduled PDF",
  "pages": [
    {"name": "Executive Summary", "widgets": ["total_spend", "total_revenue", "blended_roas", "blended_cpa", "total_mqls", "spend_vs_revenue_trend", "channel_breakdown"]},
    {"name": "Acquisition Channels", "widgets": ["traffic_by_source", "ad_performance_table", "platform_comparison", "cpl_by_channel"]},
    {"name": "Conversion Funnel", "widgets": ["funnel_viz", "stage_conversion_rates", "pipeline_by_source", "deal_cycle_length"]},
    {"name": "Email Performance", "widgets": ["email_scorecards", "campaign_table", "list_growth_trend"]}
  ],
  "data_refresh": "daily (GA4 BigQuery export) or real-time (native connectors)",
  "report_schedule": "weekly PDF via email"
}
```

## Quality Benchmarks

<!-- How to evaluate if the output is good enough.
     Links to benchmark cards where applicable. -->

| Quality Metric | Minimum Acceptable | Good | Excellent |
|---------------|-------------------|------|-----------|
| Data source coverage | GA4 + 1 ad platform | GA4 + 2 ad platforms + CRM | GA4 + all ad platforms + CRM + email |
| Dashboard load time (90 days) | < 15 seconds | < 10 seconds | < 5 seconds |
| Data freshness | Daily refresh | 4-6 hour refresh | Near real-time (< 30 min) |
| Metric accuracy vs native platforms | Within 20% | Within 10% | Within 5% |
| Stakeholder adoption (weekly views) | > 2 viewers | > 5 viewers | > 10 viewers |
| Automated report delivery | Manual only | Weekly email | Weekly email + Slack + alerts |

**If below minimum**: Expand data source connections (Step 2), pre-aggregate data in BigQuery to improve load time (Step 3), or simplify the dashboard to fewer widgets per page (Step 4).

## Error Handling

<!-- Common failures and recovery actions. Agents need this to handle
     execution errors without human intervention. -->

| Error | Likely Cause | Recovery Action |
|-------|-------------|----------------|
| Looker Studio "Data Set Configuration Error" | Data source permissions revoked or connector expired | Reconnect the data source: Edit > Manage added data sources > Reconnect |
| BigQuery export missing recent dates | GA4 daily export delay (up to 72 hours) or export link broken | Check GA4 Admin > BigQuery Links. Re-enable if unlinked. For urgent data, use GA4 API as fallback |
| Supermetrics "Authorization Error" | OAuth token expired (common with Meta, LinkedIn) | Re-authorize in Supermetrics sidebar: Data source > Reconnect. Meta tokens expire every 60 days |
| Dashboard shows $0 revenue | E-commerce tracking not configured in GA4 or purchase event missing | Verify GA4 > Events > Conversions includes "purchase" event. Check GTM e-commerce data layer |
| UTM mismatch: spend data does not join with GA4 | Campaign names differ between ad platform and GA4 (case, spaces, encoding) | Standardize UTM naming: lowercase, hyphens, no spaces. Apply LOWER() and TRIM() to join keys |
| CRM API rate limit exceeded (429) | Too many requests during data sync | Implement exponential backoff. For HubSpot, batch requests and respect 100 req/10s limit. For Salesforce, use Bulk API for large exports |
| Dashboard timeout on large date ranges | Raw event-level queries exceed BigQuery slot limits | Create pre-aggregated summary tables (daily grain) and point dashboard at those instead of raw events |

## Cost Breakdown

<!-- Real cost analysis so agents can warn users before execution. -->

| Component | Free Tier | Paid Tier | At Scale (10+ sources) |
|-----------|-----------|-----------|------------------------|
| Looker Studio | $0 (unlimited reports) | $0 | $0 |
| Metabase Cloud | $0 (self-hosted) | $85/mo (Starter) | $440/mo (Pro) |
| BigQuery (storage) | 10 GB free | $0.02/GB/mo | $0.02/GB/mo |
| BigQuery (queries) | 1 TB/mo free | $6.25/TB | $6.25/TB |
| Supermetrics | 14-day trial | $39-99/mo (per dest) | $299/mo (per dest) |
| Fivetran (alternative) | 500K rows/mo free | $1/credit | Negotiated |
| Airbyte (open source) | $0 (self-hosted) | $0 (self-hosted) | Infra costs only |
| **Total (Path A)** | **$0** | **$0** | **$0** |
| **Total (Path B)** | **$0 (trial)** | **$39-200/mo** | **$300-600/mo** |
| **Total (Path C)** | **$0** | **$0-10/mo (BQ)** | **$20-50/mo (BQ)** |
| **Total (Path D)** | **$85/mo (Metabase)** | **$125-385/mo** | **$500-1000/mo** |

## Anti-Patterns

### Wrong: Building the dashboard before standardizing UTM parameters
Campaign tracking codes that differ between Google Ads ("Spring_Sale_2026"), Meta ("spring sale 2026"), and GA4 ("springsale2026") make it impossible to join spend data with conversion data. The dashboard shows disconnected silos instead of a unified view. [src2]

### Correct: Enforce UTM naming convention first
Create a UTM naming document with exact formats: lowercase, hyphens as separators, consistent structure (e.g., "spring-sale-2026"). Audit all active campaigns before building the dashboard. Use LOWER() and REPLACE() functions in SQL as a safety net.

### Wrong: Connecting raw GA4 event data directly to Looker Studio for complex dashboards
GA4's event-based schema with nested arrays causes slow queries and forces complex calculated fields in Looker Studio. Dashboards with more than 3-4 widgets from raw GA4 data become unusably slow. [src1]

### Correct: Export GA4 to BigQuery and model the data first
Use the BigQuery export to flatten and aggregate GA4 data into clean dimension and fact tables. Point Looker Studio at these pre-modeled tables. Dashboard loads in 2-3 seconds instead of 30+.

### Wrong: Adding every possible metric to the dashboard
Dashboards with 50+ widgets across 10 pages get ignored. Stakeholders cannot find the metrics that matter and stop checking the dashboard within weeks. [src5]

### Correct: Start with 4 pages and 5-7 widgets per page
Focus on metrics tied to business decisions: spend, revenue, ROAS, CPA, funnel conversion rates. Add detail pages only when stakeholders request them. Track dashboard usage — if a page gets zero views for 30 days, remove it.

## When This Matters

Use when an agent needs to produce a working multi-channel marketing dashboard — not a document describing what metrics to track. Requires active GA4 data collection and at least one ad platform running campaigns. Best executed after marketing strategy is defined and campaigns are live with 30+ days of data.

## Related Units

- [Marketing Strategy Framework for Startups](/business/startup-marketing/marketing-strategy-framework-for-startups/2026)
- [Paid Acquisition Playbook](/business/startup-marketing/paid-acquisition-playbook/2026)
- [Marketing Metrics Tracking](/business/startup-metrics/marketing-metrics-tracking/2026)
- [GA4 Setup Guide](/software/analytics/google-analytics-4-setup/2026)
