- Help Center
- Integrations
- Klaviyo
-
Getting Started
-
Configuration
- Targeting
- Split URL
- Product Testing
- Full Stack
- Experiment Management
- CSP Configuration
- Experiment Execution
- Reports
- Exit Popups
- GTM Integration
- Troubleshooting
- Performance Optimization
- Event-Triggered Changes
- Holdout Groups
- Split URL Pages
- URL Parameters
- DataLayer
- Menu Configurations
- Traffic Exclusion
- Experiment Scheduling
- Dynamic Element Changes
- Price Targeting
- Experience Scheduling
- Privacy
- Hash Changes
- Async Tracking
- Selective Installation
- CSS Selectors
- Vue.js Integration
- Page Content
- Multipage Split URL
- Organic Traffic
- Visual Editor
- Server-Side Testing
- Traffic Bucketing
- GDPR Warnings
- Statistical Confidence
- Browser Privacy
- Query Parameters
- Embedded Videos
- Tracking Code Execution
- Simultaneous Experiments
- Tags
- Deployments
- Disable Testing
- Locations
- Programmatic Bucketting
- Query Parameter Handling
- Convert Library
- Variation Previews
- Experiment Editing
- Opt-Out Script
- Data Reset
- Body Hiding
- Visit-Specific Variations
- Variation Styling
- Preview Issues
- Variation Editing
- Full-Site Testing
- Blinking Variations
- Cross-Domain Cookies
- Regex Support
- Conversion Tracking
- SPA Testing
- Project Setup
- Cross-Domain Tracking
- Geo-Targeting
- Analytics Tools
- Campaign Tags
- Previewing
- IDs
- Query String Targeting
- Bounce Rate Goals
- Bot Filtering
- Query String Variables
- Custom Audiences
- Redirects
- Baseline
- Tracking Code Location
- Secure Cookies
- AngularJS
- Cloudflare
- Code Installation
-
Track Goals
- Form Tracking
- Cookie Management
- iFrame Click Tracking
- Performance Optimization
- Revenue Tracking
- Interaction Goals
- Form Submissions
- Advanced Goals
- Lazy Loading
- Multi-Conversions
- URL Parameters
- Bounce Rate Goals
- DataLayer Integration
- Scroll Depth
- Social Interactions
- Page Views
- Marketo Forms
- Feature Analysis
- AJAX Forms
- Revenue Tracking via GTM
- Order Outliers
- Cumulative Revenue
- Goal Templates
- Adding Revenue Goals
- JS-Based Goals
- Goal Basics
- Google Analytics Goals
- Social Sharing
- Dynamic Goals
- Typeform Integration
-
Target Visitors
- Geolocation
- Interaction Goals
- Goal-Based Targeting
- Weather Targeting
- Cookie-Based Targeting
- Page Visits
- Audience Management
- Audience Segmentation
- Experiment Targeting
- Advanced Audience Creation
- Audience Templates
- Audience Creation
- Data Layer Integration
- Manual Activation
- JavaScript Conditions
- Device Targeting
- Language Targeting
- IP-Based Exclusion
- Visitor Management
- Page Tagging
- Cookies
-
Troubleshooting
- Google Warnings
- Visual Editor
- HTTPS Content
- Logs
- Support Options
- Bootstrap
- Cookie Blocking
- Change History
- Mobile Debugging
- AdWords
- Bot Exclusion
- Domain Issues
- Cloudflare Issues
- Monitoring
- Cloaking Penalties
- Goal Editor Issues
- Variations
- Snippet Performance
- Changes Not Saved
- Blocked Visual Editor
- Goal Testing
- Visual Editor Browsing
- Experiment Issues
- Installation Verification
- Data Leak Prevention
- Usage Limits
- Experiment Previews
- GA4 Revenue
- Chrome Debugger Logs
- SPA Errors
- Checkout JSON Error
-
Analyze Results
-
Integrations
- Google Analytics
- Cookie Consent Platforms
- Microsoft Clarity
- Plausible
- Marketo
- HubSpot
- Tealium
- Smartlook
- Klaviyo
- Salesforce CRM
- FullStory
- Snowplow Analytics
- Webflow
- GA4 Roles
- Amplitude
- Segment
- React
- BigCommerce
- WooCommerce
- Active Campaign
- Google Tag Manager
- Mixpanel
- Zapier
- Inspectlet
- Crazy Egg
- LanderApp
- Unbounce
- Instapage
- Drupal
- PrestaShop
- Magento
- Roistat
- Piano Analytics
- Heap Analytics
- Kissmetrics
- Mouseflow
- Adobe Analytics
- Clicky
-
Account Management
-
Developers
-
What's New
-
Common Questions
-
Shopify
Integrate Convert Experiences with Klaviyo
THIS ARTICLE WILL HELP YOU:
- Convert-Klaviyo Integration
- Add Tracking Code Snippets
- Activate Convert-Klaviyo Integration
- View Convert Data in Klaviyo
Convert-Klaviyo Integration
Klaviyo helps growth-focused eCommerce brands drive more sales with super-targeted, highly relevant email, Facebook and Instagram marketing.
For each experiment, the integration uses custom events to pass along the experiment name and variation name that the visitor is currently bucketed into (if any).
Add Tracking Code Snippets
Make sure the Convert tracking code and the Klaviyo snippet are installed on your page. Once you have added the codes to your website, you will be able to use Klaviyo account to start sending more personalised emails to your customers through smart data decisions.
Activate Convert-Klaviyo Integration
Add the code below to your website right after the Convert + Klaviyo tracking codes which will send Convert Experience and Variation names to your Klaviyo account. We are using event tracking:
<script>
var refObject = window['convert']['data']['experiments'];
for (var key in window["convert"]["currentData"]["experiments"]) {
if (!window["convert"]["currentData"]["experiments"].hasOwnProperty(key)) {
continue;
}
var currentExperiment = window["convert"]["currentData"]["experiments"][key];
var curExperimentName = refObject[key] && refObject[key].n ? refObject[key].n : "unknown experiment name";
curExperimentName = curExperimentName.replace("Test #", "Test ");
var curVariant = currentExperiment['variation_name'] ? currentExperiment['variation_name'] : "unknown variant";
curVariant = curVariant.replace("Var #", "Variation ");
_learnq.push(['track', 'Convert Experience', { 'Experience': curExperimentName, 'Variation': curVariant }]);
}
</script>
The following code is for the newer, v1, version of the tracking code:
// Convert snippet lifecycle hook for experiences evaluated
window._conv_q = window._conv_q || [];
_conv_q.push({
what: 'addListener',
params: {
event: 'snippet.experiences_evaluated',
handler: function () {
console.log('All experiences have been evaluated');
// Prepare the data for each experiment and variation
const data = Object.keys(convert.currentData.experiences).map(
getEventData
);
// Wait for the Klaviyo library to be available
whenAvailable('_learnq', function () {
// Once Klaviyo is available, process and send data
sendDataToKlaviyo(data);
});
}
}
});
// Function to handle the data sending to Klaviyo
function sendDataToKlaviyo(data) {
if (typeof _learnq?.push === 'function') {
data.forEach(({experienceName, variationName}) => {
_learnq.push([
'track',
'Convert Experience',
{
Experience: experienceName,
Variation: variationName
}
]);
console.log(
'Sent data to Klaviyo: Experience =',
experienceName,
'Variation =',
variationName
);
});
} else {
console.error('Klaviyo tracking function (_learnq) is not available.');
}
}
// Function to get experience and variation names for Klaviyo
function getEventData(experienceId) {
const configExperiences = convert.data.experiences;
const currentExperience = convert.currentData.experiences[experienceId];
const experience = configExperiences.find(({id}) => id === experienceId);
if (!experience) return {};
const experienceName = String(
experience?.name || 'unknown experiment name'
).replace('Test #', 'Test ');
const variationName = String(
currentExperience.variaiton?.name || 'unknown variant'
).replace('Var #', 'Variation ');
return {
experienceName,
variationName
};
}
// Function to check if a library (e.g., Klaviyo) is loaded, with a timeout
function whenAvailable(name, callback) {
const maxTime = 150 * 1000; // Maximum time to wait in milliseconds (2.5 minutes)
const interval = 100; // Poll every 100 milliseconds
let elapsedTime = 0; // Track the elapsed time
let intervalId = setInterval(function () {
if (window[name]) {
clearInterval(intervalId);
callback();
} else if (elapsedTime > maxTime) {
clearInterval(intervalId);
console.error(name + ' library did not load in time.');
}
elapsedTime += interval;
}, interval);
}
View Convert Data in Klaviyo
Using a custom event, you will be able to view all of your Convert Experiences data as they associate to the values that you pass in the event in your Klaviyo account.