Skip to main content

Events & Analytics

Track widget events for analytics and custom integrations.

The Quote Widget dispatches events you can use for analytics tracking, custom integrations, and workflow automation.

Available Events

glassquote:complete

Fired when a customer successfully submits a quote request.

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    console.log('Quote submitted!');
    console.log('Lead ID:', event.detail.leadId);
  });

Event Detail:

PropertyTypeDescription
leadIdstringUnique ID of the created lead

glassquote:error

Fired when an error occurs in the widget.

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:error', function(event) {
    console.error('Widget error:', event.detail.message);
  });

Event Detail:

PropertyTypeDescription
messagestringError message

Callback Functions

Instead of event listeners, you can use callback functions in the configuration:

<script>
window.GlassQuoteConfig = {
  onComplete: function(leadId) {
    console.log('Quote submitted! Lead ID:', leadId);
    // Your custom logic here
  },
  onError: function(message) {
    console.error('Widget error:', message);
    // Your error handling here
  }
};
</script>
<div id="glassquote-widget"></div>
<script src="https://app.glassquotepro.com/widget/YOUR_WIDGET_ID.js"></script>

Analytics Integration

Google Analytics 4

Track quote submissions as conversions:

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    gtag('event', 'generate_lead', {
      currency: 'USD',
      value: 1,
      lead_id: event.detail.leadId
    });
  });

Google Tag Manager

Create a custom event trigger:

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
      event: 'glassquote_lead',
      leadId: event.detail.leadId
    });
  });

Then in GTM:

  1. Create a new Trigger: Custom Event with event name glassquote_lead
  2. Create a Tag (e.g., GA4 Event) using this trigger

Facebook Pixel

Track as a Lead event:

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    fbq('track', 'Lead', {
      content_name: 'Auto Glass Quote',
      lead_id: event.detail.leadId
    });
  });

Meta (Facebook) Conversions API

For server-side tracking, use the lead ID to send a server event:

document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    // Send to your server endpoint
    fetch('/api/track-conversion', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        event: 'Lead',
        leadId: event.detail.leadId
      })
    });
  });

Microsoft Clarity / Hotjar

Track as a custom event:

// Microsoft Clarity
document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    if (window.clarity) {
      clarity('set', 'quote_submitted', 'true');
    }
  });

// Hotjar
document.getElementById('glassquote-widget')
  .addEventListener('glassquote:complete', function(event) {
    if (window.hj) {
      hj('event', 'quote_submitted');
    }
  });

Custom Redirect After Submission

Redirect customers to a thank you page:

window.GlassQuoteConfig = {
  onComplete: function(leadId) {
    // Redirect with lead ID
    window.location.href = '/thank-you?lead=' + leadId;
  }
};

Show Custom Confirmation

Display a custom message instead of redirecting:

window.GlassQuoteConfig = {
  onComplete: function(leadId) {
    // Hide widget
    document.getElementById('glassquote-widget').style.display = 'none';

    // Show custom message
    var message = document.createElement('div');
    message.innerHTML = '<h2>Thank You!</h2><p>We\'ll contact you shortly.</p>';
    message.className = 'quote-success';
    document.getElementById('glassquote-widget').parentNode.appendChild(message);
  }
};

Programmatic Control

The widget exposes a JavaScript API for programmatic control:

// Refresh the widget (reload)
window.GlassQuote.refresh();

// Destroy the widget (remove from DOM)
window.GlassQuote.destroy();

// Update configuration
window.GlassQuote.setConfig({
  primaryColor: '#FF0000'
});

Debugging Events

To debug events during development:

// Log all widget events
['glassquote:complete', 'glassquote:error'].forEach(function(eventName) {
  document.getElementById('glassquote-widget')
    .addEventListener(eventName, function(event) {
      console.log('[GlassQuote Event]', eventName, event.detail);
    });
});

Cross-Origin Communication

The widget uses postMessage for cross-origin communication. If you need to listen for raw messages:

window.addEventListener('message', function(event) {
  // Verify origin
  if (event.origin !== 'https://app.glassquotepro.com') return;

  var data = event.data;
  if (!data || typeof data !== 'object') return;

  switch (data.type) {
    case 'glassquote-complete':
      console.log('Lead ID:', data.leadId);
      break;
    case 'glassquote-error':
      console.log('Error:', data.message);
      break;
    case 'glassquote-resize':
      console.log('New height:', data.height);
      break;
  }
});

Next Steps