Complete Guide: Analyzing Convert.com Experiments in Looker Studio with GA4 Data
Visualize and Optimize A/B Test Results Using Looker Studio and GA4
Introduction
Looker Studio (formerly Google Data Studio) provides a powerful, free platform for analyzing Convert.com experiment data from Google Analytics 4. This comprehensive guide walks you through setting up professional experiment analysis dashboards that connect Convert.com's experience_impression events with your GA4 conversion data.
Why Choose Looker Studio for Convert.com Analysis?
Advantages Over Other Tools
- Cost-Effective: Completely free with Google account
- Native GA4 Integration: Direct connection to GA4 without BigQuery complexity
- Real-Time Data: Live dashboard updates as data flows in
- Easy Sharing: Simple collaboration with stakeholders
- No Technical Barriers: Drag-and-drop interface accessible to non-technical users
- Flexible Visualization: Rich chart types for experiment analysis
When to Use Looker Studio vs. Other Tools
Choose Looker Studio when:
- Budget constraints exist
- Quick setup is prioritized
- Team has mixed technical expertise
- Standard A/B testing reports are sufficient
- You need stakeholder-friendly dashboards
Data Structure Overview
Convert.com Event Format
- Event Name: experience_impression
- Key Parameter: exp_variant_string
- Format: CONV-{experiment_id}-{variation_id}
- Example: CONV-100018331-100099919
Your GA4 Conversion Events
Convert.com only sends impression tracking. You'll analyze these against your existing GA4 events:
- E-commerce events (purchase, add_to_cart)
- Lead generation (generate_lead, sign_up)
- Custom conversion events specific to your business
Setting Up Your Data Source
Method 1: Direct GA4 Connection (Simple Setup)
Step 1: Create New Data Source
- Go to datastudio.google.com
- Click "Create" → "Data Source"
- Select "Google Analytics" connector
- Choose your GA4 property
- Click "Connect"
Step 2: Configure Basic Filters In the data source configuration:
- Add filter: Event name contains experience_impression
- This captures all Convert.com impression data
Limitations of Direct Connection:
- Limited custom field capabilities
- Cannot perform complex SQL operations
- May not support advanced attribution modeling
Method 2: BigQuery Connection (Recommended)
Step 1: Set Up BigQuery Data Source
- In Looker Studio, click "Create" → "Data Source"
- Select "BigQuery" connector
- Choose your project and GA4 BigQuery dataset
- Select "Custom Query" option
Step 2: Implement the Complete Analysis Query
WITH experiment_data AS (
SELECT
PARSE_DATE('%Y%m%d', event_date) AS date,
-- Extract experiment details from Convert.com
REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'exp_variant_string'),
r'CONV-(\d+)-\d+'
) AS experiment_id,
REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'exp_variant_string'),
r'CONV-\d+-(\d+)'
) AS variation_id,
-- Create readable variation labels
CASE
WHEN REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'exp_variant_string'),
r'CONV-\d+-(\d+)'
) = 'YOUR_CONTROL_VARIATION_ID' THEN 'Control'
WHEN REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'exp_variant_string'),
r'CONV-\d+-(\d+)'
) = 'YOUR_VARIATION_A_ID' THEN 'Variation A'
WHEN REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'exp_variant_string'),
r'CONV-\d+-(\d+)'
) = 'YOUR_VARIATION_B_ID' THEN 'Variation B'
ELSE 'Other'
END AS variation_label,
user_pseudo_id,
event_name,
event_timestamp,
-- Categorize events
CASE
WHEN event_name = 'experience_impression' THEN 'Impression'
WHEN event_name IN ('purchase', 'generate_lead', 'sign_up', 'subscribe') THEN 'Conversion'
WHEN event_name IN ('add_to_cart', 'begin_checkout', 'view_item') THEN 'Micro-Conversion'
ELSE 'Other'
END AS event_category,
COALESCE(
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value'),
ecommerce.purchase_revenue
) AS event_value,
device.category AS device_category,
device.operating_system AS operating_system,
geo.country AS country,
geo.region AS region,
traffic_source.source AS traffic_source,
traffic_source.medium AS traffic_medium,
traffic_source.name AS campaign_name
FROM `YOUR_PROJECT_ID.analytics_XXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
AND (
event_name = 'experience_impression' OR
event_name IN (
'purchase', 'generate_lead', 'sign_up', 'subscribe',
'add_to_cart', 'begin_checkout', 'view_item'
)
)
),
user_impressions AS (
SELECT
user_pseudo_id,
experiment_id,
variation_id,
variation_label,
MIN(event_timestamp) AS first_impression_time,
MIN(date) AS first_impression_date
FROM experiment_data
WHERE event_category = 'Impression'
GROUP BY 1, 2, 3, 4
),
attributed_events AS (
SELECT
e.*,
ui.first_impression_time,
ui.first_impression_date,
CASE
WHEN e.event_category IN ('Conversion', 'Micro-Conversion')
AND e.event_timestamp >= ui.first_impression_time
THEN TIMESTAMP_DIFF(
TIMESTAMP_MICROS(e.event_timestamp),
TIMESTAMP_MICROS(ui.first_impression_time),
HOUR
)
END AS hours_to_conversion,
CASE
WHEN e.event_category IN ('Conversion', 'Micro-Conversion')
AND e.event_timestamp >= ui.first_impression_time
AND e.event_timestamp <= ui.first_impression_time + (30 * 24 * 60 * 60 * 1000000)
THEN 1
ELSE 0
END AS is_attributed_conversion
FROM experiment_data e
LEFT JOIN user_impressions ui
ON e.user_pseudo_id = ui.user_pseudo_id
AND e.experiment_id = ui.experiment_id
WHERE ui.user_pseudo_id IS NOT NULL
)
SELECT
date,
experiment_id,
variation_id,
variation_label,
event_category,
event_name,
device_category,
operating_system,
country,
region,
traffic_source,
traffic_medium,
campaign_name,
COUNT(*) AS total_events,
COUNT(DISTINCT user_pseudo_id) AS unique_users,
SUM(COALESCE(event_value, 0)) AS total_revenue,
AVG(COALESCE(event_value, 0)) AS avg_event_value,
SUM(is_attributed_conversion) AS attributed_conversions,
COUNT(DISTINCT CASE WHEN is_attributed_conversion = 1 THEN user_pseudo_id END) AS unique_converters,
AVG(CASE WHEN hours_to_conversion IS NOT NULL THEN hours_to_conversion END) AS avg_hours_to_conversion,
COUNT(DISTINCT CASE WHEN event_category = 'Impression' THEN user_pseudo_id END) AS users_exposed
FROM attributed_events
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
ORDER BY 1 DESC, 4, 5;
Step 3: Validate Your Data Before proceeding, run this validation query:
SELECT
event_name,
COUNT(*) AS event_count,
COUNT(DISTINCT user_pseudo_id) AS unique_users,
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM `YOUR_PROJECT_ID.analytics_XXXXXX.events_*`
WHERE event_name = 'experience_impression'
OR event_name IN ('purchase', 'generate_lead', 'sign_up') -- Your events
GROUP BY 1
ORDER BY 2 DESC;
Building Your Dashboard
Dashboard Structure Template
┌─────────────────────────────────────────────────────────────┐
│ CONVERT.COM EXPERIMENT ANALYSIS │
│ [Dashboard Title] │
├─────────────────┬─────────────────┬─────────────────────────┤
│ Date Range │ Experiment ID │ Variation Filter │
│ [Date Control] │ [Dropdown] │ [Multi-select] │
├─────────────────┴─────────────────┴─────────────────────────┤
│ EXPERIMENT OVERVIEW │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐│
│ │ CONTROL │ │ VARIATION A │ │ STATISTICAL ││
│ │ Scorecard │ │ Scorecard │ │ SIGNIFICANCE ││
│ │ Users: 1,234│ │ Users: 1,187│ │ Confidence: 95% ││
│ │ Conv: 12.4% │ │ Conv: 14.7% │ │ Uplift: +18.5% ││
│ │ Rev: $12,450│ │ Rev: $14,230│ │ Winner: Variation A ││
│ └─────────────┘ └─────────────┘ └─────────────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ PERFORMANCE TRENDS │
│ [Time Series Chart - Daily Metrics] │
├─────────────────┬─────────────────┬─────────────────────────┤
│ CONVERSION │ DEVICE │ TRAFFIC │
│ FUNNEL │ PERFORMANCE │ SOURCES │
│ [Funnel Chart] │ [Bar Chart] │ [Pie Chart] │
├─────────────────┴─────────────────┴─────────────────────────┤
│ GEOGRAPHIC ANALYSIS │
│ [World Map - Performance by Country] │
├─────────────────────────────────────────────────────────────┤
│ DETAILED DATA TABLE │
│ [Paginated table with drill-down capability] │
└─────────────────────────────────────────────────────────────┘
Step-by-Step Dashboard Creation
1. Set Up Filter Controls
Date Range Control:
- Control type: Date range control
- Default value: Last 30 days
- Date format: YYYY-MM-DD
Experiment Filter:
- Control type: Drop-down list
- Control field: Experiment ID
- Allow multiple selections: No
Variation Filter:
- Control type: Multi-select dropdown
- Control field: Variation Label
- Default: Select all
Device Filter:
- Control type: Multi-select dropdown
- Control field: Device Category
- Default: Select all
2. Create Core Performance Scorecards
Control Scorecard:
Chart Type: Scorecard
Filters: Variation Label = "Control"
Metrics:
- Users Exposed (unique_users where event_category = "Impression")
- Conversion Rate (calculated field)
- Total Revenue (total_revenue where event_category = "Conversion")
Variation A Scorecard:
Chart Type: Scorecard
Filters: Variation Label = "Variation A"
Metrics: [Same as Control]
Statistical Summary Scorecard:
Chart Type: Text/Scorecard
Content: Calculated difference between variations
- Uplift percentage
- Confidence interval (if calculated)
- Winner declaration
3. Performance Trend Chart
Configuration:
- Chart type: Time series (line chart)
- Date dimension: Date
- Breakdown dimension: Variation Label
- Metrics: Conversion Rate, Revenue per User
- Secondary axis: Total Revenue
Styling:
- Control: Blue line (#1f77b4)
- Variation A: Orange line (#ff7f0e)
- Variation B: Green line (#2ca02c)
4. Conversion Funnel Analysis
Chart Type: Stepped area chart or Funnel chart Steps:
- Users Exposed (Impressions)
- Micro-Conversions (addtocart, etc.)
- Primary Conversions (purchase, sign_up, etc.)
Configuration:
Dimensions: Event Category, Variation Label
Metrics: Unique Users
Sort: Event Category (custom order: Impression, Micro-Conversion, Conversion)
5. Device Performance Analysis
Chart Type: Grouped bar chart Configuration:
- Dimension: Device Category
- Breakdown: Variation Label
- Metrics: Conversion Rate, Revenue per User
- Sort: By total users (descending)
6. Geographic Heat Map
Chart Type: Geo chart (World map) Configuration:
- Geographic dimension: Country
- Metrics: Users Exposed, Conversion Rate
- Color metric: Conversion Rate
- Size metric: Users Exposed
7. Traffic Source Analysis
Chart Type: Pie chart Configuration:
- Dimension: Traffic Source
- Metric: Users Exposed
- Max categories: 10
- Group smaller segments: Yes
8. Detailed Data Table
Configuration:
Dimensions:
- Date
- Variation Label
- Event Category
- Device Category
- Country
- Traffic Source
Metrics:
- Unique Users
- Total Events
- Attributed Conversions
- Total Revenue
- Conversion Rate
- Revenue per User
Features:
- Enable pagination (50 rows per page)
- Enable search
- Enable export
- Sort by Date (descending)
Advanced Calculated Fields
Essential Calculated Fields to Create
1. Conversion Rate
Formula: Unique Converters / Users Exposed * 100
Type: Number
Format: Percentage (2 decimal places)
2. Revenue per User (RPU)
Formula: Total Revenue / Users Exposed
Type: Currency
Format: USD (2 decimal places)
3. Average Order Value (AOV)
Formula: Total Revenue / Attributed Conversions
Type: Currency
Format: USD (2 decimal places)
4. Uplift Percentage
Formula:
CASE
WHEN Variation Label = "Control" THEN 0
ELSE ((Conversion Rate - Control Conversion Rate) / Control Conversion Rate) * 100
END
Type: Number
Format: Percentage (1 decimal place)
5. Time to Conversion (Days)
Formula: Avg Hours to Conversion / 24
Type: Number
Format: Number (1 decimal place)
6. Statistical Significance Indicator
Formula:
CASE
WHEN Users Exposed >= 1000 AND ABS(Uplift Percentage) >= 10 THEN "Significant"
WHEN Users Exposed >= 500 AND ABS(Uplift Percentage) >= 15 THEN "Likely Significant"
ELSE "Not Significant"
END
Type: Text
Blended Data Sources (Advanced)
Combining Multiple Data Sources
For more sophisticated analysis, blend your Convert.com data with other sources:
Primary Source: Convert Experiment Data
- Your main BigQuery query results
Secondary Source: GA4 Attribution Data
- Additional attribution models
- Multi-channel funnel data
Tertiary Source: External Data
- Weather data for seasonal businesses
- Stock market data for financial services
- Custom business metrics
Blending Configuration:
Join Type: Left Outer Join
Join Key: User Pseudo ID + Date
Date Range: Match primary source
Dashboard Optimization
Performance Best Practices
- Query Optimization:
- Use date partitioning in BigQuery queries
- Limit data range to necessary periods (90 days max)
- Use aggregated data where possible
- Chart Optimization:
- Limit table rows (max 1000 for performance)
- Use appropriate chart types for data volume
- Enable data sampling for large datasets
- Refresh Settings:
- Set data freshness to 4-12 hours (depending on needs)
- Enable automatic refresh for live dashboards
- Use manual refresh for ad-hoc analysis
Mobile Responsiveness
Ensure dashboard works on mobile devices:
- Use flexible layouts
- Prioritize key metrics in top sections
- Test on various screen sizes
- Consider separate mobile version for executives
Sharing and Collaboration
Access Control Setup
Viewer Access:
- Stakeholders who need to view results
- Marketing team members
- Executive leadership
Editor Access:
- Analytics team
- Marketing managers
- Growth team leads
Owner Access:
- Primary analyst
- Data team leads
Scheduled Reports
Set up automated email reports:
- Go to dashboard → Share → Schedule email delivery
- Configure recipients and frequency
- Set up conditional alerts for significant changes
- Include PDF exports for offline review
Troubleshooting Common Issues
Data Discrepancies
Issue: Numbers don't match GA4 interface Solution:
- Check date ranges alignment
- Verify event filtering logic
- Account for data processing delays
- Review attribution settings
Issue: Missing conversion events Solution:
- Verify event names match your GA4 setup
- Check BigQuery export settings
- Confirm events are being tracked properly
Performance Problems
Issue: Dashboard loading slowly Solution:
- Reduce date range
- Optimize BigQuery queries
- Use data extracts instead of live queries
- Remove unnecessary dimensions/metrics
Issue: Data not updating Solution:
- Check data source refresh settings
- Verify BigQuery export is running
- Review data permissions
- Check for quota limits
Testing Your Implementation
Validation Checklist
- [ ] Data Accuracy Test:
-- Compare total events in dashboard vs. BigQuery
SELECT COUNT(*)
FROM your_main_query
- [ ] Attribution Test:
-- Verify conversion attribution logic
SELECT user_pseudo_id, event_name, event_timestamp
FROM your_data
WHERE user_pseudo_id = 'sample_user_id'
ORDER BY event_timestamp
- [ ] Experiment Segmentation Test:
- Verify users appear in only one variation
- Check variation ID extraction accuracy
- Confirm experiment date ranges
- [ ] Performance Test:
- Load dashboard with maximum date range
- Test with multiple users simultaneously
- Verify mobile compatibility
Sample Size Validation
Ensure statistical reliability:
-- Check sample sizes by variation
SELECT
variation_label,
COUNT(DISTINCT user_pseudo_id) AS sample_size,
COUNT(DISTINCT CASE WHEN event_category = 'Conversion' THEN user_pseudo_id END) AS converters
FROM your_experiment_data
WHERE event_category IN ('Impression', 'Conversion')
GROUP BY 1
Minimum Requirements:
- At least 100 conversions per variation
- At least 1,000 users per variation
- Test duration of at least 1-2 weeks
Customization Guide
Industry-Specific Adaptations
E-commerce
-- Add product-specific metrics
SELECT
...,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'item_category') AS product_category,
(SELECT value.int64_value FROM UNNEST(event_params) WHERE key = 'quantity') AS quantity
FROM events_table
SaaS/B2B
-- Add subscription and trial metrics
CASE
WHEN event_name = 'trial_start' THEN 'Trial'
WHEN event_name = 'subscription_purchase' THEN 'Subscription'
WHEN event_name = 'feature_usage' THEN 'Engagement'
END AS event_category
Media/Content
-- Add engagement metrics
SELECT
...,
(SELECT value.int64_value FROM UNNEST(event_params) WHERE key = 'engagement_time_msec') AS engagement_time,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'content_group1') AS content_category
Custom Event Integration
For specialized tracking:
-- Custom event categorization
CASE
WHEN event_name LIKE 'custom_%' THEN 'Custom Actions'
WHEN event_name IN ('your_specific_events') THEN 'Business KPIs'
WHEN event_name LIKE 'gtm_%' THEN 'GTM Events'
END AS custom_event_category
Maintenance and Updates
Regular Maintenance Tasks
Weekly:
- Review data quality and completeness
- Check for new experiments in Convert.com
- Validate attribution logic accuracy
- Monitor dashboard performance
Monthly:
- Update variation ID mappings for new tests
- Review and optimize BigQuery queries
- Archive completed experiments
- Update stakeholder access as needed
Quarterly:
- Conduct full data audit
- Review and update conversion event definitions
- Optimize dashboard layout based on user feedback
- Plan new features and enhancements
Version Control
Maintain documentation for:
- BigQuery query changes
- Dashboard layout modifications
- New calculated field additions
- Access control updates
Conclusion
This comprehensive Looker Studio implementation provides a robust foundation for analyzing Convert.com experiments. The template balances ease of use with analytical depth, making A/B testing insights accessible to both technical and non-technical team members.
Key Benefits Achieved:
- Cost-effective experimentation analysis
- Real-time performance monitoring
- Comprehensive attribution modeling
- Collaborative decision-making tools
- Scalable framework for future experiments
Next Steps:
- Implement the basic dashboard using provided templates
- Customize for your specific business metrics
- Train team members on dashboard usage
- Establish regular review and optimization processes
- Expand analysis to include advanced statistical testing
By following this guide, you'll have a professional-grade experiment analysis platform that rivals expensive specialized tools, all built on free Google infrastructure.
Next Step: