A full-funnel dashboard integrates data from Google Analytics 4, HubSpot, and Salesforce to track the complete customer journey from website visit to closed deal. It provides unified visibility across marketing, sales, and revenue operations teams.
Most companies struggle with data silos - marketing teams analyze GA4 data, sales teams work in Salesforce, and no one has a complete picture of customer acquisition and conversion. This fragmentation leads to:
Companies implementing unified full-funnel dashboards typically see:
With Airbook's no-code platform, most companies complete their full-funnel dashboard setup in 2-4 weeks:
What it provides: Website traffic, events, conversions, attribution, and user behavior data across your entire funnel
What it provides: Leads, contacts, marketing campaigns, email metrics, and marketing automation data
What it provides: Opportunities, accounts, sales activities, revenue data, and complete sales pipeline tracking
What it provides: Data integration, SQL workspace, cross-platform analytics, and automated reporting without engineering
Set up connections to all three platforms with proper permissions and data access:
Define how customers move through your funnel and connect identities across platforms:
Create cross-platform metrics that give you complete funnel visibility:
Create dashboards tailored to different stakeholders' needs:
Successful full-funnel dashboards require careful mapping of how data flows between GA4, HubSpot, and Salesforce. Here's how to structure your data relationships for maximum insight.
| Identifier | GA4 | HubSpot | Salesforce | 
|---|---|---|---|
| Email Address | User ID (when logged in) | Primary contact identifier | Contact/Lead email | 
| UTM Parameters | Campaign tracking | Original source data | Lead source fields | 
| Client ID | GA4 client identifier | HubSpot tracking code | External ID fields | 
| Phone Number | N/A | Contact property | Contact/Lead phone | 
Here are comprehensive SQL queries to build your full-funnel dashboard, connecting data across GA4, HubSpot, and Salesforce.
-- Full Funnel Performance Dashboard
WITH funnel_data AS (
  -- GA4 Traffic Data
  SELECT 
    DATE_TRUNC('month', event_date) AS month,
    traffic_source.source AS source,
    traffic_source.medium AS medium,
    traffic_source.campaign AS campaign,
    COUNT(DISTINCT user_pseudo_id) AS website_visitors,
    COUNTIF(event_name = 'form_submit') AS form_submissions,
    COUNTIF(event_name = 'purchase' OR event_name = 'generate_lead') AS ga4_conversions
  FROM ga4_events
  WHERE event_date >= '2024-01-01'
  GROUP BY month, source, medium, campaign
),
hubspot_leads AS (
  -- HubSpot Lead Data
  SELECT 
    DATE_TRUNC('month', createdate) AS month,
    original_source_type AS source,
    original_source_data_1 AS medium,
    original_source_data_2 AS campaign,
    COUNT(*) AS total_leads,
    COUNTIF(lifecyclestage = 'marketingqualifiedlead') AS mqls,
    COUNTIF(lifecyclestage = 'salesqualifiedlead') AS sqls,
    COUNT(DISTINCT CASE WHEN dealstage IS NOT NULL THEN contact_id END) AS leads_to_opportunities
  FROM hubspot_contacts c
  LEFT JOIN hubspot_deals d ON c.contact_id = d.primary_contact_id
  WHERE c.createdate >= '2024-01-01'
  GROUP BY month, source, medium, campaign
),
salesforce_opportunities AS (
  -- Salesforce Opportunity Data
  SELECT 
    DATE_TRUNC('month', o.createddate) AS month,
    l.leadsource AS source,
    l.lead_source_detail__c AS medium,
    l.utm_campaign__c AS campaign,
    COUNT(*) AS total_opportunities,
    COUNT(CASE WHEN o.stagename = 'Closed Won' THEN 1 END) AS closed_won_deals,
    SUM(CASE WHEN o.stagename = 'Closed Won' THEN o.amount ELSE 0 END) AS total_revenue,
    AVG(CASE WHEN o.stagename = 'Closed Won' THEN o.amount END) AS avg_deal_size
  FROM salesforce_opportunities o
  JOIN salesforce_leads l ON o.lead_id__c = l.id
  WHERE o.createddate >= '2024-01-01'
  GROUP BY month, source, medium, campaign
),
combined_funnel AS (
  SELECT 
    COALESCE(f.month, h.month, s.month) AS month,
    COALESCE(f.source, h.source, s.source) AS source,
    COALESCE(f.medium, h.medium, s.medium) AS medium,
    COALESCE(f.campaign, h.campaign, s.campaign) AS campaign,
    
    -- Funnel Metrics
    COALESCE(f.website_visitors, 0) AS website_visitors,
    COALESCE(f.form_submissions, 0) AS form_submissions,
    COALESCE(h.total_leads, 0) AS total_leads,
    COALESCE(h.mqls, 0) AS mqls,
    COALESCE(h.sqls, 0) AS sqls,
    COALESCE(s.total_opportunities, 0) AS total_opportunities,
    COALESCE(s.closed_won_deals, 0) AS closed_won_deals,
    COALESCE(s.total_revenue, 0) AS total_revenue,
    COALESCE(s.avg_deal_size, 0) AS avg_deal_size
    
  FROM funnel_data f
  FULL OUTER JOIN hubspot_leads h ON f.month = h.month 
                                   AND f.source = h.source 
                                   AND f.medium = h.medium 
                                   AND f.campaign = h.campaign
  FULL OUTER JOIN salesforce_opportunities s ON COALESCE(f.month, h.month) = s.month 
                                              AND COALESCE(f.source, h.source) = s.source 
                                              AND COALESCE(f.medium, h.medium) = s.medium 
                                              AND COALESCE(f.campaign, h.campaign) = s.campaign
)
SELECT 
  month,
  source,
  medium,
  campaign,
  website_visitors,
  total_leads,
  mqls,
  sqls,
  total_opportunities,
  closed_won_deals,
  total_revenue,
  avg_deal_size,
  
  -- Conversion Rates
  ROUND(SAFE_DIVIDE(total_leads, website_visitors) * 100, 2) AS visitor_to_lead_rate,
  ROUND(SAFE_DIVIDE(mqls, total_leads) * 100, 2) AS lead_to_mql_rate,
  ROUND(SAFE_DIVIDE(sqls, mqls) * 100, 2) AS mql_to_sql_rate,
  ROUND(SAFE_DIVIDE(total_opportunities, sqls) * 100, 2) AS sql_to_opportunity_rate,
  ROUND(SAFE_DIVIDE(closed_won_deals, total_opportunities) * 100, 2) AS opportunity_to_customer_rate,
  
  -- Overall Conversion Rate
  ROUND(SAFE_DIVIDE(closed_won_deals, website_visitors) * 100, 4) AS overall_conversion_rate
FROM combined_funnel
WHERE website_visitors > 0 OR total_leads > 0
ORDER BY month DESC, total_revenue DESC;-- Multi-Touch Attribution for Revenue
WITH customer_touchpoints AS (
  SELECT 
    sf.contact_email,
    sf.opportunity_id,
    sf.close_date,
    sf.amount,
    
    -- First Touch (GA4)
    ga.source AS first_touch_source,
    ga.medium AS first_touch_medium,
    ga.campaign AS first_touch_campaign,
    ga.event_date AS first_touch_date,
    
    -- Lead Creation (HubSpot)
    hs.original_source_type AS lead_source,
    hs.original_source_data_1 AS lead_medium,
    hs.original_source_data_2 AS lead_campaign,
    hs.createdate AS lead_create_date,
    
    -- Last Touch Before Opportunity
    sf.leadsource AS last_touch_source,
    sf.lead_source_detail__c AS last_touch_medium,
    sf.utm_campaign__c AS last_touch_campaign
    
  FROM salesforce_opportunities sf
  LEFT JOIN hubspot_contacts hs ON sf.contact_email = hs.email
  LEFT JOIN (
    SELECT 
      user_id,
      MIN(event_date) AS event_date,
      FIRST_VALUE(traffic_source.source) OVER (
        PARTITION BY user_id ORDER BY event_timestamp ASC
      ) AS source,
      FIRST_VALUE(traffic_source.medium) OVER (
        PARTITION BY user_id ORDER BY event_timestamp ASC
      ) AS medium,
      FIRST_VALUE(traffic_source.campaign) OVER (
        PARTITION BY user_id ORDER BY event_timestamp ASC
      ) AS campaign
    FROM ga4_events
    WHERE user_id IS NOT NULL
    GROUP BY user_id
  ) ga ON sf.contact_email = ga.user_id
  
  WHERE sf.stagename = 'Closed Won'
    AND sf.close_date >= '2024-01-01'
),
attribution_revenue AS (
  SELECT 
    'First Touch' AS attribution_model,
    first_touch_source AS source,
    first_touch_medium AS medium,
    first_touch_campaign AS campaign,
    COUNT(DISTINCT opportunity_id) AS deals_attributed,
    SUM(amount) AS revenue_attributed,
    AVG(amount) AS avg_deal_size
  FROM customer_touchpoints
  WHERE first_touch_source IS NOT NULL
  GROUP BY first_touch_source, first_touch_medium, first_touch_campaign
  
  UNION ALL
  
  SELECT 
    'Lead Creation' AS attribution_model,
    lead_source AS source,
    lead_medium AS medium,
    lead_campaign AS campaign,
    COUNT(DISTINCT opportunity_id) AS deals_attributed,
    SUM(amount) AS revenue_attributed,
    AVG(amount) AS avg_deal_size
  FROM customer_touchpoints
  WHERE lead_source IS NOT NULL
  GROUP BY lead_source, lead_medium, lead_campaign
  
  UNION ALL
  
  SELECT 
    'Last Touch' AS attribution_model,
    last_touch_source AS source,
    last_touch_medium AS medium,
    last_touch_campaign AS campaign,
    COUNT(DISTINCT opportunity_id) AS deals_attributed,
    SUM(amount) AS revenue_attributed,
    AVG(amount) AS avg_deal_size
  FROM customer_touchpoints
  WHERE last_touch_source IS NOT NULL
  GROUP BY last_touch_source, last_touch_medium, last_touch_campaign
)
SELECT 
  attribution_model,
  source,
  medium,
  campaign,
  deals_attributed,
  ROUND(revenue_attributed, 2) AS revenue_attributed,
  ROUND(avg_deal_size, 2) AS avg_deal_size,
  ROUND(revenue_attributed / SUM(revenue_attributed) OVER (PARTITION BY attribution_model) * 100, 1) AS revenue_share_pct
FROM attribution_revenue
WHERE deals_attributed >= 1
ORDER BY attribution_model, revenue_attributed DESC;Design your full-funnel dashboard with role-specific views that help each team optimize their part of the customer journey while understanding the complete picture.
Effective funnel visualization helps teams quickly identify bottlenecks, opportunities, and trends across the entire customer journey from first touch to closed deal.
Understanding what your full-funnel dashboard data means and how to act on insights is crucial for optimizing your entire customer acquisition and conversion process.
| Funnel Stage | Industry Average | Good Performance | Excellent Performance | 
|---|---|---|---|
| Visitor → Lead | 2-5% | 5-10% | 10%+ | 
| Lead → MQL | 20-30% | 30-50% | 50%+ | 
| MQL → SQL | 25-35% | 35-50% | 50%+ | 
| SQL → Opportunity | 40-60% | 60-80% | 80%+ | 
| Opportunity → Customer | 15-25% | 25-35% | 35%+ | 
Full-funnel dashboards are essential for different teams and company stages. Here's when and how each role should leverage this integrated view.
Use for: Campaign optimization, channel performance, lead quality analysis
Key insight: Which campaigns and channels drive the highest-quality leads that convert to revenue
Use for: Lead source performance, pipeline health, conversion optimization
Key insight: Which lead sources convert best and how to prioritize sales efforts
Use for: Process optimization, attribution modeling, forecasting accuracy
Key insight: End-to-end funnel performance and optimization opportunities
Use for: Strategic decisions, budget allocation, growth planning
Key insight: Overall funnel health and investment ROI across all channels
Building full-funnel dashboards requires careful attention to data quality, integration setup, and stakeholder alignment. Here are the most common pitfalls and how to avoid them.
Use Airbook's native connectors to establish direct API connections with each platform. The integration process involves: (1) OAuth authentication for each data source, (2) selecting relevant tables and fields, (3) configuring data sync schedules, and (4) mapping customer identifiers across systems.
Timeline: Complete setup typically takes 2-3 hours with no technical expertise required.
The primary identifier is email address, which exists in all three systems. Secondary identifiers include: phone numbers, company domains, GA4 client IDs, HubSpot contact IDs, and Salesforce account IDs. UTM parameters and lead source data provide additional context for attribution.
Success rate: Email-based matching typically achieves 85-95% accuracy when data hygiene is maintained.
For real-time decision making, set up hourly syncs for critical data (new leads, opportunity updates). Daily syncs work for historical analysis and reporting. Weekly syncs are sufficient for strategic planning and trend analysis.
Best practice: Start with daily syncs, then optimize based on business needs and data volume.
Core metrics include: (1) Visitor-to-lead conversion rate, (2) Lead-to-opportunity conversion rate, (3) Opportunity-to-customer conversion rate, (4) Average deal size by source, (5) Sales cycle length by channel, (6) Customer acquisition cost (CAC), and (7) Lifetime value (LTV).
Industry benchmark: B2B SaaS companies typically see 2-5% visitor-to-lead, 15-25% lead-to-opportunity, and 25-35% opportunity-to-customer conversion rates.
Multi-touch attribution assigns fractional credit to each touchpoint in the customer journey. Common models include: (1) Linear (equal credit to all touches), (2) Time-decay (more credit to recent touches), (3) U-shaped (high credit to first and last touches), and (4) W-shaped (high credit to first, middle, and last touches).
Recommendation: Start with linear attribution for simplicity, then test time-decay models based on your sales cycle length.
Marketing attribution tracks which channels generate leads and opportunities, while revenue attribution tracks which channels generate actual closed deals and revenue. Revenue attribution provides more accurate ROI calculations but requires longer measurement periods.
Key insight: Channels that generate high-quality leads may differ from those that drive revenue, making both metrics essential.
With Airbook's no-code platform, you need basic understanding of: (1) SQL for custom queries, (2) Your company's data structure across GA4, HubSpot, and Salesforce, (3) Marketing and sales processes for proper metric definition, and (4) Dashboard design principles for effective visualization.
Learning curve: Most marketing ops professionals become proficient in 1-2 weeks with provided templates and training.
Top mistakes include: (1) Inconsistent UTM parameter usage across campaigns, (2) Poor data hygiene leading to matching errors, (3) Overly complex dashboards that confuse users, (4) Inadequate testing of attribution models, and (5) Lack of stakeholder buy-in and training.
Success factor: Start simple with core metrics, ensure data quality, and gradually add complexity based on user feedback.
Implement data validation checks including: (1) Cross-platform record count verification, (2) Spot-checking individual customer journeys, (3) Comparing aggregated metrics with source system reports, (4) Setting up automated data quality alerts, and (5) Regular audit schedules with data stewards.
Industry standard: Aim for 95% data accuracy with monthly validation processes and automated anomaly detection.
Companies typically see 300-500% ROI within 6 months through: (1) 25-40% improvement in marketing efficiency, (2) 15-25% increase in sales conversion rates, (3) 50-70% reduction in reporting overhead, and (4) 20-30% better budget allocation across channels.
Payback period: Most companies recover implementation costs within 2-4 months through improved decision-making and efficiency gains.
Track adoption metrics including: (1) Daily active users by team, (2) Time spent in dashboards per user, (3) Number of data-driven decisions documented, (4) Reduction in ad-hoc reporting requests, and (5) Improvement in forecast accuracy and goal attainment.
Success indicator: 80%+ of marketing and sales team members using dashboards weekly indicates strong adoption.
Most beneficial for companies with: (1) 5+ marketing team members, (2) 10+ sales team members, (3) Multiple marketing channels and campaigns, (4) Sales cycles longer than 30 days, and (5) Annual recurring revenue (ARR) above $1M.
Sweet spot: Series A-B companies with 20-100 employees see the highest impact from unified funnel analytics.
Follow this complete implementation guide to connect GA4, HubSpot, and Salesforce data into unified funnel analytics. Most companies complete setup in 2-4 weeks and see ROI within 2-4 months.