Analytics Platforms (Custom)

Connect Shoplift's powerful A/B testing data with your existing analytics stack to create a unified view of your customer journey and test performance.

Overview

Shoplift's getVisitorData method provides a flexible way to send test participation and variant data to any third-party analytics platform. This enables you to analyze test results alongside your existing metrics, create custom segments based on test exposure, and build comprehensive attribution models that include A/B test data.

Why Integrate Third-Party Analytics?

While Shoplift provides robust built-in analytics, integrating with your existing analytics tools allows you to:

  • Unify your data: Combine test data with other customer touchpoints in a single dashboard

  • Create advanced segments: Build audiences based on test participation and behavior

  • Enhance attribution: Understand how tests impact downstream metrics not tracked in Shoplift

  • Leverage existing workflows: Use familiar tools and reports your team already relies on

Core Integration Pattern

The foundation of any custom integration is the getVisitorData method, which returns information about the current visitor's test participation and variant assignments.

Basic Implementation

Add this code to your theme's main JavaScript file or in a script tag in your theme.liquid file:

// Wait for Shoplift to be available
function initializeShopliftTracking() {
  if (window.shoplift && window.shoplift.getVisitorData) {
    sendTestDataToAnalytics();
  } else {
    // Retry if Shoplift isn't ready yet
    setTimeout(initializeShopliftTracking, 100);
  }
}

function sendTestDataToAnalytics() {
  // Get comprehensive visitor data
  const visitorData = window.shoplift.getVisitorData();
  
  if (!visitorData.visitor) {
    // No visitor data available yet
    return;
  }
  
  // Process each test assignment
  visitorData.visitorTests.forEach(test => {
    // Send to your analytics platform
    trackTestExposure({
      // Test information
      testId: test.testId,
      hypothesisId: test.hypothesisId,
      isThemeTest: test.isThemeTest,
      
      // Visitor information
      visitorId: visitorData.visitor.id,
      device: visitorData.visitor.device,
      country: visitorData.visitor.country,
      
      // Attribution data
      utmSource: visitorData.visitor.utmSource,
      utmMedium: visitorData.visitor.utmMedium,
      utmCampaign: visitorData.visitor.utmCampaign,
      
      // Timing
      assignedAt: test.createdAt
    });
  });
}

// Initialize on page load
document.addEventListener('DOMContentLoaded', initializeShopliftTracking);

Understanding the Visitor Data Structure

The getVisitorData() method returns a rich data object:

{
  visitor: {
    id: "550e8400-e29b-41d4-a716-446655440000",  // Unique visitor ID
    shopifyAnalyticsId: "sh-123abc...",          // Shopify analytics ID (if available)
    device: "mobile",                             // Device type: 'desktop' or 'mobile'
    country: "US",                                // ISO country code from GeoIP
    createdAt: Date,                              // First visit timestamp
    storedAt: Date,                               // Last updated timestamp
    utmSource: "google",                          // UTM parameters
    utmMedium: "cpc",
    utmCampaign: "summer_sale",
    utmContent: "variant_a",
    referrer: "https://google.com"               // Original referrer
  },
  visitorTests: [
    {
      testId: "test_abc123",                     // Unique test identifier
      hypothesisId: "hyp_def456",                // Specific variant ID
      isThemeTest: false,                        // Whether it's a theme test
      themeId: null,                              // Theme ID if applicable
      createdAt: Date,                            // Assignment timestamp
      isSaved: true                               // Whether assignment is persisted
    }
    // Additional test assignments...
  ]
}

Last updated

Was this helpful?