Analytics Tracking

Integrate Qariyb events with popular analytics platforms for conversion tracking and funnel analysis.


Google Analytics 4

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Event Tickets</title>

  <!-- Google Analytics 4 -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'G-XXXXXXXXXX');
  </script>
</head>
<body>
  <qariyb-checkout event-id="01HWXYZ123ABC456"></qariyb-checkout>

  <!-- Qariyb config must come BEFORE the SDK script -->
  <script>
    window.QariybConfig = { publishableKey: 'pk_live_...' };
  </script>
  <script src="https://js.qariyb.com/v1/qariyb.min.js"></script>

  <script>
    // Track when checkout loads
    window.addEventListener('qariyb:checkout:event-loaded', (e) => {
      const event = e.detail.data.event;
      gtag('event', 'view_item', {
        currency: event.currency,
        items: event.ticket_types.map(t => ({
          item_id: t.id,
          item_name: t.name,
          price: t.price_cents / 100,
        })),
      });
    });

    // Track checkout steps
    window.addEventListener('qariyb:checkout:step-changed', (e) => {
      const { from, to } = e.detail.data;
      gtag('event', 'checkout_progress', {
        checkout_step: to,
        previous_step: from,
      });
    });

    // Track add to cart
    window.addEventListener('qariyb:checkout:cart-updated', (e) => {
      const { cart, action, ticketName } = e.detail.data;
      if (action === 'add') {
        gtag('event', 'add_to_cart', {
          currency: cart.currency,
          value: cart.totalCents / 100,
          items: [{ item_name: ticketName }],
        });
      } else if (action === 'remove') {
        gtag('event', 'remove_from_cart', {
          items: [{ item_name: ticketName }],
        });
      }
    });

    // Track begin checkout
    window.addEventListener('qariyb:checkout:payment-started', (e) => {
      const { amount, currency } = e.detail.data;
      gtag('event', 'begin_checkout', {
        currency: currency,
        value: amount / 100,
      });
    });

    // Track purchase
    window.addEventListener('qariyb:checkout:success', (e) => {
      const { order, tickets } = e.detail.data;
      gtag('event', 'purchase', {
        transaction_id: order.id,
        value: order.total / 100,
        currency: order.currency,
        items: tickets.map(t => ({
          item_id: t.id,
          item_name: t.ticket_type,
        })),
      });
    });

    // Track errors
    window.addEventListener('qariyb:checkout:error', (e) => {
      const { error, step } = e.detail.data;
      gtag('event', 'exception', {
        description: `Checkout error at ${step}: ${error}`,
        fatal: false,
      });
    });
  </script>
</body>
</html>

Segment

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Event Tickets</title>

  <!-- Segment Analytics -->
  <script>
    !function(){var analytics=window.analytics=window.analytics||[];/* Segment snippet */}();
    analytics.load("YOUR_WRITE_KEY");
    analytics.page();
  </script>
</head>
<body>
  <qariyb-checkout event-id="01HWXYZ123ABC456"></qariyb-checkout>

  <!-- Qariyb config must come BEFORE the SDK script -->
  <script>
    window.QariybConfig = { publishableKey: 'pk_live_...' };
  </script>
  <script src="https://js.qariyb.com/v1/qariyb.min.js"></script>

  <script>
    // Product viewed
    window.addEventListener('qariyb:checkout:event-loaded', (e) => {
      const event = e.detail.data.event;
      analytics.track('Product Viewed', {
        product_id: event.id,
        name: event.title,
        category: event.category?.name,
      });
    });

    // Product added
    window.addEventListener('qariyb:checkout:cart-updated', (e) => {
      const { cart, action, ticketId, ticketName } = e.detail.data;
      if (action === 'add') {
        analytics.track('Product Added', {
          product_id: ticketId,
          name: ticketName,
          cart_id: 'checkout',
        });
      } else if (action === 'remove') {
        analytics.track('Product Removed', {
          product_id: ticketId,
          name: ticketName,
        });
      }
    });

    // Checkout started
    window.addEventListener('qariyb:checkout:step-changed', (e) => {
      const { to } = e.detail.data;
      if (to === 'details') {
        analytics.track('Checkout Started');
      }
    });

    // Checkout step viewed
    window.addEventListener('qariyb:checkout:step-changed', (e) => {
      const { to } = e.detail.data;
      analytics.track('Checkout Step Viewed', {
        step: to,
      });
    });

    // Payment info entered
    window.addEventListener('qariyb:checkout:payment-started', (e) => {
      analytics.track('Payment Info Entered');
    });

    // Order completed
    window.addEventListener('qariyb:checkout:success', (e) => {
      const { order, tickets } = e.detail.data;
      analytics.track('Order Completed', {
        order_id: order.id,
        total: order.total / 100,
        currency: order.currency,
        products: tickets.map(t => ({
          product_id: t.id,
          name: t.ticket_type,
        })),
      });
    });
  </script>
</body>
</html>

Facebook Pixel

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Event Tickets</title>

  <!-- Facebook Pixel -->
  <script>
    !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
    n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)}(window, document,'script',
    'https://connect.facebook.net/en_US/fbevents.js');
    fbq('init', 'YOUR_PIXEL_ID');
    fbq('track', 'PageView');
  </script>
</head>
<body>
  <qariyb-checkout event-id="01HWXYZ123ABC456"></qariyb-checkout>

  <!-- Qariyb config must come BEFORE the SDK script -->
  <script>
    window.QariybConfig = { publishableKey: 'pk_live_...' };
  </script>
  <script src="https://js.qariyb.com/v1/qariyb.min.js"></script>

  <script>
    // View content
    window.addEventListener('qariyb:checkout:event-loaded', (e) => {
      const event = e.detail.data.event;
      fbq('track', 'ViewContent', {
        content_ids: [event.id],
        content_name: event.title,
        content_type: 'product',
      });
    });

    // Add to cart
    window.addEventListener('qariyb:checkout:cart-updated', (e) => {
      const { cart, action } = e.detail.data;
      if (action === 'add') {
        fbq('track', 'AddToCart', {
          value: cart.totalCents / 100,
          currency: cart.currency,
        });
      }
    });

    // Initiate checkout
    window.addEventListener('qariyb:checkout:payment-started', (e) => {
      const { amount, currency } = e.detail.data;
      fbq('track', 'InitiateCheckout', {
        value: amount / 100,
        currency: currency,
      });
    });

    // Purchase
    window.addEventListener('qariyb:checkout:success', (e) => {
      const { order, tickets } = e.detail.data;
      fbq('track', 'Purchase', {
        value: order.total / 100,
        currency: order.currency,
        content_ids: tickets.map(t => t.id),
        content_type: 'product',
        num_items: tickets.length,
      });
    });
  </script>
</body>
</html>

Mixpanel

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Event Tickets</title>

  <!-- Mixpanel -->
  <script>
    (function(c,a){/* Mixpanel snippet */})(document,window.mixpanel||[]);
    mixpanel.init('YOUR_TOKEN');
  </script>
</head>
<body>
  <qariyb-checkout event-id="01HWXYZ123ABC456"></qariyb-checkout>

  <!-- Qariyb config must come BEFORE the SDK script -->
  <script>
    window.QariybConfig = { publishableKey: 'pk_live_...' };
  </script>
  <script src="https://js.qariyb.com/v1/qariyb.min.js"></script>

  <script>
    // Track page view with event context
    window.addEventListener('qariyb:checkout:event-loaded', (e) => {
      const event = e.detail.data.event;
      mixpanel.track('Checkout Viewed', {
        event_id: event.id,
        event_name: event.title,
        ticket_count: event.ticket_types.length,
      });
    });

    // Track funnel
    window.addEventListener('qariyb:checkout:step-changed', (e) => {
      const { from, to, eventId } = e.detail.data;
      mixpanel.track('Checkout Step', {
        step: to,
        from_step: from,
        event_id: eventId,
      });
    });

    // Track cart changes
    window.addEventListener('qariyb:checkout:cart-updated', (e) => {
      const { cart, action } = e.detail.data;
      mixpanel.track('Cart Updated', {
        action: action,
        total: cart.totalCents / 100,
        items: cart.totalQuantity,
      });
    });

    // Track conversion
    window.addEventListener('qariyb:checkout:success', (e) => {
      const { order, tickets } = e.detail.data;

      mixpanel.track('Purchase', {
        order_id: order.id,
        revenue: order.total / 100,
        currency: order.currency,
        tickets: tickets.length,
      });

      // Set user profile
      mixpanel.people.set({
        '$email': order.billing_email,
        '$name': order.billing_name,
        'last_purchase': new Date().toISOString(),
      });

      // Revenue tracking
      mixpanel.people.track_charge(order.total / 100);
    });
  </script>
</body>
</html>

Unified Analytics Helper

Create a reusable analytics utility that works with multiple platforms:

<script>
  const QariybAnalytics = {
    init(config = {}) {
      this.ga = config.ga || false;
      this.segment = config.segment || false;
      this.fbPixel = config.fbPixel || false;
      this.mixpanel = config.mixpanel || false;

      this.attachListeners();
    },

    attachListeners() {
      window.addEventListener('qariyb:checkout:event-loaded', (e) => {
        this.trackProductView(e.detail.data.event);
      });

      window.addEventListener('qariyb:checkout:cart-updated', (e) => {
        const { cart, action, ticketId, ticketName } = e.detail.data;
        if (action === 'add') {
          this.trackAddToCart(ticketId, ticketName, cart);
        }
      });

      window.addEventListener('qariyb:checkout:payment-started', (e) => {
        this.trackCheckoutStarted(e.detail.data);
      });

      window.addEventListener('qariyb:checkout:success', (e) => {
        this.trackPurchase(e.detail.data);
      });

      window.addEventListener('qariyb:checkout:error', (e) => {
        this.trackError(e.detail.data);
      });
    },

    trackProductView(event) {
      if (this.ga) {
        gtag('event', 'view_item', {
          currency: event.currency,
          items: [{ item_id: event.id, item_name: event.title }],
        });
      }
      if (this.segment) {
        analytics.track('Product Viewed', { product_id: event.id, name: event.title });
      }
      if (this.fbPixel) {
        fbq('track', 'ViewContent', { content_ids: [event.id] });
      }
      if (this.mixpanel) {
        mixpanel.track('Checkout Viewed', { event_id: event.id });
      }
    },

    trackAddToCart(ticketId, ticketName, cart) {
      if (this.ga) {
        gtag('event', 'add_to_cart', {
          currency: cart.currency,
          value: cart.totalCents / 100,
        });
      }
      if (this.segment) {
        analytics.track('Product Added', { product_id: ticketId, name: ticketName });
      }
      if (this.fbPixel) {
        fbq('track', 'AddToCart', { value: cart.totalCents / 100, currency: cart.currency });
      }
      if (this.mixpanel) {
        mixpanel.track('Cart Updated', { action: 'add', total: cart.totalCents / 100 });
      }
    },

    trackCheckoutStarted({ amount, currency }) {
      if (this.ga) {
        gtag('event', 'begin_checkout', { value: amount / 100, currency });
      }
      if (this.segment) {
        analytics.track('Checkout Started');
      }
      if (this.fbPixel) {
        fbq('track', 'InitiateCheckout', { value: amount / 100, currency });
      }
      if (this.mixpanel) {
        mixpanel.track('Checkout Started', { value: amount / 100 });
      }
    },

    trackPurchase({ order, tickets }) {
      const data = {
        orderId: order.id,
        total: order.total / 100,
        currency: order.currency,
        items: tickets.length,
      };

      if (this.ga) {
        gtag('event', 'purchase', {
          transaction_id: data.orderId,
          value: data.total,
          currency: data.currency,
        });
      }
      if (this.segment) {
        analytics.track('Order Completed', data);
      }
      if (this.fbPixel) {
        fbq('track', 'Purchase', { value: data.total, currency: data.currency });
      }
      if (this.mixpanel) {
        mixpanel.track('Purchase', data);
        mixpanel.people.track_charge(data.total);
      }
    },

    trackError({ error, step }) {
      if (this.ga) {
        gtag('event', 'exception', { description: `${step}: ${error}` });
      }
      if (this.segment) {
        analytics.track('Checkout Error', { error, step });
      }
      if (this.mixpanel) {
        mixpanel.track('Checkout Error', { error, step });
      }
    },
  };

  // Initialize with your platforms
  QariybAnalytics.init({
    ga: true,
    segment: true,
    fbPixel: true,
    mixpanel: true,
  });
</script>

Event Mapping Reference

Qariyb EventGA4SegmentFacebookMixpanel
event-loadedview_itemProduct ViewedViewContentCheckout Viewed
cart-updated (add)add_to_cartProduct AddedAddToCartCart Updated
step-changedcheckout_progressCheckout Step Viewed-Checkout Step
payment-startedbegin_checkoutPayment Info EnteredInitiateCheckoutCheckout Started
discount-appliedselect_promotionCoupon Applied-Discount Applied
discount-failed-Coupon Denied-Discount Failed
successpurchaseOrder CompletedPurchasePurchase
errorexceptionCheckout Error-Checkout Error

Was this page helpful?