Skip to main content

Marketing Integrations

Klaviyo for email/SMS marketing, BazaarVoice for reviews, Google Tag Manager for analytics, and Meta Pixel for advertising.

Overview

StealthCam uses a comprehensive marketing technology stack for customer engagement, product reviews, analytics tracking, and advertising attribution.


Klaviyo Integration

Platform: Klaviyo
Implementation: Multiple plugins + custom theme integration

Purpose

Email and SMS marketing automation with sophisticated product tracking, customer segmentation, and behavioral triggers.

Integration Components

  1. Back in Stock Notifications - v1.2.1
  2. Gravity Forms Klaviyo - v1.7.3
  3. Custom Product Tracking - Theme integration

Back in Stock Notifications for Klaviyo v1.2.1

Plugin Location: wp-content/plugins/back-in-stock-notifications-for-klaviyo/

Purpose

Allow customers to subscribe to email alerts when out-of-stock products become available again.

Features

  • Product Feed - Custom XML feed of out-of-stock products
  • Sign-up Forms - Klaviyo-powered subscription forms
  • Automatic Integration - Works with BigCommerce inventory
  • Form Templates - Overrideable templates
  • AJAX Submission - No page reload on form submit
  • Double Opt-In - GDPR-compliant subscription process

Display

Automatically appears on product pages when stock level = 0.

<div class="back-in-stock-form">
<h4>Notify me when available</h4>
<form class="bis-form" data-product-id="<?php echo $product->bc_id(); ?>">
<input
type="email"
name="email"
placeholder="Enter your email"
required
/>
<button type="submit" class="btn btn-primary">
Notify Me
</button>
</form>
<p class="bis-disclaimer">
We'll email you when this item is back in stock.
<a href="/privacy-policy">Privacy Policy</a>
</p>
</div>

Shortcode

[back_in_stock_form product_id="123"]

Klaviyo List

Subscribers are added to a dedicated Klaviyo list: "Back in Stock Subscribers"

Custom Properties:

  • product_id - BigCommerce product ID
  • product_name - Product title
  • product_url - Product page URL
  • subscribed_at - Timestamp

Klaviyo Flow

Flow Name: Back in Stock Alert

Trigger: When product inventory increases from 0 to >0

Email Template:

  • Subject: "Good News! [Product Name] is Back in Stock"
  • Product image and details
  • Direct "Shop Now" link
  • Limited time urgency copy

Product Feed XML

Feed URL: /wp-content/uploads/back-in-stock/products.xml

Generation: Daily via cron

<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<id>123</id>
<name><![CDATA[Trail Camera Pro]]></name>
<url><![CDATA[https://stealthcam.com/products/trail-camera-pro]]></url>
<image><![CDATA[https://cdn.stealthcam.com/image.jpg]]></image>
<price>199.99</price>
<stock_status>out_of_stock</stock_status>
<subscriber_count>47</subscriber_count>
</product>
</products>

Gravity Forms Klaviyo v1.7.3

Plugin Location: wp-content/plugins/gravityforms-klaviyo/

Purpose

Send Gravity Forms submissions to Klaviyo lists with custom field mapping.

Use Cases

  • Newsletter signups
  • Contest entries
  • Product registrations
  • Dealer applications
  • Customer feedback forms

Configuration

Admin: Forms → Settings → Klaviyo

  • API Key: Klaviyo Private API key
  • Default List: Default Klaviyo list ID

Form-Level Setup

Forms → [Select Form] → Settings → Klaviyo

  • List ID: Target Klaviyo list
  • Field Mapping: Map GF fields to Klaviyo properties
  • Double Opt-In: Enable/disable
  • Conditional Logic: Send only if conditions met

Field Mapping

Gravity Form FieldKlaviyo Property
Email$email (required)
First Name$first_name
Last Name$last_name
Phone$phone_number
Custom Field 1product_interest
Custom Field 2referral_source

Example Form: Newsletter Signup

// Gravity Forms newsletter form (ID: 5)
[gravityform id="5" title="false" description="false"]

Form Fields:

  • Email (required)
  • First Name
  • Last Name
  • Product Interests (checkboxes)

Klaviyo Settings:

  • List: Newsletter Subscribers
  • Mapping:
    • email$email
    • first_name$first_name
    • last_name$last_name
    • product_interestsinterests (comma-separated)

Custom Product Tracking

Implementation: Theme inc/class-klaviyo.php

Purpose

Track customer product interactions and send behavioral data to Klaviyo for segmentation and triggered campaigns.

Tracked Events

  1. Viewed Product - Product page view
  2. Viewed Item - For Klaviyo product recommendations
  3. Added to Cart - Add to cart action
  4. Started Checkout - Checkout initiation
  5. Placed Order - Order completion

Klaviyo Onsite Script

Loaded in: <head> tag on all pages

var _learnq = _learnq || [];
_learnq.push(['account', 'KLAVIYO_PUBLIC_KEY']);

(function() {
var b = document.createElement('script');
b.type = 'text/javascript';
b.async = true;
b.src = 'https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=COMPANY_ID';
var a = document.getElementsByTagName('script')[0];
a.parentNode.insertBefore(b, a);
})();

Product Page Tracking

Location: Single product template footer

// 1. Viewed Product Event
_learnq.push(['track', 'Viewed Product', {
'ProductID': '<?php echo $product->bc_id(); ?>',
'Name': '<?php echo esc_js($product->name); ?>',
'ImageURL': '<?php echo esc_url($product->featured_image('large')); ?>',
'URL': '<?php echo get_permalink(); ?>',
'Brand': '<?php echo esc_js($product->brand()); ?>',
'Price': <?php echo $product->calculated_price(); ?>,
'CompareAtPrice': <?php echo $product->retail_price(); ?>,
'Categories': <?php echo json_encode($product->categories()); ?>
}]);

// 2. Viewed Item (for recommendations)
_learnq.push(['trackViewedItem', {
'Title': '<?php echo esc_js($product->name); ?>',
'ItemId': '<?php echo $product->bc_id(); ?>',
'Categories': <?php echo json_encode($product->categories()); ?>,
'ImageUrl': '<?php echo esc_url($product->featured_image('large')); ?>',
'Url': '<?php echo get_permalink(); ?>',
'Metadata': {
'Brand': '<?php echo esc_js($product->brand()); ?>',
'Price': <?php echo $product->calculated_price(); ?>,
'CompareAtPrice': <?php echo $product->retail_price(); ?>
}
}]);

Add to Cart Tracking

Trigger: Click on .bc-btn--add_to_cart button

document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.bc-btn--add_to_cart').forEach(function(button) {
button.addEventListener('click', function(e) {
var productData = JSON.parse(this.dataset.productTracking || '{}');

_learnq.push(['track', 'Added to Cart', {
'ProductID': productData.id,
'Name': productData.name,
'Price': productData.price,
'Quantity': parseInt(document.querySelector('[name="quantity"]').value || 1)
}]);
});
});
});

Checkout Tracking

BigCommerce Embedded Checkout: Events tracked via GTM + BigCommerce webhooks

Klaviyo Flows Using Product Events

Browse Abandonment

  • Trigger: Viewed Product but no purchase in 24 hours
  • Wait: 2 hours after last product view
  • Email: Product reminder with similar items

Cart Abandonment

  • Trigger: Added to Cart but no checkout in 1 hour
  • Wait: 1 hour
  • Email: Cart reminder with discount code

Post-Purchase

  • Trigger: Placed Order
  • Wait: 3 days
  • Email: Product setup tips, cross-sell recommendations

BazaarVoice Integration

Plugin: Suma BazaarVoice Integrator v1.1.4
Location: wp-content/plugins/suma-bazaarvoice-integrator/

Purpose

Display and collect product reviews and ratings with BazaarVoice's moderation and syndication platform.

Features

  • Reviews & Ratings - Star ratings and detailed reviews
  • Questions & Answers - Product Q&A module
  • Inline Ratings - Display rating summary on product cards
  • Syndication - Cross-site review sharing
  • SEO - Schema.org structured data
  • Moderation - Professional review moderation

BazaarVoice Widgets

Ratings Summary (Product Cards)

Display star rating and review count on product grid/list.

<div 
data-bv-show="inline_rating"
data-bv-product-id="<?php echo $product->bc_id(); ?>"
></div>

Renders:

<div class="bv-inline-rating">
<span class="bv-rating-stars">★★★★☆</span>
<span class="bv-rating-count">(47 reviews)</span>
</div>

Reviews Container (Product Page)

Full reviews display with filtering, sorting, and submission form.

<div id="BVRRContainer" data-bv-show="reviews" data-bv-product-id="<?php echo $product->bc_id(); ?>"></div>

Features:

  • Star rating distribution
  • Review list with filtering (rating, helpful, recent)
  • Review submission form
  • Image upload
  • Verified purchase badges

Rating Summary (Product Page)

Star rating summary above reviews.

<div id="BVRRSummaryContainer" data-bv-show="rating_summary" data-bv-product-id="<?php echo $product->bc_id(); ?>"></div>

Questions & Answers

Product Q&A module.

<div id="BVQAContainer" data-bv-show="questions" data-bv-product-id="<?php echo $product->bc_id(); ?>"></div>

BazaarVoice Script Loading

Loaded in: Footer on product pages

$BV.configure('global', {
productId: '<?php echo $product->bc_id(); ?>'
});

$BV.ui('rr', 'show_reviews', {
productId: '<?php echo $product->bc_id(); ?>'
});

Product Feed

Feed URL: /wp-content/uploads/bazaarvoice/product-feed.xml

Cron Schedule: Daily at 2:00 AM

BazaarVoice Ingestion: Feed URL provided to BV for automatic import

Schema.org Markup

Aggregate Rating Markup (injected on product pages):

{
"@context": "https://schema.org",
"@type": "Product",
"name": "Trail Camera Pro",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "47",
"bestRating": "5",
"worstRating": "1"
}
}

Google Tag Manager

GTM4WP v1.20.3

Plugin: GTM4WP (Google Tag Manager for WordPress)
Location: wp-content/plugins/duracelltomi-google-tag-manager/

Purpose

Implement Google Tag Manager container for unified tracking code management.

Configuration

Admin: Settings → Google Tag Manager

  • GTM Container ID: GTM-XXXXXXX
  • Container Placement: Header + Body (recommended by Google)
  • Data Layer: Enhanced ecommerce enabled

Data Layer Events

Page View:

dataLayer.push({
'event': 'page_view',
'page_type': 'product',
'page_title': 'Trail Camera Pro'
});

Product Impression:

dataLayer.push({
'event': 'view_item_list',
'ecommerce': {
'items': [
{
'item_id': '123',
'item_name': 'Trail Camera Pro',
'item_brand': 'StealthCam',
'item_category': 'Trail Cameras',
'price': 199.99,
'index': 0
}
]
}
});

Add to Cart:

dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'items': [
{
'item_id': '123',
'item_name': 'Trail Camera Pro',
'price': 199.99,
'quantity': 1
}
]
}
});

Purchase (order confirmation):

dataLayer.push({
'event': 'purchase',
'ecommerce': {
'transaction_id': 'ORD-12345',
'value': 199.99,
'tax': 15.00,
'shipping': 10.00,
'currency': 'USD',
'items': [...]
}
});

GTM Tags

Google Analytics 4 (GA4):

  • Configuration Tag: GA4 Config (Measurement ID: G-XXXXXXXXXX)
  • Event Tags: page_view, add_to_cart, purchase, etc.

Google Ads Conversion:

  • Conversion ID: AW-XXXXXXXXX
  • Conversion Labels: Purchase, Lead, etc.

Facebook Pixel (via GTM):

  • Pixel ID: Managed through Meta Pixel plugin (see below)

GTM Server Side v2.1.29

Plugin: GTM Server Side Tracking
Location: wp-content/plugins/gtm-server-side-tracking/

Purpose

Send conversion events to server-side Google Tag Manager for improved accuracy, privacy compliance, and ad platform integration.

Features

  • Server-Side Tracking - Bypass ad blockers
  • Webhook Integration - BigCommerce order webhooks
  • Enhanced Conversions - First-party data hashing
  • Privacy Controls - GDPR/CCPA compliance
  • API Gateway - Secure event forwarding

Configuration

Admin: Settings → GTM Server Side

  • Server Container URL: https://gtm.stealthcam.com
  • Webhook Secret: Shared secret with BigCommerce
  • Event Forwarding: Enabled for orders

Webhook Endpoint

URL: https://stealthcam.com/wp-json/gtm-ss/v1/webhook

BigCommerce Webhook:

  • Scope: store/order/created
  • Destination: StealthCam webhook endpoint
  • Headers: X-Webhook-Secret: [secret]

Order Event Processing

// Receive BigCommerce order webhook
// Send to GTM Server Container
// GTM forwards to GA4, Google Ads, Facebook CAPI

{
"event": "purchase",
"transaction_id": "ORD-12345",
"value": 199.99,
"currency": "USD",
"items": [...],
"user_data": {
"email_hash": "sha256_hash",
"phone_hash": "sha256_hash",
"address": {...}
}
}

Meta Pixel Integration

Plugin: Meta Pixel for WordPress v4.1.2
Location: wp-content/plugins/official-facebook-pixel/

Purpose

Track website events for Facebook/Instagram advertising campaigns with Facebook Conversions API support.

Features

  • Pixel Tracking - Standard and custom events
  • Conversions API (CAPI) - Server-side tracking
  • Product Catalog - Dynamic product ads
  • Custom Audiences - Retargeting segments
  • Attribution - Track ad performance

Configuration

Admin: Settings → Facebook Pixel

  • Pixel ID: Meta Pixel ID (16-digit number)
  • Access Token: System user access token
  • Advanced Matching: Enabled (email, phone hashing)
  • Automatic Events: Enabled

Standard Events

PageView (automatic):

fbq('track', 'PageView');

ViewContent (product pages):

fbq('track', 'ViewContent', {
content_name: 'Trail Camera Pro',
content_ids: ['123'],
content_type: 'product',
value: 199.99,
currency: 'USD'
});

AddToCart:

fbq('track', 'AddToCart', {
content_ids: ['123'],
content_name: 'Trail Camera Pro',
value: 199.99,
currency: 'USD'
});

InitiateCheckout:

fbq('track', 'InitiateCheckout', {
value: 199.99,
currency: 'USD',
num_items: 1
});

Purchase (order confirmation):

fbq('track', 'Purchase', {
value: 199.99,
currency: 'USD',
contents: [
{id: '123', quantity: 1}
],
content_type: 'product'
});

Conversions API (CAPI)

Server-Side Events: Order events sent via webhook → server → Facebook CAPI

Benefits:

  • Bypass ad blockers
  • Improve attribution accuracy
  • First-party data integration
  • iOS 14+ privacy compliance

Product Catalog Feed

Feed URL: /wp-content/uploads/facebook/product-catalog.xml

Format: RSS 2.0 / Atom

Cron: Daily generation

Facebook Business Manager: Import feed for dynamic product ads


Analytics Workflow

Event Flow

User Action (Product Page Visit)

1. Client-Side Events
- GTM4WP Data Layer Push
- Klaviyo Product Tracking
- Meta Pixel ViewContent
- BazaarVoice Impression

2. GTM Processing
- Triggers GA4 event
- Triggers Google Ads conversion
- Forwards to Meta Pixel

3. Server-Side Events (on purchase)
- BigCommerce Order Webhook
- GTM Server Container
- Conversions API (Facebook)
- GA4 Measurement Protocol
- Klaviyo Order Event

Cross-Platform Attribution

Purchase Attribution (single order tracked across):

  • GA4 Enhanced Ecommerce
  • Google Ads Conversions
  • Facebook CAPI
  • Klaviyo Revenue Tracking
  • BigCommerce Admin

Deduplication: Transaction ID used across all platforms for deduplication.


GDPR Compliance

Plugin: Cookie Notice & Compliance (not documented separately)

Cookie Categories:

  • Necessary: WordPress core, security
  • Analytics: GA4, GTM
  • Marketing: Klaviyo, Meta Pixel, Google Ads

User Controls:

  • Accept all / Reject all
  • Granular category selection
  • Withdraw consent

Conditional Script Loading

Scripts load only after user consent:

// Check consent before loading marketing scripts
if (hasConsent('marketing')) {
loadKlaviyoScript();
loadMetaPixelScript();
}

if (hasConsent('analytics')) {
loadGA4Script();
}

Data Processing

  • Email Hashing: SHA256 for Klaviyo, Meta
  • IP Anonymization: GA4 setting enabled
  • Data Retention: 26 months (GA4), per Klaviyo settings
  • User Deletion: GDPR deletion requests handled manually

Performance Considerations

Script Loading Strategy

  1. Defer Marketing Scripts: Load after page interactive
  2. Async GTM: GTM container loads asynchronously
  3. Conditional Loading: Load only on relevant pages
  4. Resource Hints: preconnect to external domains
<link rel="preconnect" href="https://static.klaviyo.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<link rel="preconnect" href="https://connect.facebook.net">

Impact Monitoring

Core Web Vitals: Monitor impact of marketing scripts on LCP, FID, CLS

Optimization Actions:

  • Defer non-critical scripts
  • Use Partytown for web worker execution
  • Implement request batching